在这个问题中,我的目标是检索数据库表内容。 填充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,但不知道如何使用与数据库的紧密连接来保留内容(当然,在检索内容之后)
任何建议,例子都会受到赞赏。
克里斯
答案 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。