SiB*_*rit 3 delphi tclientdataset tdbgrid
所述TSQLQuery类是单向的,因此对于它被用作用于数据绑定源的TDBGrid,一个的TClientdataSet需要之间要被链接TSQLQuery和的TDataSource所述的TDBGrid绑定到.
我可以连接设为TSQLConnection,使TSQLQuery活跃在设计时,使用指定的参数,可以,然后我可以在CDS单击鼠标右键,选择"将本地数据..."选项,它从获取数据TSQLQuery,然后通过链接的TDataSource出现在TDBGrid中.
选择"分配本地数据..."和实际出现在网格中的数据之间的时间间隔很短,所以我正在寻找在运行时复制它的方法.
据说,我可以将CDS 的Data属性设置为源的Data,但TSQLQuery没有Data属性.有一篇关于使用提供者的帖子,但是
DataSetProvider1.DataSet := SQLQuery1;
ClientDataSet1.Data := DataSetProvider1.Data;
Run Code Online (Sandbox Code Playgroud)
抛出访问冲突,
我通过循环遍历TSQLQuery并将记录附加到TClientDataSet来实现数据副本,但这比"分配本地数据..."要慢得多.
[编辑1]
我需要的所有组件都在设计时连接,我可以使TSQLConnection处于活动状态,然后是TSQLQuery,然后TClientDataSet和TDBGrid显示来自TSQLQuery中定义的参数化查询的数据.
在的OnChange一个事件TComboBox,我需要使用不同的参数来刷新查询,并有网格显示相关的结果,所以我关闭了TSQLQuery,改变ParamByName值,打开了TSQLQuery,然后调用ClientDataSet1.Last突出网格中的最后一行.
这给了我一个"无法对封闭数据集执行此操作"错误,所以我使用
ClientDataSet1.Active := true;
Run Code Online (Sandbox Code Playgroud)
但是会引发"访问冲突".
我能找到的所有例子都是关于将组件放到表单上,将它们链接在一起,然后它们起作用.嗯,是的,他们这样做,但我需要在运行时更改代码中的属性,并且仍然可以使用它,它只是拒绝这样做.
这真的让我感到沮丧.
[编辑2]
所以我按照Embarcadero站点上的示例来构建VCL Forms dbExpress数据库应用程序,用我的数据库连接细节替换该示例使用的Interbase.
在设计器中,一切看起来都很好,并且网格显示了查询的结果,但是当我使用F9运行它时,我在TCustomClientDataSet.InternalCheck中抛出了"访问冲突" .
事实证明这是一个已知的MIDAS.DLL版本问题,可以通过在表单的uses子句中包含MIDASLib来解决.不幸的是,Datasnap.DBClient代码仍在抛出访问冲突而不是正确的消息,特别是因为2013年报告了这个问题.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |