|
Sub update()
'=======================================================================
'1、ID不为空表示数据库中已有对应数据,对这部分数据只更新字段值
'2、ID为空表示表格内新增的数据,直接上传数据到数据库
'=======================================================================
Dim con, rs, SQL$, i%, r%, c%
Dim insertRow As Integer '记录无ID的数据行(插入)
Dim updateRow As Integer '记录有ID的数据行(更新)
Dim updateSQL, insertSQL
If Range("A1").CurrentRegion.Rows.Count = 2 Then Exit Sub '如果工作表只有两行数据,退出、不执行
myPath = ThisWorkbook.Path & "\kanban.accdb"
myTable = "kanban"
If Range("A3") <> "" Then
r = Range("A" & Rows.Count).End(3).Row
For c = 2 To 18
updateSQL = updateSQL & "a.[" & Cells(2, c) & "]=b.[" & Cells(2, c) & "],"
Next
For c = 21 To 28
updateSQL = updateSQL & "a.[" & Cells(2, c) & "]=b.[" & Cells(2, c) & "],"
Next
updateSQL = VBA.Left(updateSQL, VBA.Len(updateSQL) - 1)
updateSQL = "update " & myTable & " a,[Excel 12.0;imex=0;Database=" & ActiveWorkbook.FullName & "].[看板汇总$A2:AB" & r & "] b set " & updateSQL & " where a.ID=b.ID"
End If
'1)引用ADO对象,以下是后期绑定的方式
Set con = CreateObject("adodb.connection") '建立ADO连接对象
Set rs = CreateObject("adodb.recordset") '建立ADO记录集对象
'3)建立连接
On Error GoTo errmsg
con.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & myPath
con.Execute updateSQL
' MsgBox "数据已更新到数据库!", vbInformation, "更新数据"
con.Close
Set con = Nothing
Exit Sub
errmsg:
MsgBox Err.Description, , "错误报告"
End Sub
Sub AddNew()
Dim lR, uR '记录新增行行号
If Range("A1").CurrentRegion.Rows.Count = 2 Then Exit Sub
lR = Range("A" & Rows.Count).End(3).Row
uR = Range("B" & Rows.Count).End(3).Row
If uR < 3 Then Exit Sub
r = Sheets("看板汇总").Range("B" & Rows.Count).End(3).Row
myPath = ThisWorkbook.Path & "\kanban.accdb"
myTable = "kanban"
'构造SQL
For c = 2 To 18
insertSQL = insertSQL & "[" & Cells(2, c) & "],"
Next
For c = 21 To 28
insertSQL = insertSQL & "[" & Cells(2, c) & "],"
Next
insertSQL = VBA.Left(insertSQL, VBA.Len(insertSQL) - 1)
insertSQL = "insert into " & myTable & " select " & insertSQL & " from [Excel 12.0;Database=" & ActiveWorkbook.FullName & "].[看板汇总$A2:AB" & r & "] where ID is null"
Debug.Print insertSQL
'1)引用ADO对象,以下是后期绑定的方式
Set con = CreateObject("adodb.connection") '建立ADO连接对象
Set rs = CreateObject("adodb.recordset") '建立ADO记录集对象
'3)建立连接
On Error GoTo errmsg
con.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & myPath
con.Execute insertSQL
' MsgBox "数据已添加到数据库!", vbInformation, "添加数据"
con.Close
Set con = Nothing
Exit Sub
errmsg:
MsgBox Err.Description, , "错误报告"
End Sub
以上两段代码:
过程 update 向数据库更新 看板汇总 中有ID的数据
过程 AddNew 向数据库插入 看板汇总 中ID为空的数据
问题:
看板汇总中数据比较少时速度挺快的,但是数据达到1万行左右时速度就特别慢,会导致Excel假死,哪位老师有办法帮我优化一下?
|
|