【问题标题】:Different SQL queries in Excel VBA for csv files using ADODB connectionExcel VBA 中使用 ADODB 连接的 csv 文件的不同 SQL 查询
【发布时间】:2019-06-08 06:01:27
【问题描述】:

我正在尝试使用 Excel VBA 中的 SQL 选择从 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 子句”。

任何帮助都将不胜感激。

【问题讨论】:

    标签: excel vba csv select adodb


    【解决方案1】:

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

    将查询改回select * 以接收所有数据并放置一些行来转储字段名。请注意,Recordset 的字段集合是从 0 开始的。顺便说一句:使用ADO,您无需发出MoveFirst:

    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
    

    【讨论】:

    • 相信我,我在数据中有一个 MyField 字段。
    • 然后您将 CSV 的所有字段分成单个单元格?
    • 不,我把它们都放在第一列,用“;”分隔。
    • 也许是这个原因? csv 使用“;”作为分隔符而不是 "," ??
    • 是的,这就是你的问题。如果您可以更改 CSV 文件,则最简单的方法是。如果没有,您可能不得不修改使用schema.ini 文件。请参阅stackoverflow.com/q/3109360/7599798 的讨论(也适用于 VBA)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多