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 SubOpenRecordsetの構文は以下の記述から成り立っています。
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 SubMoveNext・・・・・・・・・・次のレコードへ移動
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