关闭TAdoconnection后如何在组合框或dbgrid中维护数据库输出

时间:2009-04-05 22:08:25

标签: delphi

在这个问题中,我的目标是检索数据库表内容。 填充dbGrid,关闭连接。 如果我使用以下代码,dbgrid或combobox将丢失信息。

adoQry := TADOQuery.Create(self);
adoQry.Connection := adoConn;
adoQry.SQL.Add(SqlStr);
adoQry.Prepared := true;

try
  adoQry.Active := True;
except
  on e: EADOError do
 begin
   MessageDlg('Error while doing query', mtError,
              [mbOK], 0);

   Exit;
 end;
end;
for i := 0 to adoQry.RecordCount - 1 do
begin
  cmbCnty.Items.Add(adoQry.Fields[1].AsString);
   adoQry.Next
end;

FreeAndNil(adoConn);
FreeAndNil(adoQry);

在dbGrid的情况下,我使用StringGrid,它适用于我。 但是,有时我想使用dbGrid,但不知道如何使用与数据库的紧密连接来保留内容(当然,在检索内容之后) 任何建议,例子都会受到赞赏。
克里斯

3 个答案:

答案 0 :(得分:5)

您可以使用Query ResultSet填充TClientDataSet,然后将TClientDataSet链接到TDBGrid。

答案 1 :(得分:0)

如果我没记错的话(我用了很长时间,而且我不能从这里开始尝试),你可以将at adoQuery上的连接设置为nil,然后它就像一个断开连接的数据集(如t) - 客户数据集)。 但是,如果关闭数据集(adqQry),数据就会消失。

在评论中指出上述陈述不正确(我仍未对其进行测试)。 但是在这篇Microsoft Knowlegde Base文章"How To Create ADO Disconnected Recordsets" http://support.microsoft.com/kb/184397中,它显示了相同的技术。

Delphi中也有关于文章"TOP ADO programming TIPS" http://delphi.about.com/od/beginners/l/aa021202a.htm

的描述

在大多数数据集中设置与nil的连接是正确的,也会关闭数据集。

答案 2 :(得分:0)

班尼是对的。您可能必须使用TAdoDataSet而不是TAdoQuery。 TAdoDatasets和TClientDatasets具有类似的功能。根据我的理解,TAdoQuery组件旨在帮助将BDE应用程序迁移到dbGo。