更新 Access 中的多值字段

Posted

技术标签:

【中文标题】更新 Access 中的多值字段【英文标题】:Update A multi-valued field in Access 【发布时间】:2011-05-16 13:30:16 【问题描述】:

我在 Access 中创建了一个查找表来为列提供可能的值。现在我需要使用转换列之前的数据更新此列。我无法找出可以工作的 SQL 查询。我不断收到错误消息“更新或删除查询不能包含多值字段。”我的研究表明我只需要设置列的值,但这总是更新 0 条记录:

UPDATE [table_name] SET [column_name].Value = 55 WHERE [table_name].ID = 16;

我知道如果我更改它以更新文本列,这个查询将起作用,所以这肯定是这个列的问题。

【问题讨论】:

【参考方案1】:

如果您要向多值字段添加值,请使用追加查询。

INSERT INTO table_name( [column_name].Value )
VALUES (55)
WHERE ID = 16;

如果要更改存在于多值字段中的特定值,请使用 UPDATE 语句。例如,将 55 更改为 56 ...

UPDATE [table_name]
SET [column_name].Value = 56
WHERE [column_name].Value = 55 And ID = 16;

更多信息请参见Using multivalued fields in queries。

【讨论】:

不错。就我而言,我还必须先删除才能清除该列。例如:DELETE columnName.Value FROM tableName WHERE columnName.Value > -1;.【参考方案2】:

我想通了!这当然是违反直觉的!您必须使用 INSERT 语句进行更新。

-- Update a record with a multi-valued field that has no value
INSERT INTO [table_name] ( [[column_name].[Value] )
VALUES(55)
WHERE [table_name].ID = 16;

这让我很困惑,因为我期待的是 UPDATE 语句。我认为它实际上将一条记录插入到一​​个隐藏表中,该表用于将多个值与该列相关联。

【讨论】:

我认为你成功了。在引擎盖下,多值字段按照您的描述实现。但是为了“方便”(?),这些细节被隐藏了。无论如何,这种混淆是避免多值字段的一个很好的理由,IMO。我使用它们的唯一原因是使用 SharePoint。【参考方案3】:

我正在使用 Sharepoint,我将表创建为多值字段,在我的 INSERT INTO 语句中遇到错误,返回 Sharepoint 以更改为非多值字段,但这并没有解决它。

使用多值字段不使用重新创建表,INSERT INTO 工作得很好。

【讨论】:

是的 - 最好避免使用多值字段。【参考方案4】:

不要使用 .value 部分

UPDATE [table_name] SET [column_name] = 55 WHERE [table_name].ID = 16;

【讨论】:

我已经发布了这个解决方案,他已经告诉我这不是他需要的:)【参考方案5】:
INSERT INTO Quals (cTypes.[value])
SELECT Quals_ContractTypes.ContractType
FROM Quals_ContractTypes
WHERE (Quals.ID = Quals_ContractTypes.ID_Quals);

【讨论】:

添加一些关于发帖人在您的查询中出错的地方会有所帮助。【参考方案6】:

我得说我不太了解你的问题,但我在你的查询中看到了一些奇怪的东西。试试这个:

UPDATE [table_name] SET [column_name]= 55 WHERE [table_name].ID = 16;

更新: 看this链接:有例子

UPDATE Issues 
SET Issues.AssignedTo.Value = 10
WHERE (((Issues.AssignedTo.Value)=6) 
AND ((Issues.ID)=8));

注意事项

您应该始终包含 WHERE 仅标识 要更新的记录。 否则,您将更新记录 你不打算改变。一个 更新不包含 WHERE 子句更改 桌子。您可以指定一个值 改变。

【讨论】:

该查询弹出“”一个UPDATE或DELETE查询不能包含多值字段。”错误信息。 嗯,如果该列具有现有值,它似乎可以工作,但当该列没有值时则不行。换句话说,您只能更新现有值。 @rsrobbins:无法为您提供更多帮助,对不起。我的知识在这里以多值文件结束,因为我不使用它们......所以,我希望我的帖子能以某种方式帮助你......好吧,祝你的问题好运:) @Marco Re: 注意 - 这取决于你在做什么。我已经复制了一个表的结构,并且正在研究如何使用多值字段将数据复制到这个表中。我使用 Append 查询插入了所有非多值字段,并认为我可以更新 mv 字段。现在我看到我必须使用 Append 查询插入 mv 字段,但我确实想为 所有记录 插入数据。当然,我在表之间使用了 INNER JOIN,但我想从技术上讲,您可以使用 WHERE table1.ID = table2.ID 并获取 WHERE 子句。【参考方案7】:

多值字段是指具有包含列的表的 Access 数据库,允许您选择多个值,例如组合复选框列表。

THOSE 是 SQL 无法使用的唯一访问类型。我已经测试了所有 Access 查找可能性,包括硬编码值和查找表。它们工作正常,但如果您有一个包含“允许多项选择”选项的列,那么您就不走运了。即使使用下面提到的 INSERT INTO 也不起作用,因为您会收到类似但不同的错误,关于插入多值字段。

如前所述,最好避免在 Access 之外使用此类表,并参考专门针对您的外部需求的表。然后编写一个宏/vba 脚本,用“辅助”表中的数据更新真实表。

【讨论】:

以上是关于更新 Access 中的多值字段的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 ms access vba 中的多值组合框?

使用 ODBC 查询 Access 2007 多值字段

Access 2013:删除包含多值字段的记录的正确方法是啥?

MS Access 中多值字段的替代方案

Access数据库中多值字段的关系

access不允许在select into 语句中使用多值字段