S-JIS[2002-07-20/2005-03-15]

Recordsetについて

Access2000のVisualBasicのRecordset、従来のRecordsetと名前は同じなのに 使い方は全く変わりました。 ヘルプには従来のメソッドと新しいメソッドの両方の説明が載っているため、 紛らわしいことこの上なしです。 従来型のRecordsetだけ使いたい場合は、こちらを参照して下さい。

SELECT レコードの取得方法
AddNew レコードの追加方法
UPDATE レコードの更新方法
Find レコードの検索方法

レコードの取得方法

SQLを実行して値を取得したい場合は、以下のようにします。

    Dim sql As String
    sql = "select * from [テーブル] " & _
          "where [キー] = 1"

    Dim rcd As New ADODB.Recordset
    rcd.Open sql, CurrentProject.Connection
    MsgBox rcd![項目1].Value
    rcd.Close
CurrentProject.Connectionは以前のCurrentDBに相当するもので、 「現在開いているmdbファイルが対象」という考えでいいと思います。

結果が複数レコード有る場合は、以下のようにして全データを処理します。

    Dim sql As String
    sql = "select * from [テーブル] " & _
          "where [キー] <= 2 "

    dim rcd as new adodb.recordset
    rcd.open sql, currentproject.connection
    Do Until rcd.EOF
        MsgBox rcd![項目1].Value
        rcd.MoveNext
    Loop
    rcd.Close

レコードの追加方法

テーブルにレコードを追加するには、以下のようにします。

    Dim rcd As New ADODB.Recordset
    rcd.Open "テーブル", CurrentProject.Connection, adOpenDynamic, adLockPessimistic
    rcd.AddNew
    rcd![キー].Value = 4
    rcd![項目1].Value = "ほげ〜"
    rcd.Update
    rcd.Close

Openの第1引数にテーブル名を指定し、AddNewで新しいレコードを作成して 各項目のデータを設定後、Updateで登録します。


レコードの更新方法

テーブルのレコードを更新するには、以下のようにします。

    Dim rcd As New ADODB.Recordset
    rcd.Open "テーブル", CurrentProject.Connection, adOpenDynamic, adLockPessimistic
    Do Until rcd.EOF
        If rcd![キー] <= 2 then
            rcd![項目2].value = rcd![項目2].Value + 1
            rcd.Update
        End If
        rcd.MoveNext
    Loop
    rcd.Close

以前は 項目に値を設定する前にEditを実行しておく必要があったと思いますが、 ADOではその必要はなくなりました。

ちなみに、SQLのSELECTを使って書くことも出来ます。

    Dim rcd As New ADODB.Recordset
    rcd.Open "select * from [テーブル] where [キー] <= 2", _
             CurrentProject.Connection, adOpenDynamic, adLockPessimistic
    Do Until rcd.EOF
        rcd![項目2].Value = rcd![項目2].Value + 1
        rcd.Update
        rcd.MoveNext
    Loop
    rcd.Close

しかし、よほど複雑な演算やSQLでは書けないこと(例:前のレコードの値を使う)でない限り、 SQLのUPDATEを使う方が高速です。

    Dim rcd As New ADODB.Recordset
    rcd.Open "update [テーブル] set [項目2] = [項目2] + 1 where [キー] <= 2", _
             CurrentProject.Connection

この場合は、rcd.Closeは不要です。


レコードの検索方法

以前のRecordsetにはFindFirstを使って検索をすることが出来たのですが、 ADOではFindというものを使います。

    Dim rcd As New ADODB.Recordset
    rcd.Open "テーブル", CurrentProject.Connection, adOpenStatic, adLockReadOnly
    rcd.Find "[キー] = 1"
    MsgBox rcd![項目1]
    rcd.Close

しかし条件に一致するものが複数ある場合に、以前はFindNextを使って全て扱えたのですが Findにはそれに相当するものが無いようです。

検索には、他にSeekというものもあるんですが、いまいち使い方が分かりません(爆)


MS-Accessへ戻る / 技術メモへ戻る
メールの送信先:ひしだま