在 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 进行更新的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 表单和 Microsoft Windows 应用程序

Microsoft Access 2007 - 查看报表中使用的查询?

在使用SQL Server后端的Microsoft Access中使用查找对话框时性能下降

在 Microsoft Access 中使用 Select 进行更新

在 Microsoft Access 2010 数据宏中使用变量数据

在 microsoft access 中使用组合框过滤表单结果