ADODB/Access:从同一表中的记录更新多个字段

3
我在Excel中使用ADODB查询Access数据库。我想要使用表中的一行作为另一行(已存在于同一表中)的模板。我尝试了几个UPDATE查询,有些没有语法错误,但我始终无法进行更新。
假设以下是Table1表:
+--------------------------------------------+
| ID | Field 1 | Field 2 | Field 3 | Field 4 |
| 1  |    A    |    1    |    9    |    Z    |
| 2  |    B    |    2    |    8    |    Y    |
| 3  |    C    |    3    |    9    |    X    |
| 4  |    D    |    4    |    6    |    W    |
| 5  |    E    |    5    |    5    |    V    |
+--------------------------------------------+

我想把第二行的Field2、Field3和Field4复制到第五行,以便更新后表格如下所示:
+--------------------------------------------+
| ID | Field 1 | Field 2 | Field 3 | Field 4 |
| 1  |    A    |    1    |    9    |    Z    |
| 2  |    B    |    2    |    8    |    Y    |
| 3  |    C    |    3    |    9    |    X    |
| 4  |    D    |    4    |    6    |    W    |
| 5  |    E    |    2    |    8    |    Y    |
+--------------------------------------------+

我尝试过这两个查询,但都没有成功。它们都能够正常运行,但是行并没有被更新。

UPDATE Table1 A, Table1 B SET A.Field2=B.Field2, A.Field3=B.Field3, A.Field4=B.Field4 
WHERE A.ID=B.ID AND A.ID=5 AND B.ID=2

UPDATE Table1 A INNER JOIN Table1 B ON A.ID=B.ID
SET A.Field2=B.Field2, A.Field3=B.Field3, A.Field4=B.Field4
WHERE A.ID=5 AND B.ID=2

当然,我可以选择我想要的值,然后再更新,但我认为应该有一种简单的方法在一个查询中完成这个操作。
更新:问题在于我正在使用一个ADODB命令来执行多个查询,并且在进行此更新之前我忘记将其设置为NEW ADODB.Command。当我直接放置值并指定Prepared=False时,我注意到了这一点,它起作用了。以下是可行的代码:
Dim NewCommand As New ADODB.Command
Set NewCommand = New ADODB.Command
With NewCommand
    Set .ActiveConnection = ExistingConnection
    .CommandText = "UPDATE Table1 A, Table1 B SET A.Field2=B.Field2, " _ 
        & "A.Field3=B.Field3, A.Field4=B.Field4 " _
        & "WHERE A.ID=B.ID AND A.ID=? AND B.ID=?"
    .Prepared = True: .CommandType = adCmdText
    .Parameters.Append .CreateParameter("IDA", adInteger, adParamInput, 4, 2)
    .Parameters.Append .CreateParameter("IDB", adInteger, adParamInput, 4, 5)
    .Execute
End With
1个回答

3
以下是一种方法:

这里有一个做法:

UPDATE Table1, Table1 AS Table1_2 SET Table1_2.Field2 = [Table1]![Field2],
Table1_2.Field3= [Table1]![Field3], Table1_2.Field4= [Table1]![Field4]
WHERE (((Table1.ID)=2) AND ((Table1_2.ID)=5));

有趣的是,当我没有使用预处理命令时,您提供的查询和我发布的第一个查询都可以正常工作。 - Jimbo052
当我将(之前使用的)ADODB.Command设置为新的ADODB.Command时,此查询有效。感谢您的帮助。 - Jimbo052

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