没有客户端数据集的dbgrid

时间:2013-03-31 04:29:15

标签: delphi-2010 dbexpress delphi

我有一个带有dbgrid和sqlquery组件的表单。我试图用sqlquery填充dbgrid。当我这样做时,我收到消息“单向数据集上不允许操作”。我不想使用客户端数据集,因为我不想要数据的“本地”副本,我想直接读取和显示数据。怎么办呢?

1 个答案:

答案 0 :(得分:10)

documentation明确指出(强调增加):

  

TSQLQuery是单向数据集。与其他数据集不同,单向数据集不会在内存中缓冲多个记录。因此,您只能使用First和Next方法进行导航。没有内置编辑支持:您只能通过显式创建SQL UPDATE命令或使用提供程序将数据集连接到客户端数据集来编辑SQL查询中的数据。

因为没有缓冲多个记录,所以除了forward之外,你不能向任何方向移动,这意味着DBGrid无法显示多行或支持滚动。

(事实上,根据Types of DBExpress DataSets上的文档,所有DBExpress组件都是单向的。)

您必须使用TClientDataSet或使用DBExpress更改为访问数据的其他方法,例如ADO,或使用除TDBGrid以外的其他方式显示数据TStringGrid(与TClientDataSet一样)并实施您自己的内部存储空间。但是,如果您检索的数据量在内存中是可管理的,则{{1}}不必是磁盘文件;所有数据都可以保留在那里,而不是“本地副本”(“内存数据集”)。