|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
根据工作表批量更新Access数据库并向数据库添加不存在的记录时,通常可以使用AddNew、Update方法,或update 语句和insert into语句实现,后者详见:
根据工作表批量更新Access数据库并向数据库添加不存在的记录(不使用循环)
http://club.excelhome.net/thread-1023579-1-1.html
但如果数据库和工作表中都有重复信息,且希望按照它们出现的顺序分别更新不同的数据,上面不能直接使用两种方法,下面代码使用字典+Update方法实现向数据库中按顺序更新重复记录:
- Sub updateaddRecords()
- Dim cnn As Object, rs As Object, SQL$
- Dim a, arr, i&, j&, l&, s$, k, t, d As Object
- Set d = CreateObject("scripting.dictionary")
- arr = [a1].CurrentRegion '工作表数据区域写入数组
-
- ' 用字典记录每个姓名出现在工作表中的行号
- For i = 2 To UBound(arr)
- s = arr(i, 1) & Chr(9) & arr(i, 2)
- If Not d.Exists(s) Then
- d(s) = i
- Else
- d(s) = d(s) & "," & i
- End If
- Next
- k = d.keys '不重复的姓名信息
- t = d.items '不重复的姓名出现的行号
-
- Set cnn = CreateObject("adodb.connection")
- cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb"
-
- ' 更新数据库中存在的数据
- For i = 0 To d.Count - 1
- a = Split(k(i), Chr(9)) '分离LastName、FirstName
- SQL = "select * from Sheet1 where LastName='" & a(0) & "' and FirstName='" & a(1) & "'" '查询该人员在数据除中记录
- Set rs = CreateObject("adodb.Recordset")
- rs.Open SQL, cnn, 1, 3
- n = rs.RecordCount '记录数
- If n > 0 Then '如果有记录
- a = Split(t(i), ",") '分离该人员在工作表中出现的行号
- For j = 0 To UBound(a) '逐个行号
- If j + 1 > n Then Exit For '如果工作表中该人员记录次序大于数据库中的记录数则退出循环
- rs.Move j, 1 '把指针移动到该人员出现次序的位置
- For l = 3 To 7 '逐列数据更新到数据库
- rs.Fields(l - 1) = arr(a(j), l)
- Next l
- rs.Update '更新
- Next j
- End If
- Next i
-
- ' 下面是插入数据库中不存在的记录
- SQL = "select a.* from [Excel 12.0;Database=" & ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" & [a1].CurrentRegion.Address(0, 0) _
- & "] a left join Sheet1 b on a.LastName=b.LastName and a.FirstName=b.FirstName where b.LastName is null"
- Set rs = CreateObject("adodb.recordset")
- rs.Open SQL, cnn, 1, 3
- If rs.RecordCount Then
- SQL = "insert into Sheet1 " & SQL
- cnn.Execute SQL
- MsgBox rs.RecordCount & "行数据已经添加到数据库!", vbInformation
- Else
- MsgBox "工作表的数据数据库中已经存在。", vbInformation
- End If
-
- rs.Close
- cnn.Close
- Set rs = Nothing
- Set cnn = Nothing
- End Sub
复制代码
将excel表中的数据更新到Access数据库中(有重复).rar
(35.83 KB, 下载次数: 686)
该贴已经同步到 zhaogang1960的微博 |
评分
-
9
查看全部评分
-
|