VBA查询CSV格式的字段内容
VBA to query field contents in CSV
我正在与 ADO 作斗争 connections/recordsets。
我的问题陈述是:一个函数将 return 所选 .csv 文件中所选字段的第一个值。
我这样做是为了在将数据添加到数据库中的相关表之前识别可变名称的 .csv 文件。我假设此字段始终存在,并且它在整个文件中保持一致,或者仅对相关字段进行分组(这是在链的上层控制并且足够确定)。
我的代码 运行 作为 MS Access 数据库模块的一部分:
Public Function GetFirstItem(File As Scripting.File, Field As String)
Dim Conn As ADODB.Connection, Recordset As ADODB.Recordset, SQL As String
Set Conn = New ADODB.Connection
Set Recordset = New ADODB.Recordset
'Microsoft.ACE.OLEDB.16.0 / Microsoft.Jet.OLEDB.4.0
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=""" & File.ParentFolder & _
"""; Extended Properties=""text;HDR=Yes;FMT=Delimited;"";"
SQL = "SELECT " & Field & " FROM """ & File.Name & """ LIMIT 1"
Debug.Print Conn.ConnectionString
Debug.Print SQL
Conn.Open
Recordset.Source = SQL
Recordset.ActiveConnection = Conn.ConnectionString
Recordset.Open
Recordset.MoveFirst
'GetFirstItem = Recordset!Questionnaire
Recordset.Close
Conn.Close
Set Recordset = Nothing
Set Conn = Nothing
End Function
ConnectionString = Provider=Microsoft.ACE.OLEDB.16.0;Data Source="D:\Documents\Jobs\TestPath"; Extended Properties="text;HDR=Yes;FMT=Delimited;";
字段 = Questionnaire
SQL = SELECT Questionnaire FROM "test.csv" LIMIT 1
我在 Recordset.Open
上收到错误:
这可能(很可能)是因为完全不了解 ADO connections/recordsets 的工作原理。我试过无引号,它抱怨 FROM
表达式格式错误。此外,一旦克服了这个障碍,我就不确定如何 return 我的查询结果的语法。如果有更好的方法,我会洗耳恭听!
谢谢。
在 Access 中,您不需要 ADO 库来查询 CSV 文件:
Public Function GetFirstItem(File As Scripting.File, Field As String) As String
Dim RS As DAO.Recordset, SQL As String
SQL = "SELECT TOP 1 [" & Field & "]" _
& " FROM [" & File.Name & "]" _
& " IN '" & File.ParentFolder & "'[Text;FMT=CSVDelimited;HDR=Yes];"
Debug.Print SQL
Set RS = CurrentDb.OpenRecordset(SQL)
GetFirstItem = RS(0)
RS.Close
Set RS = Nothing
End Function
用法:
?GetFirstItem(CreateObject("Scripting.FileSystemObject").getfile("c:\path\to\your\file.csv"), "your field")
我正在与 ADO 作斗争 connections/recordsets。
我的问题陈述是:一个函数将 return 所选 .csv 文件中所选字段的第一个值。
我这样做是为了在将数据添加到数据库中的相关表之前识别可变名称的 .csv 文件。我假设此字段始终存在,并且它在整个文件中保持一致,或者仅对相关字段进行分组(这是在链的上层控制并且足够确定)。
我的代码 运行 作为 MS Access 数据库模块的一部分:
Public Function GetFirstItem(File As Scripting.File, Field As String)
Dim Conn As ADODB.Connection, Recordset As ADODB.Recordset, SQL As String
Set Conn = New ADODB.Connection
Set Recordset = New ADODB.Recordset
'Microsoft.ACE.OLEDB.16.0 / Microsoft.Jet.OLEDB.4.0
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=""" & File.ParentFolder & _
"""; Extended Properties=""text;HDR=Yes;FMT=Delimited;"";"
SQL = "SELECT " & Field & " FROM """ & File.Name & """ LIMIT 1"
Debug.Print Conn.ConnectionString
Debug.Print SQL
Conn.Open
Recordset.Source = SQL
Recordset.ActiveConnection = Conn.ConnectionString
Recordset.Open
Recordset.MoveFirst
'GetFirstItem = Recordset!Questionnaire
Recordset.Close
Conn.Close
Set Recordset = Nothing
Set Conn = Nothing
End Function
ConnectionString = Provider=Microsoft.ACE.OLEDB.16.0;Data Source="D:\Documents\Jobs\TestPath"; Extended Properties="text;HDR=Yes;FMT=Delimited;";
字段 = Questionnaire
SQL = SELECT Questionnaire FROM "test.csv" LIMIT 1
我在 Recordset.Open
上收到错误:
这可能(很可能)是因为完全不了解 ADO connections/recordsets 的工作原理。我试过无引号,它抱怨 FROM
表达式格式错误。此外,一旦克服了这个障碍,我就不确定如何 return 我的查询结果的语法。如果有更好的方法,我会洗耳恭听!
谢谢。
在 Access 中,您不需要 ADO 库来查询 CSV 文件:
Public Function GetFirstItem(File As Scripting.File, Field As String) As String
Dim RS As DAO.Recordset, SQL As String
SQL = "SELECT TOP 1 [" & Field & "]" _
& " FROM [" & File.Name & "]" _
& " IN '" & File.ParentFolder & "'[Text;FMT=CSVDelimited;HDR=Yes];"
Debug.Print SQL
Set RS = CurrentDb.OpenRecordset(SQL)
GetFirstItem = RS(0)
RS.Close
Set RS = Nothing
End Function
用法:
?GetFirstItem(CreateObject("Scripting.FileSystemObject").getfile("c:\path\to\your\file.csv"), "your field")