使用ADODB连接在Excel VBA中对csv文件执行不同的SQL查询

使用ADODB连接在Excel VBA中对csv文件执行不同的SQL查询,excel,vba,csv,select,adodb,Excel,Vba,Csv,Select,Adodb,我正在尝试使用Excel VBA中的SQL Select从CSV文件检索数据。这就是我尝试过的 Sub GetMyCSVData() Dim xlcon As ADODB.Connection Dim xlrs As ADODB.Recordset Set xlcon = New ADODB.Connection Set xlrs = New ADODB.Recordset Dim currentDataFilePath As String Dim currentDataFileName A

我正在尝试使用Excel VBA中的SQL Select从CSV文件检索数据。这就是我尝试过的

Sub GetMyCSVData()
Dim xlcon As ADODB.Connection
Dim xlrs As ADODB.Recordset

Set xlcon = New ADODB.Connection
Set xlrs = New ADODB.Recordset

Dim currentDataFilePath As String
Dim currentDataFileName As String
Dim nextRow As Integer

currentDataFilePath = "C:\MyFolder"
currentDataFileName = "MyFile"

xlcon.Provider = "Microsoft.Jet.OLEDB.4.0"
xlcon.ConnectionString = "Data Source=" & currentDataFilePath & ";" & 
  "Extended Properties=""text;HDR=Yes;FMT=Delimited;"""

xlcon.Open

MyQuery = "SELECT * FROM [" & currentDataFileName & ".csv]"

xlrs.Open MyQuery, xlcon
xlrs.MoveFirst
nextRow = Worksheets("Sheet1").UsedRange.Rows.Count + 1
Worksheets("Sheet1").Cells(nextRow, 1).CopyFromRecordset xlrs

xlrs.Close
xlcon.Close

Set xlrs = Nothing
Set xlcon = Nothing
End Sub
这很好,但我试图更准确地回答我的问题:

MyQuery = "SELECT MyField FROM [" & currentDataFileName & ".csv]"
xlrs.Open MyQuery, xlcon
这不是工作错误-2147217904 80040e10。然后:

MyQuery = "SELECT * FROM [" & currentDataFileName & ".csv] WHERE MyField=10"
xlrs.Open MyQuery, xlcon
这也不适用于相同的错误

当然,我希望结合使用这两种方法,只从文件中选择一些字段,并为不同的字段使用一些where子句


欢迎提供任何帮助。

我强烈认为您的数据中没有字段MyField-可能只是拼写错误

将查询更改回select*以接收所有数据,并放置一些行以转储字段名。请注意,记录集的字段集合是基于0的。顺便说一句:使用ADO,您不需要先发出MoveFirst:


请相信我,我在数据中有一个MyField字段。您将CSV的所有字段分隔为单个单元格?不,我将它们全部放在第一列中,用;分隔;。也许这就是原因?csv使用;作为分隔物而不是,?是的,这是你的问题。如果您可以更改您的CSV文件,那么最简单的方法就是。否则,您可能需要使用schema.ini文件进行修补。请参阅上的讨论,它也适用于VBA
xlrs.Open MyQuery, xlcon
Dim i As Integer
nextRow = Worksheets("Sheet1").UsedRange.Rows.Count + 1
' Dump fieldnames
For i = 1 To xlrs.Fields.Count
    Worksheets("Sheet1").Cells(nextRow, i) = xlrs.Fields(i - 1).Name
Next i
nextRow = nextRow + 1
Worksheets("Sheet1").Cells(nextRow, 1).CopyFromRecordset xlrs