【问题标题】:VBA Access: Change bound fields through code without write conflicts?VBA Access:通过代码更改绑定字段而不会发生写入冲突?
【发布时间】:2021-10-15 10:29:39
【问题描述】:

我遇到的问题是,许多表单控件触发事件,这些事件会更改绑定到表单的其他字段,从而导致写入冲突。我已尝试放置 If Me.Dirty Then Me.Dirty = False 以保存用户与表单交互的任何更改,但无论放置在何处,我仍然会收到写入冲突。

例如这样会导致写冲突:

Me!pnls_rte_profiles_id = Me!pr_rte
Me.Dirty = False

我正在使用带有相当大数据库的 MS Access 2019。表单记录集来自通过 ODBC 连接器链接的 12 个不同的表。每个表都有一个主键和一个时间戳,但时间戳不会作为记录集查询的一部分。

【问题讨论】:

  • 尝试将表单绑定到视图模型。那就是添加一个带有一堆公共函数的代码模块,比如GetMyvalue、SetMyvalue、CalculatemyValue。然后将表单绑定到视图模型,方法是将对其他表单控件的调用替换为对视图模型的调用。这是我最近给出的一个例子:stackoverflow.com/questions/68717654/…
  • 不太了解问题。在数据输入期间,我经常在一个控件后面编辑另一个字段。
  • 代替Dirty,尝试DoCmd.RunCommand acCmdSaveRecord 保存更改。
  • 问题似乎源于将值设置为等于它已经存在的值。所以设置Me!pnls_rte_profiles_id = 11 已经是11 会导致冲突,但Me!pnls_rte_profiles_id = 12 设置为11 不会。我可以检查它是否设置了一个新值,但我觉得这没有必要?

标签: mysql vba ms-access


【解决方案1】:

已解决:

所以我发现问题源于 2 个地方。

  1. 我忘记在我的 SELECT 查询中包含其他表的主键。
  2. 将记录值更新为原来的值会导致 MySQL ODBC 连接器出现问题。

对 2 的修复:

  1. 打开 ODBC 管理器并配置连接器。
  2. 在“连接”选项卡下选中允许大结果集
  3. 在游标/结果选项卡下检查返回匹配的行而不是受影响的行
  4. 在 MS Access 中重新链接表

Credit: here

希望这可以帮助其他人避免像我一样挣扎的日子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多