2.3 テーブルやクエリーのオープン
DAOを使って、自分自身(データベース)内にあるテーブルやクエリーをオープン・クローズする方法です。オープン(レコードセットオブジェクトの作成)は、レコードセットオブジェクトの作成が基本ですが、Access97までとAccess2000以降ではほんの少し記述が異なるので注意。

クローズ時はどのバージョンでも同じで、レコードセットオブジェクトの.Closeというメソッドを実行します。
Access2000以降でのオープン、クローズの例
まずは、Access2000以降の例です。例では、DAOを使い「住所録テーブル」というテーブルのレコードセットオブジェクトを作成(テーブルのオープン)し、その後クローズしています。太字と下線の部分がポイントで、詳しくはソースコード以下の説明をどうぞ。

Sub prcRecordsetOpenClose2000()

    'Access VBA Tips
    '2.3 テーブルのオープンとクローズ
    'Access2000以降での手順

    Dim daoDB As DAO.Database
    Dim daoRS As DAO.Recordset

    'データベースのオープン(データベースオブジェクトの作成)
    Set daoDB = CurrentDb

    'テーブルのオープン(レコードセットの作成)
    Set daoRS = daoDB.OpenRecordset("住所録テーブル", dbOpenDynaset)

    'テーブルのクローズ
    daoRS.Close

    'データベースのクローズ
    daoDB.Close

End Sub
 ※Access2000以降の場合。ただし、参照設定が必要です。


■Dim daoRS As DAO.Recordset

DAOレコードセットオブジェクト用の変数の宣言です。例では変数名にdaoRSという名前にしていますが、ここは好きな名前でかまいません。型にはDAO.Recordsetを指定します。


■Set daoRS = daoDB.OpenRecordset(@, A)

DAOを使ってテーブルやクエリーをオープンするときは、データベースオブジェクトの.OpenRecordsetというメソッドを実行します。@のところへ、テーブル名、クエリー名またはSELECT文(SQL)を指定しましょう。なお、例ではテーブル名(住所録テーブル)を指定しています。

 ※OpenRecordsetにSELECT文(SQL)を書いた例
'テーブルのオープン(レコードセットの作成)
Set daoRS = daoDB.OpenRecordset("select * from 住所録テーブル", dbOpenDynaset)

オープンした結果はSet文でレコードセットオブジェクト変数(例ではdaoRS)へ保存し、レコードセットへの各種の操作は変数daoRSのメソッドやプロパティを使って行います。


Aのところにはオープンするときの属性を指定しますが、通常はdbOpenDynasetで良いでしょう。なお、指定できる値は以下の通りです。

dbOpenTable ローカルテーブルのみ扱え、レコードの更新や削除、追加が可能です。ただし、リンクテーブルは使えません。
dbOpenSnapshot 基本はdbOpenTable同じですが、レコードの更新や削除、追加が出来ません。
dbOpenDynaset ローカルテーブル、リンクテーブルの両方を扱えます。もちろん、レコードの追加や更新、削除は可能です。


■daoRS.Close

レコードセットのクローズです。オープンしたら、必ずクローズしましょう。開けたら閉める!ドアが開けっ放しだと…泥棒が入りますよ(笑)
Access97までのオープン、クローズの例
次に、Access97までの例です。例では、「住所録テーブル」というテーブルのレコードセットオブジェクトを作成(テーブルのオープン)し、その後クローズしています。太字と下線の部分がポイントで、詳しくはソースコード以下の説明をどうぞ。

Sub prcRecordsetOpenClose97()

    'Access VBA Tips
    '2.3 テーブルのオープンとクローズ
    'Access97までの手順

    Dim daoDB As Database
    Dim daoRS As Recordset

    'データベースのオープン(データベースオブジェクトの作成)
    Set daoDB = DBEngine.Workspaces(0).Databases(0)

    'テーブルのオープン(レコードセットの作成)
    Set daoRS = daoDB.OpenRecordset("住所録テーブル", DB_OPEN_DYNASET)

    'テーブルのクローズ
    daoRS.Close

    'データベースのクローズ
    daoDB.Close

End Sub
 ※Access97までの場合。


■Dim daoRS As Recordset

レコードセットオブジェクト用の変数の宣言です。例では変数名にdaoRSという名前にしていますが、ここは好きな名前でかまいません。型にはRecordsetを指定します。


■Set daoRS = daoDB.OpenRecordset(@, A)

テーブルやクエリーをオープンするときは、データベースオブジェクトの.OpenRecordsetというメソッドを実行します。@のところへ、テーブル名、クエリー名またはSELECT文(SQL※)を指定しましょう。なお、例ではテーブル名(住所録テーブル)を指定しています。

 ※OpenRecordsetにSELECT文(SQL)を書いた例
'テーブルのオープン(レコードセットの作成)
Set daoRS = daoDB.OpenRecordset("select * from 住所録テーブル", DB_OPEN_DYNASET)

オープンした結果はSet文でレコードセットオブジェクト変数(例ではdaoRS)へ保存し、レコードセットへの各種の操作は変数daoRSのメソッドやプロパティを使って行います。


Aのところにはオープンするときの属性を指定しますが、通常はDB_OPEN_DYNASETで良いでしょう。なお、指定できる内容は以下の通りです。

DB_OPEN_TABLE ローカルテーブルのみ扱え、レコードの更新や削除、追加が可能です。ただし、リンクテーブルは使えません。
DB_OPEN_SNAPSHOT 基本はDB_OPEN_TABLE同じですが、レコードの更新や削除、追加が出来ません。
DB_OPEN_DYNASET ローカルテーブル、リンクテーブルの両方を扱えます。もちろん、レコードの追加や更新、削除は可能です。


■daoRS.Close

レコードセットのクローズです。オープンしたら、必ずクローズしましょう。開けたら閉める!ドアが開けっ放しだと…泥棒が入りますよ(笑)
Copyright(C) 1999-2006 結城圭介。 All rights reserved