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

Openメソッドにまつわる考察 : ADO入門講座



Openメソッドの利用にまつわる問題点を考察の形で取り上げました。サンプルレコードは前項のT_売り上げ管理テーブルを用います。

考察 : 何故、1つのレコードしか表示されないのか? 全レコードを表示したい。

これを解決するには、Loop機能を用いて全てのレコードにアクセスする必要があります。
何故なら、レコードセットは同時に複数のレコードを参照することができないという制約があるからです。

プロシージャの一部変更

以下(赤字)のようにプロシージャを変更します。

Sub ADORecordset修正()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_売り上げ管理", cn, adOpenForwardOnly, adLockReadOnly
    
    Do Until rs.EOF '--- A
        Debug.Print rs!売上日, rs!社員名, rs!性別, rs!売上額, rs!職種
        rs.MoveNext '--- B
    Loop
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
解説
  1. Do Until 〜 LoopとEOFプロパティを組み合わせ、最後のレコードまでカレントレコードを参照し続けます。
  2. MoveNextメソッドを用いて、カレントレコードを移動させます。
実行結果

イミディエイト画面には以下のデータが表示されます。
(ADORecordset修正はイミディエイト画面上でプロシージャを実行するためのプロシージャ名です)

考察 : 先頭にある橘 修平のレコードが表示されるはずではないか?

T_売り上げ管理テーブルを開くと、橘 修平のレコードが先頭に位置しています。しかし、並び替え等レコードセット内で敢えて指示をしていないので、Accessが内部で持つ順位で判断されています。

オートナンバーフィールドの新規設定

試しに、T_売り上げ管理テーブルにオートナンバーフィールドを設定してみます。

ID 売上日 社員名 性別 売上額 職種
1 2004/07/29 草薙 良子 女性 120310 医師
2 2004/08/10 田中 幸恵 女性 7986620 一般職
3 2004/09/30 中村 幸三 男性 477123 技能職
4 2004/04/30 田中 邦子 女性 785100 一般職
5 2004/02/04 柴田 喜一 男性 654100 技能職
6 2004/01/23 橘 修平 男性 52100 一般職
7 2004/02/04 柴田 喜一 男性 7892510 技能職
8 2004/03/25 正道 良一 男性 4875210 薬剤師
9 2004/04/30 田中 邦子 女性 4789210 一般職
解説
  • この草薙 良子のレコードはにオートナンバー値1が割り振られました。
  • よって、このレコードが一番最初に入力されたレコードであることがわかります。 このために、レコードセットのカレントレコードになった訳です。
選択クエリの作成

次に、当初のT_売り上げ管理テーブルで表示される並び順(売上日の昇順)でカレントレコードを橘 修平のレコードにするには、以下のようなQ_売り上げ管理クエリを作成します。

サンプルプロシージャの作成

このクエリを基にしたレコードセットを以下に作成します。

Sub ADORecordset()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "Q_売り上げ管理", cn, adOpenForwardOnly, adLockReadOnly ' --- A
    
    Do Until rs.EOF
        Debug.Print rs!売上日, rs!社員名, rs!性別, rs!売上額, rs!職種
        rs.MoveNext
    Loop
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
解説
  1. レコードセットのソースには、クエリを指定することもできます。
結果

イミディエイト画面には以下のレコードデータが表示されます。これで、橘 修平のレコードが先頭に表示されるようになります。

考察 : SQLを用いてレコードセットを作成する

クエリをレコードセットのソースに用いることができるということは、SQLもソースに利用できるということです。

プロシージャの一部変更

T_売り上げ管理テーブルをSQLを用いて表わしています。

Sub ADORecordset()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim mySQL As String ' --- A
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    mySQL = "SELECT * FROM T_売り上げ管理;" ' --- B

    rs.Open mySQL, cn, adOpenForwardOnly, adLockReadOnly
    
    Do Until rs.EOF
        Debug.Print rs!売上日, rs!社員名, rs!性別, rs!売上額, rs!職種
        rs.MoveNext
    Loop
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
解説
  1. SQLを代入する変数 mySQL を宣言します。データ型はテキスト型です。
  2. 選択クエリを表わすSQLを記述します。
実行結果

イミディエイト画面には以下のデータが表示されます。
(ADORecordsetはイミディエイト画面上でプロシージャを実行するためのプロシージャ名です)

 

2004/09/03

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


Openメソッドにまつわる考察 : ADO入門講座


 

-Microsoft Access Club-

注目のモンスター専用サーバーからお買い得プランまで幅広くそろえています。cPanel、PLESK、WEBMINまでお任せ下さい。
注目のモンスター専用サーバーからお買い得プランまで幅広い。
cPanel、PLESK、WEBMINまでお任せ下さい。