我正在尝试在旧版delphi项目中使用带有MS SQL Server的TAdoquery。
数据集包含一个表示SQL表中标识列的字段。它有AutogenerateValue = arAutoInc
和ProviderFlags [pfInWhere, pfInKey]
。它还有Required = false
。
执行adoquery.Append
后,我预填字段并尝试执行adoquery.Post
,但收到此错误:
Non-nullable column cannot be updated to Null
所有非可空字段在发布之前都设置为非null,因此标识列是唯一的可疑项。 TADOQuery没有连接(简单的Select * from my_table),但它查找字段和计算字段,可能为空。对于查找字段和计算字段,我删除了提供程序标志,以确保这些字段不会出现在insert或update语句中。
标识字段在发布之前立即为NULL,我看不到在Profiler中服务器上没有插入命令,而是我刚刚收到此错误。
答案 0 :(得分:0)
我解决了,问题当然与身份栏无关。
最初的sql是select * from myTable
,这意味着它还加载了几个未绑定到我的DBGridEh中任何网格列的额外列。
用我需要INSERT工作的列的明确列表替换*之后。