SQL命令在到达大型csv文件的末尾之前终止

时间:2014-10-18 16:17:52

标签: sql excel-vba csv adodb vba

我有一个包含大量数据的大型csv文件,我需要能够分析(~6M行)。我想连接到该文件并对其运行SQL命令以仅返回我有兴趣分析的数据。我写的VBA是在Excel 2010中。

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

我尝试过使用Microsoft.Jet.OLEDB.4.0;和driver = {Microsoft Text Driver(* .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' Mark。

1 个答案:

答案 0 :(得分:0)

由于CursorType,您可能超出了内存约束。尝试将其更改为adOpenForwardOnly

这是描述游标类型的MSDN页面。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms681771(v=vs.85).aspx