从Excel工作表数据更新Access数据库

我使用macros将数据从Access数据库提取到Excel工作表中。 我首先打开一个到数据库的连接,在一个stringvar中定义我的sql语句,然后将这些数据转储到一个logging集中:

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数据。 就devise而言,简单的事情是提取的excel数据在结构上反映了访问数据库,所以更新查询应该是简单的。 还有一个主键,所以我只需要在该字段上映射。

任何想法如何做到这一点? 我可以加载整个Excel数据表到一个logging集并运行一些时髦的更新查询?

您需要在表1上遍历行,并为每行生成如下所示的sqlstring:

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

然后呢

 db.Execute thatString 

PS:我的语法可能有错误。 而且你需要在创buildstring时将单元格值转换为string。

使用DAO的shibormot解决scheme的扩展:

 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 

在string(34)中inputstring数据