Vba 使用ADO将大型csv文件导入mdb时的性能问题
这是我的代码,但将所有1700万行导出到mdb大约需要一个小时。我不能使用mysql或sql server来实现此目的。我必须在access db中快速完成,因为这个过程每周运行一次。请建议此任务可用的最快方法Vba 使用ADO将大型csv文件导入mdb时的性能问题,vba,excel,csv,fastercsv,Vba,Excel,Csv,Fastercsv,这是我的代码,但将所有1700万行导出到mdb大约需要一个小时。我不能使用mysql或sql server来实现此目的。我必须在access db中快速完成,因为这个过程每周运行一次。请建议此任务可用的最快方法 Sub insertDataIntoMDB() Dim Dbfilepath As String Set cnn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Set rst
Sub insertDataIntoMDB()
Dim Dbfilepath As String
Set cnn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set rst = CreateObject("ADODB.Recordset")
Dim arrData() As String
Dim s As String
Dim i As Integer
Dbfilepath = ThisWorkbook.Path & "\DB\Interface.accdb"
cnn.Open "Provider= Microsoft.ACE.OLEDB.12.0;" & " Data Source=" & Dbfilepath & ";" & "Persist Security Info =False;"
q1 = "DELETE * FROM MYTABLE"
Set rs = cnn.Execute(q1)
'q1 = "ALTER TABLE MyTable ALTER COLUMN ID autonumber(1,1)"
'Set rs = cnn.Execute(q1)
p = UserForm1.csvFolder & "\" & sItem & ".csv"
Open p For Input As #1
Do While Not EOF(1)
Close #1
Line Input #1, s
arrData = Split(s, ",")
q1 = "INSERT INTO MyTable(F1,F2,F3) values(" & arrData(0) & "," & arrData(1) & "," & arrData(2) & ")"
Set rst = cnn.Execute(q1)
Loop
Close #1
rs.Close
rs`enter code here`t.Close
Set rst = Nothing
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
就在这里,你有一个巨大的减速和潜在的数据损坏
q1 = "INSERT INTO MyTable(F1,F2,F3) values(" & arrData(0) & "," & arrData(1) & "," & arrData(2) & ")"
Set rst = cnn.Execute(q1)
字符串连接很慢,尤其是在VBA中。因此,一旦您编写了“something”和“something”
,并将其放入循环中,您就要求性能缓慢
此外,DAO的访问速度通常比ADO快
如果坚持使用ADO,您可能希望使用SELECT语句打开一个记录集,然后将数据附加到该记录集,然后调用UpdateBatch
祝你好运 请详细介绍您使用的所有表(MYTABLE)和CSV文件,它们看起来如何?(结构、数据)等。您不希望使用MS Access的任何原因?例如DoCmd.TransferText?