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

标签 sql excel csv adodb vba

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

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

我试过使用 Microsoft.Jet.OLEDB.4.0;和 driver={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 的标记。

最佳答案

由于 CursorType,您可能超出了内存限制。尝试将其更改为 adOpenForwardOnly
这是描述光标类型的 MSDN 页面。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681771(v=vs.85).aspx

关于SQL 命令在到达大型 csv 文件末尾之前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441875/

相关文章:

excel - "Case Else"在 VBA excel 中优先于其他 "Case"条件的问题

excel - 循环浏览多选列表框值以创建和命名工作簿

csv - 如何在 Notepad++ 中垂直对齐逗号分隔值?

python - 值错误: could not convert string to float in a CSV file

mysql - 使用 LOAD DATA INFILE 将两个 CSV 文件加载到同一行中

javascript - 如何缩小3个循环或查询mysql

vba - 使用 VBA 的日期序列

sql - 联合 SQL Server 表中的所有几何图形,如 Postgres 中的 GeomUnion

sql - 比较两组数据

sql - Oracle 语句之间的多个重叠