2013-04-03 242 views
1

我使用宏將數據從Access數據庫提取到Excel工作表中。我首先打開到數據庫的連接,在字符串VAR定義我的SQL語句,然後傾倒在一個記錄數據:從Excel工作表數據更新Access數據庫

Dim db As Database 
Dim rs As RecordSet 
Dim sql As String 
Dim dbLocation As String 

dbLocation = ThisWorkbook.Path & "\database\data.accdb" 
Set db = OpenDatabase(dbLocation) 
sql = "Select * FROM [Master Table]" 
Set rs = db.OpenRecordSet(sql, dbOpenSnapshot) 

If Not rs.EOF Then 
    Worksheets("Sheet1").Range("A1").CopyFromRecordset rs 
End If 

rs.Close 
Set rs = Nothing 
db.Close 
Set db = Nothing 

這完美的作品。我將這些分發給一些人,並要求他們更新字段。然後我需要使用傳回的數據更新Access數據。就設計而言,簡單的事情是提取的excel數據反映結構中的訪問數據庫,因此更新查詢應該很簡單。還有一個主鍵,所以我只需要在該字段上映射。

任何想法如何做到這一點?我可以將整個excel數據表加載到記錄集中並運行一些時髦的更新查詢嗎?

回答

2

您需要循環上表1行,併爲每一行作出SQL字符串,看起來像:

"update [Master table] set 
    TableField1 = " & Range(Row, Col1).Value & "," 
    TableField2 = " & Range(Row, Col2).Value & "," 
    ... 
where IDTableField = " & Range(Row, IDColNum).Value 

然後做

db.Execute thatString 

PS:有可能是錯誤我的語法。在創建字符串時,您需要將單元格值轉換爲字符串。

0

shibormot的解決方案使用DAO的擴展:

Set objConnection = CreateObject("DAO.DBEngine.36") 
Set db = objConnection.OpenDatabase(strDBPath, blnExclusive, blnReadOnly, strPassword) 

For Each row In Range("A1:C3").Cells 
    strSQL = "UPDATE table SET " 
    strSQL = strSQL & "Field1 = " & Chr(34) & row.Cells(1) & Chr(34) & "," 
    strSQL = strSQL & "Field2 = " & Chr(34) & row.Cells(2) & Chr(34) & "," 
    strSQL = strSQL & "Field3 = " & Chr(34) & row.Cells(3) & Chr(34) 
    Db.Execute 
Next 

加送CHR(34)字符串數據

+2

不要不添加WHERE子句運行這樣的代碼,否則你會更新你的整個桌子,而不只是個別的行... – 2013-04-03 23:55:44

+0

非常好的一點 – 2013-04-03 23:56:40