Visual Basic Tips


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


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



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




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


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

  strXLSName =
App.Path & "\hoge.xls"

  
Set ws = DBEngine.Workspaces(0)
  
Set db = ws.OpenDatabase(strXLSName, False, False, "EXCEL 8.0;HDR=YES;")

  strSQL = "Select * From [Sheet1$] "
  
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

  List1.Clear
  
Do Until rs.EOF
    
'rs("0").value を指定すると「このコレクションには項目がありません」というエラーになり指定できません。
    '数値の見出しは指定できないみたいです。

    List1.AddItem rs("見出し1").Value & vbTab & _
    rs(1).Value & vbTab & _
    rs("見出し3").Value
    
'Debug.Print rs("0").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 strXLSName As String
  Dim strSQL As String

  strXLSName =
App.Path & "\hoge.xls"

  
Set ws = DBEngine.Workspaces(0)
  
Set db = ws.OpenDatabase(strXLSName, False, False, "EXCEL 8.0;HDR=NO;")

  strSQL = "Select * From [Sheet1$] "

  
'下記のようにフィールドを指定してIDEから実行すると、私の環境[NT4.0+VB6.0(SP5) or w2k+VB6.0(SP5)]では
  '「選択されたCollatingSequenceはOSではサポートされていません」というエラーになります。
  'このエラーは最初の1回だけで、以降IDEを立ち上げ直すまでこのエラーは出ません。無気味だ…
  'exeファイルにするとこのエラーは起きません。
  'strSQL = "Select F1,F2,F3 From [Sheet1$] "


  
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

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

    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 vbtips120.lzh 2KB (VB6.0)