【问题标题】:Access 2010/MySQL backend using ADO - recordset of query is not updateable使用 ADO 访问 2010/MySQL 后端 - 查询记录集不可更新
【发布时间】:2012-12-05 22:57:25
【问题描述】:

我正在使用 ADO 构建一个带有 MySQL 后端的 MS Access 2010 应用程序。到目前为止,我已经成功地将我的 ADO 记录集绑定和更新到表单。但是,我刚刚创建了第一个查询,其中包含两个带有 INNER JOIN 的表,当两个表都返回字段时,我无法更新返回的记录集。我能够成功绑定和更新第一个查询。

SELECT table_A.a, table_A.b
FROM table_A INNER JOIN table_B ON table_B.c = table_A.c; 

但是,当我从 table_B 添加一个字段时,记录集不能再通过绑定表单进行更新。新的 MySQL 语句如下所示。

SELECT table_A.a, table_A.b, table_B.a
FROM table_A INNER JOIN table_B ON table_B.c = table_A.c; 

我已经阅读了论坛,并且我的查询似乎没有受到阻止记录集可更新的常见问题的影响(即缺少主键、聚合函数、SELECT DISTINCT ......)。一些论坛建议我的问题可能与记录集之间的歧义有关,但我无法确认这一点,似乎这应该有效。非常感谢任何帮助。

【问题讨论】:

  • 这是正确的 - 至少不是通过绑定表单。
  • 经过进一步分析,只有当表单保持未绑定状态时,我才能更新 table_B 中的记录。如果我设置表单的记录集属性,我无法更新表单中的记录。理想情况下,我需要设置此属性,因为此表单是在数据表模式下查看的,并且使用未绑定的表单需要额外的时间。有谁知道上面的第二个 SQL 查询是否可以绑定到 Access 表单并从 Access 表单更新。谢谢。
  • 最后,[Form].UniqueTable 解决了我的问题。

标签: mysql ms-access ado


【解决方案1】:

试试这个:

SELECT table_A.a, table_A.b, CONCAT(table_B.a, '') FROM table_A LEFT JOIN table_B ON table_B.c = table_A.c;

【讨论】:

    【解决方案2】:

    在第一次查询中,显示/检索的记录集属于单个表,因此可以更新。但是,与第二个查询一样,由于连接两个表(列属于 2 个表)而检索到的记录集,因此不能直接更新。

    为了根据另一个表中的数据更新一些数据,可以使用以下查询

    更新 Table_A,Table_B 设置 Table_A.a=Table_B.a 其中 Table_A.b=Table_B.b

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多