DAOを使用してテキストファイルをデータベースのようにSQLを使って読み込むことが出来ます。
サンプルで使用するテキストファイルには下図のようにデータが格納されています。
一行目(行見出し)がフィールド名として扱われます。
※サンプル中で使用されているMakeFileNameとStripFileNameに関しては
パス名からファイル名取得
パス名からファイル名を除く
を参照して下さい。
Private SubcmdHDRYES_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)