没有客户端数据集的dbgrid

use*_*232 2 delphi dbexpress delphi-2010

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

Ken*_*ite 10

文件明确指出(强调):

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

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

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

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