我需要從文本文件創建訪問(2007)表。我事先知道應該存在哪些列,但有時供應商會錯過並提交包含不正確列數的文本文件。所以我不想提前指定列。我想將所有數據作爲文本加載到存在的任何列中。然後我會做QC。從文本文件創建訪問表
這些列是管道分隔的,每條記錄有超過200列。沒有列標題,但是文件有一行標題文本,最後一行標明瞭有多少條記錄。文本文件中可能有1到5000個以上的記錄。記錄用CRLF(窗口)標識。
這是我到目前爲止,它的工作原理(它讀取文件並將正確的信息放入記錄集(列和記錄),我可以計算記錄數),除了SELECT INTO給我一個錯誤:
Sub OpenTextADO(strFileName As String, strPath As String)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim recs As Integer
Dim strRecord As String
Dim strSQL As String
recs = 0
Set cn = New ADODB.Connection
If Right(strFileName, 3) = "txt" Then
'cn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=" & strPath & "\" 'need schema.ini file
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & "\;Extended Properties='text;HDR=No;FMT=Delimited(|)'" 'need schema.ini file
End If
Set rs = New ADODB.Recordset
rs.Open "SELECT * INTO TESTTEXT FROM [" & strFileName & "]", cn, adOpenStatic, adLockOptimistic, adCmdText
'Do Until rs.EOF
' For Each fld In rs.Fields
' strRecord = strRecord & "|" & fld.Value
' Next fld
' strRecord = strRecord & vbCr
' recs = recs + 1
' rs.MoveNext
'Loop
'Debug.Print strRecord
'recs = rs.RecordCount
rs.Close
Set rs = Nothing
MsgBox "Text was opened and there are " & recs & " records in the table."
cn.Close
Set cn = Nothing
End Sub
注:我包括OLEDB版本和文本驅動程序版本 - 他們都似乎操作相同。我還創建了一個schema.ini文件,看起來像這樣:
[test.txt]
Format=Delimited(|)
ColNameHeader=False
兩位車手似乎需要這desregard列標題,儘管OLEDB版本的「HDR =否」。
我得到的錯誤是:「無法更新。數據庫或對象是隻讀的」。
我很感激任何幫助。
有多少這些是你在做什麼?使用導入嚮導怎麼樣? – John
我現在使用導入嚮導,但這變得不切實際。我每週開始獲得這些文件中的5或6個,現在我每週得到20-30個,並且可能會獲得更多。 – bassman592