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

ADO(ActiveX Data Object)の使い方をよく忘れるのでメモしておきます。
長く使ってますが、接続文字列や必要な引数がなかなか覚えられません;
DAO(Data Access Object)はわかりやすいんですけどねえ。。。

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

使用例 DBオープン→レコードセット取得→DBクローズ
基本的なDBオープン・レコードセット取得・DBクローズの一連の流れのサンプルです。
Sub Sample1()
    Dim path As String
    Dim cs   As String
    Dim cn   As ADODB.Connection
    Dim rs   As ADODB.Recordset
    
    'DBパス'
    path = "D:¥Sample.mdb"
    '接続文字列'
    cs = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path
    
    'DB接続'
    Set cn = New ADODB.Connection
    cn.ConnectionString = cs
    Call cn.Open

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

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
    'DB接続解除'
    cn.Close: Set cn = Nothing
End Sub
Code=100 Name=あいうえお
Code=200 Name=かきくけこ
Code=300 Name=さしすせそ
使用例◆DBオープン→レコードセット取得→DBクローズ(省略版)
使用例,汎韻呼虻遒如⊇萢の記述を省略した場合のサンプルです。(ささやかですが)
・ConnectionとRecordsetは変数定義時にNewでインスタンス生成してもOK
・ConnectionはOpen()でConnectionStringの指定が可能
Sub Sample2()
    Dim path As String
    Dim cs   As String
    Dim cn   As New ADODB.Connection
    Dim rs   As New ADODB.Recordset
    
    'DBパス'
    path = "D:¥Sample.mdb"
    '接続文字列'
    cs = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path
    
    'DB接続'
    Call cn.Open(cs)

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

    'レコードセットクローズ'
    rs.Close: Set rs = Nothing
    'DB接続解除'
    cn.Close: Set cn = Nothing
End Sub
Code=100 Name=あいうえお
Code=200 Name=かきくけこ
Code=300 Name=さしすせそ
使用例:Index-Seek
Seek()で検索する場合のサンプルです。
レコードセットのオープン時にadCmdTableDirectを指定する必要があります。
Sub Sample3(ByRef rCN As ADODB.Connection)
    Dim rs   As New ADODB.Recordset

    'レコードセットオープン'
    Call rs.Open("SampleTable", rCN, adOpenKeyset, adLockOptimistic, adCmdTableDirect)
    
    'インデックスを指定'
    rs.Index = "PrimaryKey"
    
    '検索'
    Call rs.Seek(2)
    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=かきくけこ
使用例ぁIndex-Seek(複合キー)
Seek()に複数のキーを指定する場合のサンプルです。
Array()を使用します
Sub Sample4(ByRef rCN As ADODB.Connection)
    Dim rs   As New ADODB.Recordset
    
    'レコードセットオープン'
    Call rs.Open("SampleTable", rCN, adOpenKeyset, adLockOptimistic, adCmdTableDirect)
    
    'インデックスを指定'
    rs.Index = "IndexKeyAndCode"
    
    '検索'
    Call rs.Seek(Array(2, 200))
    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=かきくけこ
使用例ァFind
Find()で検索する場合のサンプルです。
WHERE句と同様LIKEと*で部分検索もできます。
Sub Sample5(ByRef rCN As ADODB.Connection)
    Dim rs   As New ADODB.Recordset
    
    'レコードセットオープン'
    Call rs.Open("SampleTable", rCN, adOpenKeyset)
    
    '検索'
    Call rs.Find("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 Sample6(ByRef rCN As ADODB.Connection)
    Dim rs   As New ADODB.Recordset
    
    'レコードセットオープン'
    Call rs.Open("SampleTable", rCN, adOpenKeyset, adLockOptimistic, adCmdTableDirect)
    'インデックスを指定'
    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!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 Sample7(ByRef rCN As ADODB.Connection)
    Dim rs   As New ADODB.Recordset
    Dim sql  As String
    
    'レコードセットオープン'
    Call rs.Open("SampleTable", rCN)
    
    '編集前のレコードを出力'
    Do Until rs.EOF
        Debug.Print "Code=" & rs!SampleCode & " Name=" & rs!SampleName
        rs.MoveNext
    Loop
    
    'レコード追加'
    sql = "INSERT INTO SampleTable(SampleCode, SampleName) VALUES(500, 'レコード追加')"
    rCN.Execute sql
    
    'レコード更新'
    sql = "UPDATE SampleTable SET SampleName='レコード更新' WHERE SampleKey=2"
    rCN.Execute sql
    
    'レコード削除'
    sql = "DELETE FROM SampleTable WHERE SampleKey=3"
    rCN.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
トラックバック