2014-10-18 29 views
2

我有一个很大的csv文件,需要大量的数据才能分析(〜6M行)。我想连接到该文件并对其运行SQL命令,以仅返回我有兴趣分析的数据。我写的VBA是在Excel 2010中。SQL命令在达到大csv文件结束之前终止

当csv文件中的行数为< 4432669时,一切正常。当csv文件的行数多于此值时,命令似乎终止于该文件只是返回到目前为止所发现的内容。没有错误抛出(CN.Errors),我首先虽然它可能是命令超时但是当我增加它没有区别。我也检查了不同的csv文件,只是在该行包含损坏的数据,但没有运气。 Recordset maxrecords设置为0(无限制)。

我试过使用Microsoft.Jet.OLEDB.4.0;和驱动程序= {Microsoft文本驱动程序(* .txt; * .csv)};在连接字符串中,两者的行为与上述相同。

这里是我使用的测试代码,

Dim CN As New ADODB.Connection 
Dim RS As New ADODB.Recordset 
Dim Err As ADODB.Error 

providerstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\cygwin\home\MarkM\csvimport\filtertest4\;" & _ 
"Extended Properties=" & Chr(34) & "text;HDR=Yes;FMT=Delimited" & Chr(34) & ";" 
CN.ConnectionString = providerstr 
CN.Mode = adModeRead 
CN.CommandTimeout = 900 
CN.Open 

RS.Open "SELECT exCode FROM 5M_MBP1R04.csv", CN, adOpenStatic, adLockReadOnly 
RS.MoveLast 
MsgBox "Number of rows = " & RS.RecordCount 

    For Each Err In CN.Errors 
     strError = "Error #" & Err.Number & vbCr & _ 
      " " & Err.Description & vbCr & _ 
      " (Source: " & Err.Source & ")" & vbCr & _ 
      " (SQL State: " & Err.SqlState & ")" & vbCr & _ 
      " (NativeError: " & Err.NativeError & ")" & vbCr 
     If Err.HelpFile = "" Then 
      strError = strError & " No Help file available" 
     Else 
      strError = strError & _ 
       " (HelpFile: " & Err.HelpFile & ")" & vbCr & _ 
       " (HelpContext: " & Err.HelpContext & ")" & _ 
       vbCr & vbCr 
     End If 

     Debug.Print strError 
    Next 

非常感谢所有帮助,我现在完全被卡住。

BR's Mark。

+0

如果您有MS-Access或SQL-Server,则可以将数据作为中间步骤导入。要么能轻松处理4 M行。 – 2014-10-18 16:32:45

+0

尝试将光标位置移动到服务器而不是客户端 – iliketocode 2014-10-18 18:36:57

+0

尝试“RS.CursorLocation = adUseServer”,但得到相同的结果:-(! – Mark 2014-10-18 20:36:54

回答

相关问题