2

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

4

1 回答 1

10

文档清楚地指出(强调):

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

因为没有多条记录的缓冲,除了向前,你不能向任何方向移动,这意味着DBGrid不能显示多行或支持滚动。

(事实上​​,所有DBExpress组件都是单向的,根据关于DBExpress 数据集类型的文档。)

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

于 2013-03-31T05:03:15.710 回答