Visual Basic Tips


テキストファイルのSQLを使ったアクセス(DAO)


DAOを使用してテキストファイルをデータベースのようにSQLを使って読み込むことが出来ます。



サンプルで使用するテキストファイルには下図のようにデータが格納されています。
一行目(行見出し)がフィールド名として扱われます。





※サンプル中で使用されているMakeFileNameとStripFileNameに関しては
  パス名からファイル名取得
  パス名からファイル名を除く
  を参照して下さい。 

Private Sub cmdHDRYES_Click()
  
Dim ws As DAO.Workspace
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim strPath As String
  Dim strSQL As String

  strPath =
App.Path & "\hoge.csv"

  
Set ws = DBEngine.Workspaces(0)
  
Set db = OpenDatabase(StripFileName(strPath), False, False, "TEXT;HDR=YES;")

  strSQL = "Select * FROM " & MakeFilename(strPath)

  
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

  List1.Clear
  
Do Until rs.EOF
    List1.AddItem rs("見出し1").Value & vbTab & _
    rs("0").Value & vbTab & _
    rs("見出し3").Value
    rs.MoveNext
  
Loop

  rs.Close
  db.Close
  ws.Close
End Sub

Private Sub cmdHDRNO_Click()
  
Dim ws As DAO.Workspace
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim strPath As String
  Dim strSQL As String

  strPath =
App.Path & "\hoge.csv"

  
Set ws = DBEngine.Workspaces(0)
  
Set db = OpenDatabase(StripFileName(strPath), False, False, "TEXT;HDR=NO;")

  strSQL = "Select * FROM " & MakeFilename(strPath)

  
'下記のようにフィールドを指定してすると、私の環境[NT4.0+VB6.0(SP5) or w2k+VB6.0(SP5)]では
  '「選択されたCollatingSequenceはOSではサポートされていません」というエラーになります。
  'ナンデダロ

  
'strSQL = "Select F1,F2,F3 FROM " & MakeFilename(strPath)

  
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

  List2.Clear
  
Do Until rs.EOF
    
'F3の列(列中に日本語と数値の混在)を参照しようとすると
    '「数値フィールドがオーバーフローしました」というエラーになり指定できません。
    'どうやらフィールドの型がLongになってしまい、そこへ見出しの日本語が格納されるため
    'エラーになっているようです。

    List2.AddItem rs("F1").Value & vbTab & _
    rs("F2").Value
    
'Debug.Print rs("F3").Value
    Debug.Print FieldType(rs("F3").Type)
    rs.MoveNext
  
Loop

  rs.Close
  db.Close
  ws.Close

End Sub

Download vbtips119.lzh 2KB (VB6.0)