【问题标题】:ADOQuery closes after constructorADOQuery 在构造函数后关闭
【发布时间】:2010-10-06 10:35:47
【问题描述】:

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

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

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

【问题讨论】:

  • 您必须提供一些信息。比如,什么时候调用什么函数?,在什么形式之外? 'Class1' 在哪里得到'ADOQuery',因为它没有创建它?等等。

标签: delphi ado delphi-7


【解决方案1】:

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

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

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

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

最好的问候。

【讨论】:

  • 这是一个天才的想法,我不禁要问,我自己怎么没想到:) 谢谢。
【解决方案2】:
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;

【讨论】:

  • 我在您的答案中看不到重点。如果您试图暗示 Locate 中缺少第三个参数,请改为发布 comment
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多