ADOQuery在构造函数之后关闭

时间:2010-10-06 10:35:47

标签: delphi ado delphi-7

我在Delphi 7中使用TADOQuery 在构造函数中,我调用ADOQuery.open

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

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

2 个答案:

答案 0 :(得分:4)

我建议找到谁正在关闭DataSet:

为AdoQuery的BeforeClose事件创建一个新的事件处理程序,放置任何编译和执行的事件只是为了在那里放置一个Breakpoint。例如:

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

运行程序,执行创建Class实例所需的任何用户操作,当程序在断点处停止时,您有机会检查调用堆栈。它将揭示谁,如果你仔细想一想,你会发现为什么数据集正在关闭。如果您的断点没有触发,我打赌数据集永远不会打开。

最好的问候。

答案 1 :(得分:0)

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;