【发布时间】:2011-10-12 13:24:23
【问题描述】:
我正在使用 Delphi 2010 并使用 dbexpress 连接到 MySQL 数据库。连接工作 100%,我正在检索我的数据。当我尝试通过 dbGrid 更新数据时,问题就出现了。我正在遍历表中的所有条目,对它们进行检查。调用 ApplyUpdates 方法时,我收到“未找到记录或其他用户更改记录”。
将 DataSetProvider 上的 updateMode 更改为 upWhereKeyOnly,我现在处于收到“无法找到记录,未指定密钥”的情况。我已经尝试添加
BasysClientDataSet.FieldByName('idPolicy').ProviderFlags := [pfInUpdate, pfInWhere, pfInKey];
这是代码,但我得到了同样的错误。我已经尝试将 ProviderFlags 添加到 SQLQuery,但我没有得到这样的字段“idPolicy”
【问题讨论】:
-
包含了 dbExpress 的源代码,因此您可以调试到创建实际 SQL UPDATE 语句及其 WHERE 子句的位置。它帮助我找到了 dbExpress 应用中出现类似问题的原因。
-
嘿,Mjn,感谢您的回复,我很确定我知道它为什么这样做,当它将数据从 MySQL 传输到 Delphi 并返回时,会出现一些 DateTimeStamps 和浮点值的失望再次,我已经在互联网上阅读了有关它的信息。这就是我希望将 UpdateMode 更改为 upWhereKeyOnly 并指定它应该在更新中使用的主键列的原因。我已经获取了它在数据库上执行的查询并删除了导致问题的列并在数据库上手动运行它并且它工作正常。
-
好的,所以主要问题(不使用解决方法)是如何将 updatemode 设置为 upWhereKeyOnly 而不会导致“无法找到记录,未指定密钥”错误消息?也许如果这更清楚,知道它的人会回答。但另一方面,upWhereKeyOnly 在多用户环境中是危险的,因为并发用户可以覆盖彼此的更改。
-
是的,基本上只需要告诉它在运行时在 applyUpdates 上使用特定的键。 |该程序设计为用户一次只能与一组数据交互,因此 upWhereKeyOnly 对我来说非常适用,但我似乎无法让密钥工作。
标签: mysql delphi dbexpress tclientdataset