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