在 Microsoft Access 中使用 Select 进行更新

Posted

技术标签:

【中文标题】在 Microsoft Access 中使用 Select 进行更新【英文标题】:Update with Select in Microsoft Access 【发布时间】:2017-09-24 22:58:29 【问题描述】:

我在 column1 上有没有名称“NoName”的记录。其中一些 names 存在于同一列中,我正在尝试使用 column2 检索与“NoName”具有相同引用的 names " 记录,以便用实际名称更新它们。

考虑这个简化的表格:

|   name   |   ref   |
----------------------
|  NoName  |   001   |
|  Adam    |   002   |
|  NoName  |   002   |
|  John    |   001   |
|  Ryan    |   003   |

最终的结果应该是这样的:

|   name   |   ref   |
----------------------
|  John    |   001   |
|  Adam    |   002   |
|  Adam    |   002   |
|  John    |   001   |
|  Ryan    |   003   |

到目前为止我所拥有的是:

UPDATE [Table] 
SET [Name] = s.[Name]
FROM (
      SELECT [Name], [Ref] 
      FROM [Table] as s
      WHERE [Name] <> 'NoName')
WHERE 
     [Name]='NoName' AND [Ref] = s.[Ref]"

现在我收到一条错误消息:

查询表达式 's.[Name] FROM ( SELECT [Name], [Ref] FROM [Table] as s WHERE [Name] 'NoName')'。

【问题讨论】:

【参考方案1】:

首先,MS Access 使用UPDATE...JOIN 作为其语法,而不是UPDATE...FROM 用于UPDATE 查询中的多个表。其次,Access 要求更新查询为updateable,其中自联接或子查询不可更新。

但是,您可以使用域函数DLookUp 从同一个表中检索值:

UPDATE [Table] t
SET t.[Name] = DLookUp("[Name]", "[Table]", 
                       "[Name] <> 'NoName' AND [Ref] = '" & t.[Ref] & "'")

注意:此解决方案仅在使用 MSAccess.exe(Office 程序)中的查询而不是通过 ODBC/OLEDB 的后端数据库时才有效。 Domain functions 是 hte Access 对象库的一部分,而不是 Jet/ACE SQL 引擎。并且 Ref 被假定为一个字符串值。

【讨论】:

我通过 DAO 连接访问它。代码如下所示:OpenDatabase(FullPath).Execute SQL 但是您在 MSAccess.exe 中运行?如果是这样,它应该工作。你试过解决方案吗? 我在 Excel 中运行,而不是在 Access 中。 再一次,你试过了吗? DAO 是一个 Access 对象,因此可能允许它。同样,对于UPDATE...JOIN,您将加入一个不可可更新 的自联接或子查询。因此,DLookUp 路由。 太棒了!乐意效劳。编码愉快!

以上是关于在 Microsoft Access 中使用 Select 进行更新的主要内容,如果未能解决你的问题,请参考以下文章