2
我在Excel中使用ADODB查询Access数据库。我想在表中使用一行作为另一行(已经存在)的模板。我已经尝试了几个UPDATE查询,有些没有语法错误,但我无法获得更新。ADODB/Access:从同一表中的记录更新多个字段
假设如下表,表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 |
+--------------------------------------------+
我想从第2行复制字段2,字段3和字段4到第5行,因此更新后该表将是:
+--------------------------------------------+
| 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命令进行多个查询,并且在执行此更新之前,我忘记将它设置为新的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
有趣的是,你所提供的查询和我都张贴工作时,我并没有使用第一次查询命令为Prepared。 – Jimbo052
此查询在将(以前使用的)ADODB.Command设置为新的ADODB.Command时有效。谢谢您的帮助。 – Jimbo052