【VB6・VBAメモ】DAO(Data Access Object)使用サンプル

DAO(Data Access Object)の使い方についてメモしておきます。
ADO(ActiveX Data Object)の使い方メモを更新したついでに。

以下には(私が)良く使うパターンのサンプルコードをメモしておきます。
(細かい説明はまた後日新しい記事を更新する、、、かもしれません)

使用例 DBオープン→レコードセット取得→DBクローズ
基本的なDBオープン・レコードセット取得・DBクローズの一連の流れのサンプルです。
Sub Sample1()
    Dim path As String
    Dim db   As DAO.Database
    Dim rs   As DAO.Recordset
    
    'DBパス'
    path = "D:¥Sample.mdb"
    
    'DBオープン'
    Set db = OpenDatabase(path)

    'レコードセットオープン'
    Set rs = db.OpenRecordset("SampleTable")
    
    'レコード末端までループ'
    Do Until rs.EOF
        'レコードの値を出力'
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
        '次レコードへ移動'
        rs.MoveNext
    Loop

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
    'DBクローズ'
    db.Close: Set db = Nothing
End Sub
Code=100 Name=あいうえお
Code=200 Name=かきくけこ
Code=300 Name=さしすせそ
使用例◆Index-Seek
Seek()で検索する場合のサンプルです。
Sub Sample2(ByRef rDB As DAO.Database)
    Dim rs   As DAO.Recordset

    'レコードセットオープン'
    Set rs = rDB.OpenRecordset("SampleTable")
    
    'インデックスを指定'
    rs.Index = "PrimaryKey"
    
    '検索'
    Call rs.Seek("=", 2)
    If Not rs.NoMatch Then
        'レコードの値を出力'
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
    End If

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
End Sub
Code=200 Name=かきくけこ
使用例:Index-Seek(複合キー)
Seek()に複数のキーを指定する場合のサンプルです。
ADO(ActiveX Data Object)と違い、Array()で渡すのではなく、引数をカンマ区切りで渡します。
Sub Sample3(ByRef rDB As DAO.Database)
    Dim rs   As DAO.Recordset
    
    'レコードセットオープン'
    Set rs = rDB.OpenRecordset("SampleTable")
    
    'インデックスを指定'
    rs.Index = "IndexKeyAndCode"
    
    '検索'
    Call rs.Seek("=", 2, 200)
    If Not rs.NoMatch Then
        'レコードの値を出力'
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
    End If

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
End Sub
Code=200 Name=かきくけこ
使用例ぁFind
FindFirst()で検索する場合のサンプルです。
(FindLast() / FindNext() / FindPrevious()もあります)
WHERE句と同様LIKEと*で部分検索もできます。
※レコードセットオープン時にdbOpenDynasetを指定する必要があります。
Sub Sample4(ByRef rDB As DAO.Database)
    Dim rs   As DAO.Recordset
    
    'レコードセットオープン'
    Set rs = rDB.OpenRecordset("SampleTable", dbOpenDynaset)
    
    '検索'
    Call rs.FindFirst("SampleName LIKE '*きくけ*'")
    If Not rs.EOF Then
        'レコードの値を出力'
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
    End If

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
End Sub
Code=200 Name=かきくけこ
使用例ァД譽魁璽苗媛叩κ儿后削除
レコードの追加・更新・削除のサンプルです。
Sub Sample5(ByRef rDB As DAO.Database)
    Dim rs   As DAO.Recordset
    
    'レコードセットオープン'
    Set rs = rDB.OpenRecordset("SampleTable")
    'インデックスを指定'
    rs.Index = "PrimaryKey"
    
    '編集前のレコードを出力'
    Do Until rs.EOF
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
        rs.MoveNext
    Loop
    
    'レコード追加'
    rs.AddNew
    rs!SampleCode = 500
    rs!SampleName = "レコード追加"
    rs.Update
    
    'レコード更新'
    rs.Seek "=", 2
    rs.Edit
    rs!SampleName = "レコード更新"
    rs.Update
    
    'レコード削除'
    rs.Seek "=", 3
    rs.Delete
    
    '編集後のレコードを出力'
    Debug.Print "↓↓↓"
    rs.MoveFirst
    Do Until rs.EOF
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
        rs.MoveNext
    Loop

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
End Sub
Code=100 Name=あいうえお
Code=200 Name=かきくけこ
Code=300 Name=さしすせそ
↓↓↓
Code=100 Name=あいうえお
Code=200 Name=レコード更新
Code=500 Name=レコード追加
使用例ΑД譽魁璽苗媛叩κ儿后削除(SQL)
SQLでのレコード追加・更新・削除のサンプルです。
Sub Sample6(ByRef rDB As DAO.Database)
    Dim rs   As DAO.Recordset
    Dim sql  As String
    
    'レコードセットオープン'
    Set rs = rDB.OpenRecordset("SampleTable")
    
    '編集前のレコードを出力'
    Do Until rs.EOF
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
        rs.MoveNext
    Loop
    
    'レコード追加'
    sql = "INSERT INTO SampleTable(SampleCode, SampleName) VALUES(500, 'レコード追加')"
    rDB.Execute sql
    
    'レコード更新'
    sql = "UPDATE SampleTable SET SampleName='レコード更新' WHERE SampleKey=2"
    rDB.Execute sql
    
    'レコード削除'
    sql = "DELETE FROM SampleTable WHERE SampleKey=3"
    rDB.Execute sql
    
    '編集後のレコードを出力'
    Debug.Print "↓↓↓"
    rs.MoveFirst
    Do Until rs.EOF
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
        rs.MoveNext
    Loop

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
End Sub
Code=100 Name=あいうえお
Code=200 Name=かきくけこ
Code=300 Name=さしすせそ
↓↓↓
Code=100 Name=あいうえお
Code=200 Name=レコード更新
Code=500 Name=レコード追加


コメント
コメントする








    
この記事のトラックバックURL
トラックバック