2016-01-18 146 views
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 

回答

2

下面是做到這一點的一種方法:

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

有趣的是,你所提供的查詢和我都張貼工作時,我並沒有使用第一次查詢命令爲Prepared。 – Jimbo052

+0

此查詢在將(以前使用的)ADODB.Command設置爲新的ADODB.Command時有效。謝謝您的幫助。 – Jimbo052

相關問題