|
本帖最后由 zhaogang1960 于 2013-6-3 17:48 编辑
改进一下:- Sub 更新插入数据()
- Dim cnn As Object, rs As Object, SQL$
- Dim arr, i&, t$, d As Object, ds As Object
- Set d = CreateObject("scripting.dictionary")
- arr = [a1].CurrentRegion
- Set cnn = CreateObject("adodb.connection")
- cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb"
- For i = 2 To UBound(arr)
- t = arr(i, 1) & Chr(9) & arr(i, 2)
- d(t) = d(t) + 1 '记录工作表中LastName和FirstName出现的次序
- SQL = "select * from Sheet1 where LastName='" & arr(i, 1) & "' and FirstName='" & arr(i, 2) & "'"
- Set rs = CreateObject("adodb.Recordset")
- rs.Open SQL, cnn, 1, 3
- If rs.RecordCount Then
- Set ds = CreateObject("scripting.dictionary")
- For l = 1 To rs.RecordCount
- t = rs.Fields(0).Value & Chr(9) & rs.Fields(1).Value
- ds(t) = ds(t) + 1 '记录数据库中LastName和FirstName出现的次序
- If ds(t) = d(t) Then '如果两个出现次序相同,则更新改记录
- For j = 1 To 7
- rs.Fields(j - 1) = arr(i, j)
- Next j
- rs.Update
- Exit For
- End If
- rs.movenext
- Next
- End If
- Next
-
- 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
复制代码 |
评分
-
1
查看全部评分
-
|