Delphi ADOQuery在构造函数之后关闭

Delphi ADOQuery在构造函数之后关闭,delphi,ado,delphi-7,Delphi,Ado,Delphi 7,我正在Delphi7中使用TADOQuery。 在构造函数中,我调用ADOQuery.open 当从表单外部调用另一个函数时,ADOQuery为什么会关闭 constructor TClass1.Create(AOwner: TComponent; MyParam: TProgramParam); begin inherited; ADOQuery.Open; ADOQuery.Locate('fieldName',Param,[]); end; 我的建议是找到谁正在关闭数

我正在Delphi7中使用
TADOQuery

在构造函数中,我调用
ADOQuery.open

当从表单外部调用另一个函数时,
ADOQuery
为什么会关闭

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

我的建议是找到谁正在关闭数据集:

为AdoQuery的BeforeClose事件创建一个新的事件处理程序,将编译和执行的所有内容都放在那里,以便在那里放置断点。例如:

procedure TfrmCreDocCredito.cdsSucursalesBeforeClose(DataSet: TDataSet);
begin
  ShowMessage('Closing!!');
end;
运行程序,执行创建类实例所需的任何用户操作,当程序在断点处停止时,您有机会检查调用堆栈。它将揭示谁,如果你仔细想想,你会发现为什么数据集正在关闭。如果断点没有触发,我打赌数据集永远不会真正打开


致以最诚挚的问候。

我的建议是找到谁正在关闭数据集:

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;
为AdoQuery的BeforeClose事件创建一个新的事件处理程序,将编译和执行的所有内容都放在那里,以便在那里放置断点。例如:

procedure TfrmCreDocCredito.cdsSucursalesBeforeClose(DataSet: TDataSet);
begin
  ShowMessage('Closing!!');
end;
运行程序,执行创建类实例所需的任何用户操作,当程序在断点处停止时,您有机会检查调用堆栈。它将揭示谁,如果你仔细想想,你会发现为什么数据集正在关闭。如果断点没有触发,我打赌数据集永远不会真正打开


致以最诚挚的问候。

您必须提供一些信息。比如,当调用什么函数时,在什么形式之外?“Class1”从哪里获得“ADOQuery”,因为它没有创建它?等等。您必须提供一些信息。比如,当调用什么函数时,在什么形式之外?“Class1”从哪里得到“ADOQuery”,因为它没有创建它?等等。这是一个天才的想法,我想问自己,我自己怎么没有想到:)谢谢。这是一个天才的想法,我想问自己,我自己怎么没有想到:)谢谢。我不明白你回答的重点。如果你试图暗示
定位
中缺少第三个参数,请发表评论。我看不出你回答的要点。如果您试图表明
Locate
中缺少第三个参数,请发表评论。
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;