问题标签 [tdatasetprovider]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 如何捕捉 Delphi TDataSetProvider 生成的 SQL?
我有 TClientDataSet、TDataSetProvider 和 TIBQuery 链,并且在执行 CDS.Post 时出现“未准备好的语句”错误,显然,TDataSetProvider 生成的更新语句是错误的。如何捕获此更新 SQL?SQL 监控不适用于我的 IBX 组件。我尝试使用代码(受TClientDataset 启发。使用 SQLDirect 组件时,ApplyUpdates 失败并出现“不支持 SQL”):
但是 Test/test.txt 文件中没有写入任何内容。我在哪里可以放置这样的日志记录代码?
Delphi 2010 但我想这适用于任何版本的 Delphi。
delphi - TClientDataSet.ApplyUpdates(0) 之前是否需要执行 CheckBrowseMode/Post?
我在 Delphi 2009 (Firebird 3.0) 中有 TIBQuery-TDataSetProvider-TClientDataSet 链,我执行 MyClientDataSet.ApplyUpdates(0)。在调用 ApplyUpdates(0) 之前,我是否需要在此 CDS 上调用 CheckBrowseMode 或 Post。我几乎可以肯定我需要调用 Post/CheckBrowseMode,并且我认为未发布的更新不会应用于 IBQuery,我没有支持/反对这种想法的文档,但这样想是合乎逻辑的。但有时我可以观察到 MyClientDataSet 在 ApplyUpdates(0) 之前处于 [dsInsert, dsEdit] 状态,并且新值仍被发布并保存在查询中。但也有证据和理由反对这一点。所以 - 我很困惑。
当然,对于 TIBQuery,我不使用 CachedUpdated(因为有 CDS),这不是关于提交事务的问题,我强烈控制它们并且排除了该问题。
我进行了测试:我放入raise Exception
了 MyClientDataSet 的 BeforePost 事件,MadException 给出了跟踪:
因此,有经验证据表明 CheckBroseMode 是自动调用的,但它是偶然的(例如,由于 DataSetProvider 或 ClientDataSet 的某些特殊配置)还是我可以在文档中找到的规则?
delphi - 有没有人将 IBX (Interbase Express) TClientDataSet -> TDatasetProvider -> TIBQuery 转换为 FireDAC?
我一直在研究将我的 Delphi 10.3.3 应用程序从使用 TDataSource -> TClientDataSet -> TDataSetProvider -> TIBQuery 转换为使用 FireDAC 可能需要做的事情。
从我读到的所有内容来看,在 TDataSource -> TClientDataSet -> TDataSetProvider -> TFDQuery 中简单地将 TIBQuery 替换为 TFDQuery 并不是一个好主意。这是因为 TDFQuery 本身就是一个内存数据集,并且具有与客户端数据集相同的功能。因此,我想删除 TClientDataSet 和 TDataSetProvider 组件,只拥有一个 TDataSource -> TFDQuery 组件。
也就是说,有一个 TDataSetProvider 事件我无法找到合适的替代品。那就是 OnGetData 事件。在这种情况下,我会在数据在界面中显示给用户之前进行额外的处理。
在此事件的帮助文件中,它声明“在提供程序检索数据之后但在将数据发送到客户端之前发生。编写 OnGetData 事件处理程序以执行提供程序在将数据返回到客户端之前应处理的任何自定义数据处理。OnGetData 事件在提供程序从其数据集中获取数据之后但在将数据发送到客户端之前发生。使用 DataSet 参数的方法,可以在将数据发送到客户端数据集之前在 OnGetData 事件处理程序中编辑数据。
我在我的应用程序中广泛使用此事件。
那么有谁知道我怎么能只使用 FireDAC FDQuery 来做到这一点?
例如,我的查询中有以下 SQL 语句
然后在 TDataSetProvider.OnGetData 事件中我有这个
数据集:TCustomClientDataSet); 开始而不是 DataSet.Eof 开始 DataSet.Edit;
结尾;