我在 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进行更新?
1条答案
按热度按时间of1yzvn41#
TDataSetProvider.ResolveToDataSet
是正确答案-如果希望使用分配给TIBDataSet
、ModifySQL
和InsertSQL
的自定义编写的SQL,则应将其设置为True。有关更多文档,请访问:https://docwiki.embarcadero.com/Libraries/Sydney/en/Datasnap.Provider.TDataSetProvider.ResolveToDataSet
False
是默认值,在这种情况下,TClientDataSet/TDataSetProvider会尝试推断一些自动生成的SQL,并且可能会严重失败。