delphi TClientDataSet / TDataSetProvider的哪些属性决定了TIBDataSet应该自动生成SQL而忽略SQL?

kx5bkwkv  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(89)

我在 Delphi 6中编程(但我猜22年后的Delphi 11.1也是如此),我使用的是标准的组件链:

  • TIBDataSet(来自 Delphi -Express),带有自定义(自己编写)的Select/Resfresh/Modify/Insert-SQL代码和SelectSQL/RefreshSQL代码,包含多个连接在一起的表,但有一个基表,它的某些字段在ModifySQL中更新
  • T数据集提供程序
  • T客户端数据集

我正在使用连接到Firebird 3.0服务器,通常在其他地方一切正常。但我有一个情况下发布更新时出现错误:

Dynamic SQL Error
SQL error code = -206
Column unknown
REASON
At line 2, column 2

这真的很奇怪-因为我的TIBDataSet有ModifySQL,而且它是完全正确的。据我所知,然后TIBDataSet试图自动生成一些UPDATE命令,但它到达无效命令。我的意图是取消UPDATE的自动生成,并要求TIBDataSet使用ModifySQL。但这三个组件的哪些属性控制/决定TIBDataSet不应尝试生成SQL进行更新?

of1yzvn4

of1yzvn41#

TDataSetProvider.ResolveToDataSet是正确答案-如果希望使用分配给TIBDataSetModifySQLInsertSQL的自定义编写的SQL,则应将其设置为True。有关更多文档,请访问:
https://docwiki.embarcadero.com/Libraries/Sydney/en/Datasnap.Provider.TDataSetProvider.ResolveToDataSet
False是默认值,在这种情况下,TClientDataSet/TDataSetProvider会尝试推断一些自动生成的SQL,并且可能会严重失败。

相关问题