ADOQuery закрывается после конструктора - PullRequest
0 голосов
/ 06 октября 2010

Я использую TADOQuery в Delphi 7.
В конструкторе я вызываю ADOQuery.open.

Почему ADOQuery закрывается, когда другая функция вызывается извне формы?

constructor TClass1.Create(AOwner: TComponent;
  MyParam: TProgramParam);
begin
  inherited;
  ADOQuery.Open;
  ADOQuery.Locate('fieldName',Param,[]);  
end;

Ответы [ 2 ]

4 голосов
/ 07 октября 2010

Мой совет, чтобы найти, кто закрывает DataSet:

Создайте новый обработчик события для события BeforeClose в AdoQuery, поместите все, что скомпилировано и выполнено, просто чтобы поставить точку останова.Например:

procedure TfrmCreDocCredito.cdsSucursalesBeforeClose(DataSet: TDataSet);
begin
  ShowMessage('Closing!!');
end;

Запустите вашу программу, выполните любое действие пользователя, необходимое для создания экземпляра класса, и когда программа остановится на точке останова, у вас будет возможность проверить стек вызовов.Он покажет, кто, и если вы немного подумаете об этом, вы поймете, почему набор данных закрывается.Если ваша точка останова не срабатывает, я уверен, что набор данных никогда не откроется.

С наилучшими пожеланиями.

0 голосов
/ 22 мая 2013
constructor TClass1.Create(AOwner: TComponent;
  MyParam: TProgramParam);
begin
  inherited;
  ADOQuery.Open;
  ADOQuery.Locate('fieldName',Param);  
end;

//

constructor TClass1.Create(AOwner: TComponent;
  MyParam: TProgramParam);
begin
  inherited;
  ADOQuery.Open;
  ADOQuery.Locate('fieldName',Param,[]);  
end;
...