【问题标题】:Select from a table without column name从没有列名的表中选择
【发布时间】:2019-10-24 17:30:15
【问题描述】:

在 VBA 上,我想进行 SQL 查询以从 CSV 文件中提取数据,但文件的结构如下:

Header 1                        
Header 2                    
field 1 field 2 field 3 field 4 field 5

xxx  xxx     xxx     xxx     xxx     xxx

xxx  xxx     xxx     xxx     xxx     xxx

xxx  xxx     xxx     xxx     xxx     xxx

前 2 行不包含重要信息,因此我必须在开始查询之前跳过前 2 行。我在打开 SQL 连接时尝试了“SkipRows=2”,但没有成功。

我已经有一个有效的查询:

SELECT [Header 1],count(*) FROM [fileName.csv] where [F29]= 'Rejected' 
GROUP BY [Header 1] 

这个查询工作正常,但是当我尝试从没有标签的列中检索数据时它不起作用

【问题讨论】:

  • 从文件中提取数据的 SQL 查询...不太清楚。它是什么文件格式?它真的需要是SQL吗?我想不出任何数据库在实际字段之前有 2 个标题...
  • 您能否详细说明您的问题。写一下,是什么样的文件?你在哪里写代码?需要什么样的输出?
  • 这是一个 CSV 文件。前 2 行不包含重要信息,因此我想跳过它们并从第 2 行开始 SQL 查询。我已经有一个有效的查询(SELECT [Header 1],count(*) FROM [fileName.csv] where [F29]= 'Rejected' GROUP BY [Header 1] )。此查询工作正常(我在打开连接时添加了 SkipRows=2),但是当我尝试从没有标签的列中检索数据时,它不起作用。
  • 是制表符分隔的还是逗号分隔的文件?我更喜欢以下解决方案:1)导入所有内容,然后选择所需的字段和过滤列名称,这对于常量结构文件是可以接受的 2)删除文件中的垃圾行,然后导入它
  • 除了我在下面的回答之外,它可能是使用Get & Transform的更好方法

标签: sql excel vba


【解决方案1】:

我假设文本文件是制表符分隔的,并创建了以下示例进行测试

我使用了 documentation 中所述的 schema.ini 文件

通过以下示例代码,我能够读取数据。您需要引用 ActiveX 数据对象。

Option Explicit

    Sub ADO()

        Dim rs As New ADODB.Recordset
        Dim conn As New ADODB.Connection
        Dim myPath As String
        myPath = ThisWorkbook.Path

        conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath & ";Extended Properties=""text;HDR=No;FMT=Delimited()"";"
        With rs
            .ActiveConnection = conn
            .CursorType = adOpenKeyset
            .LockType = adLockOptimistic
            .Open "SELECT * FROM [text_file.txt]"
        End With

        ' Skip the firt rows
        Dim i As Long
        For i = 1 To 3
            rs.MoveNext
        Next

        ' Example - Print just field 1
        Do Until rs.EOF
            Debug.Print rs.Fields(1).Value
            rs.MoveNext
        Loop

        conn.Close
    End Sub

另一种解决方案可能是使用Get & Transform

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 2019-12-08
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    相关资源
    最近更新 更多