ADO 1


ADOを使う

ADO(Active Data Object)はAccess2000で標準に使用されるオブジェクトモデルです。DAOに較べると細かい設定できる反面、DAOより構文が長くなります。
ADOを使用するにはVisual Basic Editorから[ツール]→[参照設定]で Microsoft ActiveX Data Objects 2.1 Library を選択します。DAOと併用する場合はDAOより優先順位を上にしなければなりません。

ADOを使うには以下のような構文になります。標準モジュール内などに記述します。

Sub SetDB()
Dim cn As New ADODB.Connection
Dim cnStr As String
Dim rs As ADODB.Recordset

	cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DB\DB.mdb"
	'データベースに接続
	cn.Open = cnStr	
	'D:\DB\DB.mdbを開く
	
	rs.Open "tbl_Sample"
	'tbl_Sampleテーブルを開く
	
	rs.Close 'レコードセットを閉じる
	cn.Close '接続を閉じる
	
End Sub

OpenRecordsetの構文は以下の記述から成り立っています。

Set rs = db.OpenRecordset(Source,Type,Option,Lock) Type,Option,Lockは省略可能

Type
dbOpenTable テーブルタイプのオブジェクトを開く
dbOpenDynamic 動的タイプのオブジェクトを開く
dbOpenDynaset ダイナセットタイプのオブジェクトを開く
dbOpenSnapshot スナップショットタイプのオブジェクトを開く
dbOpenForwardOnly 前方スクロールタイプのオブジェクトを開く
Option
dbAppendOnly データの追加のみ
dbReadOnly  読み取り専用
Lock
dbReadOnly  読み取り専用
dbPessimistic 排他ロックする

レコードの移動

フォームであればコマンドボタンウィザードによって (DoCmd.GoToRecord , , acFirst)などと簡単に移動できますが、レコードセット内で移動するには Move を使います。

Public Sub Move()
Dim rs As New ADODB.Recordset
    
    rs.Open "tbl", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    rs.MoveNext  '次のレコードへ移動
    MsgBox "次のレコードへ移動しました"


End Sub

MoveNext・・・・・・・・・・次のレコードへ移動
MovePrevious・・・・・・・一つ前のレコードへ移動
MoveFirst・・・・・・・・・・先頭ののレコードへ移動
MoveLast・・・・・・・・・・最後ののレコードへ移動
Move n ・・・・・・・・・・・ n=数字 指定数ののレコードへ移動

連番の伝票番号などを利用してレコードを移動することもできます。

Public Sub MoveNo()
Dim rs As New ADODB.Recordset
Dim RecNo As Variant  '伝票番号の指定
    
    rs.Open "tbl_伝票", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    RecNo = InputBox("伝票番号を指定してください")
    
    rs.Move RecNo -1,adBookmarkFirst
    
        
    RecData = "伝票番号" & vbTab _
    		& rs("伝票番号") _
    		& vbNewLine & "入力日:" & vbTab _
    		& rs("伝票番号")
    		
    MsgBox RecData 'データの表示

End Sub

レコードの追加・削除

レコードを追加するには AddNew 後、 Update を行います。

Public Sub DataAdd()
   Dim rs As New ADODB.Recordset

    rs.Open "tbl_伝票", Application.CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    rs.AddNew
        rs!ID = "9999"
        rs!入力日 = Date
        rs!金額 = 200
        rs!品名 = "その他" 'レコードを追加する
        
    rs.Update '更新する
    rs.Close
End Sub

レコードを削除するには Delete 後、 Update を行います。

Public Sub DataDel()
   Dim rs As New ADODB.Recordset

    rs.Open "tbl_伝票", Application.CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    rs.MoveLast '最後のレコードへ移動する
    
    rs.Delete 'レコードを削除する
    
    rs.Update '更新する
    rs.Close
End Sub

レコードを検索する

レコードセット内のデータを Find を利用して検索します。

Public Sub DataFind()
   Dim rs As New ADODB.Recordset
   Dim FindKey As String
   Dim TmpName As Variant
   Dim strData As Variant
   
    rs.Open "tbl_顧客リスト", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    FindKey = InputBox("検索するフリガナを入力してください")
    
    rs.Find "[フリガナ]='" & FindKey & "'"
    
    For Each TmpName In rs.Fields
    strData = strData & TmpName.Name & vbTab & TmpName.Value & vbNewLine
    Next
    MsgBox strData
End Sub

フィルタの使用

レコードセットにフィルタを使用するには Filter を利用します。

Public Sub DataFilter()
   Dim rs As New ADODB.Recordset
   Dim TmpName As Variant
   Dim strData As Variant
   
    rs.Open "tbl_顧客リスト", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    rs.Filter = "生年月日 > 1980/12/31"  
    
    For Each TmpName In rs.Fields
    strData = strData & TmpName.Name & vbTab & TmpName.Value & vbNewLine
    Next
    MsgBox strData
End Sub