Microsoft Access Club >DAO入門講座 >このページ >次頁 < 前項  サイト内検索


レコードセットオブジェクトの作成_スナップショットタイプ : DAO入門講座



Recordsetオブジェクトタイプのうち、dbOpenTableタイプは前回解説しました。今回は、dbOpenSnapshotタイプのレコードセットの作成を取り上げます。

スナップショットタイプのレコードセットの作成

スナップショットタイプのRecordsetオブジェクトは、ローカルテーブルやリンクテーブルだけではなく、クエリやSQLステートメントでも作成が可能です。但し、このタイプで開いたRecordsetオブジェクトは、読み取り専用になりますのでご注意下さい。

利用する場合は、OpenRecordsetメソッドの引数にdbOpenSnapshotを記述します。

テーブルの作成

下記のような、取引先別売上げリストテーブルを作成します。

Subプロシージャの作成

下記のサンプルコードは、カレントデータベースにある取引先別売上げリストテーブルを元にしたSQLステートメントを作成し、dbOpenSnapshotタイプのレコードセツト を開きます。
SQLステートメントでは、新規フィールドを作成し消費税を求めています。最後に、Do Until 〜 Loopを用いて、全フィールドレコードをイミディエイト画面に書き出します。

Sub SnapshotShow()
        
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim MySQL As String
    
    Set db = CurrentDb()
    
    MySQL = "SELECT *, Format(売上金額 * 0.05,'0') AS 税込売上金額 "
    MySQL = MySQL & "FROM 取引先別売上げリスト;" '--- A
    
    Set rs = db.OpenRecordset(MySQL, dbOpenSnapshot) '--- B
        
    Do Until rs.EOF
        Debug.Print rs!ID & " , " & rs!取引先 & " : \" & _
                    rs!売上金額 & " : \" & rs!税込売上金額
        rs.MoveNext
    Loop
    
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
        
End Sub
プロシージャ解説
  1. --- dbOpenSnapshotタイプでRecordsetオブジェクトを開きます。
  2. --- データの取り出しを、For...Nextステートメントを用いて、3レコードに限定します。
補足 - SQLステートメントの記述を分割

SQLステートメントの記述は長くなりがちですから、複数に分割した方が視認性があがります。例えば、

    MySQL = "SELECT *, Format(売上金額 * 0.05,'0') AS 税込売上金額 "
    MySQL = MySQL & "FROM 取引先別売上げリスト;"

のように、1つの長いSQLステートメントを複数行に分割することができます。
2行目の MySQL = MySQL & ・・・・がポイントですね。

アンパサンド(&)

左項目に右項目を代入する基本構文ですが、右のMySQLには上段の "SELECT *, Format(売上金額 * 0.05,'0') AS 税込売上金額 " が既に1行目で代入されています。
アンパサンド(&)は、文字列と文字列を結合する演算子ですから、「MySQL & ・・・・」は、1行目(MySQL)と2行目(・・・・)のSQLを結合します。

このように記述していくと、10数行に渡るSQLステートメントであっても視認性が向上しますね。

実行結果

イミディエイトウィンドウには、下記のようにデータが表示されます。右端の項目が消費税(5%)です。

オプション設定

テーブルタイプのRecordsetオブジェクトでは、下記のオプション設定を行うことでレコードセットの最適化を行うこともできます。このオプション設定は省略可能です。

  • dbForwardOnly

この定数を利用すると、前方スクロールタイプのRecordsetオブジェクトを作成します。これは、カレントレコードがレコードセツトの前方のみ移動できることを意味します。一度、カレントレコードが移動してしまうと二度と元の位置に戻れません。レコードの検索時には予期せぬ動きになるので、設定する際は注意が必要です。なお、速度的には一番高速に動作します。

(例)

     Set rs = db.OpenRecordset(MySQL, dbOpenSnapshot, dbForwardOnly)
  • dbDenyWrite

この定数を設定すると、他のユーザーがユーザーインターフェイス(データベースウィンドウからテーブルデータを操作すること)を介したり、別のレコードセツトを利用して、そのテーブルのレコードを編集、削除、または追加することができなくなります。しかし、既に、dbOpenSnapshotタイプで設定したレコードセットは、読み取り専用になるので余り意味がありませんね。

(例)

     Set rs = db.OpenRecordset(MySQL, dbOpenSnapshot, dbDenyWrite)
  • dbReadOnly

この定数を用いると、他のユーザーはそのテーブルデータを読み取ることしかできなくなります。つまり、Recordsetオブジェクトが閉じられるまで、他のユーザーはレコードの編集ができません。しかし、既に、dbOpenSnapshotタイプで設定したレコードセットは、読み取り専用になるので余り意味がありませんね。

(例)

     Set rs = db.OpenRecordset(MySQL, dbOpenSnapshot, dbReadOnly)

 

2004/05/05

ページの先頭へ 前ページへ戻る

 


レコードセットオブジェクトの作成_スナップショットタイプ : DAO入門講座


 

-Microsoft Access Club-

cPanel あるいは PLESKコントロールパネルをインストールした専用レンタルサーバのディスカウントプランを期間限定で公開しています。
cPanel・PLESKコントロールパネルを備えた専用レンタルサーバ....。