我在主细节关系中有两个表。使用TFDTables。我在TDBGrid中显示详细信息表
当我调用主表时,我可以成功创建一个详细记录。当我尝试添加一秒时,问题就开始了。
系统会将第二条记录发布到数据库,但是当它在详细网格中为thrid记录添加新行时,它会使用第二条记录中的信息填充它。更改此第三条记录会产生错误:
项目xyz.exe引发了异常类EFDDBEngineException,消息为' [FireDAC] [Phys] [FB] -312。确切的更新会影响[2]行,而[1]则被请求'。
此外,当我在Delphi的调试器中单击“确定”时,它会显示:
项目xyz.exe引发了异常类EFDException,消息为' [FireDAC] [DApt] -400。更新命令更新[2]而不是[1]记录。可能的原因:更新表没有PK或行标识符,记录已被其他用户更改/删除'。
但是更改确实存储在数据库中,好像我更改了第二条记录,并且网格中的第二条记录也反映了第三条记录中输入的内容)我意识到这些更改是在尝试更新第三条记录时生成的不存在。
当我关闭程序并检查数据库时,数据库中只有两条记录在错误发生前的最后一篇文章的保存点。当我重新打开应用程序时,网格显示三条记录,第二条和第三条记录完全相同。
非常感谢任何帮助或想法。
法利
答案 0 :(得分:0)
可能UpdateOptions.KayFields和UpdateOptions.UpdateTableName会对您有所帮助。在KeyFields中使用Spacify PK字段名称,在TFDTable的UpdateTableName属性中使用表名称。