1

テキスト ファイルからアクセス (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" にもかかわらず、両方のドライバーは列ヘッダーを無視するためにこれを必要とするようです。

「更新できません。データベースまたはオブジェクトは読み取り専用です」というエラーが表示されます。

助けていただければ幸いです。

4

1 に答える 1