我试图在遗留的delphi项目中使用带有的TAdoquery。dataset包含表示SQL表中标识列的字段。它有AutogenerateValue = arAutoInc和ProviderFlags [pfInWhere, pfInKey]。它也有Required = false。
执行adoquery.Append后,我预先填充字段并尝试执行adoquery.Post,但得到以下错误:Non-nullable column cannot be updated to Null
在post之前,所有非空字段都设置为非空字段,因此identity列是唯一的可疑项。TADOQuery没有联接(simple Select * from my_table),但是它有查找字段和计算字段,这可能是null。对于查找字段和计算字段,我删除了提供程序标志,以确保这些字段不会出现在insert或update语句中。
在post之前标识字段为NULL,我在Profiler中没有看到在服务器上触发insert命令,而是得到了这个错误。
发布于 2014-04-21 11:29:53
我解决了,这个问题当然与身份专栏无关。初始的sql是select * from myTable,这意味着它还加载了一些额外的列,这些列没有绑定到我的DBGridEh中的任何网格列。在将*替换为我需要的列的显式列表之后,INSERT工作了。
https://stackoverflow.com/questions/23149724
复制相似问题