我需要从文本文件创建访问(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