1

我使用宏将 Access 数据库中的数据提取到 Excel 工作表中。我首先打开到数据库的连接,在字符串 var 中定义我的 sql 语句,然后将该数据转储到记录集中:

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数据在结构上镜像了access db,所以更新查询应该很简单。还有一个主键,所以我只需要映射到那个字段。

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

4

2 回答 2

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:我的语法可能有错误。并且在制作字符串时需要将单元格值转换为字符串。

于 2013-04-03T22:55:10.103 回答
0

使用 DAO 扩展 shibormot 的解决方案:

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)

于 2013-04-03T23:24:10.940 回答