Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 14:53   #1
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию ADO Connection

ну ни дня без вопроса. Смотрю сегодня хит дня на форуме тема про ADOconnect, вот и у меня вопрос созрел. Имею вот такой код
Код:
procedure TFmain.N2Click(Sender: TObject);
var openDL:TOpenDialog;
st:string;
begin
  st:='';
  fDM.con1.Connected:=False;
  openDL:=fdm.dlgOpen1.Create(Self);
  if openDL.Execute then
  begin
    st:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+(openDL.FileName)+';Mode=Share Deny None;Extended Properties="";
Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:';
    st:=st+'Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=';
    st:=st+'False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don'+Chr(39)+'t Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
    fdm.con1.ConnectionString:=st;
    fDM.con1.Connected:=True;
    fdm.ADOQ1.Connection:=fDM.con1;
    fdm.ADOQ1.Active:=True;
  end;
  openDl.Free;
end;
нажатие на кнопочку работает ровно один раз, когда на нее жмакаю второй раз вылазит ошибка:"Access Violation at address ...ну и так далее. Подскажите, не откажите в любезности, где ошипся я?
ps (тока не надо отвечать? что ошипка начать писать в delphi )

Последний раз редактировалось mihali4; 02.12.2011 в 02:56.
Brother Abbat вне форума Ответить с цитированием
Старый 01.12.2011, 17:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. переменную openDL:TOpenDialog; убрать
2.убрать строку
Код:
  openDL:=fdm.dlgOpen1.Create(Self);
и никогда больше ТАК не создавать объекты.
3. все openDL. заменить на fdm.dlgOpen1.

желательно но необязательное.
перенести код в другой модуль тот в котором который
fDM.con1
fdm.dlgOpen1
fdm.ADOQ1
оформив его либо в виде метода
Код:
public
  procedure findDB;
в обработчике кнопки просто
Код:
  fdm.FindDB;
либо в виде действия с использованием TactionList
добавить на форму TactionList
добавить действие (Action)
назначить обработчик OnExecute
добавить код обработчика.

и назначив данное действия нашей кнопке.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.12.2011 в 17:37.
evg_m вне форума Ответить с цитированием
Старый 02.12.2011, 09:00   #3
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

спасибо за ответ. Код был честно скопипастен с какого то учебника в сети, так что за переменную openDL не ругайте. За утро попробовал сделать оба способа и через Public и через Taction. Результат все тот же. Первый раз база открывается, если начинаешь открывать вторую базу (ну или второй раз ту же) выскакивает ошибка Аксесс виолатион...
Brother Abbat вне форума Ответить с цитированием
Старый 02.12.2011, 09:55   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

прикрепите весь проект (как архив во вложении)
без файлов *.exe; *.dcu; *.~*;. Т.к. ошибка где-то в другом месте.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.12.2011, 10:57   #5
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

ок, вотъ..

сильно не пинайте, первый проект и очень хочется разобраться
Вложения
Тип файла: rar Готовность продукции.rar (3.55 Мб, 14 просмотров)
Brother Abbat вне форума Ответить с цитированием
Старый 02.12.2011, 12:20   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

надеюсь вы просто убрали из обработчика
Код:
openDl.Free;
а не заменили его на
Код:
fdm.dlgOpen1.Free;
?

PS
сейчас посмотрю
vovk вне форума Ответить с цитированием
Старый 02.12.2011, 12:33   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
procedure TfDM.FindDb;
var
st:string;
begin
  st:='';
  fdm.con1.Connected:=False;
  if fdm.dlgOpen1.Execute then
  begin
...
    fdm.con1.Connected:=True;
    fDM.ADOQ1.Connection:=fDM.con1;
    fDM.ADOQ1.Active:=True;
  end;
  fdm.dlgOpen1.Free;
end;
вот этой (выделенной красным) строчки быть не должно. Ни здесь ни в других местах procedure TFmain.btn4Click(Sender: TObject); . по сути вы удаляете объект, а потом вновь пытаетесь работать с ним. Если вы не создаете объект (xx:=....Create) то Free не нужен.

P.S.аналогичное замечание
Код:
procedure TFmain.btn3Click(Sender: TObject);
begin
  FRep.qckrp1.PreviewModal;
  Frep.qckrp1.Free;
end;
повторное нажатие также приведет к Аv.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.12.2011 в 12:50.
evg_m вне форума Ответить с цитированием
Старый 02.12.2011, 12:45   #8
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

спасибо огромаднейшее за объяснение. Все заработало )
Brother Abbat вне форума Ответить с цитированием
Старый 02.12.2011, 12:45   #9
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Не запускал, есть сторонние компоненты.
Бегло просмотрел, действительно
fdm.dlgOpen1.Free;

И в коде у вас ещё встречается освобожднее компонентов, а вот создание только 1 раз при запуске.
Отчёт 2 раза не пробовали открывать?
vovk вне форума Ответить с цитированием
Старый 02.12.2011, 14:21   #10
Brother Abbat
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 34
По умолчанию

В отчете тоже убрал free. после того как исправил, все работает отлично ) Суть я понял, создал объект один раз и удаляю его много много раз, соотв-но на вторую попытку удаления объекта и идет ошибка. Спасибо большое.
Brother Abbat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Connection must be valid and open. NZero Общие вопросы .NET 1 20.12.2010 08:30
Проблема с ADOTable и ADO Connection. kardinal94 БД в Delphi 2 19.08.2010 04:24
ADO Connection Zer Компоненты Delphi 2 09.07.2010 19:22