Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Excel ADODB与csv的连接未返回所有记录_Excel_Vba_Csv_Adodb - Fatal编程技术网

Excel ADODB与csv的连接未返回所有记录

Excel ADODB与csv的连接未返回所有记录,excel,vba,csv,adodb,Excel,Vba,Csv,Adodb,我使用Excel VBA代码通过ADODB连接到CSV文件(24179689行)。宏运行并从excel中获取数据,其中一列上有特定的筛选器。使用我现在尝试的这个过滤器,它应该返回大约1500行数据 我已经通过在其他地方手动加载CSV检查了这一点,数据实际上就在那里。但是当我使用ADODB连接时,我的记录集仍然是空的 我对完整的CSV文件做了一些额外的测试:count(*),在那里我看到了错误:它只返回155535行。因此,我正在应用的特定筛选器可能不在该数据中,因此它返回0行 这是我的代码: P

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

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

我对完整的CSV文件做了一些额外的测试:count(*),在那里我看到了错误:它只返回155535行。因此,我正在应用的特定筛选器可能不在该数据中,因此它返回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
然后返回155535

我还尝试创建一个ADODB命令,但不使用上面的连接。或者连接超时。没有结果


这是内存问题还是其他问题?怎么解决呢?

请尝试一下,看看它是否符合您的要求。另外,设置对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秒的时间里得到了我预期的准确结果,我的电脑速度非常慢

你看到这个了吗可能会有帮助吗?我尝试了设置为adOpenForwardOnly和设置adoRS.cursurlocation=ADUSSERVER。。没有改变任何事情我试过这个。我在conn.open sconnect行上遇到一个错误,因为它说有些东西可能安装不正确。我已经设置了对ActiveX数据对象2.8库的引用,但您可以搜索错误吗?我不熟悉那个。如果正确设置了引用,它应该可以正常工作。我没有任何问题。为了测试性能,我下载了一个纽约出租车文件。我现在不知道它有多少条记录,但这个文件已经超过了600MB。即使在那个庞然大物上,我的代码也在大约1分钟内完成,并给出了预期的结果。