更新Access中的多值字段

10

我在Access中创建了一个查找表来提供一列可能的值。现在我需要使用转换前该列所具有的数据来更新此列。我无法想出一个可行的SQL查询语句。我一直收到错误提示:“UPDATE或DELETE查询不能包含多值字段。”我的研究表明,我只需要设置该列的值,但这总是更新0条记录:

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

我知道如果我将查询更改为更新文本列,它将起作用,因此这绝对是仅涉及此列的问题。
7个回答

16

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

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;

请查看在查询中使用多值字段以获取更多信息。


1
不错。在我的情况下,我还必须先删除以清除该列。例如:DELETE columnName.Value FROM tableName WHERE columnName.Value > -1;。 - Rob Campion

5
我已经想通了!这确实是违反直觉的!您需要使用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语句。我认为它实际上是将一条记录插入到一个隐藏表中,该表用于将多个值与该列关联起来。

4
我认为你说得很对。在幕后,多值字段正如你所描述的那样实现。但这些细节被隐藏起来是为了“方便”(?)。总之,这种混淆是我建议避免使用多值字段的好理由。我唯一会用它们的原因是在使用SharePoint时。 - HansUp

3

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

重新创建表格时不使用多值字段,INSERT INTO就可以很好地工作。


是的 - 最好避免使用多值字段。 - boisvert

0
我得说,我并不是很理解你的问题,但我在你的查询中看到了一些奇怪的东西。试试这个:
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查询会更改表中的每一行。您可以指定一个值进行更改。


该查询弹出“更新或删除查询不能包含多值字段”的错误消息。 - rsrobbins
嗯,如果该列存在值,则似乎可以工作,但是如果该列没有值,则无法工作。换句话说,您只能更新现有值。 - rsrobbins
@rsrobbins:很抱歉,我无法为您提供更多帮助。我的知识仅限于多值字段,因为我不使用它们...所以,我希望我的帖子能在某种程度上帮助到您...好的,祝您解决问题好运 :) - Marco
@Marco 回复:关于笔记 - 这取决于你要做什么。我已经复制了一个表的结构,并正在研究如何将数据复制到具有多值字段的此表中。我使用追加查询插入了所有非多值字段,并且我认为我可以更新mv字段。现在我看到,我必须使用追加查询插入mv字段,但我确实希望为所有记录插入数据。当然,我在表之间使用了INNER JOIN,但我想,在技术上,您可以使用WHERE table1.ID = table2.ID 并获取WHERE子句。 - GlennFromIowa

0

不要使用.value部分

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

我已经发布了这个解决方案,他已经告诉我这不是他需要的 :) - Marco

0
INSERT INTO Quals (cTypes.[value])
SELECT Quals_ContractTypes.ContractType
FROM Quals_ContractTypes
WHERE (Quals.ID = Quals_ContractTypes.ID_Quals);

3
在您的查询中加入一些关于海报错误之处的解释会很有帮助。 - RacerNerd

-1

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

这些是唯一不能与SQL一起使用的Access类型。我已经测试了所有Access查找可能性,包括硬编码值和查找表。它们工作得很好,但是如果你有一个具有允许多重选择选项的列,则没有办法。即使像下面提到的那样使用INSERT INTO也不起作用,因为你将会收到一个类似但不同的错误,关于向多值字段插入数据。

如前所述,最好避免在Access之外使用这种表,并引用一个专门用于你的外部需求的表。然后编写一个宏/VBA脚本来使用“辅助”表中的数据更新真正的表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接