如何使ADO将.csv文件中的所有日期识别为美国日期?

时间:2019-05-13 07:39:52

标签: sql vba ado

我有一个名为*your path*\Test\Test.accdb的MS Access数据库 它包含一个名为Table1

的表

我有两个.csv文件:

  • “您的路径\ Test \ Test_Data_20190111.csv”

  • “您的路径\ Test \ Test_Data_20190114.csv”

,日期数据以美国格式存储,如下所示:

Date(MM/DD/YYYY),TestField  
1/11/2019,C  
1/11/2019,D  

Date(MM/DD/YYYY),TestField
1/14/2019,A
1/14/2019,B

我使用下面的VBA代码(使用ADODB.Recordset)从.csv文件中上传数据,

Sub Upload_CSV_to_MSDB()

Dim xlcon As ADODB.Connection
Dim xlrs As ADODB.Recordset
Dim strSQL As String
Dim strFile_Path_Name As String
Dim cnStr As String

' Set ADO object variable
Set xlcon = New ADODB.Connection
Set xlrs = New ADODB.Recordset

' Set string variables
strFile_Path_Name = "your path \Test\"
strSQL = "INSERT INTO Table1 IN ' your path \Test\Test.accdb' " & _
            "SELECT  [Date(MM/DD/YYYY)], [TestField] " & _
            "FROM Test_Data_20190111.csv"

' Set connection string to CSV file
cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & strFile_Path_Name & ";" & _
            "Extended Properties=""text;HDR=Yes;FMT=Delimited;"""

' Execute strSQl by opening record set
xlrs.Open strSQL, cnStr, adOpenStatic, adLockOptimistic

Set xlrs = Nothing
Set xlcon = Nothing

End Sub

当我上传文件Test_Data_20190111.csv的数据时,ADO识别为英国格式存储的日期,但是对于Test_Data_20190114.csv,由于没有第14个月,因此日期被识别为美国格式。

如何运行类似于上面代码的内容,并使其将.csv文件中的任何日期识别为美国格式?请注意,数据具有美国格式的日期,但是我的区域计算机设置为英国日期格式;我不想更改这些区域设置。

谢谢。

1 个答案:

答案 0 :(得分:1)

距我这样做已经很久了,我忘记了确切的细节。但是我相信您需要使用Schema.ini文件。

在csv文件所在的目录中,添加一个名为Schema.ini的文件,其中每个文件都有一个小节。该部分的设置允许您指定每列的格式,如下所示:

[Test_Data_20190111.csv]
Format=CSVDelimited
ColNameHeader=True
DateTimeFormat=MM/DD/YYYY
Col1=Date(MM/DD/YYYY) DateTime
Col2=TestField Text

[Test_Data_20190114.csv]
Format=CSVDelimited
ColNameHeader=True
DateTimeFormat=MM/DD/YYYY
Col1=Date(MM/DD/YYYY) DateTime
Col2=TestField Text

有关更多详细信息,请参见Scehma.ini files上的Microsoft文档。