ADODB/Access:从同一 Table 中的记录更新多个字段
ADODB/Access: Update Multiple Fields from Record in Same Table
我在 Excel 中使用 ADODB 来查询 Access 数据库。我想使用 table 中的一行作为同一 table 中另一行(已经存在)的模板。我尝试了几个 UPDATE 查询,其中一些没有语法错误,但我永远无法完成更新。
假设如下 table,表 1:
+--------------------------------------------+
| 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 从第 2 行复制到第 5 行,因此更新后的 table 将是:
+--------------------------------------------+
| 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
当然,我可以 SELECT 我想要的值然后进行更新,但我认为有一种简单的方法可以在一个查询中完成此操作。
更新:问题是我正在使用 ADODB 命令进行多个查询,而在执行此更新之前我忘记将其设置为新的 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
这是一种方法:
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));
我在 Excel 中使用 ADODB 来查询 Access 数据库。我想使用 table 中的一行作为同一 table 中另一行(已经存在)的模板。我尝试了几个 UPDATE 查询,其中一些没有语法错误,但我永远无法完成更新。
假设如下 table,表 1:
+--------------------------------------------+
| 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 从第 2 行复制到第 5 行,因此更新后的 table 将是:
+--------------------------------------------+
| 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
当然,我可以 SELECT 我想要的值然后进行更新,但我认为有一种简单的方法可以在一个查询中完成此操作。
更新:问题是我正在使用 ADODB 命令进行多个查询,而在执行此更新之前我忘记将其设置为新的 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
这是一种方法:
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));