テキスト ファイルからアクセス (2007) テーブルを作成する必要があります。どの列が存在する必要があるかは前もってわかっていますが、ときどきベンダーが失敗して、間違った数の列を含むテキスト ファイルを送信します。そのため、事前に列を指定したくありません。すべてのデータをテキストとして、存在する列にロードしたいと考えています。その後、QCを行います。
列はパイプで区切られており、レコードごとに 200 を超える列があります。列ヘッダーはありませんが、ファイルのヘッダー テキストが 1 行あり、最後にレコード数を示す行が 1 行あります。テキスト ファイルには、1 ~ 5,000 を超えるレコードが含まれる場合があります。レコードは 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
OLEDB バージョンの "HDR=No" にもかかわらず、両方のドライバーは列ヘッダーを無視するためにこれを必要とするようです。
「更新できません。データベースまたはオブジェクトは読み取り専用です」というエラーが表示されます。
助けていただければ幸いです。