【问题标题】:Excel ADODB connection to csv not returning all recordsExcel ADODB 连接到 csv 不返回所有记录
【发布时间】:2020-03-14 20:20:00
【问题描述】:

我正在使用 Excel VBA 代码通过 ADODB 连接连接到 CSV 文件(24,179,689 行)。宏运行并使用一列上的特定过滤器从 excel 中获取数据。使用我现在尝试的这个过滤器,它应该返回大约 1500 行数据。

我已经通过在其他地方手动加载 CSV 来检查这一点,数据实际上就在那里。但是当我使用 ADODB 连接时,我的记录集仍然是空的。

我对完整的 CSV 文件做了一些额外的测试:count(*),我看到了错误:它只返回 155,535 行。因此,我正在应用的特定过滤器可能不在该数据中,因此它返回 0 行。

这是我的代码:

Public adoConn As ADODB.Connection
Public adoRS As ADODB.Recordset

Sub getdata()

Set adoConn = New ADODB.Connection
Set adoRS = New ADODB.Recordset

Dim rawFile As String
Dim strSQL As String

'The xlsx file to treat as a database
rawFile = "myPathName"

'Open a connection to the workbook
sconnect = "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=" & rawFile & ";Extended Properties='text;HDR=YES;FMT=Delimited'"

'Write the SQL necessary to get the data you want 
sql2 = "SELECT count(*) from [MyFileName.csv]"

'Now we open up our recordset using the connection and the sql statement
adoRS.Open sql2, adoConn, adOpenStatic

Debug.Print (adoRS.EOF)

'Last, we dump the results in this viz sheet
Blad1.Range("A1").CopyFromRecordset adoRS

adoRS.Close
adoConn.Close

End Sub

然后它返回 155,535。

我还尝试通过创建 ADODB 命令而不使用上述连接。或连接超时。没有结果。

这是内存问题还是其他问题?如何解决?

【问题讨论】:

  • 你见过这个吗? stackoverflow.com/questions/26441875 - 可能有帮助?
  • 我尝试设置为 adOpenForwardOnly 和设置 adoRS.cursurlocation = adUseServer.. 没有改变任何东西

标签: excel vba csv adodb


【解决方案1】:

请尝试一下,看看它是否符合您的要求。此外,设置对 Microsoft ActiveX 数据对象 2.8 库的引用。

Sub sbADO()
Dim sSQLQry As String
Dim ReturnArray

Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Dim DBPath As String, sconnect As String

DBPath = "C:\your_path_here\"

sconnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath & ";Extended Properties='text;HDR=YES;FMT=Delimited'"

Conn.Open sconnect
    sSQLSting = "SELECT * From CSV1.csv WHERE ID = 2"
    mrs.Open sSQLSting, Conn
        ActiveSheet.Range("A2").CopyFromRecordset mrs
    'Close Recordset
    mrs.Close

Conn.Close

我的 CSV 看起来像这样。

我的 CSV 中有超过一百万行;我不能放入 2300 万行!无论如何,在我的测试中,只有超过一百万行,我在大约 1 秒内得到了我预期的确切结果,而且我的计算机超级超级超级慢!!

【讨论】:

  • 我试过这个。我在 conn.open sconnect 线上收到一个错误,因为它说有些东西可能没有正确安装。我已经设置了对 ActiveX 数据对象 2.8 库的引用
  • 你能谷歌一下这个错误吗?我不熟悉那个。如果您正确设置参考,它应该适合您。我没有任何问题。只是为了测试性能,我下载了其中一个纽约出租车文件。我现在不知道它有多少记录,但该文件远远超过 600MB。即使在那个庞然大物上,我的代码也在大约 1 分钟内完成,并给出了预期的结果。
猜你喜欢
  • 2017-09-25
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多