Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用ADO将大型csv文件导入mdb时的性能问题_Vba_Excel_Csv_Fastercsv - Fatal编程技术网

Vba 使用ADO将大型csv文件导入mdb时的性能问题

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

这是我的代码,但将所有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 = 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?