sql - ADODB/Access : Update Multiple Fields from Record in Same Table

标签 sql excel ms-access adodb vba

我在 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    |
+--------------------------------------------+

我想将第 2 行的 Field2、Field3 和 Field4 复制到第 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

最佳答案

这是一种方法:

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));

关于sql - ADODB/Access : Update Multiple Fields from Record in Same Table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34861458/

相关文章:

php - 如何在 PHP+HTML+SQL 中使用带空格的 GET 传递表单中的变量

excel - vba excel如何在没有字体/颜色/背景颜色格式的情况下粘贴值

java - JDBC-ODBC SQLException :General Error

Java MSAccess DSN 少

vba - Access VBA : Put values of a multi-select list box into a Table

mysql - 根据 id 合并行

c# - 使用 nHibernate QueryOver 加入一个子集

MySQL 将两个表连接到 n :m Relation

vba - 自动将图片文件上传到免费的在线 OCR 资源

excel - 如何修复编译错误 : Invalid use of property