DAO での新機能

DAO 3.6

DAO 3.6 は、Jet 4.0 データベース エンジンを使用するために更新されました。これにより、Unicode に対するすべてのインターフェイスが使用できるようになりました。データは、ANSI 形式ではなく、世界各国の文字に対応できる Unicode 形式で提供されます。ほかに新しく実装された機能はありません。

DBase および Paradox ISAM をサポートするには、Borland データベース エンジンをインストールする必要があります。さらに、Jet 4.0 では Visual FoxPro ISAM が提供されないため、代わりに Visual FoxPro ODBC Driver を使用する必要があります。これらの変更は、DAO 3.6 を使用するようにアプリケーションを明示的に更新する場合にのみ影響し、3.5x のアプリケーションには影響を与えません。DAO 3.5x と DAO 3.6 は、同一のコンピュータ上に共存できるためです。

DAO 3.5

DAO 3.5 では、"ODBCDirect" と呼ばれる新しいクライアント/サーバー接続モードを導入しました。ODBCDirect は、Jet データベース エンジンをメモリにロードすることなく ODBC データ ソースに直接に接続を設定するので、ODBC の固有の機能が必要な場合などに有効です。

Jet データベースにも新しいインターフェイスが用意されており、そこで、Jet データベース エンジンの新しい部分レプリケーションの機能が提供されます。

メモ DAO クエリーは、ODBCDirect を経由して、さまざまなデータベース サーバーに渡されますが、サーバーによって、SQL の文法がわずかに異なることがあります。このため、Jet SQL では、状況依存ヘルプが使用できなくなりました。ただし、Jet SQL のオンライン ヘルプは、ヘルプ メニューから参照できます。ODBCDirect 接続や Jet 接続型クライアント/サーバー アプリケーションでパススルー クエリーを使用する場合には、使用しているデータベース サーバーの SQL 文法について、適切なリファレンス マニュアルを必ず確認してください。

ODBCDirect の新しい DAO 3.5 インターフェイス

  • Connection オブジェクト – ODBC データベースへの接続

  • Cancel メソッド (Connection、QueryDef、Recordset オブジェクトで使用可) - 非同期操作の実行をキャンセルします。

  • NextRecordset メソッド (Recordset オブジェクトで使用可) - OpenRecordset の呼び出しの結果、複数のレコード セットがある場合、そのレコード セットを返すクエリーから、次回のレコード セットを取得します。また、別のレコード セットの取得がうまく行われたどうかを示します。

  • OpenConnection メソッド (Workspace オブジェクトで使用可) - ODBC データ ソースで Connection オブジェクトを開きます。

  • BatchCollisionCount プロパティ (Recordset オブジェクトで使用可) - 最新のバッチ更新で完了しなかったレコードの数を返します。

  • BatchCollisions プロパティ (Recordset オブジェクトで使用可) - 最新のバッチ更新処理で矛盾が生じた行を示すブックマークの配列を返します。

  • BatchSize プロパティ (Recordset オブジェクトで使用可) - 各バッチ処理によって、サーバーに返送されたステートメント数を設定または返します。

  • Connection プロパティ (Database、Recordset オブジェクトで使用可) - Database オブジェクトに対応している Connection オブジェクト、または Recordset オブジェクトを所有している Connection オブジェクトを返します。

  • Database プロパティ (Connection オブジェクトで使用可) - Connection オブジェクトに対応する Database オブジェクト名を返します。

  • DefaultCursorDriver プロパティ (Workspace オブジェクトで使用可) - ODBCDirect の Recordset オブジェクトで使用される、カーソル ドライバの種類を設定または返します。

  • DefaultType プロパティ (DBEngine オブジェクトで使用可) - 次回の CreateWorkspace メソッドの呼び出しで、Jet ワークスペースまたは ODBCDirect ワークスペースのどちらを作成するかを示します。

  • Direction プロパティ (Parameter オブジェクトで使用可) - Parameter オブジェクトが、入力パラメータ、出力パラメータ、およびその両方のパラメータを表すのか、またはパラメータがストアド プロシージャからの戻り値を表すのかを示します。

  • MaxRecords プロパティ (QueryDef オブジェクトで使用可) - クエリーから返されるレコードの最大数を設定または返します。

  • OriginalValue プロパティ (Field オブジェクトで使用可) - 最新のバッチ更新が行われたときに存在したデータベースの Field オブジェクトの値を返します。

  • Prepare プロパティ (QueryDef オブジェクトで使用可) - クエリーの実行に優先させて ODBC SQLPrepare 関数を持つ一時的なストアド プロシージャとして、サーバーにクエリーを準備するべきか、単に ODBC SQLExecDirect 関数を使用して実行するべきかを示す値を返します。

  • RecordStatus プロパティ (Recordset オブジェクトで使用可) - カレント レコードがバッチ更新の一部の場合には、そのカレント レコードの更新状況を示す値を返します。

  • StillExecuting プロパティ (Connection、QueryDef および Recordset オブジェクトで使用可) - 非同期の操作の実行が終了しているかどうかを示す値を返します。

  • UpdateOptions プロパティ (Recordset オブジェクトで使用可) - バッチ更新を行っている間に各レコード用に、WHERE 句がどう構成されているか、およびその更新をどう実行すべきかを示す値を返します。

  • VisibleValue プロパティ (Recordset オブジェクトで使用可) - バッチ更新の競合で決定した OriginalValue プロパティよりも新しいデータベースの値を返します。

ODBCDirect を使用した新機能

サーバー接続

ODBCDirect オブジェクトでのみ使用することができます。新しい Connection オブジェクトは、サーバー名、データ ソース名などの、ODBC データ ソースへの接続に関する情報を含んでいます。Connection オブジェクトは Database オブジェクトに似ているので、ODBC データ ソースで Database オブジェクトを開いたことがある場合には、Connection オブジェクトが Database オブジェクトに類似していることに気づくでしょう。実際には、Connection オブジェクトと Database オブジェクトは同じオブジェクトに対して、異なる参照を表します。そして、これらのオブジェクトの新しいプロパティを使用して、ほかの対応するオブジェクトへの参照を取得できます。これにより ODBCDirect を使用する代わりに、Jet ワークスペースを使用する既存の ODBC クライアント アプリケーションを変換する作業を単純化することができます。

バッチ更新

新しいバッチ更新カーソルは、サーバー上でロックがかかっていないカーソルや、同時に 1 つのレコードに複数の更新リクエストを発行していないカーソルを使用する作業を必要とするクライアント アプリケーションで利用することができます。その代わりに、クライアントは、ローカル バッファ (または "バッチ") の多くのレコードに関する更新情報を格納し、バッチ更新を開始します。また、このバッチ更新を行うことで、"データのパイプライン処理" が可能になり、ここで、クライアントはサーバーへの接続を断ち、異なるサーバー上でもう一度接続を行います。

Recordset オブジェクトを開く場合と、Recordset オブジェクトからのバッチ更新をサーバーに送り返す場合の間には時間のずれが生じるため、変更をサーバーに送信される前に、ほかのユーザーが元のデータを変更することができます。このため、ほかのユーザーが行った変更との間に "矛盾" が生じることになります。いくつかの新しい機能でどこで矛盾が発生したか、次に来るバッチ更新についてを決定し、オプションでそれらの問題を解決できます。

非同期メソッドの実行

Execute、MoveLast、OpenConnection および OpenRecordset メソッドの特色は、オプションの dbRunAsync です。このオプションを使用すると、クライアントのアプリケーションは、メソッドが実行されている間に、フォームをロードするなどのほかのタスクを行うことができます。そして、タスクが完了しているかどうか、および非同期のタスクを終わらせているかどうかを確認することができます。

ODBC カーソルのクライアント サポート

4 つの異なる Recordset の種類は、次の ODBC カーソルの種類をサポートしています。

ODBC カーソル | Recordset の種類
動的 | dbOpenDynamic (DAO 3.5 の新機能)
ダイナセット | dbOpenDynaset
前方スクロール | dbOpenForwardOnly (DAO 3.5 の新機能)
静的 | dbOpenSnapshot

Jet データベース エンジンの新しい DAO 3.5 のインターフェイス

  • PopulatePartial メソッド (Database オブジェクトで使用可) - 部分レプリカで行われたすべての変更についてフル レプリカと同期をとり、部分レプリカのすべてのレコードを削除します。続いて、カレントのレプリカ フィルタに基づいている部分レプリカを再配置します。

  • SetOption メソッド (DBEngine オブジェクトで使用可) - DAO のカレント インスタンスの持続時間のため、Jet データベース エンジンのレジストリ値を上書きします。

  • FieldSize プロパティ (Field オブジェクトで使用可) - FieldSize メソッドを置き換えます。構文的には、これらの使い方は同じであるため、既存のコードに対して変更を加える必要はありません。

  • MaxRecords プロパティ (QueryDef オブジェクトで使用可) - クエリーから返されるレコードの最大数を設定または返します。

  • ReplicaFilter プロパティ (TableDef オブジェクトで使用可) - どのレコードのサブセットがレプリカからテーブルにレプリケートされたかを示す値を返します。

  • PartialReplica プロパティ (Relation オブジェクトで使用可) - フル レプリカから部分レプリカを作成する場合に、Relation オブジェクトが考慮されるべきかどうかを示します。

Jet データベース エンジンを使用した新機能

部分レプリケーション

Jet データベース エンジン 3.5 を使用して、テーブル全体の代わりに (列ではなく、行の制限のみが使用可)、テーブルの一部をレプリケートすることができます。部分レプリカで使用されるフィルタには、ブール型とリレーション型という 2 つの種類があります。ブール型のフィルタは、レプリケートされているテーブルで行を制限する基準に合致した行のみを選択します。DAO は、TableDef オブジェクトの ReplicaFilter プロパティを持つフィルタを表しています。リレーションシップ型フィルタは、レプリケートされたテーブルの行を制限する、部分的にレプリケートされたテーブル間のリレーションシップを実行します。DAO を使用して、Relation オブジェクトに PartialReplica プロパティを設定して、部分レプリケーションで Relation オブジェクトを使用することができます。

新しい Recordset の種類

DAO 3.5 では、dbOpenForwardOnly は、OpenRecordset メソッドで使用される新しい種類の引数 type です。この新しい Recordset のタイプは、引数 dbForwardOnly を使用して、DAO 3.0 のスナップショット タイプの Recordset を開いた場合と同じ働きをします。

実行時レジストリの上書き

新しい SetOption メソッドを使用すると、Jet データベース エンジンのレジストリの設定を実行時に上書きすることができます。また、このメソッドを使用することで、タイム アウトなどの Jet データベース エンジンのクエリーの処理を調整することができます。


DAO の概要

DAO は、プログラミング言語を使用して、ローカル データベースまたはリモート データベースでのデータのアクセスと操作を可能にします。また、データベース、データベースのオブジェクト、およびデータベースの構造を管理することもできます。

オブジェクト モデル

DAO は 2 つの異なるデータベース環境、または "ワークスペース" をサポートしています。

  • Jet ワークスペースを使用すると、Jet データベース、Jet 接続型 ODBC データ ソース、および Paradox または Lotus 1-2-3 のようなほかの形式の組み込み可能な ISAM データ ソースにアクセスすることができます。

  • ODBCDirect ワークスペースを使用すると、Jet データベース エンジンをロードすることなく、ODBC を経由してデータベース サーバーにアクセスすることができます。

Jet データベース (.mdb ファイル) またはほかのデスクトップの ISAM データベースを開く場合、または異なるデータベース形式のデータを結合するなどの Jet データベース エンジンの特有な機能を利用する場合などに Jet ワークスペースを使用します。

Microsoft SQL Server などの基幹のバックエンド サーバーに対して、クエリーまたはストアド プロシージャを実行することのみが必要な場合や、バッチ更新または非同期クエリーの実行など、ODBC の固有の機能が必要な場合などに、ODBCDirect ワークスペースを使用して、それらの作業を代わりに行うことができます。

DAO オブジェクト

DAO には 17 の異なる種類のオブジェクトがあります。すべてのオブジェクトの種類に対して、新しい DAO オブジェクト変数を宣言することができます。

たとえば、次の例では、Visual Basic for Applications (VBA) のコードで Database オブジェクト、ダイナセット タイプの Recordset オブジェクト、および Field オブジェクトのそれぞれに対してオブジェクト変数を作成しています。

Dim dbsExample As Database
Dim rstExample As Recordset
Dim fldExample As Field

Set dbsExample = OpenDatabase("Biblio.mdb")
Set rstExample = dbsExample.OpenRecordset("Authors", _     dbOpenDynaset)
Set fldExample = rstExample.Fields("Au_ID")

DAO コレクション

DBEngine 以外の DAO オブジェクトは、各種類ごとにそのオブジェクトに対応するコレクションを持っています。コレクションは、その種類の既存のすべてのオブジェクトを含んでいます。たとえば、Recordsets コレクションは、すべての開かれた Recordset オブジェクトを含んでいます。各コレクションは、DAO の階層の 1 つ上のレベルにあるほかのオブジェクトにより "所有" されています。Database オブジェクトは Recordsets コレクションを "所有" しています。Connection オブジェクトと Error オブジェクト以外のそれぞれの DAO オブジェクトは Properties コレクションを持っています。

ほとんどの DAO オブジェクトは、既定のコレクションと既定のプロパティを持ちます。たとえば、Recordset オブジェクトの既定のコレクションは Fields コレクションで、Field オブジェクトの既定のプロパティは Value プロパティです。これらの既定のものを効果的に使用して、コードを簡単にすることができます。たとえば、次のコードは、カレント レコードの PublD の値を設定します。

rstExample!PubID=99

DBEngine オブジェクトと Workspace オブジェクト

すべての DAO オブジェクトは、DBEngine オブジェクトから派生しています。DBEngine オブジェクトで DefaultType プロパティを設定することで、続く CreateWorkspace メソッドの呼び出しで作成されるワークスペースの種類 (Jet と ODBCDirect) を決定することができます。また、CreateWorkspace メソッドに引数 type をつけることで、このプロパティにかかわらずにワークスペースの種類を指定できます。アプリケーションがワークスペースを作成する場合には、適切なライブラリ (Jet データベース エンジンまたは ODBC) がメモリに読み込まれます。

必要に応じて追加の Workspace オブジェクトを開くことができます。各 Workspace オブジェクトはそれに関連するユーザー ID とパスワードを持っています。

Jet ワークスペースを使用する

データベースを開く

データベースを開くには、単に既存の Database オブジェクトを開くか、新しいデータベースを作成します。Database オブジェクトは、Jet データベース (.mdb ファイル)、Paradox のような ISAM データベース、および Jet データベース エンジン経由で接続されている ODBC データベース (Jet 接続型 ODBC データベース) を表します。

データ定義言語

オブジェクト変数とそのほかの DDL の機能を使用して、データベースの構造を変更することができます。たとえば、以下のコードを使用して、既存のテーブルに新しい Field オブジェクトを追加することができます。

Dim dbs As Database, tdf As TableDef, fld As Field
' データベースを開きます。
Set dbs = OpenDatabase("Biblio.mdb")
' TableDef を開きます。
Set tdf = dbs.TableDefs("Authors")
' 新しくフィールドを作成します。
Set fld = tdf.CreateField("Address", dbText, 20)
' TableDef Fields コレクションにフィールドを追加します。
tdf.Fields.Append fld

このコードは、Field オブジェクトに対して新しいオブジェクトを作成し、Append メソッドで TableDef オブジェクトに追加します。TableDef オブジェクトはテーブルの定義を含んでいるので、テーブルは入力したデータに基づいて Address という名前が付いています。同様にして、新しいテーブルとインデックスを作成することができます。

データ操作

DAO オブジェクトは、優れたデータ操作ツールのセットを提供します。DAO オブジェクトを使用して、Recordset オブジェクトを作成し、効率よくデータベースに問い合わせをしたり、問い合わせ結果のレコード セットを操作することができます。OpenRecordset メソッドは、データ ソース引数として SQL 文字列、または QueryDef (ストアド クエリー) 名を受け取ります。また、QueryDef オブジェクトや TableDef オブジェクトから、そのオブジェクトをデータ ソースとして使用して開くこともできます。結果の Recordset オブジェクトでは、データをブラウズして修正するために使用することが可能な多くのプロパティとメソッドがあります。

Recordset オブジェクトは、テーブル タイプ、ダイナセット タイプ、前方スクロール タイプ、スナップショット タイプの 4 つの異なる種類で使用することができます。

トランザクション

Workspace オブジェクトに対して開かれたすべての Database オブジェクトは、共通のトランザクション処理の適用範囲を共有します。つまり、Workspace オブジェクトで BeginTrans メソッドを使用する場合、このメソッドの作用は Workspace オブジェクトで開かれているすべてのデータベースに適用されます。同様にして、Workspace オブジェクトに対して CommitTrans メソッドを使用する場合にも、このメソッドの作用は、Workspace オブジェクトで開かれているすべてのデータベースに及びます。

レプリケーション

データベース レプリケーションを使用して、マスター Jet データベースのレプリカの作成と維持を行うことができます。レプリカの全部または一部の定期的な更新や、レプリカ間での新しいデータのコピーには、Synchronize メソッドを使用します。また、ReplicaFilter プロパティを使用して、選択されたレコードのみに更新を制限することができ、PopulatePartial メソッドを使用してそれらのレコードの同期をとることができます。

セキュリティ

Jet データベース エンジンで設定され、管理されているセキュリティ設定を使用して、1 つ以上の .mdb データベースへのアクセスを制限することができます。使用しているコード内では、User オブジェクトと Group オブジェクトを設定して、オブジェクト単位で各ユーザーが使用することができる権限のレベルと、その範囲を定義することができます。たとえば特定のユーザーに対して、あるテーブルへは読み取り専用のアクセス権を、別のテーブルへはフルアクセス権を提供するように権限を設定することができます。

ODBCDirect オブジェクト モデルを使用する

データベースに接続する

Connection オブジェクトは Database オブジェクトと似ています。実際には、Connection オブジェクトと Database オブジェクトは、異なる参照を同じオブジェクトに表し、これら 2 つのオブジェクトの種類のそれぞれのプロパティを使用して、ほかの対応するオブジェクトへの参照を取得することができます。このことは、ODBCDirect を使用する代わりに Jet データ ベース エンジンを使用する ODBC クライアント アプリケーションの変換作業を簡単にします。ODBC データ ソースに接続するには OpenConnection メソッドを使用します。結果として返される Connection オブジェクトは、サーバー名、データ ソース名などの接続情報を含んでいます。

クエリー

DAO は ODBCDirect ワークスペースではストアド クエリーをサポートしていませんが、コンパイルしたクエリーを QueryDef オブジェクトとして作成することで、アクション クエリーを実行し、また、サーバーでストアド プロシージャを実行することができます。Prepare プロパティを使用し、クエリーを実行する前に、QueryDef オブジェクトからサーバー上で個人的な、もしくは一時的なストアド プロシージャを作成するかどうかを決めることができます。

パラメータ クエリーは、QueryDef オブジェクトの Parameter オブジェクトを使用して、サーバーに渡されます。Direction プロパティを使用して、Parameter オブジェクトを、入力パラメータ、出力パラメータ、またはその両方に指定することができます。また、ストアド プロシージャからの戻り値を使用することもできます。

データ操作

Recordset オブジェクトを作成することは、データベースに問い合わせを行い、結果として返されるレコード セットを操作するのに便利な方法です。OpenRecordset メソッドでは、SQL 文字列か QueryDef オブジェクト (ストアド クエリー) をデータ ソースの引数として使用することができます。結果の Recordset オブジェクトでは、データをブラウズして修正するために使用することが可能な多くのプロパティとメソッドがあります。

Recordset は、動的タイプ、ダイナセット タイプ、前方スクロール タイプ、およびスナップショット タイプの 4 つの異なる種類で使用でき、それぞれ ODBC の動的タイプ、キーセット タイプ、前方スクロール タイプ、および静的タイプに対応しています。

バッチ更新カーソル ライブラリは、サーバー上でロックがかかっていないカーソルや、同時に 1 つのレコードに複数の更新リクエストを発行していないカーソルを使用する作業を必要とするクライアント アプリケーションで利用することができます。その代わりに、クライアントは、ローカル バッファ (または "バッチ") の多くのレコードに関する更新情報を格納し、バッチ更新を開始します。また、このバッチ更新を行うことで、"データのパイプライン化" が可能になり、ここで、クライアントはサーバーへの接続を断ち、異なるサーバー上でもう一度接続を行います。

非同期メソッドの実行

Execute、MoveLast、OpenConnection および OpenRecordset メソッドの特色は、オプションの dbRunAsync です。このオプションを使用すると、クライアントのアプリケーションは、メソッドが実行されている間に、フォームをロードするなどのほかのタスクを行うことができます。そして、タスクが完了しているかどうか、および非同期のタスクを Cancel メソッドで終わらせているかどうかを StillExecuting プロパティで確認することができます。


DAO 定数

DAO には、メソッドまたはプロパティで使用できる組み込み定数があります。組み込み定数はすべて文字 db で始まります。組み込み定数については、それが使用されるメソッドやプロパティのところで解説しています。

凡例

読み取り専用

読み取り/書き込みが可能

AllPermissions プロパティの定数 (すべて [image] )

次の定数は、すべての Container オブジェクトと Document オブジェクトで共通に使用されます。

定数 | 説明
dbSecReadDef | フィールドおよびインデックスに関する情報を含むテーブルの定義の読み取りができます。
dbSecWriteDef | フィールドおよびインデックスに関する情報を含むテーブルの定義の修正または削除ができます。
dbSecRetrieveData | Document オブジェクトからデータを取得できます。
dbSecInsertData | レコードを追加できます。
dbSecReplaceData | レコードを修正できます。
dbSecDeleteData | レコードを削除できます。

Databases コンテナおよび Documents コレクションのすべての Document オブジェクトでは、次の定数も使用されます。

定数 | 説明
dbSecDeleteData | レコードを削除できます。
dbSecDBAdmin | データベースをレプリケートしたり、データベースのパスワードを変更できます。
dbSecDBCreate | 新しいデータベースを作成できます。この設定は、ワークグループ情報ファイル (System.mdw) の Databases コンテナでのみ有効です。
dbSecDBExclusive | 排他モードでデータベースにアクセスできます。
dbSecDBOpen | データベースを開くことができます。

Attributes プロパティの定数

次の定数は、Field オブジェクトの Attributes プロパティに使用されるものです。

定数 | 説明
dbFixedField | フィールドのサイズは固定です (Numeric 型 (Numeric) フィールドの既定値)。
dbVariableField | フィールドのサイズは可変です (テキスト型 (Text) フィールドでのみ使用可)。
dbAutoIncrField | 新しいレコードのフィールドの値は自動的に増えて、一意な長整数型 (Long) の値になります (Jet ワークスペースでは、.mdb ファイルから開いた TableDef オブジェクトでのみ使用可)。
dbUpdatableField | フィールドの値を変更できます。
dbDescending | フィールドは、降順に並べ替えられます (Jet ワークスペースでのみ使用可)。
dbHyperlinkField | フィールドは、ハイパーリンク情報を含んでいます (Jet ワークスペースのメモ型 (Memo) フィールドでのみ使用可)。
dbSystemField | フィールドは、レプリカのレプリケーション情報を含んでいます (Jet データベース エンジンの TableDef オブジェクトでのみ使用可)。

次の定数は、Relation オブジェクトの Attributes プロパティに使用されるものです。

定数 | 説明
dbRelationUnique | 一対一リレーションシップ
dbRelationDontEnforce | リレーションシップは設定されません (参照整合性が適用されていません)。
dbRelationInherited | リレーションシップは、2 つのリンク テーブルを含むデータベースに存在します。
dbRelationUpdateCascade | 連鎖更新します。
dbRelationDeleteCascade | 連鎖削除します。
dbRelationLeft | Microsoft Access のみです。デザイン ビューでは、左結合を既定の結合型として表示します。
dbRelationRight | Microsoft Access のみです。デザイン ビューでは、右結合を既定の結合型として表示します。

次の定数は、TableDef オブジェクトの Attributes プロパティに使用されるものです。

定数 | 説明
dbAttachExclusive | 排他モードで開いた Jet データベース エンジンのリンク テーブルです。
dbAttachSavePWD | リンクされたリモート テーブルのユーザー ID とパスワードを保存します。
dbSystemObject | システム テーブル
dbHiddenObject | 非表示のテーブル (一時的な使用向け)
dbAttachedTable | 非 ODBC データベースのリンク テーブル
dbAttachedODBC | ODBC データベースのリンク テーブル

CollatingOrder プロパティの定数 (すべて [image] )

定数 | 説明
dbSortArabic | アラビア語
dbSortChineseSimplified | 中国語 (中国)
dbSortChineseTraditional | 中国語 (台湾)
dbSortCyrillic | ロシア語
dbSortCzech | チェコ語
dbSortDutch | オランダ語
dbSortGeneral | 欧米標準 (英語、フランス語、ドイツ語、ポルトガル語、イタリア語、現代スペイン語)
dbSortGreek | ギリシャ語
dbSortHebrew | ヘブライ語
dbSortHungarian | ハンガリー語
dbSortIcelandic | アイスランド語
dbSortJapanese | 日本語
dbSortKorean | 韓国語
dbSortNeutral | 上記以外
dbSortNorw | ノルウェー語とデンマーク語
dbSortPDXIntl | Paradox の International の並べ替え順序
dbSortPDXNor | Paradox のノルウェー語とデンマーク語の並べ替え順序
dbSortPDXSwe | Paradox のスウェーデン語とフィンランドの並べ替え順序
dbSortPolish | ポーランド語
dbSortSlovenian | スロベニア語
dbSortSpanish | 古スペイン語
dbSortSwedFin | スウェーデン語とフィンランド語
dbSortThai | タイ語
dbSortTurkish | トルコ語
dbSortUndefined | 未定義または不明な並べ替え順序

DefaultCursorDriver プロパティ (すべて [image])

定数 | 説明
dbUseDefaultCursor | (既定値) サーバーがサーバー側カーソルをサポートしている場合は、それを使用します。サポートしていない場合には、ODBC カーソル ライブラリを使用します。
dbUseODBCCursor | 常に ODBC カーソル ライブラリを使用します。結果セットが小さい場合、この定数の設定によって処理効率が良くなりますが、結果セットが比較的大きい場合には著しく処理効率が落ちます。
dbUseServerCursor | 常にサーバー側カーソルを使用します。通常の大きなレコード セットの操作では、この定数の設定によって処理効率が良くなりますが、ネットワークのトラフィック量が増える可能性もあります。
dbUseClientBatchCursor | 常に FoxPro カーソル ライブラリを使用します。この定数は、バッチ更新で必要になります。
dbUseNoCursor | すべてのカーソル (Recordset オブジェクト) を、前方スクロール タイプおよび読み取り専用として開き、行セットのサイズを 1 に設定します。"カーソルなしクエリー" とも呼ばれます。

Direction プロパティの定数 (すべて [image] )

定数 | 説明
dbParamInput | (既定値) 情報をプロシージャに渡します。
dbParamInputOutput | プロシージャに情報を渡すと共に、プロシージャから情報を取得します。
dbParamOutput | プロシージャからの情報を SQL の出力パラメータとして返します。
dbParamReturnValue | プロシージャからの戻り値を渡します。

EditMode プロパティの定数 (すべて [image] )

定数 | 説明
dbEditNone | 編集の操作は行われていません。
dbEditInProgress | Edit メソッドが呼び出されています。
dbEditAdd | AddNew メソッドが呼び出されています。

Permissions プロパティの定数 (すべて [image] )

次の定数は、すべての Container オブジェクトに共通で、Permissions プロパティに使用されます。

定数 | 説明
dbSecNoAccess | オブジェクトにアクセスできません。
dbSecFullAccess | オブジェクトに完全にアクセスできます。
dbSecDelete | オブジェクトを削除できます。
dbSecReadSec | そのオブジェクトのセキュリティに関連する情報を読み取ることができます。
dbSecWriteSec | アクセス権を変更できます。
dbSecWriteOwner | Owner プロパティの設定値を変更できます。

Databases コンテナでは、次の定数も Permissions プロパティに使用されます (すべて [image]):

定数 | 説明
dbSecDBAdmin | データベースをレプリケート可能なレプリケート データベースにしたり、データベースのパスワードを変更したりできます。
dbSecDBCreate | 新しいデータベースを作成できます (システム データベースの Databases コンテナでのみ使用可)。
dbSecDBOpen | データベースを開くことができます。
dbSecDBExclusive | 排他モードでデータベースにアクセスできます。

すべての Tables コンテナでは、次の定数も Permissions プロパティに使用されます (すべて [image]):

定数 | 説明
dbSecCreate | 新しいテーブルを作成できます (テーブルを表す Container オブジェクトまたは、システム データベースの Container オブジェクトでのみ有効です)。
dbSecReadDef | フィールドおよびインデックスに関する情報を含むテーブルの定義の読み取りができます。
dbSecWriteDef | フィールドおよびインデックスに関する情報を含むテーブルの定義の読み取りができます。
dbSecRetrieveData | Document オブジェクトからデータを取得できます。
dbSecInsertData | レコードを追加できます。
dbSecReplaceData | レコードを修正できます。
dbSecDeleteData | レコードを削除できます。

Document オブジェクトでは、次の定数も Permissions プロパティに使用されます (すべて [image]):

定数 | 説明
dbSecCreate | 新しいテーブルを作成できます (テーブルを表す Container オブジェクトでのみ有効です)。
dbSecDBCreate | 新しいデータベースを作成できます (システム データベースの Databases コンテナでのみ有効です)。
dbSecDBOpen | データベースを開くことができます。
dbSecDBExclusive | 排他モードでデータベースにアクセスできます。
dbSecDelete | オブジェクトを削除できます。
dbSecDeleteData | レコードを削除できます。
dbSecFullAccess | オブジェクトに完全にアクセスできます。
dbSecInsertData | レコードを追加できます。
dbSecReadDef | フィールドおよびインデックスに関する情報を含むテーブルの定義の読み取りができます。
dbSecReadSec | そのオブジェクトのセキュリティに関連する情報の読み取りができます。
dbSecReplaceData | レコードを修正できます。
dbSecRetrieveData | Document オブジェクトからデータを取得できます。
dbSecWriteDef | フィールドおよびインデックスに関する情報を含むテーブルの定義の修正または削除ができます。
dbSecWriteSec | アクセス権を変更できます。
dbSecWriteOwner | Owner プロパティの設定値を変更できます。

Prepare プロパティの定数 (すべて [image] )

定数 | 説明
dbQPrepare | (既定値) ステートメントが準備されます。この場合は ODBC SQLPrepare API が呼び出されます。
dbQUnprepare | ステートメントが準備されません。この場合は ODBC SQLExecDirect API が呼び出されます。

RecordStatus プロパティの定数 (すべて [image] )

定数 | 説明
dbDBDeleted | レコードは、ローカルでも、データベースからも削除されました。
dbDeleted | レコードは削除されましたが、データベースにはまだ残っています。
dbRecordModified | レコードは修正されましたが、データベース内ではまだ更新されていません。
dbRecordNew | AddNew メソッドによりレコードが挿入されましたが、データベースにはまだ挿入されていません。
dbRecordUnmodified | (既定値) レコードは修正されていないか、または正常に更新されました。

Type プロパティの定数

次の定数は、すべての Field オブジェクト、Parameter オブジェクト、または Property オブジェクトに共通して、Type プロパティに使用されます (すべて [image]):

定数 | 説明
dbBigInt | Big Integer 型 (Big Integer) (ODBCDirect ワークスペースでのみ使用可)
dbBinary | バイナリ型 (Binary)
dbBoolean | ブール型 (Boolean) (True/False)
dbByte | バイト型 (Byte) (8 ビット)
dbChar | CHAR 型 (Char) (ODBCDirect ワークスペースでのみ使用可)
dbCurrency | 通貨型 (Currency)
dbDate | 日付/時刻型 (Date/Time)
dbDecimal | 10 進型 (Decimal) (ODBCDirect ワークスペースでのみ使用可)
dbDouble | 倍精度浮動小数点数型 (Double)
dbFloat | 浮動小数点数型 (Float) (ODBCDirect ワークスペースでのみ使用可)
dbGUID | GUID 型 (GUID)
dbInteger | 整数型 (Integer)
dbLong | 長整数型 (Long)
dbLongBinary | ロング バイナリ型 (LongBinary) - OLE オブジェクト型 (OLE Object) (ビットマップ)
dbMemo | メモ型 (Memo) (拡張テキスト)
dbNumeric | Numeric 型 (Numeric) (ODBCDirect ワークスペースでのみ使用可)
dbSingle | 単精度浮動小数点数型 (Single)
dbText | テキスト型 (Text) (可変長)
dbTime | 時刻型 (Time) (ODBCDirect ワークスペースでのみ使用可)
dbTimeStamp | タイムスタンプ型 (TimeStamp) (ODBCDirect ワークスペースでのみ使用可)
dbVarBinary | 可変長バイナリ型 (VarBinary) (ODBCDirect ワークスペースでのみ使用可)

次の定数は、すべての QueryDef オブジェクトに共通して、Type プロパティに使用されます (すべて [image]):

定数 | 説明
dbQAction | アクション クエリー
dbQAppend | 追加クエリー
dbQCompound | 複合クエリー (ODBCDirect ワークスペースでのみ使用可)
dbQCrosstab | クロス集計クエリー
dbQDDL | データ定義クエリー
dbQDelete | 削除クエリー
dbQMakeTable | テーブル作成クエリー
dbQProcedure | ストアド プロシージャを実行する SQL の遂行クエリー (ODBCDirect ワークスペースでのみ使用可)
dbQSelect | 選択クエリー
dbQSetOperation | ユニオン クエリー
dbQSPTBulk | レコードを返さないクエリー
dbQSQLPassThrough | SQL パススルー クエリー
dbQUpdate | 更新クエリー

次の定数は、すべての Recordset オブジェクトに共通して、Type プロパティに使用されます (すべて [image]):

定数 | 説明
dbOpenDynamic | 動的タイプの Recordset を開きます (ODBCDirect ワークスペースでのみ使用可)。
dbOpenDynaset | ダイナセット タイプの Recordset を開きます。
dbOpenForwardOnly | 前方スクロール タイプの Recordset を開きます。
dbOpenSnapshot | スナップショット タイプの Recordset を開きます。
dbOpenTable | テーブル タイプの Recordset を開きます (Jet ワークスペースでのみ使用可)。

UpdateOptions プロパティの定数 (すべて [image] )

定数 | 説明
dbCriteriaKey | (既定値) WHERE 句で 1 つ以上のキー列のみを使用します。
dbCriteriaModValues | WHERE 句で 1 つ以上のキー列と更新されたすべての列を使用します。
dbCriteriaAllCols | WHERE 句で 1 つ以上のでキー列とすべての列を使用します。
dbCriteriaTimeStamp | 時刻型 (Time) の列が使用できればそれらの列のみを使用します。結果セットに時刻型 (Time) の列が存在しない場合は、実行時エラーとなります。
dbCriteriaDeleteInsert | 修正された各行に対して、DELETE ステートメントと INSERT ステートメントの組み合わせを使用します。
dbCriteriaUpdate | (既定値) 修正された各行に対して、UPDATE ステートメントを使用します。

CompactDatabase と CreateDatabase メソッドの引数 locale の定数 (すべて [image] )

定数 | 説明
dbLangGeneral | 英語、ドイツ語、フランス語、ポルトガル語、イタリア語、現代スペイン語
dbLangArabic | アラビア語圏
dbLangChineseSimplified | 中国語 (中国)
dbLangChineseTraditional | 中国語 (台湾)
dbLangCyrillic | ロシア語
dbLangCzech | チェコ語
dbLangDutch | オランダ語
dbLangGreek | ギリシャ語
dbLangHebrew | ヘブライ語
dbLangHungarian | ハンガリー語
dbLangIcelandic | アイスランド語
dbLangJapanese | 日本語
dbLangKorean | 韓国語
dbLangNordic | スカンディナヴィア語
DbLangNorwDan | ノルウェー語とオランダ語
DbLangPolish | ポーランド語
DbLangSlovenian | スロベニア語
DbLangSpanish | 古スペイン語
DbLangSwedFin | スウェーデン語とフィンランド語
DbLangThai | タイ語
DbLangTurkish | トルコ語

CompactDatabase メソッドの引数 options の定数 (すべて [image] )

定数 | 説明
dbDecrypt | 最適化中にデータベースを解読します。
dbEncrypt | データベースを暗号化します。
dbVersion10 | Jet データベース エンジン 1.0
dbVersion11 | Jet データベース エンジン 1.1
dbVersion20 | Jet データベース エンジン 2.0
dbVersion30 | Jet データベース エンジン 3.0

CreateDatabase メソッドの引数 options の定数 (すべて [image] )

定数 | 説明
dbEncrypt | データベースを暗号化します。
dbVersion10 | Jet データベース エンジン 1.0
dbVersion11 | Jet データベース エンジン 1.1
dbVersion20 | Jet データベース エンジン 2.0
dbVersion30 | Jet データベース エンジン 3.0

CreateWorkspace メソッドの引数 type の定数

次の定数は、Workspace オブジェクトの Type プロパティ、および DBEngine オブジェクトの DefaultType プロパティで使用されます (すべて [image]):

定数 | 説明
dbUseODBC | 次に作成されるワークスペースは ODBCDirect を使用します。
dbUseJet | 次に作成されるワークスペースは Jet データベース エンジンを使用します。

Execute メソッドの引数 options の定数 (すべて [image] )

定数 | 説明
dbDenyWrite | ほかのユーザーに対する書き込みの権限を拒否します (Jet ワークスペースでのみ使用可)。
dbInconsistent | 矛盾した更新が可能です (Jet ワークスペースでのみ使用可)。
dbConsistent | 一貫性のある更新のみ可能です (Jet ワークスペースでのみ使用可)。
dbSQLPassThrough | SQL パススルー クエリーを使用して SQL ステートメントを ODBC データベースに送信します (Jet ワークスペースでのみ使用可)。
dbFailOnError | エラーが発生すると更新をロールバックします (Jet ワークスペースでのみ使用可)。
dbSeeChanges | 編集中のデータをほかのユーザーが変更している場合、実行時エラーを生成します (Jet ワークスペースでのみ使用可)。
dbRunAsync | クエリーを非同期に実行します (ODBCDirect ワークスペースでのみ使用可)。
dbExecDirect | 先に SQLPrepare ODBC 関数を呼び出さずにクエリーを実行します (ODBCDirect ワークスペースでのみ使用可)。

Idle メソッドの省略可能な引数の定数 ( [image] )

定数 | 説明
dbRefreshCache | 未処理のディスク書き込みをすべて実行し、現在のディスク ファイルからメモリのデータを更新します。

MakeReplica メソッドの省略可能な引数の定数 (すべて [image] )

定数 | 説明
dbRepMakePartial | 部分レプリカを作成します。
dbRepMakeReadOnly | 新しいデータベースのレプリケート可能な要素を読み取り専用にします。

OpenConnection と OpenDatabase メソッドの引数 options の定数 (すべて [image] )

定数 | 説明
dbDriverNoPrompt | ODBC ドライバ マネージャは、引数 connect で提供される接続文字列を使用します。十分な情報が提供されない場合には、トラップ可能なエラーが発生します。
dbDriverPrompt | ドライバ マネージャは [ODBC データ ソース] ダイアログ ボックスを表示します。接続の確立に使用される接続文字列は、ダイアログ ボックスを通してユーザーが選択し、完成させたデータ ソース名 (DSN) から構築されます。
dbDriverComplete | 渡された接続文字列に DSN キーワードが含まれていた場合、ドライバ マネージャはその文字列をそのまま接続に使用します。それ以外の場合は、dbDriverPrompt を指定した場合と同じように動作します。
dbDriverCompleteRequired | (既定値) dbDriverComplete と同じように動作しますが、ドライバは接続の完了に必要ではない情報のコントロールを使用できないようにします。

OpenRecordset メソッドの引数 type の定数 (すべて [image] )

定数 | 説明
dbOpenDynamic | 動的タイプの Recordset オブジェクトを開きます (ODBCDirect ワークスペースでのみ使用可)。
dbOpenDynaset | ダイナセット タイプの Recordset オブジェクトを開きます。
dbOpenForwardOnly | 前方スクロール タイプの Recordset オブジェクトを開きます。
dbOpenSnapshot | スナップショット タイプの Recordset オブジェクトを開きます。
dbOpenTable | テーブル タイプの Recordset オブジェクトを開きます (Jet ワークスペースでのみ使用可)。

OpenRecordset メソッドの引数 lockedits の定数 (すべて [image] )

定数 | 説明
dbPessimistic | 排他的同時操作。カーソルは、レコードの更新を確実に行うために十分な最低レベルのロックを使用します。
dbReadOnly | カーソルは読み取り専用で、更新はできません。
dbOptimistic | レコード ID に基づいた共有的同時実行。カーソルは、新旧のレコードのレコード ID を比較して、最後のアクセスから変更があったかどうかを判断します。
dbOptimisticValue | レコード値に基づいた共有的同時操作。カーソルは、新旧のレコードのデータ値を比較して、最後のアクセスから変更があったかどうかを判断します (ODBCDirect ワークスペースでのみ使用可)。
dbOptimisticBatch | 共有的なバッチ更新を可能にします (ODBCDirect ワークスペースでのみ使用可)。

OpenRecordset メソッドの引数 options の定数 (すべて [image] )

定数 | 説明
dbDenyWrite | ほかのユーザーに対して Recordset のレコードの変更を拒否します (Jet ワークスペースでのみ使用可)。
dbDenyRead | ほかのユーザーに対して Recordset のレコードの読み取りを拒否します (Jet ワークスペースでのみ使用可)。
dbReadOnly | Recordset を読み取り専用として開きます (Jet ワークスペースでのみ使用可)。
dbAppendOnly | ダイナセット タイプの Recordset オブジェクトに新しいレコードを追加できますが、ほかのユーザーが既存のレコードを読み取ることは拒否します (Jet ワークスペースのダイナセット タイプでのみ使用可)。
dbInconsistent | ほかのレコードが影響を受ける場合でも、すべてのダイナセット タイプのフィールドに更新を適用します (Jet ワークスペースのダイナセット タイプとスナップショット タイプでのみ使用可)。
dbConsistent | ダイナセット タイプのほかのレコードに影響しないフィールドにのみ更新を適用します (Jet ワークスペースのダイナセット タイプとスナップショット タイプでのみ使用可)。
dbSQLPassThrough | SQL ステートメントを ODBC データベースに送信します (Jet ワークスペースのスナップショット タイプでのみ使用可)。
dbForwardOnly | 前方スクロールのスナップショット タイプの Recordset オブジェクトを作成します (Jet ワークスペースのスナップショット タイプでのみ使用可)。
dbSeeChanges | 編集中のデータに、ほかのユーザーから変更が加えられる場合には、実行時エラーが発生します (Jet ワークスペースのダイナセット タイプでのみ使用可)。
dbRunAsync | 非同期にクエリーを実行します (ODBCDirect ワークスペースでのみ使用可)。
dbExecDirect | 先に SQLPrepare ODBC 関数を呼び出さずにクエリーを実行します (ODBCDirect ワークスペースでのみ使用可)。

SetOption メソッドの引数 parameter の定数 (すべて [image] )

定数 | 説明
dbPageTimeout | PageTimeout キー
dbSharedAsyncDelay | SharedAsyncDelay キー
dbExclusiveAsyncDelay | ExclusiveAsyncDelay キー
dbLockRetry | LockRetry キー
dbUserCommitSync | UserCommitSync キー
dbImplicitCommitSync | ImplicitCommitSync キー
dbMaxBufferSize | MaxBufferSize キー
dbMaxLocksPerFile | MaxLocksPerFile キー
dbLockDelay | LockDelay キー
dbRecycleLVs | RecycleLVs キー
dbFlushTransactionTimeout | FlushTransactionTimeout キー

Synchronize メソッドの引数 exchange の定数 (すべて [image] )

定数 | 説明
dbRepExportChanges | カレント データベースで指定したデータベースに変更内容を送信します。
dbRepImportChanges | 指定したデータベースから変更内容を受信します。
dbRepImpExpChanges | 双方向の交換を行います。
dbRepSyncInternet | インターネット パスウェイ経由で接続されているファイル間でデータの交換を行います。

Update メソッドの引数 type の定数 (すべて [image] )

定数 | 説明
dbUpdateRegular | (既定値) 完了していない変更は、メモリにキャッシュされず、すぐにディスクに書き込まれます。
dbUpdateBatch | 更新キャッシュ中にある、完了していない変更は、すべてディスクに書き込まれます。
dbUpdateCurrentRecord | 完了していない変更のうち、現在のレコードのもののみが、ディスクに書き込まれます。

CancelUpdate メソッドの引数 type の定数 (すべて [image] )

定数 | 説明
dbUpdateRegular | (既定値) 完了していない変更は、メモリにキャッシュされず、すぐにディスクに書き込まれます。
dbUpdateBatch | 更新キャッシュ中にある、完了していない変更は、すべてディスクに書き込まれます。


DAO オブジェクトとコレクションのリファレンス

DAO オブジェクトとコレクションは、データベース システムの構成要素の作成や操作を、コードから行うために枠組を提供しています。オブジェクトとコレクションはデータベースの構成要素の特性を表すプロパティと、オブジェクトやコレクションの操作に使用するメソッドを持ちます。データベース構造の階層モデルは、これらのオブジェクトとコレクションで形成されます。また、この構造はプログラムから制御することができます。

オブジェクトとコレクションの関連付けは、それぞれ異なりますが、オブジェクトは種類が異なるいくつかのコレクションを持ちます。また、コレクションを持たないオブジェクトもあります。一方、コレクションは同じ種類のいくつかのオブジェクトを持ちます。また、オブジェクトを持たないコレクションもあります。オブジェクトとコレクションはよく似ていますが、このような関連付けの違いがあります。

次の表の 1 列目に示すコレクションには、2 列目に示すオブジェクトが含まれます。3 列目で、それぞれのオブジェクトが何を表しているのかを説明します。

コレクション | オブジェクト | 説明
Connections | Connection | ODBC データ ソースへの接続に関する情報 (ODBCDirect ワークスペースでのみ使用可)
Containers | Container | 定義済みのオブジェクトの種類に関する情報が格納されている記憶領域 (Jet ワークスぺースでのみ使用可)
Databases | Database | 開いているデータベース
ありません。 | DBEngine | Jet データベース エンジン
Documents | Document | 定義され保存済みのオブジェクトに関する情報 (Jet ワークスペースでのみ使用可)
Errors | Error | オブジェクトに関連付けられているエラーに関する情報
Fields | Field | テーブルやクエリー、インデックス、リレーションシップ、レコード セットを構成する列
Groups | Group | ユーザー アカウントのグループ (Jet ワークスペースでのみ使用可)
Indexes | Index | テーブルが持つ値の定義済みの並べ替え順序と重複の有無 (Jet ワークスペースでのみ使用可)
Parameters | Parameter | パラメータ クエリーのパラメータ
Properties | Property | 組み込みプロパティやユーザー定義のプロパティ
QueryDefs | QueryDef | 保存済みのクエリー定義
Recordsets | Recordset | ベース テーブルまたはクエリーのレコード
Relations | Relation | テーブルとクエリー間のフィールドのリレーションシップ (Jet ワークスペースでのみ使用可)
TableDefs | TableDef | 保存済みのテーブル定義 (Jet ワークスペースでのみ使用可)
Users | User | ユーザー アカウント (Jet ワークスペースでのみ使用可)
Workspaces | Workspace | Jet データベース エンジンのセッション


Jet ワークスペースの DAO オブジェクト モデル


ODBCDirect ワークスペースの DAO オブジェクト モデル


Connection オブジェクト (DAO)

Connection オブジェクト

Connection オブジェクトは、ODBC データベースへの接続情報を表すオブジェクトです。これは ODBCDirect ワークスペースでのみ使用することができます。

解説

Connection オブジェクトは、リモート データベースへの接続情報を表す非持続的なオブジェクトです。引数 type に dbUseODBC が設定されている Workspace オブジェクトが作成された場合、Connection オブジェクトは、ODBCDirect ワークスペースでのみ使用することができます。

メモ DAO の初期のバージョンで作成されたコードは、上位互換性のために、Database オブジェクトを使用します。ただし、Connection オブジェクトの新しい機能が必要な場合は、Connection オブジェクトを使用するためにコードを書き直す必要があります。コードを書き直す際は、Database オブジェクトの Connection プロパティを読み取ると Database オブジェクトから Connection オブジェクトを参照することができます。また逆に、Connection オブジェクトの Database プロパティから Database オブジェクトを参照することができます。


Connection オブジェクト、Connections コレクションの使用例 (DAO/ODBCDirect)

Connection オブジェクト、Connections コレクションの使用例

次の例では、Jet Database オブジェクトと、2 つの ODBCDirect Connection オブジェクトを開き、各オブジェクトで有効なプロパティの一覧を表示して、Connection オブジェクトと Connections コレクションについて説明します。

Sub ConnectionObjectX()

    Dim wrkJet as Workspace
    Dim dbsNorthwind As Database
    Dim wrkODBC As Workspace
    Dim conPubs As Connection
    Dim conPubs2 As Connection
    Dim conLoop As Connection
    Dim prpLoop As Property

    ' Jet Database オブジェクトを開きます。
    Set wrkJet = CreateWorkspace("NewJetWorkspace", _
        "admin", "", dbUseJet)
    Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb")

    ' ODBCDirect Workspace オブジェクトを作成して
    ' Connection オブジェクトを開きます。
    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conPubs = wrkODBC.OpenConnection("Connection1", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    Set conPubs2 = wrkODBC.OpenConnection("Connection2", , _
        True, "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    Debug.Print "Database properties:"

    With dbsNorthwind
        ' Database オブジェクトの Properties コレクションを列挙します。
        For Each prpLoop In .Properties
            On Error Resume Next
            Debug.Print "    " & prpLoop.Name & " = " & _
                prpLoop.Value
            On Error GoTo 0
        Next prpLoop
    End With

    ' Connections コレクションを列挙します。
    For Each conLoop In wrkODBC.Connections
        Debug.Print "Connection properties for " & _
            conLoop.Name & ":"

        With conLoop
            ' 各 Property オブジェクトを明示的に呼び出して
            ' Property の値を出力します。Connection オブジェクトは
            ' Properties コレクションをサポートしていません。
            Debug.Print "    Connect = " & .Connect
            ' Property は実際に Database オブジェクトを返します。
            Debug.Print "    Database[.Name] = " & _
                .Database.Name
            Debug.Print "    Name = " & .Name
            Debug.Print "    QueryTimeout = " & .QueryTimeout
            Debug.Print "    RecordsAffected = " & _
                .RecordsAffected
            Debug.Print "    StillExecuting = " & _
                .StillExecuting
            Debug.Print "    Transactions = " & .Transactions
            Debug.Print "    Updatable = " & .Updatable
        End With

    Next conLoop

    dbsNorthwind.Close
    conPubs.Close
    conPubs2.Close
    wrkJet.Close
    wrkODBC.Close

End Sub


Connections コレクション (DAO)

Connections コレクション

Connections コレクションには、Workspace オブジェクトのカレントの Connection オブジェクトが含まれています。これは ODBCDirect ワークスペースでのみ使用することができます。

解説

Connection オブジェクトを開くと、Connection オブジェクトは Workspace オブジェクトの Connections コレクションに自動的に追加されます。Close メソッドを使用して Connection オブジェクトを閉じると、Connection オブジェクトは Connections コレクションから削除されます。Connection オブジェクトを閉じる前に、Connection オブジェクト内ですべての Recordset オブジェクトを閉じておく必要があります。

Connection オブジェクトを開くと、Connection オブジェクトに対応している Database オブジェクトが作成され、同じ Workspace オブジェクトの Databases コレクションに追加されます。同様に、Connection オブジェクトを閉じると、Connection オブジェクトに対応している Database オブジェクトが Databases コレクションから削除されます。

Connection オブジェクトの Name プロパティの設定値は、データベース ファイルへのパスを指定する文字列の値を取ります。序数や Name プロパティを使用して、コレクションに含まれる Connection オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Connections(0)

Connections("name")

Connections![name]

メモ Connections コレクションに同じ名前を作成すると、同じデータ ソースを複数回開くことができます。Connection オブジェクトをオブジェクト変数に代入し、変数名でそれらを参照してください。


Connection オブジェクト、Connections コレクションの概要 (DAO)

Connection オブジェクト、Connections コレクションの概要

Connection オブジェクト

Connection オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

QueryDefs (既定)
Recordsets

メソッド

Cancel
Close
CreateQueryDef
Execute
OpenRecordset

プロパティ

Connect
Database
Name
QueryTimeout
RecordsAffected
StillExecuting
Transactions
Updatable

Connections コレクション

Connections コレクションは、ODBCDirect Workspace オブジェクトごとに含まれており、次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


Containers コレクション (DAO)

Containers コレクション

Containers コレクションには、1 つのデータベースに定義されている Container オブジェクトがすべて含まれています。これは Jet データベース

解説

各 Database オブジェクトは、組み込みの Container オブジェクトで構成される Containers コレクションを 1 つずつ持ちます。Container オブジェクトには、Jet データベース エンジンによって定義されているものと、そのほかのアプリケーションによって定義されているものがあります。


Container オブジェクト (DAO)

Container オブジェクト

Container オブジェクトは、同じ種類の Document オブジェクトを 1 つのグループにまとめるオブジェクトです。

解説

各 Database オブジェクトには、組み込みの Container オブジェクトで構成されている Containers コレクションがあります。アプリケーションで、そのアプリケーション独自の Document オブジェクトの種類および対応する Container オブジェクトを定義できます。これらのオブジェクトは、Jet データベースでのみ使用することができます。ただし、DAO オブジェクトで常にサポートされている訳ではありません。

これらの Container オブジェクトは、Jet データベース エンジンによって定義されているものと、そのほかのアプリケーションによって定義されているものがあります。次の表では、Jet データベース エンジンによって定義されている各 Container オブジェクトについて、名前および含まれる情報の種類を示しています。

Container 名 | 情報の種類
Databases | 保存されたデータベース
Tables | 保存されたテーブルとクエリー
Relations | 保存されたリレーションシップ

メモ 表で挙げている Container オブジェクトと同名のコレクションを混同しないようにしてください。データベースの Container オブジェクトは、すべての保存されているデータベース オブジェクトを参照しますが、Databases コレクションは特定のワークスペースで開いているデータベース オブジェクトのみを参照します。

各 Container オブジェクトには Documents コレクションがあり、その中に Document オブジェクトが含まれています。Document オブジェクトは、Container オブジェクトが示す種類の組み込みオブジェクトのインスタンスを表しています。通常、Container オブジェクトは、Document オブジェクトが持つ情報への中間リンクとして使用されます。Containers コレクションを使用して、指示されたすべての種類の Document オブジェクトにセキュリティを設定することもできます。

既存の Container オブジェクトを使用して、次のことができます。

  • Name プロパティを使用して、Container オブジェクトに定義されている名前を返すことができます。

  • Owner プロパティを使用して、Container オブジェクトの所有者を設定または返すことができます。Owner プロパティを設定するには、Container オブジェクトに対する書き込み権限が必要です。このプロパティに設定する名前は、既存の User オブジェクト名または既存の Group オブジェクト名でなければなりません。

  • Permissions プロパティおよび UserName プロパティを使用して、Container オブジェクトへのアクセス権を設定することができます。Container オブジェクトの Documents コレクションに含まれる Document オブジェクトはすべてこのアクセス権の設定を継承します。

Container オブジェクトは、組み込みオブジェクトであるため、Container オブジェクトを新しく作成したり、既存の Container オブジェクトを削除したりすることはできません。

序数や Name プロパティを使用して、コレクションに含まれる Container オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Containers(0)

Containers("name")

Containers![name]


Container オブジェクト、Containers コレクションの使用例 (DAO/Microsoft Jet)

Container オブジェクト、Containers コレクションの使用例

次の例では、データベース Northwind の Containers コレクションと、そこに含まれる各 Container オブジェクトの Properties コレクションを列挙します。

Sub ContainerObjectX()

    Dim dbsNorthwind As Database
    Dim ctrLoop As Container
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind

        ' Containers コレクションを列挙します。
        For Each ctrLoop In .Containers
            Debug.Print "Properties of " & ctrLoop.Name _
                & " container"

            ' 各 Container オブジェクトの
            ' Properties コレクションを列挙します。
            For Each prpLoop In ctrLoop.Properties
                Debug.Print "    " & prpLoop.Name _
                    & " = " prpLoop
            Next prpLoop

        Next ctrLoop

        .Close
    End With

End Sub


Container オブジェクト、Containers コレクションの概要 (DAO)

Container オブジェクト、Containers コレクションの概要

Container オブジェクト

Container オブジェクトには、次のコレクションとプロパティがあります。メソッドはありません。

コレクション

Documents (既定)
Properties

プロパティ

AllPermissions
Inherit
Name
Owner
Permissions
UserName

Containers コレクション

Containers コレクションは、Jet データベースの各 Database オブジェクトに含まれます。次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


Databases コレクション (DAO)

Databases コレクション

Databases コレクションには、Workspace オブジェクトで開かれた、または作成されたすべての開いている Database オブジェクトが含まれています。

解説

Workspace オブジェクトから既存の Database オブジェクトを開いたり、新しい Database オブジェクトを作成したりすると、自動的に Databases コレクションに追加されます。Close メソッドを使用して Database オブジェクトを閉じると、その Database オブジェクトは Databases コレクションから削除されますが、ディスクからは削除されません。Database オブジェクトを閉じる前に、開いている Recordset オブジェクトをすべて閉じておきます。

Jet ワークスペースでは、データベースの Name プロパティの設定値は、データベース ファイルのパスを指定する文字列です。ODBCDirect ワークスペースでは、Name プロパティは対応する Connection オブジェクト名です。

序数や Name プロパティを使用して、コレクションに含まれる Database オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Databases(0)

Databases("name")

Databases![name]

メモ Databases コレクションに重複する名前を作成すると、同じデータ ソースやデータベースを何度も開くことができます。Database オブジェクトをオブジェクト変数に代入し、変数名でそれらを参照してください。


Database オブジェクト (DAO)

Database オブジェクト

Database オブジェクトは、開いているデータベースを表すオブジェクトです。

解説

Database オブジェクトとそのメソッドやプロパティを使用して、開いているデータベースを操作します。データベースの種類に関わらず、次のことができます。

  • Execute メソッドを使用して、アクション クエリーを実行することができます。

  • Connect プロパティを設定して、ODBC データ ソースへの接続を確立することができます。

  • QueryTimeout プロパティを設定して、ODBC データ ソースに対するクエリーの実行を待機する時間を設定することができます。

  • RecordsAffected プロパティを使用して、アクション クエリーによって変更されたレコード数を取得することができます。

  • OpenRecordset メソッドを使用して、選択クエリーを実行して Recordset オブジェクトを作成したりすることができます。

  • Version プロパティを使用して、データベースを作成したデータベース エンジンのバージョンを調べることができます。

Jet データベース (拡張子が .mdb のファイル) では、テーブルやクエリー、リレーションシップの作成および修正、またそれらの情報を取得するだけでなく、ほかのメソッドやプロパティ、コレクションなどを使用して、Database オブジェクトを操作することができます。たとえば、次のことができます。

  • CreateTableDef メソッドおよび CreateRelation メソッドを使用して、それぞれのテーブルとリレーションシップを作成することができます。

  • CreateProperty メソッドを使用して、新しいデータベース プロパティを定義することができます。

  • CreateQueryDef メソッドを使用して、持続的なまたは一時的なクエリーの定義を作成することができます。

  • MakeReplica、Synchronize、および PopulatePartial の各メソッドを使用して、データベースのフル レプリカまたは部分レプリカの作成および同期をとることができます。

  • CollatingOrder プロパティを設定して、異なる言語による文字ベースのフィールドに、アルファベット順の並べ替え順序を確立することができます。

ODBCDirect ワークスペースでは、次のことができます。

  • Connection プロパティを使用して、Database オブジェクトに対応する Connection オブジェクトへの参照を取得することができます。

    メモ Jet ワークスペースまたは ODBCDirect ワークスペースの Database オブジェクト上で利用可能なメソッド、プロパティ、およびコレクションの一覧については、「概要」を参照してください。

CreateDatabase メソッドを使用して、自動的に Databases コレクションに追加する持続的な Database オブジェクトを作成します。作成された Database オブジェクトは、ディスクに保存されます。

OpenDatabase メソッドを使用する場合、DBEngine オブジェクトを指定する必要はありません。

リンク テーブルのあるデータベースを開いても、指定した外部ファイルや Jet 接続型 ODBC データ ソースへのリンクは自動的には設定されません。そのテーブルの TableDef オブジェクトまたは Field オブジェクトを参照するか、Recordset オブジェクトを開いてください。これらのテーブルへリンクを設定できない場合は、トラップ可能なエラーが発生します。データベースへのアクセス権限がない場合や、別のユーザーが既にそのデータベースを排他モードで開いている場合は、トラップ可能なエラーが発生します。

目的のテーブルへのリンクが設定されている Jet データベースを開く代わりに、OpenDatabase を使用して、Excel、dBASE、Paradox などの外部データベースを直接開くこともできます。

メモ Microsoft SQL Server などの、Jet 接続型 ODBC データ ソースで直接 Database オブジェクトを開かないでください。これはリンク テーブルを使用する場合に比べて、クエリーのパフォーマンスがかなり低下するためです。ただし、Excel、Paradox などの外部 ISAM データベースで直接 Database オブジェクトを開いた場合のパフォーマンスについては問題ありません。

Database オブジェクトを宣言しているプロシージャを実行すると、ローカルな Database オブジェクトは開いている Recordset オブジェクトと共に閉じられます。保留中の更新内容はすべて失われ、保留中のトランザクションはすべて元に戻されますが、トラップ可能なエラーは発生しません。ローカルなオブジェクト変数を宣言しているプロシージャを終了する前に、保留中のトランザクションや編集を明示的に完了させてから、Recordset オブジェクトと Database オブジェクトを閉じるようにしてください。

Workspace オブジェクトでトランザクションのメソッド (BeginTrans、CommitTrans、および Rollback) のいずれかを使用する場合、これらのトランザクションは、Database オブジェクトが開かれていた Workspace オブジェクトで開かれているすべてのデータベースに適用されます。独立したトランザクションを使用する場合には、別に Workspace オブジェクトを開き、その Workspace オブジェクトに別の Database オブジェクトを開く必要があります。

メモ Databases コレクションに重複する名前を作成することで、同じデータ ソースやデータベースを何度も開くことができます。Database オブジェクトをオブジェクト変数に代入し、変数名でそれらを参照してください。


Database オブジェクト、Databases コレクションの使用例 (DAO/Microsoft Jet)

Database オブジェクト、Databases コレクションの使用例

次の例では、新しい Database オブジェクトを作成し、既存の Database オブジェクトを既定の Workspace オブジェクトに開きます。次に、Databases コレクションと各 Database オブジェクトの Properties コレクションを列挙します。そのほかの例については、Database オブジェクトの概要にリストされているメソッドとプロパティを参照してください。

Sub DatabaseObjectX()

    Dim wrkJet As Workspace
    Dim dbsNorthwind As Database
    Dim dbsNew As Database
    Dim dbsLoop As Database
    Dim prpLoop As Property

    Set wrkJet = CreateWorkspace("JetWorkspace", "admin", _
        "", dbUseJet)

    ' 新しいデータベースと同じ名前のファイルがないことを確認します。
    If Dir("NewDB.mdb") <> "" Then Kill "NewDB.mdb"

    ' 指定した照合順で新しいデータベースを作成します。
    Set dbsNew = wrkJet.CreateDatabase("NewDB.mdb", _
        dbLangGeneral)
    Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb")

    ' Databases コレクションを列挙します。
    For Each dbsLoop In wrkJet.Databases
        With dbsLoop
            Debug.Print "Properties of " & .Name
            ' 各 Database オブジェクトの
            ' Properties コレクションを列挙します。
            For Each prpLoop In .Properties
                If prpLoop <> "" Then Debug.Print "    " & _
                    prpLoop.Name & " = " & prpLoop
            Next prpLoop
        End With
    Next dbsLoop

    dbsNew.Close
    dbsNorthwind.Close
    wrkJet.Close

End Sub


Database オブジェクト、Databases コレクションの概要 (DAO)

Database オブジェクト、Databases コレクションの概要

Database オブジェクト

Database オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Containers
Properties
QueryDefs
Recordsets ( [image] に対しては既定値が設定されます)
Relations
TableDefs ( [image] に対しては既定値が設定されます)

メソッド

Close
CreateProperty
CreateQueryDef
CreateRelation
CreateTableDef
Execute
MakeReplica
NewPassword
OpenRecordset
PopulatePartial
Synchronize

プロパティ

CollatingOrder
Connect
Connection
DesignMasterID
Name
QueryTimeout
RecordsAffected
Replicable (ユーザー定義)
ReplicaID
Updatable
V1xNullBehavior
Version

Databases コレクション

Databases コレクションは、Workspace オブジェクトごとに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


DBEngine オブジェクト (DAO)

DBEngine オブジェクト

DBEngine オブジェクトは、DAO モデルの最上位レベルのオブジェクトです。

解説

DBEngine オブジェクトは、DAO オブジェクト階層のほかのすべてのオブジェクトを含んでおり、それらを制御します。追加の DBEngine オブジェクトを作成することはできません。また、DBEngine オブジェクトはどのコレクションにも属しません。

メモ DAO で ODBC データ ソースを直接参照することができます。これは "ODBCDirect ワークスペース" と呼ばれ、"Jet ワークスペース" を使用する Jet データベース エンジンによる間接的な ODBC データ ソースへの参照と区別されます。ODBC データにアクセスする各メソッドは、2 種類の Workspace オブジェクトのうちどちらかを必要とします。DefaultType プロパティを使用して、DBEngine オブジェクトから作成する Workspace オブジェクトの既定の種類を選択することができます。Workspace オブジェクトの種類と関連付けられたデータ ソースによって、使用できる DAO のオブジェクトとメソッド、プロパティが決まります。

データベースおよび接続の種類に関わらず、次のことができます。

  • Version プロパティを使用して、DAO のバージョン ナンバーを調べることができます。

  • LoginTimeout プロパティを使用して、ODBC のログイン タイムアウトの取得や設定をすることができます。また RegisterDatabase メソッドを使用して、ODBC の情報を Jet データベース エンジンに渡すことができます。これらの機能は、ODBC データ ソースへの接続が Jet ワークスペースと ODBCDirect ワークスペースのどちらを介しているかに関わらず、同じように使用することができます。ワークスペースのどちらを使用するかのデータベース接続の既定の種類を設定することができます。

  • DefaultType プロパティを使用して、その後作成される Workspace オブジェクトが Jet ワークスペースと ODBCDirect ワークスペースのどちらを使用するかのデータベース接続の既定の種類を設定することができます。

  • DefaultPassword プロパティおよび DefaultUser プロパティを使用して、既定の Workspace オブジェクトにユーザー ID とパスワードを設定することができます。

  • CreateWorkspace メソッドを使用して、Workspace オブジェクトを新しく作成することができます。省略可能な引数を使用して、DefaultType プロパティ、DefaultPassword プロパティ、および DefaultUser プロパティの設定を無効にすることができます。

  • OpenDatabase メソッドを使用して、既定の Workspace オブジェクトでデータベースを開くことができます。BeginTrans、Commit、および Rollback の各メソッドを使用して、既定の Workspace オブジェクトのトランザクションを制御することができます。

  • Workspaces コレクションを使用して、特定の Workspace オブジェクトを参照することができます。

  • Errors コレクションを使用して、データ アクセス エラーの詳細を調べることができます。

ほかのプロパティやメソッドが使用できるのは、DAO を Jet データベース エンジンで使用する場合のみです。それらを使用して、Jet データベース エンジンを制御したり、プロパティを操作したり、コレクションに属さない一時的なオブジェクトでタスクを実行したりすることができます。たとえば、次のことができます。

  • CreateDatabase メソッドを使用して、Jet データベースの Database オブジェクトを新しく作成することができます。

  • Idle メソッドを使用して、Jet データベース エンジンの保留中のタスクを完了することができます。

  • CompactDatabase メソッドと RepairDatabase メソッドを使用して、データベースのファイルを保守することができます。

  • IniPath プロパティおよび SystemDB プロパティを使用して、それぞれ Jet データベース エンジンのレジストリ情報と Jet ワークグループ情報ファイルの場所を指定することができます。SetOption メソッドを使用して、Jet データベース エンジンのレジストリの設定を無効にすることができます。

DefaultType プロパティと IniPath プロパティの設定を変更すると、その変更内容はその後に作成される Workspace オブジェクトに反映されます。

メモ DBEngine オブジェクトで使用できるすべてのメソッド、プロパティ、およびコレクションの一覧については、「概要」を参照してください。

DBEngine オブジェクトに属するコレクション、および DBEngine オブジェクトに適用されるメソッドとプロパティを参照する場合は、次の構文を使用できます。

[DBEngine.][collection | method | property]


DBEngine オブジェクトの使用例 (DAO)

DBEngine オブジェクトの使用例

次の例では、DBEngine オブジェクトのコレクションを列挙します。そのほかの例については、DBEngine オブジェクトのメソッドとプロパティを参照してください。

Sub DBEngineX()

    Dim wrkLoop As Workspace
    Dim prpLoop As Property

    With DBEngine
        Debug.Print "DBEngine Properties"

        ' DBEngine オブジェクトの Properties コレクションを列挙します。
        ' この状況で無効な値を持つプロパティはトラップします。
        For Each prpLoop In .Properties
            On Error Resume Next
            Debug.Print "    " & prpLoop.Name & " = " _
                & prpLoop
            On Error GoTo 0
        Next prpLoop

        Debug.Print "Workspaces collection of DBEngine"

        ' DBEngine オブジェクトの Workspaces コレクションを列挙します。
        For Each wrkLoop In .Workspaces
            Debug.Print "    " & wrkLoop.Name

            ' 各 Workspace オブジェクトの
            ' Properties コレクションを列挙します。
            ' この状況で無効な値を持つプロパティはトラップします。
            For Each prpLoop In wrkLoop.Properties
                On Error Resume Next
                Debug.Print "        " & prpLoop.Name & _
                    " = " & prpLoop
                On Error GoTo 0
            Next prpLoop

        Next wrkLoop

    End With

End Sub


DBEngine オブジェクトの概要 (DAO)

DBEngine オブジェクトの概要

DBEngine オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Errors
Properties
Workspaces (既定)

メソッド

BeginTrans
CommitTrans
CompactDatabase
CreateDatabase
CreateWorkspace
Idle
OpenConnection
OpenDatabase
RegisterDatabase
RepairDatabase
Rollback
SetOption

プロパティ

DefaultPassword
DefaultType
DefaultUser
IniPath
LoginTimeout
SystemDB
Version


Documents コレクション (DAO)

Documents コレクション

Documents コレクションには、特定の種類のオブジェクトのための Document オブジェクトがすべて含まれています。これは Jet データベースでのみ使用することができます。

解説

Container オブジェクトは、Documents コレクションを 1 つずつ持ちます。Documents コレクションは、Container オブジェクトで指定した種類の組み込みオブジェクトのインスタンスを記述する Document オブジェクトを含んでいます。

序数および Name プロパティを使用して、コレクション内の Document オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Documents(0)

Documents("name")

Documents![name]


Document オブジェクト (DAO)

Document オブジェクト

Document オブジェクトには、ある種類のオブジェクトのインスタンス 1 つ分の情報が含まれています。オブジェクトの種類は、データベース、保存されたテーブル、クエリー、またはリレーションシップのいずれかになります。これは Jet データベースでのみ使用することができます。

解説

Container オブジェクトは、Documents コレクションを 1 つずつ持ちます。Documents コレクションは、Container オブジェクトで指定した種類の組み込みオブジェクトのインスタンスを記述する Document オブジェクトを含んでいます。次の表は、各 Document オブジェクトで記述されるオブジェクトの種類、その Container オブジェクト名、および Document オブジェクトに含まれている情報の種類を示しています。

Document | Container | 情報の種類
Database | Databases | 保存されたデータベース
Table または query | Tables | 保存されたテーブルまたはクエリー
Relationship | Relations | 保存されたリレーションシップ

メモ 特定の種類の Container オブジェクトと同名のコレクションを混同しないようにしてください。たとえば、データベースの Container オブジェクトは、保存されているすべてのデータベース オブジェクトを参照しますが、Databases コレクションはデータベースのうち特定のワークスペースで開いているデータベース オブジェクトのみを参照します。

Document オブジェクトを使用すると、次のことができます。

  • Name プロパティを使用して、ユーザーや Jet データベース エンジンがオブジェクトを作成する場合にオブジェクトに付けた名前を返すことができます。

  • Container プロパティを使用して、Document オブジェクトを含む Container オブジェクト名を返すことができます。

  • Owner プロパティを使用して、オブジェクトの所有者を設定または返すことできます。Owner プロパティを設定するには、その Document オブジェクトに対する書き込み権限が必要です。既存の User オブジェクト名または既存の Group オブジェクト名にプロパティを設定する必要があります。

  • UserName プロパティおよび Permissions プロパティを使用して、オブジェクトに対するユーザーやグループのアクセス権を設定または返すことができます。これらのプロパティを設定するには、その Document オブジェクトに対する書き込み権限が必要です。既存の User オブジェクト名または既存の Group オブジェクト名に UserName プロパティを設定する必要があります。

  • DataCreated プロパティおよび LastUpdated プロパティを使用して、Document オブジェクトが作成された日付と時間、および最後に修正された日付と時間を返すことができます。

Document オブジェクトは既存のオブジェクトに対応しているため、Document オブジェクトを新しく作成したり、既存の Document オブジェクトを削除したりすることはできません。

序数や Name プロパティを使用して、コレクションに含まれる Document オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Documents(0)

Documents("name")

Documents![name]


Document オブジェクト、Documents コレクションの使用例 (DAO/Microsoft Jet)

Document オブジェクト、Documents コレクションの使用例

この例では、Tables コンテナの Documents コレクションを列挙し、コレクションの最初の Document オブジェクトの Properties コレクションを列挙します。

Sub DocumentX()

    Dim dbsNorthwind As Database
    Dim docLoop As Document
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind.Containers!Tables
        Debug.Print "Documents in " & .Name & " container"
        ' Tables コンテナの Documents コレクションを列挙します。
        For Each docLoop In .Documents
            Debug.Print "    " & docLoop.Name
        Next docLoop
        With .Documents(0)
            ' Tables コンテナの最初の Document オブジェクトの
            ' Properties コレクションを列挙します。
            Debug.Print "Properties of " & .Name & " document"
            On Error Resume Next
            For Each prpLoop In .Properties
                Debug.Print "    " & prpLoop.Name & " = " & _
                    prpLoop
            Next prpLoop
            On Error GoTo 0
        End With
    End With

    dbsNorthwind.Close

End Sub


Document オブジェクト、Documents コレクションの概要 (DAO)

Document オブジェクト、Documents コレクションの概要

Document オブジェクト

Document オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

Properties

メソッド

CreateProperty

プロパティ

AllPermissions
Container
DateCreated
KeepLocal (ユーザー定義)
LastUpdated
Name
Owner
Permissions
Replicable (ユーザー定義)
UserName

Documents コレクション

Documents コレクションは、Container オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


動的タイプの Recordset オブジェクト (DAO)

動的タイプの Recordset オブジェクト

動的タイプの Recordset オブジェクトは、複数のベース テーブルからのクエリーの実行結果セットを表します。この複数のベース テーブルでは、行を返すクエリーによってレコードの追加、変更、または削除を行うことができます。さらに、ベース テーブルでほかのユーザーが追加、削除、または編集を行ったレコードが Recordset オブジェクトに表示されます。

このタイプのオブジェクトは、ODBCDirect ワークスペースでのみ使用することができ、ODBC の動的カーソルに対応しています。


動的タイプの Recordset オブジェクトの使用例 (DAO/ODBCDirect)

動的タイプの Recordset オブジェクトの使用例

次の例では、動的タイプの Recordset オブジェクトを開き、レコードを列挙します。

Sub dbOpenDynamicX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim qdfTemp As QueryDef
    Dim rstTemp As Recordset
    Dim strSQL As String
    Dim intLoop As Integer

    ' ODBC ワークスペースを作成し
    ' SQL Server データベースの接続を開きます。
    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    ' 動的タイプの Recordset オブジェクトを開きます。
    Set rstTemp = _
        conMain.OpenRecordset("authors", _
        dbOpenDynamic)

    With rstTemp
        Debug.Print "Dynamic-type recordset: " & .Name

        ' レコードを列挙します。
        Do While Not .EOF
            Debug.Print "        " & !au_lname & ", " & _
                !au_fname
            .MoveNext
        Loop

        .Close
    End With

    conMain.Close
    wrkMain.Close

End Sub


ダイナセット タイプの Recordset オブジェクトの概要 (DAO)

ダイナセット タイプの Recordset オブジェクトの概要

ダイナセット タイプの Recordset オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Fields (既定)
Properties

メソッド | 制限
AddNew |
Cancel |
CancelUpdate |
Clone |
Close |
CopyQueryDef |
Delete |
Edit |
FillCache |
FindFirst |
FindLast |
FindNext |
FindPrevious |
GetRows |
Move |
MoveFirst |
MoveLast |
MoveNext |
MovePrevious |
NextRecordset |
OpenRecordset |
Requery |
Update |

プロパティ

次の表では、各プロパティの設定は、読み取り/書き込みが可能か、読み取り専用か、または Jet と ODBCDrect のいずれかのワークスペースにおいては常に False が設定されるかどうかを示しています。

読み取り専用

読み取り/書き込みが可能

プロパティ | 制限
AbsolutePosition |
BatchCollisionCount |
BatchCollisions |
BatchSize |
BOF |
Bookmark |
Bookmarkable |
CacheSize | Jet ワークスペース ODBCDirect ワークスペース
CacheStart |
Connection |
EditMode |
EOF |
Filter |
LastModified |
LockEdits |
Name |
NoMatch |
PercentPosition |
RecordCount |
RecordStatus |
Restartable |
Sort |
StillExecuting |
Transactions |
Type |
Updatable |
UpdateOptions |
ValidationRule |
ValidationText |


Errors コレクション (DAO)

Errors コレクション

Errors コレクションには、すべての格納された Error オブジェクトが含まれます。各 Error オブジェクトは、DAO での単一の操作に関係します。

解説

DAO の操作において、1 つまたは複数のエラーが発生すると、対応する 1 つまたは複数の Error オブジェクトが DBEngine オブジェクトの Errors コレクションに格納されます。さらに別の DAO の操作でエラーが発生すると、Errors コレクションは消去され、新しい Error オブジェクトのセットが Errors コレクションに格納されます。Errors コレクション内で最も重要な番号のオブジェクト (DBEngine.Errors.Count - 1) は、Visual Basic for Applications (VBA) の Error オブジェクトでレポートされるエラーに対応します。

DAO の操作でエラーが発生しなければ、Errors コレクションは変化しません。

Errors コレクションのオブジェクトは、ほかのコレクションとは異なる方法で追加されます。そのため Errors コレクションは、Append メソッドと Delete メソッドをサポートしません。

Errors コレクションに含まれる一連の Error オブジェクトは、1 つのエラーについて記述されたものです。最初の Error オブジェクトが一番深いレベルのエラー (起因エラー) で、2 番目のエラーはその 1 つ上のレベルのエラーになります。たとえば、Recordset オブジェクトを開こうとして ODBC エラーが発生した場合、最初の Error オブジェクト - Errors(0) - には、一番深いレベルの ODBC エラーが格納され、次の Error オブジェクトには ODBC の各階層から返された ODBC エラーが格納されます。この場合、ODBC ドライバ マネージャがそれぞれの Error オブジェクトを返しますが、最後の Error オブジェクト - Errors.Count -1 - には、オブジェクトが開かれなかったことを示す DAO オブジェクトのエラーが格納されます。

Errors コレクションで特定のエラーを指定すると、エラー処理の作業でより正確にエラーの原因とエラー起点を調べるため、適切な回復を行うことができます。

メモ キーワード New を使用してオブジェクトを作成し、コレクションに追加される前に、このオブジェクトによってエラーが発生しても、DBEngine オブジェクトの Errors コレクションにはこのオブジェクトについてのエラー情報は格納されません。これは新しいオブジェクトは DBEngine オブジェクトに関連付けられていないためです。このオブジェクトのエラー情報は VBA の Error オブジェクトに含まれます。


Error オブジェクト (DAO)

Error オブジェクト

Error オブジェクトには、データ アクセス エラーに関する詳細が含まれます。各 Error オブジェクトは、DAO での単一の操作に関連しています。

解説

DAO の操作において、1 つまたは複数のエラーが発生することがあります。たとえば、ODBC サーバーへの呼び出しを行う場合に、データベース サーバー、ODBC、および DAO のエラーが発生することがあります。このようなエラーが発生すると、Error オブジェクトが DBEngine オブジェクトの Errors コレクションに格納されます。1 つの操作によって、複数の Error オブジェクトが Errors コレクションに格納されることもあります。

一連の DAO の操作でエラーが発生すると、Errors コレクションは消去され、新しい Error オブジェクトが Errors コレクションに格納されます。エラーを発生しない DAO の操作は、Errors コレクションに対して何の影響も与えません。

Errors コレクションに含まれる一連の Error オブジェクトは、1 つのエラーについて記述されたものです。最初の Error オブジェクトが一番深いレベルのエラー (起因エラー) で、2 番目のエラーはその 1 つ上のレベルのエラーになります。たとえば、Recordset オブジェクトを開こうとして ODBC エラーが発生した場合、最初の Error オブジェクト - Errors(0) - には一番深いレベルの ODBC エラーが格納され、次の Error オブジェクトには ODBC の各階層から返された ODBC エラーが格納されます。この場合、ODBC ドライバ マネージャがそれぞれの Error オブジェクトを返しますが、最後の Error オブジェクト - Errors.Count -1 - には、オブジェクトが開かれなかったことを示す DAO のエラーが格納されます。

Errors コレクションで特定のエラーを指定すると、エラー処理の作業でより正確にエラーの原因とエラー起点を調べるため、適切な回復を行うことができます。各エラーについての詳細を知るには、Jet ワークスペースと ODBCDirect ワークスペースの両方で Error オブジェクトのプロパティを調べます。プロパティには次のものがあります。

  • Description プロパティには、エラーがトラップされない場合に画面に表示されるエラーの警告文が含まれます。

  • Number プロパティには、エラー定数の長整数型 (Long) の値が含まれます。

  • Source プロパティには、エラーを引き起こしたオブジェクトが示されます。特に、Errors コレクションに ODBC データ ソースへの要求に伴う Error オブジェクトがいくつかある場合に便利です。

  • HelpFile プロパティと HelpContext プロパティは、それぞれエラーが発生した場合に Windows の適切なヘルプ ファイルとそのトピックとを示します。

    メモ Visual Basic for Applications (VBA) のプログラミングでは、キーワード New を使用してオブジェクトを作成し、コレクションに追加される前にこのオブジェクトによってエラーが発生しても、DBEngine オブジェクトの Errors コレクションにはこのオブジェクトについてのエラー情報は格納されません。これは新しいオブジェクトは DBEngine オブジェクトに関連付けられていないためです。このオブジェクトのエラー情報は VBA の Error オブジェクトに含まれます。

    データ アクセス エラーが予測される場合は、必ず VBA のエラー処理コードで Errors コレクションを確認してください。集中エラー処理ルーチンを作成する場合は、VBA の Error オブジェクトで、Errors コレクションのエラー情報が有効かどうかの確認を行ってください。Errors コレクションの最後の要素の Number プロパティ (DBEngine.Errors.Count - 1) と Error オブジェクトの値が一致する場合には、Select Case ステートメントを使用して、発生した DAO のエラーなどのエラーを確認することができます。一致しない場合は、Errors コレクションで Refresh メソッドを使用してください。


Error オブジェクト、Errors コレクションの概要 (DAO)

Error オブジェクト、Errors コレクションの概要

Error オブジェクト

Error オブジェクトには、次のプロパティがあります。メソッドとコレクションはありません。

プロパティ

Description
HelpContext
HelpFile
Number
Source

Errors コレクション

Errors コレクションは DBEngine オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


Fields コレクション (DAO)

Fields コレクション

Fields コレクションには、Index、QueryDef (Microsoft Jet ワークスペースのみ)、Relation、Recordset、または TableDef オブジェクトの保存済みの Field オブジェクトがすべて含まれています。

解説

Index、QueryDef、Relation、および TableDef の各オブジェクトの Fields コレクションには、これらのオブジェクトを構成するフィールドが含まれます。Recordset オブジェクトの Fields コレクションには、各レコードのフィールドを表す Field オブジェクトが含まれます。Recordset オブジェクトの Field オブジェクトを使用して、その Recordset オブジェクトのカレント レコードの各フィールドの値の設定または参照を行います。

序数や Name プロパティを使用して、コレクションに含まれる Field オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Fields(0)

Fields("name")

Fields![name]

同じ構文を使用して、Fields コレクションに新しく作成し、追加された Field オブジェクトの Value プロパティを参照できます。Field オブジェクト、または Field オブジェクトの Value プロパティのいずれかを参照するかは、フィールドの参照の状況によって決まります。


Field オブジェクト (DAO)

Field オブジェクト

Field オブジェクトは、共通のデータ型とプロパティを持つデータの列 (フィールド) を表すオブジェクトです。

解説

Index、QueryDef、Relation、TableDef の各オブジェクトの Fields コレクションには、これらのオブジェクトを構成するフィールドが含まれます。Recordset オブジェクトの Fields コレクションには、各レコードのフィールドを表す Field オブジェクトが含まれます。Recordset オブジェクトの Field オブジェクトを使用して、その Recordset オブジェクトのカレント レコードの各フィールドの値の設定または参照を行います。

Jet ワークスペースまたは ODBCDirect ワークスペースでも、Field オブジェクトとそのメソッドやプロパティを使用してフィールドを操作することができます。たとえば、次のことができます。

  • OrdinalPosition プロパティを使用して、Fields コレクション内での Field オブジェクトの位置を設定または返すことができます。OrdinalPosition プロパティは、ODBCDirect データベースに対しては読み取り専用です。

  • Recordset オブジェクトのフィールドの Value プロパティを使用して、格納されているデータを設定または返すことができます。

  • AppendChunk、GetChunk、FieldSize などのメソッドを使用して、Recordset オブジェクトに含まれる OLE オブジェクト型 (OLE Object) およびメモ型 (Memo) フィールドの値の設定または参照を行うことができます。

  • Type、Size、Attributes の各プロパティを使用して、フィールドに格納されているデータのデータ型を調べることができます。

  • SourceField プロパティおよび SourceTable プロパティを使用して、フィールドのデータ元を調べることができます。

Jet ワークスペースでは、次のことができます。

  • ForeignName プロパティを使用して、Relation オブジェクトの外部フィールドの情報を設定または返すことができます。

  • AllowZeroLength、DefaultValue、Required、ValidateOnSet、ValidationRule、および ValidationText の各プロパティを使用して、入力条件を設定または返すことができます。

  • TableDef オブジェクトのフィールドの DefaultValue プロパティを使用して、新しいレコード追加時のフィールドの既定値を設定することができます。

ODBCDirect ワークスペースでは、次のことができます。

  • Value プロパティ、VisibleValue プロパティ、および OriginalValue プロパティを使用して、バッチ更新が正しく完了したかどうかを確認することができます。

    メモ データベースや接続の種類に関わらず、Field オブジェクト上で使用できるメソッド、プロパティ、およびコレクションの一覧については、「概要」参照してください。

Index、TableDef、Relation の各オブジェクトで Field オブジェクトを新しく作成するには、CreateField メソッドを使用します。

Recordset オブジェクトに含まれる Field オブジェクトにアクセスする場合は、Field オブジェクトの Value プロパティで認識できるカレント レコードのデータを参照することができます。Recordset オブジェクトのデータを操作するには、通常、Fields コレクションを直接参照するのではなく、Recordset オブジェクトの Fields コレクションにある Field オブジェクトの Value プロパティを間接的に参照します。

序数や Name プロパティを使用して、コレクションに含まれる Field オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Fields(0)

Fields("name")

Fields![name]

同じ構文を使用して、Fields コレクションに新しく作成し、追加された Field オブジェクトの Value プロパティを参照できます。Field オブジェクト、または Field オブジェクトの Value プロパティのいずれかを参照するかは、フィールドの参照の状況によって決まります。


Field オブジェクト、Fields コレクションの使用例 (DAO)

Field オブジェクト、Fields コレクションの使用例

次の例では、Field オブジェクトがどこに存在するか (たとえば、TableDef の Fields コレクション、QueryDef の Fields コレクションなど) によって、Field オブジェクトの有効なプロパティが異なることを示します。このプロシージャを実行するには、FieldOutput プロシージャが必要です。

Sub FieldX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim fldTableDef As Field
    Dim fldQueryDef As Field
    Dim fldRecordset As Field
    Dim fldRelation As Field
    Dim fldIndex As Field
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    ' 異なる Fields コレクションの Field オブジェクトを
    ' オブジェクト変数に代入します。
    Set fldTableDef = _
        dbsNorthwind.TableDefs(0).Fields(0)
    Set fldQueryDef =dbsNorthwind.QueryDefs(0).Fields(0)
    Set fldRecordset = rstEmployees.Fields(0)
    Set fldRelation =dbsNorthwind.Relations(0).Fields(0)
    Set fldIndex = _
        dbsNorthwind.TableDefs(0).Indexes(0).Fields(0)

    ' レポートを出力します。
    FieldOutput "TableDef", fldTableDef
    FieldOutput "QueryDef", fldQueryDef
    FieldOutput "Recordset", fldRecordset
    FieldOutput "Relation", fldRelation
    FieldOutput "Index", fldIndex

    rstEmployees.Close
    dbsNorthwind.Close

End Sub

Sub FieldOutput(strTemp As String, fldTemp As Field)
    ' FieldX の関数をレポートします。

    Dim prpLoop As Property

    Debug.Print "Valid Field properties in " & strTemp

    ' 送られた Field オブジェクトの Properties コレクションを列挙します。
    For Each prpLoop In fldTemp.Properties
        ' TableDef オブジェクトの Fields コレクションの
        ' Value プロパティなどのように
        ' 状況によっては無効になるプロパティがあります。
        ' 無効なプロパティを使用すると、エラーが発生します。
        On Error Resume Next
        Debug.Print "    " & prpLoop.Name & " = " & _
            prpLoop.Value
        On Error GoTo 0
    Next prpLoop

End Sub


Field オブジェクト、Fields コレクションの概要 (DAO)

Field オブジェクト、Fields コレクションの概要

Field オブジェクト

Field オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Properties

メソッド

次の表は、Field オブジェクトのメソッドの一覧です。Field オブジェクトを持つ Fields コレクションのオブジェクトの種類によって、使用できるメソッドが決まります。

Method | Index | QueryDef | Recordset | Relation | TableDef
AppendChunk |  |  |  |  |
CreateProperty |  |  |  |  |
GetChunk |  |  |  |  |

プロパティ

次の表は、Field オブジェクトのプロパティの一覧です。Field オブジェクトを持つ Fields コレクションのオブジェクトの種類によって、使用できるメソッドが決まります。Index、Relation、TableDef の各オブジェクトの Fields コレクションに追加された Field オブジェクトのプロパティは、すべて読み取り専用です。

読み取り専用

読み取り/書き込みが可能

Property | Index | QueryDef | Recordset | Relation | TableDef
AllowZeroLength |  |  |  |  |
Attributes |  |  |  |  |
CollatingOrder |  |  |  |  |
DataUpdatable |  |  |  |  |
DefaultValue |  |  |  |  |
FieldSize |  |  |  |  |
ForeignName |  |  |  |  |
Name |  |  |  |  |
OrdinalPosition |  |  |  |  |
OriginalValue |  |  | * |  |
Required |  |  |  |  |
Size |  |  |  |  |
SourceField |  |  |  |  |
SourceTable |  |  |  |  |
Type |  |  |  |  |
ValidateOnSet |  |  |  |  |
ValidationRule |  |  |  |  |
ValidationText |  |  |  |  |
Value |  |  |  |  |
VisibleValue |  |  | * |  |

* これらのプロパティを使用するには、ODBCDirect ワークスペースで dbUseClientBatchCursor に DefaultCursorDriver プロパティを設定する必要があります。

Fields コレクション

Fields コレクションは、TableDef、QueryDef、Recordset、Relation、および Index の各オブジェクトに含まれます。次のメソッドとプロパティを持ちます。

Method | Index | QueryDef | Recordset | Relation | TableDef
Append |  |  |  |  |
Delete |  |  |  |  |
Refresh |  |  |  |  |

Property | Index | QueryDef | Recordset | Relation | TableDef
Count |  |  |  |  |


前方スクロール タイプの Recordset オブジェクト (DAO)

前方スクロール タイプの Recordset オブジェクト

前方スクロール タイプの Recordset オブジェクトは、レコードで前方のみにスクロールすることを除けば、スナップショット タイプのオブジェクトとほぼ同じものです。1 回のパススルーで結果セットを取得する場合に効果的です。

ODBCDirect ワークスペースでは、前方スクロール タイプの Recordset オブジェクトは、ODBC の前方スクロール タイプのカーソルに対応します。


前方スクロール タイプの Recordset オブジェクトの使用例 (DAO/Microsoft Jet)

前方スクロール タイプの Recordset オブジェクトの使用例

次の例では、前方スクロール タイプの Recordset オブジェクトを開いて、読み込み専用の特性を説明し、MoveNext メソッドで Recordset を処理します。

Sub dbOpenForwardOnlyX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' 前方スクロール タイプの Recordset オブジェクトを開きます。
    ' Recordset を処理するには
    ' MoveNext メソッドと Move メソッドのみが使用できます。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenForwardOnly)

    With rstEmployees
        Debug.Print "Forward-only-type recordset: " & _
            .Name & ", Updatable = " & .Updatable

        Debug.Print "    Field - DataUpdatable"
        ' Fields コレクションの Name プロパティと
        ' DataUpdatable プロパティを列挙します。
        For Each fldLoop In .Fields
            Debug.Print "        " & _
                fldLoop.Name & " - " & fldLoop.DataUpdatable
        Next fldLoop

        Debug.Print "    Data"
        ' Recordset を列挙します。
        Do While Not .EOF
            Debug.Print "        " & !FirstName & " " & _
                !LastName
            .MoveNext
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


前方スクロール タイプの Recordset オブジェクトの概要 (DAO)

前方スクロール タイプの Recordset オブジェクトの概要

前方スクロール タイプの Recordset オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Fields (既定)
Properties

メソッド | 制限
AddNew |
Cancel |
CancelUpdate |
Close |
CopyQueryDef |
Delete |
Edit |
GetRows |
Move | ブックマークのオフセットを使用せず、 前方向にのみ移動します。
MoveNext |
NextRecordset |
Requery |
Update |

プロパティ

次の表では、各プロパティの設定は、読み取り/書き込みが可能か、読み取り専用か、または Jet と ODBCDrect のいずれかのワークスペースにおいては常に False が設定されるかどうかを示しています。

読み取り専用

読み取り/書き込みが可能

プロパティ | 制限
BatchCollisionCount |
BatchCollisions |
BatchSize |
BOF |
Connection |
EOF |
Filter |
Name |
RecordCount |
RecordStatus |
Restartable |
StillExecuting |
Transactions | 常に False
Type |
Updatable | False
UpdateOptions |
ValidationRule |
ValidationText |


Groups コレクション (DAO)

Groups コレクション

Groups コレクションは、Workspace オブジェクトまたはユーザー アカウントの格納されているすべての Group オブジェクトを含んでいます。これは Jet ワークスペースでのみ使用することができます。

解説

既存の Group オブジェクトを User オブジェクトの Groups コレクションに追加すると、ユーザー アカウントをその Group オブジェクトのメンバに加えることができます。また、User オブジェクトを Group オブジェクトの Users コレクションに追加すると、そのグループが持つ権限をユーザー アカウントに与えることができます。いずれの場合にも既存の Group オブジェクトは、カレントの Workspace オブジェクトの Groups コレクションのメンバとして設定されている必要があります。オブジェクトを追加した直後以外に Groups コレクションまたは Users コレクションを使用する場合は、Refresh メソッドを使用してデータベースからの現在の情報をコレクションに反映させる必要がある場合もあります。

序数や Name プロパティを使用して、コレクションに含まれる Group オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Groups(0)

Groups("name")

Groups![name]


Group オブジェクト (DAO)

Group オブジェクト

セキュリティ ワークグループとして Workspace オブジェクトを操作する場合、Group オブジェクトは共通のアクセス権限を持つユーザー アカウントのグループを表します。これは Jet ワークスペースでのみ使用することができます。

解説

Group オブジェクトを作成すると、その名前を使用してデータベース、テーブル、およびクエリーなどへのアクセス権を確立し、アクセスすることができます。このアクセス権の確立や実行は、Document オブジェクトを使用して行います。Document オブジェクトは、作業している Database、TableDef、および QueryDef オブジェクトを表すオブジェクトです。

Group オブジェクトのプロパティを使用して、次のことができます。

  • 既存の Group オブジェクトの Name プロパティを使用して、グループ名を返すことができます。既存の Group オブジェクトの PID プロパティの設定値を返すことはできません。

  • 新しく作成してコレクションに追加されていない Group オブジェクトの Name プロパティおよび PID プロパティを使用して、Group オブジェクトを識別することができます。

User オブジェクトの Groups コレクションに既存の Group オブジェクトを追加して、その Group オブジェクトのユーザー アカウントのメンバーシップを確立することができます。あるいは、Group オブジェクトの Users コレクションに User オブジェクトを追加して、ユーザー アカウントにそのグループのすべての権限を与えることもできます。追加したオブジェクト以外のオブジェクトに対して、Groups コレクションまたは Users コレクションを使用する場合は、Refresh メソッドを使用してデータベースからの現在の情報を持つコレクションを更新する必要がある場合もあります。

Jet データベース エンジンには、Admins、Users、Guests という名前を持つ 3 つのオブジェクトがあらかじめ定義されています。Group オブジェクトを新しく作成するには、User オブジェクトまたは Workspace オブジェクトで CreateGroup メソッドを使用します。

序数や Name プロパティを使用して、コレクションに含まれる Group オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Groups(0)

Groups("name")

Groups![name]


Group オブジェクト、Groups コレクション、User オブジェクト、および Users コレクションの使用例 (DAO/Microsoft Jet)

Group オブジェクト、Groups コレクション、User オブジェクト、および Users コレクションの使用例

次の例では、Group オブジェクト、User オブジェクト、Groups コレクション、Users コレクションの使用について説明します。まず、新しく User オブジェクトを作成し、既定の Workspace オブジェクトの Users コレクションに追加します。続いて、新しく Group オブジェクトを作成し、既定の Workspace オブジェクトの Groups コレクションに追加します。この例では、ユーザー Pat Smith を Accounting グループに加えています。最後に、既定の Workspace オブジェクトの Users コレクションと Groups コレクションとを列挙します。そのほかの例については、Group オブジェクトと User オブジェクトの概要でメソッドとプロパティの一覧を参照してください。

Sub GroupX()

    Dim wrkDefault As Workspace
    Dim usrNew As User
    Dim usrLoop As User
    Dim grpNew As Group
    Dim grpLoop As Group
    Dim grpMember As Group

    Set wrkDefault = DBEngine.Workspaces(0)

    With wrkDefault

        ' 新しく User オブジェクトを作成し、Users コレクションに追加します。
        Set usrNew = .CreateUser("Pat Smith", _
            "abc123DEF456", "Password1")
        .Users.Append usrNew

        ' 新しく Group オブジェクトを作成し、Groups コレクションに追加します。
        Set grpNew = .CreateGroup("Accounting", _
            "UVW987xyz654")
        .Groups.Append grpNew

        ' Group オブジェクトを作成し、User オブジェクトの
        ' Groups コレクションに追加して
        ' ユーザー Pat Smith をグループ Accounting のメンバにします。
        ' Pat Smith という User オブジェクトが作成され
        ' グループ Accounting の Users コレクションに追加されていれば
        ' 同じ操作が行われます。
        Set grpMember = usrNew.CreateGroup("Accounting")
        usrNew.Groups.Append grpMember

        Debug.Print "Users collection:"

        ' 既定の workspace オブジェクトの
        ' Users コレクションに含まれるすべての User オブジェクトを列挙します。
        For Each usrLoop In .Users
            Debug.Print "    " & usrLoop.Name
            Debug.Print "        Belongs to these groups:"

            ' Groups コレクションの各 User オブジェクトの
            ' すべての Group オブジェクトを列挙します。
            If usrLoop.Groups.Count <> 0 Then
                For Each grpLoop In usrLoop.Groups
                    Debug.Print "            " & _
                        grpLoop.Name
                Next grpLoop
            Else
                Debug.Print "            [None]"
            End If

        Next usrLoop

        Debug.Print "Groups collection:"

        ' 既定の workspace の Groups コレクションの
        ' すべての Group オブジェクトを列挙します。
        For Each grpLoop In .Groups
            Debug.Print "    " & grpLoop.Name
            Debug.Print "        Has as its members:"

            ' 各 Group オブジェクトの Users コレクションの
            ' すべての User オブジェクトを列挙します。
            If grpLoop.Users.Count <> 0 Then
                For Each usrLoop In grpLoop.Users
                    Debug.Print "            " & _
                        usrLoop.Name
                Next usrLoop
            Else
                Debug.Print "            [None]"
            End If

        Next grpLoop

        ' ここではデモとして User オブジェクトと Group オブジェクトを削除します。
        .Users.Delete "Pat Smith"
        .Groups.Delete "Accounting"

    End With

End Sub


Group オブジェクト、Groups コレクションの概要 (DAO)

Group オブジェクト、Groups コレクションの概要

Group オブジェクト

Group オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

Properties
Users (既定)

メソッド

CreateUser

プロパティ

Name
PID

Groups コレクション

Groups コレクションは、User オブジェクトおよび Jet Workspace オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


Indexes コレクション (DAO)

Indexes コレクション

Indexes コレクションには、TableDef オブジェクトの保存済みの Index オブジェクトが含まれます。これは Jet ワークスペースでのみ使用することができます。

解説

テーブル タイプの Recordset オブジェクトにアクセスする場合は、Recordset オブジェクトの Index プロパティを使用してレコードの並び順を指定します。このプロパティには、既存の Index オブジェクトの Name プロパティの値を設定します。このオブジェクトは、設定の対象となる Recordset オブジェクトの元になる TableDef オブジェクトの Indexes コレクションに含まれます。

メモ Indexes コレクションに対して Append メソッドまたは Delete メソッドを適用するには、その Indexes コレクションを含む TableDef オブジェクトの Updatable プロパティに True を設定する必要があります。

Index オブジェクトを新しく作成した場合、TableDef オブジェクトの Indexes コレクションにその Index オブジェクトを追加するには、Append メソッドを使用してください。

重要 新しく作成するインデックスの属性がデータに適合していることを確認してください。インデックスに重複が許されない場合には、既存のデータ レコードに重複がないことを確認してください。重複があると、Jet データベース エンジンはインデックスを作成することができません。このような場合、Append メソッドを使用してインデックスを追加しようとすると、トラップ可能なエラーが発生します。


Index オブジェクト (DAO)

Index オブジェクト

Index オブジェクトは、データベース テーブルからアクセスするレコードの順序やレコードの重複を許容するかどうかを指定するために使用します。Index オブジェクトを使用すると、データに効率的にアクセスできます。外部データベースの場合、Index オブジェクトは外部テーブルに設定されたインデックスを示します。これは Jet ワークスペースでのみ使用することができます。

解説

Jet データベース エンジンでは、テーブルを結合する場合や Recordset オブジェクトを作成する場合にインデックスを使用します。テーブル タイプの Recordset オブジェクトが返すレコードの順序は、インデックスによって決まりますが、Jet データベース エンジンによってレコードがベース テーブルに保存される順序やほかの種類の Recordset オブジェクトが返すレコードの順序を指定することはできません。

Index オブジェクトを使用して、次のことができます。

  • Required プロパティを使用して、インデックスの Field オブジェクトに Null 値以外の値を必要とするかどうかを指定することができます。また、IgnoreNulls プロパティを使用して、Null 値がインデックス エントリを持つかどうかを指定することができます。

  • Primary プロパティと Unique プロパティを使用して、Index の並び順や重複の有無を調べることができます。

Jet データベース エンジンは、ベース テーブルのすべてのインデックスを自動的に維持します。ベース テーブルでレコードの追加、変更、削除を行うと、インデックスは更新されます。いったんデータベースを作成したら、定期的に CompactDatabase メソッドを使用してインデックスを更新してください。

テーブル タイプの Recordset オブジェクトにアクセスする場合は、その Index プロパティを使用してレコードの順序を指定します。このプロパティを Indexes コレクションの既存の Index オブジェクトの Name プロパティに設定します。このコレクションは、操作している Recordset オブジェクトの元になる TableDef オブジェクトに含まれます。

メモ インデックスは必ずしもテーブルに作成する必要はありません。インデックスのない大きなテーブルは、特定のレコードへのアクセスや結合の処理に時間がかかることがあります。逆に、インデックスが多すぎるテーブルでは各インデックスを更新するため、データベースの更新が遅くなることがあります。

インデックスの各 Field オブジェクトの Attributes プロパティによって返されるレコードの順序が決まり、その結果を受けてインデックスを使用するアクセス方法が決まります。

Index オブジェクトの Fields コレクションの各 Field オブジェクトが、インデックスの構成要素となります。インデックスを新しく定義するには、コレクションに追加する前に Index オブジェクトのプロパティを設定します。それ以降その Index オブジェクトを使用することができます。

メモ 既存の Index オブジェクトの Name プロパティの設定を修正するには、TableDef オブジェクトの Updatable プロパティが True に設定されている必要があります。

テーブルに主キーを設定すると、Jet データベース エンジンは主キーを自動的に主インデックスに定義します。主インデックスは 1 つまたは複数のフィールドで構成されます。このフィールドによって、テーブルのすべてのレコードは一意に識別され、順序付けられます。主インデックス フィールドは必ず一意になるので、この Index オブジェクトの Unique プロパティには自動的に True が設定されます。主インデックスが複数のフィールドで構成される場合、各フィールドで値が重複することはありますが、すべてのインデックス フィールドの値の組み合わせは必ず一意になります。主インデックスはテーブルのキーで構成され、また常に主キーと同じフィールドで構成されます。

重要 データが新しいインデックスの属性に合っているかを確認する必要があります。インデックスに一意な値を設定する場合は、既存のレコードに重複するものがないことを確認してください。重複するレコードが存在すると Jet データベース エンジンはインデックスを作成することができません。この場合、Append メソッドを使用してインデックスを追加する際に、トラップ可能なエラーが発生します。

参照整合性を適用するリレーションシップを作成すると、Jet データベース エンジンは、参照する側のテーブルで外部キーとして機能するインデックスが自動的に作成され、Foreign プロパティに True が設定されます。テーブル間のリレーションシップを確立すると、Jet データベース エンジンは、そのリレーションシップに違反する追加や変更からデータベースを保護します。Relation オブジェクトの Attributes プロパティを連鎖更新と連鎖削除ができるように設定した場合、Jet データベース エンジンは、関連するテーブルのレコードの更新と削除を自動的に行います。

新しい Index オブジェクトを作成するには

  1. TableDef オブジェクトに対して CreateIndex メソッドを使用します。

  2. Index オブジェクトに対して CreateField メソッドを使用して、インデックスを含むフィールド (列) ごとに Field オブジェクトを作成します。

  3. 必要に応じて Index オブジェクトのプロパティを設定します。

  4. Field オブジェクトを Fields コレクションに追加します。

  5. Index オブジェクトを Indexes コレクションに追加します。

メモ Jet データベース エンジンではクラスタ化インデックスはサポートされていないので、Jet データベース エンジンを使用したデータベースでは Clustered プロパティは無視されます。


Index オブジェクト、Indexes コレクションの使用例 (DAO/Microsoft Jet)

Index オブジェクト、Indexes コレクションの使用例

次の例では、新しく Index オブジェクトを作成し、Employees という TableDef オブジェクトの Indexes コレクションに追加します。続いて、TableDef オブジェクトの Indexes コレクションを列挙します。最後に、最初の Index オブジェクトを使用して、次に新しい Index オブジェクトを使用して Recordset を列挙します。このプロシージャを実行するには、IndexOutput プロシージャが必要です。

Sub IndexObjectX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim idxNew As Index
    Dim idxLoop As Index
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind!Employees

    With tdfEmployees
        ' 新しく Index オブジェクトを作成し
        ' Field オブジェクトをその Fileds コレクションに追加します。
        Set idxNew = .CreateIndex("NewIndex")

        With idxNew
            .Fields.Append .CreateField("Country")
            .Fields.Append .CreateField("LastName")
            .Fields.Append .CreateField("FirstName")
        End With

        ' 新規に Index オブジェクトを Employees の
        ' Indexes コレクションに追加します。
        .Indexes.Append idxNew
        .Indexes.Refresh

        Debug.Print .Indexes.Count & " Indexes in " & _
            .Name & " TableDef"

        ' Employees テーブルの Indexes コレクションを列挙します。
        For Each idxLoop In .Indexes
            Debug.Print "    " & idxLoop.Name
        Next idxLoop

        Set rstEmployees = _
            dbsNorthwind.OpenRecordset("Employees")

        ' 古い Indexes コレクションと新しい Indexes コレクションを使用して
        ' エラーを出力します。
        IndexOutput rstEmployees, "PrimaryKey"
        IndexOutput rstEmployees, idxNew.Name
        rstEmployees.Close

        ' ここではデモとして新しい Index オブジェクトを削除します。
        .Indexes.Delete idxNew.Name
    End With

    dbsNorthwind.Close

End Sub

Sub IndexOutput(rstTemp As Recordset, _
    strIndex As String)
    ' FieldX の関数をレポートします。

    With rstTemp
        ' Index オブジェクトを設定します。
        .Index = strIndex
        .MoveFirst
        Debug.Print "Recordset = " & .Name & _
            ", Index = " & .Index
        Debug.Print "    EmployeeID - Country - Name"

        ' 指定した Index オブジェクトを使用して
        ' Recordset を列挙します。
        Do While Not .EOF
            Debug.Print "    " & !EmployeeID & " - " & _
                !Country & " - " & !LastName & ", " & !FirstName
            .MoveNext
        Loop

    End With

End Sub


Index オブジェクト、Indexes コレクションの概要 (DAO)

Index オブジェクト、Indexes コレクションの概要

Index オブジェクト

Index オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

Fields (既定)
Properties

メソッド

CreateField
CreateProperty

プロパティ

Clustered
DistinctCount
Foreign
IgnoreNulls
Name
Primary
Required
Unique

Indexes コレクション

Indexes コレクションは、TableDef オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


Parameters コレクション (DAO)

Parameters コレクション

Parameters コレクションには、QueryDef オブジェクトの Parameter オブジェクトがすべて含まれています。

解説

Parameters コレクションは、既存のパラメータに関する情報のみを提供します。Parameters コレクションにオブジェクトを追加したり、Parameters コレクションからオブジェクトを削除したりすることはできません。


Parameter オブジェクト (DAO)

Parameter オブジェクト

Parameter オブジェクトは、クエリーに渡される値を表します。パラメータは、パラメータ クエリーから作成した QueryDef オブジェクトのパラメータに関連するオブジェクトです。

解説

Parameter オブジェクトによって、クエリーを再コンパイルせずに、頻繁に実行する QueryDef オブジェクトの引数を変更することができます。

Parameter オブジェクトのプロパティを使用すると、クエリーを実行する前にクエリーのパラメータを設定し、変更することができます。Parameter オブジェクトを使用すると、次のことができます。

  • Name プロパティを使用して、パラメータ名を返すことができます。

  • Value プロパティを使用して、クエリーで使用されるパラメータの値を設定または返すことができます。

  • Type プロパティを使用して、Parameter オブジェクトのデータ型を返すことができます。

  • Direction プロパティを使用して、パラメータを入力パラメータ、出力パラメータ、または出入力パラメータのいずれかに設定するか、または返すことができます。

ODBCDirect ワークスペースでは、次のこともできます。

  • Type プロパティの設定を変更します。これにより Value プロパティの設定はクリアされます。

  • Direction プロパティを使用して、パラメータを入力パラメータ、出力パラメータ、または出入力パラメータのいずれかに設定するか、または返すことができます。


Parameter オブジェクト、Parameters コレクションの使用例 (DAO)

Parameter オブジェクト、Parameters コレクションの使用例

次の例では、Parameter オブジェクトと Parameters コレクションを説明します。一時的に QueryDef オブジェクトを作成し、QueryDef オブジェクトの Parameters コレクションの変更に基づいたデータを取得します。このプロシージャを実行するためには、ParametersChange プロシージャが必要です。

Sub ParameterX()

    Dim dbsNorthwind As Database
    Dim qdfReport As QueryDef
    Dim prmBegin As Parameter
    Dim prmEnd As Parameter

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 2 つの Parameter を持つ
    '一時的な QueryDef オブジェクトを作成します。
    Set qdfReport = dbsNorthwind.CreateQueryDef("", _
        "PARAMETERS dteBegin DateTime, dteEnd DateTime; " & _
        "SELECT EmployeeID, COUNT(OrderID) AS NumOrders " & _
        "FROM Orders WHERE ShippedDate BETWEEN " & _
        "[dteBegin] AND [dteEnd] GROUP BY EmployeeID " & _
        "ORDER BY EmployeeID")
    Set prmBegin = qdfReport.Parameters!dteBegin
    Set prmEnd = qdfReport.Parameters!dteEnd

    ' 指定した Parameter の値を使用して、レポートを出力します。
    ParametersChange qdfReport, prmBegin, #1/1/95#, _
        prmEnd, #6/30/95#
    ParametersChange qdfReport, prmBegin, #7/1/95#, _
        prmEnd, #12/31/95#

    dbsNorthwind.Close

End Sub

Sub ParametersChange(qdfTemp As QueryDef, _
    prmFirst As Parameter, dteFirst As Date, _
    prmLast As Parameter, dteLast As Date)
    ' ParameterX の関数を出力します。

    Dim rstTemp As Recordset
    Dim fldLoop As Field

    ' Parameter の値を設定し、一時的な QueryDef オブジェクトから
    ' Recordset を開きます。
    prmFirst = dteFirst
    prmLast = dteLast
    Set rstTemp = _
        qdfTemp.OpenRecordset(dbOpenForwardOnly)
    Debug.Print "Period " & dteFirst & " to " & dteLast

    ' Recordset を列挙します。
    Do While Not rstTemp.EOF

        ' Recordset の Fields コレクションを列挙します。
        For Each fldLoop In rstTemp.Fields
            Debug.Print " - " & fldLoop.Name & " = " & fldLoop;
        Next fldLoop

        Debug.Print
        rstTemp.MoveNext
    Loop

    rstTemp.Close

End Sub


Parameter オブジェクト、Parameters コレクションの概要 (DAO)

Parameter オブジェクト、Parameters コレクションの概要

Parameter オブジェクト

Parameter オブジェクトには、次のコレクションとプロパティがあります。メソッドはありません。

凡例：

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Properties

プロパティ

Direction
Name
Type
Value (既定)

Parameters コレクション

Parameters コレクションは、QueryDef オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


Properties コレクション (DAO)

Properties コレクション

Properties コレクションには、オブジェクトの特定のインスタンスに関する Property オブジェクトがすべて含まれています。

解説

Connection オブジェクトと Error オブジェクトを除くすべての DAO オブジェクトは、Properties コレクションを 1 つずつ持っており、その中には一定の組み込みの Property オブジェクトが含まれています。これらの Property オブジェクト (単にプロパティとも呼ばれます) は、オブジェクトのインスタンスにほかのインスタンスと区別できる特性を与えます。

オブジェクトの中には、組み込みプロパティに加えて、ユーザー定義のプロパティを作成して追加できるものもあります。ユーザー定義のプロパティをオブジェクトの既存のインスタンスに追加するには、まず CreateProperty メソッドを使用してプロパティの特性を定義します。続いて、Append メソッドを使用して、プロパティをコレクションに追加します。まだ Properties コレクションに追加されていないユーザー定義の Property オブジェクトを更新すると、エラーが発生します。同じ名前の Property オブジェクトを含む Properties コレクションにユーザー定義の Property オブジェクトを追加する場合にも、エラーが発生します。

ユーザー定義のプロパティは、Delete メソッドを使用して Properties コレクションから削除することができますが、組み込みプロパティは削除できません。

メモ ユーザー定義の Property オブジェクトは、それを追加した Properties コレクションが含まれている特定のインスタンスにのみ関連付けられます。追加したプロパティは、同じ種類のオブジェクトのすべてのインスタンスに対して定義されるわけではありません。

オブジェクトの Properties コレクションを使用して、オブジェクトの組み込みプロパティとユーザー定義のプロパティを列挙することができます。どのようなプロパティがあるのか、またプロパティを扱うための特性 （Name プロパティや Type プロパティ） についてなどの正確な情報をあらかじめ知っている必要はありません。ただし、Workspace オブジェクトの Password プロパティなどのような書き込み専用のプロパティを読み取ろうとしたり、TableDef オブジェクトの Fields コレクションの Field オブジェクトで Value プロパティを設定しようとするように、不適切な状況でプロパティの読み取りや書き込みをしようとすると、エラーが発生します。

序数や Name プロパティを使用して、コレクションに含まれる組み込みの Property オブジェクトを参照する場合は、次のいずれの構文も使用できます。

object.Properties(0)

object.Properties("name")

object.Properties![name]

組み込みプロパティの場合は、次の構文も使用できます。

object.name

メモ ユーザー定義のプロパティの場合は、完全な構文 object.Properties("name") を使用する必要があります。

同じ構文を使用して、Property オブジェクトの Value プロパティを参照することもできます。参照しているものが Property オブジェクト自体なのか Property オブジェクトの Value プロパティなのかは、参照の状況によって決まります。


Property オブジェクト (DAO)

Property オブジェクト

Property オブジェクトは、DAO オブジェクトの組み込みの特性やユーザー定義の特性を表すオブジェクトです。

解説

Connection オブジェクトと Error オブジェクトを除くすべての DAO オブジェクトには、その DAO オブジェクトの組み込みプロパティに対応する Property オブジェクトを持つ Properties コレクションが含まれています。ユーザーは、Property オブジェクトを定義して DAO オブジェクトの Properties コレクションに追加することもできます。これらの Property オブジェクトは、ほかのインスタンスと区別できる一意な特性をオブジェクトのインスタンスに与えます。この場合、Property オブジェクトは単にプロパティと呼ばれます。

次のオブジェクトに対して、ユーザー定義のプロパティを作成することができます。

  • Database、Index、QueryDef、および TableDef の各オブジェクト

  • QueryDef オブジェクトおよび TableDef オブジェクトの Fields コレクションに含まれる Field オブジェクト

ユーザー定義のプロパティを追加するには、CreateProperty メソッドを使用して、一意な Name プロパティの設定を持つ Property オブジェクトを作成します。新しい Property オブジェクトの Type プロパティおよび Value プロパティを設定して、それらを適切なオブジェクトの Properties コレクションに追加します。ユーザー定義のプロパティを追加するオブジェクトは、既にコレクションに追加されている必要があります。まだ Properties コレクションに追加されていないユーザー定義の Property オブジェクトを更新すると、エラーが発生します。同じ名前の Property オブジェクトを含む Properties コレクションにユーザー定義の Property オブジェクトを追加する場合も、エラーが発生します。

Delete メソッドを使用して、ユーザー定義のプロパティを Properties コレクションから削除することはできますが、組み込みプロパティは削除できません。

メモ ユーザー定義の Property オブジェクトは、それを追加した Properties コレクションが含まれている特定のインスタンスにのみ関連付けられます。追加したプロパティは、同じ種類のオブジェクトのすべてのインスタンスに対して定義されるわけではありません。

オブジェクトの Properties コレクションを使用すると、オブジェクトの組み込みプロパティとユーザー定義のプロパティを列挙することができます。どのようなプロパティがあるのか、またプロパティを扱うための特性 (Name プロパティや Type プロパティ） についてなどの正確な情報をあらかじめ知っている必要はありません。ただし、Workspace オブジェクトの Password プロパティなどのような書き込み専用のプロパティを読み取ろうとしたり、TableDef オブジェクトの Fields コレクションの Field オブジェクトで Value プロパティを設定しようとするように、不適切な状況でプロパティの読み取りや書き込みをしようとすると、エラーが発生します。

Property オブジェクト自体には、次の 4 つの組み込みプロパティがあります。

  • Name プロパティは、プロパティを識別するための文字列型 (String) の値を入れます。

  • Type プロパティは、プロパティのデータ型を指定するための整数型 (Interger) の値を入れます。

  • Value プロパティは、プロパティを設定するためのバリアント型 (Variant) の値を入れます。

  • Inherited プロパティは、ほかのオブジェクトからプロパティを継承するかどうかを示すブール型 (Boolean) の値です。たとえば、Recordset オブジェクトの Fields コレクションに含まれる Field オブジェクトが元の TableDef オブジェクトまたは QueryDef オブジェクトからプロパティを継承するようにすることができます。

序数や Name プロパティを使用して、コレクションに含まれる組み込みの Property オブジェクトを参照する場合は、次のいずれの構文も使用できます。

object.Properties(0)

object.Properties("name")

object.Properties![name]

組み込みプロパティの場合は、次の構文も使用できます。

object.name

メモ ユーザー定義のプロパティの場合は、完全な構文 object.Properties("name") を使用する必要があります。

同じ構文を使用して、Property オブジェクトの Value プロパティを参照することもできます。参照しているものが Property オブジェクト自体なのか、Property オブジェクトの Value プロパティなのかは、参照の状況によって決まります。


Property オブジェクト、Properties コレクションの使用例 (DAO)

Property オブジェクト、Properties コレクションの使用例

次の例では、カレントのデータベースにユーザー定義のプロパティを作成し、その Type プロパティと Value プロパティを設定して、データベースの Properties コレクションに追加します。続いて、データベースのすべてのプロパティを列挙します。そのほかの例については、Property オブジェクトの概要でプロパティの一覧を参照してください。

Sub PropertyX()

    Dim dbsNorthwind As Database
    Dim prpNew As Property
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' ユーザー定義の Property オブジェクトを作成、追加します。
        Set prpNew = .CreateProperty()
        prpNew.Name = "UserDefined"
        prpNew.Type = dbText
        prpNew.Value = "This is a user-defined property."
        .Properties.Append prpNew

        ' カレントのデータベースの
        ' すべての Properties コレクションを列挙します。
        Debug.Print "Properties of " & .Name
        For Each prpLoop In .Properties
            With prpLoop
                Debug.Print "    " & .Name
                Debug.Print "        Type: " & .Type
                Debug.Print "        Value: " & .Value
                Debug.Print "        Inherited: " & _
                    .Inherited
            End With
        Next prpLoop

        ' ここではデモとして新しい Property オブジェクトを削除します。
        .Properties.Delete "UserDefined"
    End With

End Sub


Property オブジェクト、Properties コレクションの概要 (DAO)

Property オブジェクト、Properties コレクションの概要

Property オブジェクト

Property オブジェクトには、次のコレクションとプロパティがあります。メソッドはありません。

コレクション

Properties

プロパティ

Inherited (ODBCDirect データベースでは常に False)
Name
Type
Value

Properties コレクション

Properties コレクションは、Connection オブジェクトと Error オブジェクトを除くそれぞれ別の DAO オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


QueryDefs コレクション (DAO)

QueryDefs コレクション

QueryDefs コレクションには、Jet データベースの Database オブジェクトにある QueryDef オブジェクトおよび ODBCDirect ワークスペースにある Connection オブジェクトの Querydef オブジェクトがすべて含まれています。

解説

QueryDef オブジェクトを新しく作成するには、CreateQueryDef メソッドを使用します。Jet ワークスペースでは、引数 name を文字列に指定したり、新しい QueryDef オブジェクトの Name プロパティに長さ 0 の文字列 ("") ではない文字列を明示的に設定したりした場合は、自動的に QueryDefs コレクションに追加され、ディスクに格納される、持続的な QueryDef オブジェクトを作成します。長さ 0 の文字列 ("") を引数 name として渡したり、明示的に設定したりした場合には、一時的な QueryDef オブジェクトが作成されます。

ODBCDirect ワークスペースでは、QueryDef は常に一時的です。QueryDefs コレクションには、開いている QueryDef オブジェクトがすべて含まれます。QueryDef が閉じると、QueryDef オブジェクトは QueryDefs コレクションから自動的に削除されます。

序数や Name プロパティを使用して、コレクションに含まれる組み込みの QueryDef オブジェクトを参照する場合は、次のいずれの構文も使用できます。

QueryDefs(0)

QueryDefs("name")

QueryDefs![name]

一時的な QueryDef オブジェクトは、割り当てたオブジェクト変数のみを使用して参照することができます。


QueryDef オブジェクト (DAO)

QueryDef オブジェクト

QueryDef オブジェクトは、Jet データベースのクエリーの保存済みの定義または ODBCDirect ワークスペースの一時的なクエリーの定義を表すオブジェクトです。

解説

QueryDef オブジェクトを使用して、クエリーを定義することができます。たとえば、次のことができます。

  • SQL プロパティを使用して、クエリーの定義を設定または返すことができます。

  • QueryDef オブジェクトの Parameters コレクションを使用して、クエリーのパラメータを設定または返すことができます。

  • Type プロパティを使用して、クエリーの種類を調べることができます。クエリーには、既存のテーブルからレコードを選択するものや、新しくテーブルを作成するもの、あるテーブルから別のテーブルへレコードを挿入するもの、レコードを削除するもの、レコードを更新するものなどがあります。

  • MaxRecords プロパティを使用して、クエリーから返されるレコード数を制限することができます。

  • ODBCTimeout プロパティを使用して、クエリーがレコードを返すまでの時間を指定することができます。ODBCTimeout プロパティは、ODBC データにアクセスするどのクエリーにも適用されます。

Jet ワークスペースでは、次のことができます。

  • ReturnsRecords プロパティを使用して、クエリーがレコードを返すように指定することができます。ReturnsRecords プロパティは、SQL パススルー クエリーに対してのみ有効です。

  • Connect プロパティを使用して、ODBC データベースへの SQL パススルー クエリーを作成することができます。

ODBCDirect ワークスペースでは、次のことができます。

  • Prepare プロパティを使用して、クエリーの実行時に ODBC SQLPrepare API を呼び出すかどうかを決めることができます。

  • CacheSize プロパティを使用して、クエリーから返されるレコードをキャッシュすることができます。

一時的な QueryDef オブジェクトを作成することもできます。持続的な QueryDef オブジェクトとは異なり一時的な QueryDef オブジェクトは、ディスクに保存されたり、QueryDefs コレクションに追加されたりしません。一時的な QueryDef オブジェクトは、実行中に繰り返し実行する必要があるクエリーに有効です。ただし、特に実行中に SQL ステートメントを作成する場合は、ディスクに保存する必要があります。

Jet ワークスペースの持続的な QueryDef オブジェクトは、コンパイル済みの SQL ステートメントと見なすことができます。クエリーは、OpenRecordset メソッドで指定するよりも持続的な QueryDef オブジェクトから実行した方が速くなります。これは、Jet データベース エンジンでクエリーをコンパイルする必要がないためです。

Jet データベース エンジンにアクセスしている外部データベース エンジンの固有の SQL 文法を使用する場合は、QueryDef オブジェクトを使用することをお勧めします。たとえば、Microsoft SQL Server で使用する Transact SQL クエリーを作成して、QueryDef オブジェクトに格納することができます。Jet データベース エンジン以外の SQL クエリーを使用する必要がある場合は、Connect プロパティに外部データ ソースを示す文字列を設定します。クエリーの Connect プロパティが有効であれば、クエリーは、Jet データベース エンジンを経由することなく外部データベース サーバーに直接引き渡され、処理されます。

QueryDef オブジェクトを新しく作成するには、CreateQueryDef メソッドを使用します。Jet ワークスペースでは、引数 name に文字列を指定したり、新しい QueryDef オブジェクトの Name プロパティに長さ 0 の文字列 ("") ではない文字列を明示的に設定したりした場合、自動的に QueryDefs コレクションに追加され、ディスクに格納される持続的な QueryDef オブジェクトを作成します。長さ 0 の文字列 ("") を引数 name として渡したり、明示的に設定したりした場合には、一時的な QueryDef オブジェクトが作成されます。

ODBCDirect ワークスペースでは、QueryDef オブジェクトは常に一時的です。QueryDefs コレクションには、開いている QueryDef オブジェクトがすべて含まれます。QueryDef オブジェクトを閉じると、QueryDef オブジェクトは QueryDefs コレクションから自動的に削除されます。

序数や Name プロパティを使用して、コレクションに含まれる組み込みの QueryDef オブジェクトを参照する場合は、次のいずれの構文も使用できます。

QueryDefs(0)

QueryDefs("name")

QueryDefs![name]

一時的な QueryDef オブジェクトは、割り当てたオブジェクト変数のみを使用して参照することができます。


QueryDef オブジェクト、QueryDefs コレクションの使用例 (DAO)

QueryDef オブジェクト、QueryDefs コレクションの使用例

次の例では、新しく QueryDef オブジェクトを作成し、Northwind という Database オブジェクトの QueryDefs コレクションに追加します。続いて、QueryDefs コレクションと新しい QueryDef の Properties コレクションを列挙します。

Sub QueryDefX()

    Dim dbsNorthwind As Database
    Dim qdfNew As QueryDef
    Dim qdfLoop As QueryDef
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 新しく QueryDef オブジェクトを作成します。
    ' 作成された QueryDef オブジェクトは名前を付けられているため
    ' 自動的に QueryDefs コレクションに追加されます。
    Set qdfNew = dbsNorthwind.CreateQueryDef("NewQueryDef", _
            "SELECT * FROM Categories")

    With dbsNorthwind
        Debug.Print .QueryDefs.Count & _
            " QueryDefs in " & .Name

        ' QueryDefs コレクションを列挙します。
        For Each qdfLoop In .QueryDefs
            Debug.Print "    " & qdfLoop.Name
        Next qdfLoop

        With qdfNew
            Debug.Print "Properties of " & .Name

            ' 新しい QueryDef オブジェクトの
            ' Properties コレクションを列挙します。
            For Each prpLoop In .Properties
                On Error Resume Next
                Debug.Print "    " & prpLoop.Name & " - " & _
                    IIf(prpLoop = "", "[empty]", prpLoop)
                On Error Goto 0
            Next prpLoop
        End With

        ' ここではデモとして新しい QueryDef オブジェクトを削除します。
        .QueryDefs.Delete qdfNew.Name
        .Close
    End With

End Sub


QueryDef オブジェクト、QueryDefs コレクションの概要 (DAO)

QueryDef オブジェクト、QueryDefs コレクションの概要

QueryDef オブジェクト

QueryDef オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Fields
Parameters (既定)
Properties

メソッド

Cancel
Close
CreateProperty
Execute
OpenRecordset

プロパティ

CacheSize
Connect
DateCreated
KeepLocal
LastUpdated
LogMessages
MaxRecords
Name
ODBCTimeout
Prepare
RecordsAffected
Replicable
ReturnsRecords
SQL
StillExecuting
Type
Updatable

QueryDefs コレクション

QueryDefs コレクションは、ODBCDirect ワークスペースの各 Connection オブジェクトおよび各 Database オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


Recordsets コレクション (DAO)

Recordsets コレクション

Recordsets コレクションには、Connection または Database オブジェクト内で開いている Recordset オブジェクトがすべて含まれています。

解説

DAO オブジェクトを使用する場合、データ処理のほとんどは Recordset オブジェクトを使用して行います。

新しく開かれた Recordset オブジェクトは、オブジェクトを開いている場合には Recordsets コレクションに追加され、閉じると自動的に削除されます。

Recordset のオブジェクト変数は、必要な数のみ作成できます。異なる Recordset オブジェクトが競合のない同じテーブル、クエリー、およびフィールドにアクセスしても問題はありません。

序数や Name プロパティを使用して、コレクションに含まれる Recordset オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Recordsets(0)

Recordsets("name")

Recordsets![name]

メモ Recordsets コレクションに同じ名前を作成すると、同じデータ ソースまたはデータベースの Recordset オブジェクトを何度も開くことができます。Recordset オブジェクトをオブジェクト変数に代入し、変数の名前でそれらを参照してください。


Recordset オブジェクト (DAO)

Recordset オブジェクト

Recordset オブジェクトは、ベース テーブルのレコード、またはクエリーの実行によって返されたレコードを表すオブジェクトです。

解説

Recordset オブジェクトを使用して、データベースのデータをレコードのレベルで操作することができます。DAO オブジェクトを使用する場合、データ処理のほとんどは Recordset オブジェクトを使用して行います。Recordset オブジェクトはすべてレコード (行) およびフィールド (列) を使用して構築されます。Recordset オブジェクトには、次の 5 つのタイプがあります。

  • テーブル タイプの Recordset オブジェクト - ベース テーブルのコードで使用される代表的なオブジェクトです。単一のデータベース テーブルに対し、レコードを追加、変更、または削除するために使用します。これは Jet ワークスペースでのみ使用することができます。

  • ダイナセット タイプの Recordset オブジェクト - レコードを更新できるクエリーの実行結果です。ダイナセット タイプの Recordset オブジェクトは動的なレコード セットであり、元のデータベース テーブルのレコードを追加、変更、または削除するために使用します。ダイナセット タイプの Recordset オブジェクトには、データベースにある 1 つまたは複数のテーブルのフィールドを入れることができます。このタイプは ODBC のキーセット カーソルに対応しています。

  • スナップ ショット タイプの Recordset オブジェクト - 静的なレコード セットで、データの検索またはレポートの作成に使用します。スナップショット タイプの Recordset オブジェクトには、データベースにある 1 つまたは複数のテーブルのフィールドを入れることができますが、データを更新することはできません。このタイプは、ODBC の静的カーソルに対応しています。

  • 前方スクロール タイプの Recordset オブジェクト - カーソルがない点を除けば、スナップショット タイプの Recordset オブジェクトと同じです。レコードのスクロールは前方にしかできません。1 回のパススルーで結果セットを取得する場合に効果的です。このタイプは、ODBC の前方スクロール タイプのカーソルに対応しています。

  • 動的タイプの Recordset オブジェクト - 1 つまたは複数のベース テーブルからのクエリーの実行結果セットを示しています。このベース テーブルでは、行を返すクエリーによって、レコードの追加、変更、または削除を行うことができます。さらに、このレコード セットには、ベース テーブルにほかのユーザーが追加、削除、または編集したレコードも含まれます。このタイプは、ODBCDirect ワークスペースの ODBC の動的カーソルのみに対応しています。

OpenRecordset メソッドの引数 type を使用して、作成する Recordset オブジェクトの種類を選択することができます。

Jet ワークスペースでは、引数 type を指定しなかった場合に DAO は、最も機能的に使用できる種類の Recordset オブジェクトを作成します。まずテーブル タイプの Recordset オブジェクトを作成し、その種類が使用できない場合には、ダイナセット タイプ、スナップショット タイプ、および前方スクロール タイプの Recordset オブジェクトの順に作成します。

ODBCDirect ワークスペースでは、引数 type を指定しなかった場合に DAO は、クエリーの応答が最も速い種類の Recordset オブジェクトを作成します。まず前方スクロール タイプの Recordset オブジェクトを作成し、その種類が使用できない場合には、スナップショット タイプ、ダイナセット タイプ、および動的タイプの Recordset オブジェクトの順に作成します。

Jet ワークスペースでリンクしていない TableDef オブジェクトを使用して Recordset オブジェクトを作成する場合には、テーブル タイプの Recordset オブジェクトが作成されます。ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトのみが Jet 接続型 ODBC データベースのテーブルやリンクを持つテーブルに作成されます。

新しく開かれた Recordset オブジェクトは、オブジェクトを開いている場合には Recordsets コレクションに追加され、閉じると自動的に削除されます。

メモ Recordset オブジェクトとその Recordset オブジェクトを含む Database オブジェクトを表す変数を使用する場合は、それらの変数の有効期間と適用範囲が一致するようにしてください。たとえば、Recordset オブジェクトを表すパブリック変数を宣言する場合、そのレコード セットを含む Database オブジェクトは、パブリックであるか、あるいは Sub プロシージャまたは Function プロシージャの中で Static キーワードを使用して宣言されたかを確認する必要があります。

Recordset のオブジェクト変数は、必要な数のみ作成できます。異なる Recordset オブジェクトが競合のない同じテーブル、クエリー、およびフィールドにアクセスしても問題はありません。

ダイナセット タイプ、スナップショット タイプ、前方スクロール タイプの各 Recordset オブジェクトは、ローカル メモリに格納されます。データを格納するのに十分な空き容量がローカル メモリにない場合は、余ったデータが TEMP ディスクの空き容量に保存されます。この空き容量がなくなると、トラップ可能なエラーが発生します。

Recordset オブジェクトの既定のコレクションは Fields コレクションであり、Field オブジェクトの既定のプロパティは Value プロパティです。コードを単純化するには、この 2 つの既定の規則を使用します。

Recordset オブジェクトを作成すると、最初のレコードがカレント レコードになります。レコードが存在しない場合は、RecordCount プロパティの設定は 0 に、また BOF プロパティおよび EOF プロパティの設定値は True になります。

MoveNext、MovePrevious、MoveFirst、および MoveLast の各メソッドを使用して、カレント レコードの位置を移動することができます。前方スクロール タイプの Recordset オブジェクトは、MoveNext メソッドのみをサポートしています。Move メソッドを使用して各レコードに行く（Recordset を "歩く"） 場合、BOF プロパティと EOF プロパティを使用して、Recordset オブジェクトの先頭または終端を調べることができます。

Jet ワークスペースのダイナセット タイプおよびスナップショット タイプの Recordset オブジェクトの場合は、FindFirst などの Find 系メソッドを使用して、抽出条件に基づいた特定のレコードを検索することもできます。レコードが見つからないと、NoMatch プロパティは True に設定されます。テーブル タイプの Recordset オブジェクトの場合は、Seek メソッドを使用してレコードを検索します。

Type プロパティは作成される Recordset オブジェクトの種類を示し、Updatable プロパティはオブジェクトのレコードが更新可能かどうかを示します。

各 Field オブジェクトとすべての Index オブジェクトの名前およびデータ型などのベース テーブルの構造に関する情報は、TableDef オブジェクトに格納されます。

序数や Name プロパティを使用して、コレクションに含まれる Recordset オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Recordsets(0)

Recordsets("name")

Recordsets![name]

メモ Recordsets コレクションに同じ名前を作成すると、同じデータ ソースまたはデータベースの Recordset オブジェクトを何度も開くことができます。Recordset オブジェクトをオブジェクト変数に代入し、変数の名前でそれらを参照してください。


Recordset オブジェクト、Recordsets コレクションの使用例 (DAO)

Recordset オブジェクト、Recordsets コレクションの使用例

次の例では、Recordset オブジェクトと Recordsets コレクションを説明します。4 つの異なるタイプの Recordset オブジェクトを開いて、カレントの Database オブジェクトの Recordsets コレクションと、各 Recordset オブジェクトの Properties コレクションを列挙します。

Sub RecordsetX()

    Dim dbsNorthwind As Database
    Dim rstTable As Recordset
    Dim rstDynaset As Recordset
    Dim rstSnapshot As Recordset
    Dim rstForwardOnly As Recordset
    Dim rstLoop As Recordset
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind

        ' 各タイプの Recordset オブジェクトを 1 つずつ開きます。
        Set rstTable = .OpenRecordset("Categories", _
            dbOpenTable)
        Set rstDynaset = .OpenRecordset("Employees", _
            dbOpenDynaset)
        Set rstSnapshot = .OpenRecordset("Shippers", _
            dbOpenSnapshot)
        Set rstForwardOnly = .OpenRecordset _
            ("Employees", dbOpenForwardOnly)

        Debug.Print "Recordsets in Recordsets " & _
            "collection of dbsNorthwind"

        ' Recordsets コレクションを列挙します。
        For Each rstLoop In .Recordsets

            With rstLoop
                Debug.Print "    " & .Name

                ' 各 Recordset の Properties コレクションを列挙します。
                ' この状況で無効な値を持つプロパティはトラップします。
                For Each prpLoop In .Properties
                    On Error Resume Next
                    If prpLoop <> "" Then Debug.Print _
                        "        " & prpLoop.Name & _
                        " = " & prpLoop
                    On Error GoTo 0
                Next prpLoop

            End With

        Next rstLoop

        rstTable.Close
        rstDynaset.Close
        rstSnapshot.Close
        rstForwardOnly.Close

        .Close
    End With

End Sub


Recordset オブジェクト、Recordsets コレクションの概要 (DAO)

Recordset オブジェクト、Recordsets コレクションの概要

Recordset オブジェクト

Recordset オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet と ODBCDirect のどちらかのワークスペースで使用することができる機能です。

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Fields (既定)
Properties

Recordset メソッド

次の表は Recordset メソッドの一覧で、各メソッドでサポートされている Recordset オブジェクトの種類を示しています。また、Jet および ODBCDirect のワークスペースのうちどちらで使用できるのか、または両方で使用できるのかを示します。

メソッド | テーブル | ダイナセット | スナップショット | 前方スクロール | 動的
AddNew |  |  | * |  |
Cancel |  |  |  |  |
CancelUpdate |  |  | * |  |
Clone |  |  |  |  |
Close |  |  |  |  |
CopyQueryDef |  |  |  |  |
Delete |  |  | * |  |
Edit |  |  | * |  |
FillCache |  |  |  |  |
FindFirst |  |  |  |  |
FindLast |  |  |  |  |
FindNext |  |  |  |  |
FindPrevious |  |  |  |  |
GetRows |  |  |  |  |
Move |  |  |  | ブックマークのオフセットを使用しない前方移動でのみ使用可 |
MoveFirst |  |  |  |  |
MoveLast |  |  |  |  |
MoveNext |  |  |  |  |
MovePrevious |  |  |  |  |
NextRecordset |  |  |  |  |
OpenRecordset |  |  |  |  |
Requery |  |  |  |  |
Seek |  |  |  |  |
Update |  |  | * |  |

* ODBCDirect ワークスペースでは、スナップショット タイプの Recordset オブジェクトは、使用している ODBC ドライバによっては更新可能です。AddNew、Edit、Delete、Update および CancelUpdate の各メソッドは、ODBC ドライバがスナップショット タイプの Recordset オブジェクトの更新をサポートしていれば、ODBCDirect スナップショット タイプの Recordset オブジェクトでのみ使用することができます。

Recordset プロパティ

次の表では、Recordset オブジェクトの各種類に適用されるプロパティ、および、Jet または ODBCDirect のワークスペースで読み取り/書き込みが可能か、読み取り専用か、または常に False かを示しています。

読み取り専用

読み取り/書き込みが可能

プロパティ | テーブル | ダイナセット | スナップショット | 前方スクロール | 動的
AbsolutePosition |  |  |  |  |
BatchCollisionCount |  |  |  |  |
BatchCollisions |  |  |  |  |
BatchSize |  |  |  |  |
BOF |  |  |  |  |
Bookmark |  |  |  |  |
Bookmarkable |  |  |  |  |
CacheSize |  | Jet ワークスペース用 |  |  |
 |  | ODBCDirect ワークスペース用 |  |  |
CacheStart |  |  |  |  |
Connection |  |  |  |  |
DateCreated |  |  |  |  |
EditMode |  |  |  |  |
EOF |  |  |  |  |
Filter |  |  |  |  |
Index |  |  |  |  |
LastModified |  |  | * |  |
LastUpdated |  |  |  |  |
LockEdits |  | Jet ワークスペース用 | Jet ワークスペース用 |  |
 |  | ODBCDirect ワークスペース用 | ODBCDirect ワークスペース用 |  |
Name |  |  |  |  |
NoMatch |  |  |  |  |
PercentPosition |  |  |  |  |
RecordCount |  |  |  |  |
RecordStatus |  |  |  |  |
Restartable | False |  |  |  |
Sort |  |  |  |  |
StillExecuting |  |  |  |  |
Transactions |  |  | 常に False | 常に False |
Type |  |  |  |  |
Updatable |  |  | 常に Jet ワークスペースでは False | 常に Jet ワークスペースでは False |
 |  |  | ODBCDirect ワークスペース内 * | ODBCDirect ワークスペース内* |
UpdateOptions |  |  |  |  |
ValidationRule |  |  |  |  |
ValidationText |  |  |  |  |

* ODBCDirect ワークスペースでは、スナップショット タイプの Recordset オブジェクトは、使用している ODBC ドライバによっては更新可能です。ODBC ドライバがスナップショット タイプの Recordset オブジェクトの更新をサポートしている場合、LastModified プロパティは、ODBCDirect スナップショット タイプの Recordset オブジェクトでのみ使用でき、Updatable プロパティは True になります。

Recordsets コレクション

Recordsets コレクションは、各 Connection および Database オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Refresh

プロパティ

Count


Relations コレクション (DAO)

Relations コレクション

Relations コレクションには、Database オブジェクトに格納されている Relation オブジェクトがすべて含まれています。これは Jet データベースでのみ使用することができます。

解説

Relation オブジェクトを使用して、データベースに新しくリレーションシップを作成したり、データベース内の既存のリレーションシップの設定を調べたりすることができます。Relation オブジェクトを Relations コレクションに追加するには、まず CreateRelation メソッドで Relation オブジェクトを作成し、その後 Append メソッドで Relations コレクションに追加します。この新しい Relation オブジェクトは Database オブジェクトを閉じる場合に保存されます。Relations コレクションから Relation オブジェクトを削除するには、Delete メソッドを使用します。

序数や Name プロパティを使用して、コレクションに含まれる Relation オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Relations(0)

Relations("name")

Relations![name]


Relation オブジェクト (DAO)

Relation オブジェクト

Relation オブジェクトは、テーブルまたはクエリーのフィールド間のリレーションシップを表すオブジェクトです。これは Jet データベースでのみ使用することができます。

解説

Relation オブジェクトを使用して、データベースに新しくリレーションシップを作成したり、データベース内の既存のリレーションシップの設定を調べたりすることができます。

Relation オブジェクトとそのプロパティを使用して、次のことができます。

  • ベース テーブルでのフィールド間に強制リレーションシップを設定できます。このリレーションシップにクエリーまたはリンク テーブルを含めることはできません。

  • あらゆる種類のテーブルおよびクエリー間に強制しないリレーションシップを設定できます。リレーションシップにリンク テーブルを含めることもできます。

  • Name プロパティを使用して、参照される主テーブルと参照する外部キー側のテーブルのフィールド間のリレーションシップを参照することができます。

  • Attributes プロパティを使用して、テーブルのフィールド間のリレーションシップを一対一リレーションシップにするか、または一対多リレーションシップにするか、および参照整合性の適用方法を設定することができます。

  • Attributes プロパティを使用して、Jet データベース エンジンで主テーブルおよび外部キー側のテーブルに対して連鎖更新と連鎖削除を行えるようにするかどうかを設定することができます。

  • Attributes プロパティを使用して、テーブルのフィールド間のリレーションシップを左結合または右結合に設定することができます。

  • Relation オブジェクトの Fields コレクションに含まれる Field オブジェクトの Name プロパティを使用して、参照されるテーブルの主キー フィールド名を設定または返すことができます。また、Field オブジェクトの ForeignName プロパティを使用して、参照するテーブルの外部キー フィールド名を設定または返すことができます。

データベースに対して確立されているリレーションシップに違反する変更を実行すると、トラップ可能なエラーが発生します。連鎖更新または連鎖削除を要求すると、Jet データベース エンジンは主キーを持つテーブルまたは外部キーを持つテーブルの修正も行い、強制的にリレーションシップを設定します。

たとえば、データベース Northwind は、テーブル Orders とテーブル Customers の間のリレーションシップを含みます。テーブル Customers のフィールド CustomerID は主キーで、テーブル Orders のフィールド CustomerID は外部キーです。テーブル Orders に新しいレコードが入力されると、Jet データベース エンジンは、テーブル Orders のフィールド CustomerID で、テーブル Customers に一致するものを検索します。一致するものが見つからない場合には、Jet データベース エンジンは新しいレコードを受けいれず、トラップ可能なエラーが発生します。

参照整合性を適用する場合、参照される側のテーブルのキー フィールドには一意なインデックスが既に存在している必要があります。参照する側のテーブルには、Jet データベースによって、外部キーとして機能するインデックスが自動的に作成され、その Foreign プロパティに True が設定されます。

Relation オブジェクトを新しく作成するには、CreateRelation メソッドを使用します。序数や Name プロパティを使用して、コレクションに含まれる Relation オブジェクトを参照する場合は、次のいずれの構文も使用できます。

Relations(0)

Relations("name")

Relations![name]


Relation オブジェクト、Relations コレクションの使用例 (DAO/Microsoft Jet)

Relation オブジェクト、Relations コレクションの使用例

次の例では、既存の Relation オブジェクトのデータのエントリを制御する方法を示します。このプロシージャでは、故意に誤った CategoryID を持つレコードを追加します。これにより、エラー ハンドラのルーチンを起動します。

Sub RelationX()

    Dim dbsNorthwind As Database
    Dim rstProducts As Recordset
    Dim prpLoop As Property
    Dim fldLoop As Field
    Dim errLoop As Error

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstProducts = dbsNorthwind.OpenRecordset("Products")

    ' リレーションの異なるすべての部分と各部分が
    ' 格納されている場所を示すレポートを出力します。
    With dbsNorthwind.Relations!CategoriesProducts
        Debug.Print "Properties of " & .Name & " Relation"
        Debug.Print "    Table = " & .Table
        Debug.Print "    ForeignTable = " & .ForeignTable
        Debug.Print "Fields of " & .Name & " Relation"
        With .Fields!CategoryID
            Debug.Print "    " & .Name
            Debug.Print "        Name = " & .Name
            Debug.Print "        ForeignName = " & .ForeignName
        End With
    End With

    ' リレーションに違反するレコードを追加します。
    With rstProducts
        .AddNew
        !ProductName = "Trygve's Lutefisk"
        !CategoryID = 10
        On Error GoTo Err_Relation
        .Update
        On Error GoTo 0
        .Close
    End With

    dbsNorthwind.Close

    Exit Sub

Err_Relation:

    ' 無効なデータによるエラーをユーザーに通知します。
    If DBEngine.Errors.Count > 0 Then
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & _
                vbCr & errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub


Relation オブジェクト、Relations コレクションの概要 (DAO)

Relation オブジェクト、Relations コレクションの概要

Relation オブジェクト

Relation オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

Fields (既定)
Properties

メソッド

CreateField

プロパティ

Attributes
ForeignTable
Name
PartialReplica
Table

Relations コレクション

Relations コレクションは、Jet データベースの各 Database オブジェクトごとに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


スナップショット タイプの Recordset オブジェクト (DAO)

スナップショット タイプの Recordset オブジェクト

スナップショット タイプの Relation オブジェクトは、元になるテーブルのデータを調べるために使用することのできる静的なレコード セットです。ODBCDirect データベースでは、スナップショット タイプの Recordset オブジェクトは静的カーソルに対応します。

解説

スナップショット タイプの Recordset オブジェクトを作成するには、開いているデータベース、別のダイナセット タイプの Recordset オブジェクト、スナップショット タイプの Recordset オブジェクト、または QueryDef オブジェクトで OpenRecordset メソッドを使用します。

スナップショット タイプの Recordset オブジェクトは、データベースの 1 つまたは複数のフィールドを含むことができます。Jet ワークスペースでは、スナップショット タイプのレコード セットは更新できません。ODBCDirect ワークスペースでは、ODBC ドライバの種類によっては更新可能です。

スナップショット タイプの Recordset オブジェクトを作成する場合、拡張子 .mdb ファイルのメモ型 (Memo) および OLE オブジェクト型 (OLE Object) - ロング バイナリ型 (Long Binary) のフィールドを除くすべてのフィールドのデータがメモリに読み込まれます。一度データを読み込むと、ベース テーブルのデータを変更しても、スナップショット タイプの Recordset オブジェクトのデータには反映されません。最新のデータが反映されたスナップショット タイプの Recordset オブジェクトを再び読み込むには、Requery メソッドを使用するか、または OpenRecordset メソッドを再実行します。

スナップショット タイプの Recordset オブジェクトのデータは、いつも同じ並び順に従うとは限りません。データを並べ替えるには、ORDER BY 句を指定した SQL ステートメントを使用して、Recordset オブジェクトを作成します。また、SQL ステートメントを使用して、レコードにフィルタをかけて特定のレコードのみを Recordset オブジェクトに追加することもできます。この方法を使用すると、Filter プロパティや Sort プロパティを使用したり、レコードごとに条件に合うかを調べるたりするよりも、データへのアクセスが速くなります。

スナップショット タイプの Recordset オブジェクトの作成やアクセスにかかる時間は、通常、ダイナセット タイプの Recordset オブジェクトよりも短くなります。これは、スナップショット タイプの Recordset オブジェクトの場合、レコードがメモリに読み込まれたり TEMP のディスクの空き容量に保存されることに加え、Jet データベース エンジンでページをロックしたりマルチユーザー処理を行ったりする必要がないからです。ただし、スナップショット タイプの Recordset オブジェクトではすべてのレコードをローカル メモリに読み込むため、ダイナセット タイプの Recordset オブジェクトよりも多くリソースを使用します。


スナップショット タイプの Recordset オブジェクトの使用例 (DAO)

スナップショット タイプの Recordset オブジェクトの使用例

次の例では、スナップショット タイプの Recordset オブジェクトを開き、読み取り専用の特性を説明します。

Sub dbOpenSnapshotX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenSnapshot)

    With rstEmployees
        Debug.Print "Snapshot-type recordset: " & _
            .Name

        ' スナップショット タイプの Recordset オブジェクトの
        ' Properties コレクションを列挙し
        ' この状況で無効な値を持つプロパティはトラップします。
        For Each prpLoop In .Properties
            On Error Resume Next
            Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error Goto 0
        Next prpLoop

        .Close
    End With

    dbsNorthwind.Close

End Sub


スナップショット タイプの Recordset オブジェクトの概要 (DAO)

スナップショット タイプの Recordset オブジェクトの概要

スナップショット タイプの Recordset オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Fields (既定)
Properties

メソッド | 制限
AddNew | *
Cancel |
CancelUpdate | *
Clone |
Close |
CopyQueryDef |
Delete | *
Edit | *
FindFirst |
FindLast |
FindNext |
FindPrevious |
GetRows |
Move |
MoveFirst |
MoveLast |
MoveNext |
MovePrevious |
NextRecordset |
OpenRecordset |
Requery |
Update | *

* ODBCDirect ワークスペースでは、スナップショット タイプの Recordset オブジェクトは、使用している ODBC ドライバによっては更新可能です。ODBC ドライバが更新可能なスナップショット タイプのオブジェクトをサポートしている場合は、ODBCDirect のスナップショット タイプの Recordset オブジェクトでのみ AddNew、Edit、Delete、Update および CancelUpdate の各メソッドを使用することができます。

プロパティ

次の表では、各プロパティの設定は、読み取り/書き込みが可能か、読み取り専用か、または Jet と ODBCDrect のいずれかのワークスペースにおいては常に False が設定されるかどうかを示しています。

読み取り専用

読み取り/書き込みが可能

プロパティ | 制限
AbsolutePosition |
BatchCollisionCount |
BatchCollisions |
BatchSize |
BOF |
Bookmark |
Bookmarkable |
CacheSize |
Connection |
EditMode |
EOF |
Filter |
LastModified | *
LockEdits |
Name |
NoMatch |
PercentPosition |
RecordCount |
RecordStatus |
Restartable |
Sort |
StillExecuting |
Transactions | 常に False
Type |
Updatable | Jet ワークスペースでは常に False ODBCDirect ワークスペースでは
UpdateOptions |
ValidationRule |
ValidationText |

* ODBCDirect ワークスペースでは、スナップショット タイプの Recordset オブジェクトは、使用している ODBC ドライバによっては更新可能です。ODBC ドライバが更新可能なスナップショット タイプのオブジェクトをサポートしている場合は、ODBCDirect のスナップショット タイプの Recordset オブジェクトでのみ LastModified プロパティが使用でき、Updatable プロパティには True が設定されます。


TableDefs コレクション (DAO)

TableDefs コレクション

TableDefs コレクションには、データベースに格納されている TableDef オブジェクトがすべて含まれています。これは Jet ワークスペースでのみ使用することができます。

解説

テーブル定義の操作は、TableDef オブジェクトとそのメソッドおよびプロパティを使用して行います。

Database オブジェクトの既定コレクションは TableDefs コレクションです。

序数や Name プロパティを使用して、コレクションに含まれる TableDef オブジェクトを参照する場合は、次のいずれの構文も使用できます。

TableDefs(0)

TableDefs("name")

TableDefs![name]


TableDef オブジェクト (DAO)

TableDef オブジェクト

TableDef オブジェクトは、ベース テーブルまたはリンク テーブルの保存済みの定義を表すオブジェクトです。これは Jet ワークスペースでのみ使用することができます。

解説

テーブル定義の操作は、TableDef オブジェクトとそのメソッドおよびプロパティを使用して行います。TableDef オブジェクトを使用して、たとえば次のことができます。

  • データベースのローカル テーブル、リンク テーブル、および外部テーブルのフィールドとインデックスの構造を調べることができます。

  • リンク テーブルの Connect プロパティおよび SourceTableName プロパティを使用して、リンク テーブルの情報を設定または返すことができます。また、RefreshLink メソッドを使用して、リンク テーブルへの接続を更新することができます。

  • ValidationRule プロパティおよび ValidationText プロパティを使用して、有効な条件を設定または返すことができます。

  • OpenRecordset メソッドを使用して、テーブル定義に基づいたテーブル タイプ、ダイナセット タイプ、またはスナップショット タイプの Recordset オブジェクトを作成することができます。

ベース テーブルでは、RecordCount プロパティには指定したデータベース テーブルのレコード数が含まれています。リンク テーブルでは、RecordCount プロパティの設定は常に -1 です。

TableDef オブジェクトを新しく作成するには、CreateTableDef メソッドを使用します。

テーブルにフィールドを追加するには

  1. すべてのユーザーが、対象となるテーブルに基づいている Recordset オブジェクトを閉じていることを確認します。

  2. CreateField メソッドを使用して Field オブジェクト変数を作成し、そのプロパティを設定します。

  3. Append メソッドを使用して、新しい Field オブジェクトを TableDef オブジェクトの Fields コレクションに追加します。

オブジェクトに関連付けられているインデックスが存在しない場合、TableDefs コレクションから Field オブジェクトを削除することはできますが、フィールドのデータは失われます。

データベースに新しいレコードを格納できるテーブルを作成するには

  1. CreateTableDef メソッドを使用して、TableDef オブジェクトを作成します。

  2. TableDef オブジェクトのプロパティを設定します。

  3. CreateField メソッドを使用して、テーブルのフィールドごとに Field オブジェクト変数を作成し、そのプロパティを設定します。

  4. Append メソッドを使用して、新しい Field オブジェクトを TableDef オブジェクトの Fields コレクションに追加します。

  5. Append メソッドを使用して、新しい TableDef オブジェクトを Database オブジェクトの TableDefs コレクションに追加します。

  6. リンク テーブルは、TableDef オブジェクトの SourceTableName プロパティおよび Connect プロパティによってデータベースに接続されます。

テーブルをデータベースにリンクするには

  1. CreateTableDef メソッドを使用して、TableDef オブジェクトを作成します。

  2. TableDef オブジェクトの Connect プロパティおよび SourceTableName プロパティを設定します。必要に応じて、Attributes プロパティも設定します。

  3. Append メソッドを使用して、新しい TableDef オブジェクトを Database オブジェクトの TableDefs コレクションに追加します。

序数や Name プロパティを使用して、コレクションに含まれる TableDef オブジェクトを参照する場合は、次のいずれの構文も使用できます。

TableDefs(0)

TableDefs("name")

TableDefs![name]


TableDef オブジェクト、TableDefs コレクションの使用例 (DAO/Microsoft Jet)

TableDef オブジェクト、TableDefs コレクションの使用例

次の例では、新しく TableDef オブジェクトを作成し、Northwind という Database オブジェクトの TableDefs コレクションに追加します。続いて、TableDefs コレクションと新しい TableDef オブジェクトの Properties コレクションを列挙します。

Sub TableDefX()

    Dim dbsNorthwind As Database
    Dim tdfNew As TableDef
    Dim tdfLoop As TableDef
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 新しく TableDef オブジェクトを作成し
    ' Field オブジェクトを Fields コレクションに追加し
    ' TableDef オブジェクトを Database オブジェクトの
    ' TableDefs コレクションに追加します。
    Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")
    tdfNew.Fields.Append tdfNew.CreateField("Date", dbDate)
    dbsNorthwind.TableDefs.Append tdfNew

    With dbsNorthwind
        Debug.Print .TableDefs.Count & _
            " TableDefs in " & .Name

        ' TableDefs コレクションを列挙します。
        For Each tdfLoop In .TableDefs
            Debug.Print "    " & tdfLoop.Name
        Next tdfLoop

        With tdfNew
            Debug.Print "Properties of " & .Name

            ' 新しい TableDef オブジェクトの
            ' Properties コレクションを列挙し
            ' 値が空でない Properties コレクションのみを出力します。
            ' with non-empty values.
            For Each prpLoop In .Properties
                Debug.Print "    " & prpLoop.Name & " - " & _
                    IIf(prpLoop = "", "[empty]", prpLoop)
            Next prpLoop

        End With

        ' ここではデモとして新しい TableDef オブジェクトを削除します。
        .TableDefs.Delete tdfNew.Name
        .Close
    End With

End Sub


TableDef オブジェクト、TableDefs コレクションの概要 (DAO)

TableDef オブジェクト、TableDefs コレクションの概要

TableDef オブジェクト

TableDef オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

Fields (既定)
Indexes
Properties

メソッド

CreateField
CreateIndex
CreateProperty
OpenRecordset
RefreshLink

プロパティ

Attributes
ConflictTable
Connect
DateCreated
KeepLocal (ユーザー定義)
LastUpdated
Name
RecordCount
Replicable (ユーザー定義)
ReplicaFilter
SourceTableName
Updatable
ValidationRule
ValidationText

TableDef オブジェクトは、アプリケーション定義のプロパティを含む場合もあります。これらのプロパティの詳細については、アプリケーションのオンライン ヘルプを参照してください。

TableDefs コレクション

TableDefs コレクションは、Jet データベースの各 Database オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


テーブル タイプの Recordset オブジェクト (DAO)

テーブル タイプの Recordset オブジェクト

テーブル タイプの Recordset オブジェクトは、テーブルに対しレコードを追加、変更、および削除するために使用するベース テーブルを表すオブジェクトです。テーブル タイプの Recordset オブジェクトでは、カレント レコードのみがメモリに読み込まれます。定義済みのインデックスを使用すると、テーブル タイプの Recordset オブジェクト内のレコードの並び順を決めることができます。これは Jet ワークスペースでのみ使用することができます。

解説

テーブル タイプの Recordset オブジェクトを作成するには、開いている Database オブジェクトに対して OpenRecordset メソッドを使用します。

テーブル タイプの Recordset オブジェクトは Jet データベースのベース テーブルを使用して作成できますが、ODBC またはリンク テーブルを使用して作成することはできません。Excel、dBASE、Paradox などの ISAM データベースを直接開いてテーブル タイプの Recordset オブジェクトを作成することはできます。

テーブル タイプの Recordset オブジェクトでは、ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトと異なり、複数のベース テーブルを参照できません。また、データの抽出や並べ替えを行う SQL ステートメントを、テーブル タイプの Recordset オブジェクトに対して使用することはできません。通常、テーブル タイプの Recordset オブジェクトにアクセスする場合は、定義済みのインデックスのうちの 1 つをテーブルに対して指定します。アプリケーションに返されるレコードは、このインデックスによって並べ替えられます。テーブルにインデックスがない場合は、返されるレコードの順序は必ずしも指定しません。必要であれば、特定の順序でレコードを並べて返すためのインデックスをアプリケーション側で作成します。テーブル タイプの Recordset オブジェクトでレコードの並び順を指定するには、Index プロパティに有効なインデックスを設定します。

また、テーブル タイプの Recordset オブジェクトでは、ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトとは異なり、RecordCount プロパティに対して正しい値を得るために明示的にレコードを読み込む必要はありません。

データの一貫性を保持するため、Edit メソッドおよび Update メソッドの操作中は、テーブル タイプの Recordset オブジェクトはロック状態になります。これによって、1 人のユーザーのみが同時に 1 つのレコードを更新できるようになります。Jet データベース エンジンでレコードをロックする場合、レコードが格納されている 2KB のページ全体をロックします。

非 ODBC のテーブルで使用されるロックには、排他的ロックと共有的ロックの 2 種類があります。ODBC でアクセスするテーブルでは、常に共有的ロックが適用されます。編集中に適用されるロック状態は、LockEdits プロパティによって決まります。


テーブル タイプの Recordset オブジェクトの使用例 (DAO/Microsoft Jet)

テーブル タイプの Recordset オブジェクトの使用例

次の例では、テーブル タイプの Recordset オブジェクトを開いて、その Index プロパティを設定し、そのレコードを列挙します。

Sub dbOpenTableX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' dbOpenTable が既定値です
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        Debug.Print "Table-type recordset: " & .Name

        ' 定義済みのインデックスを使用します。
        .Index = "LastName"
        Debug.Print "    Index = " & .Index

        ' レコードを列挙します。
        Do While Not .EOF
            Debug.Print "        " & !LastName & ", " & _
                !FirstName
            .MoveNext
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


テーブル タイプの Recordset オブジェクトの概要 (DAO)

テーブル タイプの Recordset オブジェクトの概要

テーブル タイプの Recordset オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。これらは Jet ワークスぺースでのみ使用することができます。

コレクション

Fields (既定)
Properties

メソッド

AddNew
CancelUpdate
Clone
Close
Delete
Edit
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
OpenRecordset
Seek
Update

プロパティ

次の表では、各プロパティの設定は、読み取り/書き込みが可能か、読み取り専用か、または常に False かどうかを示しています。

読み取り専用

読み取り/書き込みが可能

プロパティ | 制限
BOF |
Bookmark |
Bookmarkable |
DateCreated |
EditMode |
EOF |
Index |
LastModified |
LastUpdated |
LockEdits |
Name |
NoMatch |
PercentPosition |
RecordCount |
Restartable | 常に False
Transactions |
Type |
Updatable |
ValidationRule |
ValidationText |


Users コレクション (DAO)

Users コレクション

Users コレクションには、Workspace または Group オブジェクトの格納されている User オブジェクトがすべて含まれます。これは Jet ワークスペースでのみ使用することができます。

解説

既存の User オブジェクトを Group オブジェクトの Users コレクションに追加すると、その Group オブジェクトが持つアクセス権をユーザー アカウントに与えることができます。また、Group オブジェクトを User オブジェクトの Groups コレクションに追加して、ユーザー アカウントをそのグループのメンバに加えることができます。Groups コレクションまたは Users コレクションのうちこの追加を行わなかった方のコレクションを使用する場合は、Refresh メソッドを使用してアカウント情報を更新しなければなりません。

Jet データベース エンジンには、Admin および Guest という 2 つの定義済みの User オブジェクトがあります。Admin というユーザーは、Admins という Group オブジェクトと Users という Group オブジェクトのメンバです。Guest というユーザーは、Guests という Group オブジェクトのメンバです。

序数や Name プロパティを使用して、コレクションに含まれる User オブジェクトを参照する場合は、次のいずれの構文も使用できます。

[workspace | group].Users(0)

[workspace | group].Users("name")

[workspace | group].Users![name]


User オブジェクト (DAO)

User オブジェクト

User オブジェクトは、Workspace オブジェクトがセキュリティ ワークグループとして実行されている場合にアクセス権限を持つユーザー アカウントを表すオブジェクトです。これは Jet ワークスペースでのみ使用することができます。

解説

User オブジェクトを使用すると、データベース、テーブル、クエリーを表す Document オブジェクトへのアクセス権を確立して、アクセスすることができます。また、特定の User オブジェクトのプロパティの設定値がわかる場合は、その User オブジェクトでアクセス権を持つ Workspace オブジェクトを新しく作成することもできます。

既存の User オブジェクトを Group オブジェクトの Users コレクションに追加すると、その Group オブジェクトが持つアクセス権をユーザー アカウントに与えることができます。また、Group オブジェクトを User オブジェクトの Groups コレクションに追加して、ユーザー アカウントをそのグループのメンバに加えることができます。Groups コレクションまたは Users コレクションのうちこの追加を行わなかった方のコレクションを使用する場合は、Refresh メソッドを使用してアカウント情報を更新することが必要になることもあります。

User オブジェクトのプロパティを使用すると、次のことができます。

  • Name プロパティを使用して、既存のユーザー名を返すことができます。既存の User オブジェクトの PID プロパティおよび Password プロパティの設定値は返すことができません。

  • 新しく作成してからコレクションに追加していない User オブジェクトの Name、PID、Password の各プロパティを使用して、その User オブジェクトを識別することができます。Password プロパティを設定していない Password プロパティは長さ 0 の文字列 ("") に設定されます。

Jet データベース エンジンには、Admin および Guest という 2 つの定義済みの User オブジェクトがあります。Admin というユーザーは、Admins という Group オブジェクトと Users という Group オブジェクトのメンバです。Guest というユーザーは、Guests という Group オブジェクトのメンバです。

User オブジェクトを新しく作成するには、CreateUser メソッドを使用します。

序数や Name プロパティを使用して、コレクションに含まれる User オブジェクトを参照する場合は、次のいずれの構文も使用できます。

[workspace | group].Users(0)

[workspace | group].Users("name")

[workspace | group].Users![name]


User オブジェクト、Users コレクションの概要 (DAO)

User オブジェクト、Users コレクションの概要

User オブジェクト

User オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

コレクション

Groups (既定)
Properties

メソッド

CreateGroup
NewPassword

プロパティ

Name
Password
PID

Users コレクション

Users コレクションは、各 Group オブジェクトおよび Jet データベースの Workspace オブジェクトに含まれます。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


Workspaces コレクション (DAO)

Workspaces コレクション

Workspaces コレクションには、DBEngine オブジェクトにあるアクティブで表示可能な Workspace オブジェクトがすべて含まれています。表示されない Workspace オブジェクトは、コレクションに追加されず、割り当てた変数によって参照されます。

解説

現在のセッションを管理したり追加セッションを開始したりするには、Workspace オブジェクトを使用します。

オブジェクトを最初に参照または使用する際には、既定のワークスペースである DBEngine.Workspaces(0) が自動的に作成されます。既定のワークスペースの Name プロパティと UserName プロパティの設定はそれぞれ "#Default Workspace#" と "Admin" になり、セキュリティが有効な場合は、UserName プロパティの設定はログインしているユーザー名になります。

Workspace オブジェクトを新しく作成するには、CreateWorkspace メソッドを使用します。Workspace オブジェクトを新しく作成した後、Workspaces コレクションからその Workspace オブジェクトを参照する必要がある場合は、その Workspace オブジェクトを Workspaces コレクションに追加する必要があります。

序数や Name プロパティを使用して、コレクションに含まれる Workspace オブジェクトを参照する場合は、次のいずれの構文も使用できます。

DBEngine.Workspaces(0)

DBEngine.Workspaces("name")

DBEngine.Workspaces![name]


Workspace オブジェクト (DAO)

Workspace オブジェクト

Workspace オブジェクトは、ユーザーが使用する名前付きセッションを定義するオブジェクトです。Workspace オブジェクトは、開いているデータベースを含んでおり、トランザクションの同時実行や Jet データベースのワークスペースのセキュリティ ワークグループなどの機能を提供します。また、外部データへアクセスする際に Jet データベースを経由するか ODBCDirect を経由するかを制御します。

解説

Workspace オブジェクトは、持続的なオブジェクトではありません。このオブジェクトは、Jet データベース エンジンまたは ODBCDirect でアプリケーションがデータと相互作用する方法を定義します。Workspace オブジェクトを使用して、最新セッションを管理したり、新しいセッションを開始することができます。セッションでは、複数のデータベースを開いてトランザクションを管理することができます。Workspace オブジェクトを使用して、次のことができます。

  • Name、UserName、および Type プロパティを使用して、名前付きのセッションを確立することができます。このセッションでは、複数のデータベースを開いたり、ネストされたトランザクションのインスタンスを処理したりするなどの作業の適用範囲を作成することができます。

  • Close メソッドを使用して、セッションを終了することができます。

  • OpenDatabase メソッドを使用して、Workspace オブジェクトで複数の既存のデータベースを開くことができます。

  • BeginTrans、CommitTrans、および Rollback の各メソッドを使用して、セッション内でネストされたトランザクションを管理することができます。また、複数の Workspace オブジェクトを使用して、同時に平行して実行される複数のトランザクションを処理することができます。

さらに、Jet データベースを使用すると、ユーザー名およびパスワードに基づくセキュリティを確立することができます。

  • Groups コレクションおよび Users コレクションを使用して、Workspace のオブジェクトへのユーザーとグループのアクセス権を確立することができます。

  • IsolateODBCTrans プロパティを使用して、同じ Jet 接続型 ODBC データベースを含む複数のトランザクションを分離することができます。

    メモ Jet データベースまたは ODBCDirect データベースの Workspace オブジェクトで使用できるメソッド、プロパティ、コレクションの一覧については、「概要」を参照してください。

オブジェクトを最初に参照または使用する際には、既定のワークスペースである DBEngine.Workspaces(0) が自動的に作成されます。既定のワークスペースの Name プロパティと UserName プロパティの設定はそれぞれ "#Default Workspace#" と "Admin" になり、セキュリティが有効な場合は、UserName プロパティの設定はログインしているユーザー名になります。

ODBCDirect Workspace オブジェクトを確立して Jet データベース エンジンをメモリに読み込まないようするには、DBEngine オブジェクトの DefaultType プロパティを dbUseODBC に設定するか、CreateWorkspace メソッドの引数 type を dbUseODBC に設定します。

トランザクションを使用すると、特定の Workspace オブジェクトで複数の Database オブジェクトを開いている場合でも、その Workspace オブジェクトのすべてのデータベースが影響を受けます。たとえば、BeginTrans メソッドを使用して、あるデータベースで複数のレコードを更新してからそれ以外のデータベースでレコードを削除した場合に Rollback メソッドを使用すると、この更新と削除の操作はキャンセルされ、ロールバックされます。追加の Worksapace オブジェクトを作成して、Database オブジェクトの独立したトランザクションを管理することができます。

Worksapace オブジェクトを作成するには、CreateWorkspace メソッドを使用します。Workspace オブジェクトを新しく作成した後、Workspaces コレクションからその Workapace オブジェクトを参照する必要がある場合は、その Workspace オブジェクトを Workspaces コレクションに追加する必要があります。

Workspaces コレクションに追加しない場合でも、新しく作成した Workspace オブジェクトを使用できます。ただし、割り当てたオブジェクト変数によって参照する必要があります。

序数や Name プロパティを使用して、コレクションに含まれる Workspace オブジェクトを参照する場合は、次のいずれの構文も使用できます。

DBEngine.Workspaces(0)

DBEngine.Workspaces("name")

DBEngine.Workspaces![name]


Workspace オブジェクト、Workspaces コレクションの使用例 (DAO)

Workspace オブジェクト、Workspaces コレクションの使用例

次の例では、新しい Jet Workspace オブジェクトと新しい ODBCDirect Workspace オブジェクトを作成し、Workspaces コレクションに追加します。続いて、Workspaces コレクションと各 Workspace オブジェクトの Properties コレクションを列挙します。そのほかの例については、Workspace オブジェクトまたは Workspaces コレクションのメソッドとプロパティを参照してください。

Sub WorkspaceX()

    Dim wrkNewJet As Workspace
    Dim wrkNewODBC As Workspace
    Dim wrkLoop As Workspace
    Dim prpLoop As Property

    ' 新しい Jet ワークスペースを作成します。
    Set wrkNewJet = CreateWorkspace("NewJetWorkspace", _
        "admin", "", dbUseJet)
    Workspaces.Append wrkNewJet

    ' 新しい ODBCDirect ワークスペースを作成します。
    Set wrkNewODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)
    Workspaces.Append wrkNewODBC

    ' Workspaces コレクションを列挙します。
    For Each wrkLoop In Workspaces
        With wrkLoop
            Debug.Print "Properties of " & .Name
            ' 新しい Workspace オブジェクトの
            ' Properties コレクションを列挙します。
            For Each prpLoop In .Properties
                On Error Resume Next
                If prpLoop <> "" Then Debug.Print "    " & _
                    prpLoop.Name & " = " & prpLoop
                On Error GoTo 0
            Next prpLoop
        End With
    Next wrkLoop

    wrkNewJet.Close
    wrkNewODBC.Close

End Sub


Workspace オブジェクト、Workspaces コレクションの概要 (DAO)

Workspace オブジェクト、Workspaces コレクションの概要

Workspace オブジェクト

Workspace オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。

凡例:

Jet ワークスペースでのみ使用することができる機能です。

ODBCDirect ワークスペースでのみ使用することができる機能です。

コレクション

Connections
Databases (既定)
Groups
Properties
Users

メソッド

BeginTrans
Close
CommitTrans
CreateDatabase
CreateGroup
CreateUser
OpenConnection
OpenDatabase
Rollback

プロパティ

DefaultCursorDriver
IsolateODBCTrans
LoginTimeout
Name
Type
UserName

Workspaces コレクション

Workspaces コレクションは、DBEngine オブジェクトに含まれています。このコレクションには、次のメソッドとプロパティがあります。

メソッド

Append
Delete
Refresh

プロパティ

Count


オブジェクトによる DAO メソッド

次のリファレンスは、オブジェクト名ですべての DAO メソッドをグループ化しています。Jet または ODBC ワークスペースで使用できる特定のメソッドかどうかは、各メソッドのヘルプ トピックを参照してください。

Connection

Container - メソッドはありません。

Database

DBEngine

Document

Error - メソッドはありません。

Field

Group

Index

 Parameter - メソッドはありません。

Property - メソッドはありません。

QueryDef

Recordset

Relation

TableDef

User

Workspace


Jet ワークスペースの DAO メソッド

次に、Jet ワークスペース (ISAM データベース ファイル) で使用することができるすべての DAO メソッドをアルファベット順に示しています。

A-C

AddNew

Append

AppendChunk

BeginTrans

CancelUpdate

Clone

Close

CommitTrans

CompactDatabase

CopyQueryDef

 CreateDatabase

CreateField

CreateGroup

CreateIndex

CreateProperty

CreateQueryDef

CreateRelation

CreateTableDef

CreateUser

CreateWorkspace

D-M

Delete

Edit

Execute

FillCache

FindFirst

FindLast

FindNext

FindPrevious

GetChunk

 GetRows

Idle

MakeReplica

Move

MoveFirst

MoveLast

MoveNext

MovePrevious

N-Z

NewPassword

OpenDatabase

OpenRecordset

PopulatePartial

Refresh

RefreshLink

RegisterDatabase

 RepairDatabase

Requery

Rollback

Seek

SetOption

Synchronize

Update


ODBCDirect ワークスペースの DAO メソッド

次に、ODBCDirect ワークスペースで使用することができるすべての DAO メソッドをアルファベット順に示します。

A-C

AddNew

Append

AppendChunk

BeginTrans

Cancel

CancelUpdate

 Clone

Close

CommitTrans

CreateQueryDef

CreateWorkspace

D-M

Delete

Edit

Execute

GetChunk

GetRows

 Move

MoveFirst

MoveLast

MoveNext

MovePrevious

N-Z

NextRecordset

OpenConnection

OpenDatabase

OpenRecordset

Refresh

 RegisterDatabase

Requery

Rollback

Update


AddNew メソッド (DAO)

AddNew メソッド

更新可能な Recordset オブジェクトに新しいレコードを作成します。

構文

recordset.AddNew

プレースホルダ recordset は、オブジェクト変数で、新しいレコードを追加する更新可能な Recordset オブジェクトを表します。

解説

AddNew メソッドを使用すると、新しいレコードをプレースホルダ recordset で指定した Recordset オブジェクトに作成および追加することができます。フィールドには既定値が設定されます。既定値が指定されていなければ、フィールドにはテーブル タイプの Recordset オブジェクトの既定値である Null 値が設定されます。

新しいレコードの修正後に、Update メソッドを使用して変更内容を保存し、レコードを Recordset に追加します。Update メソッドを使用するまで、データベースは変更されません。

注意 AddNew メソッドを実行した後、Update メソッドを使用せずにほかのレコードに移動すると、新規レコードに対して行った変更は警告なく失われます。さらに、Recordset オブジェクトを閉じた場合、または、Recordset オブジェクトかその Database オブジェクトを宣言しているプロシージャを終了した場合には、新規に作成したレコードは警告なく破棄されます。

メモ Jet ワークスペースで AddNew メソッドを使用して、Jet データベース エンジンがカレント レコードを保存するために新しいページの作成を必要とする場合、ページのロックの状態は排他的になります。新しく作成されたレコードが既存のページに保存できる場合、ページのロック状態は共有的になります。

Recordset オブジェクトの最後のレコードに移動していない場合、ほかのプロセスによってベース テーブルに追加されるレコードがカレント レコードよりも後ろに配置されると、そのレコードは Recordset オブジェクトに含まれることになります。Recordset オブジェクトにレコードを追加した場合、レコードは Recordset オブジェクトで認識できます。また、元のテーブルにも追加されるため、その後に作成されるすべての新規の Recordset オブジェクトで認識できます。

新しいレコードの位置は、Recordset オブジェクトの種類によって異なります。

  • ダイナセット タイプの Recordset オブジェクトでは、Recordset オブジェクトを開いた場合に有効であった並べ替え順序に関係なく、Recordset オブジェクトの最後にレコードが挿入されます。

  • Index プロパティに値が設定されているテーブル タイプの Recordset オブジェクトでは、その並べ替え順序に従って、適切な位置にレコードが返されます。Index プロパティが設定されていない場合、新しいレコードは、Recordset オブジェクトの最後に返されます。

カレント レコードの位置は、AddNew メソッドを使用する前のカレント レコードの位置です。新しいレコードをカレント レコードにするには、Bookmark プロパティに LastModified プロパティの設定値が示すブックマークを設定します。

メモ レコードの追加、編集、および削除を行うには、元のデータ ソースのレコードにあらかじめ一意なインデックスが必要です。一意なインデックスがないとき、Jet ワークスペースでは、AddNew、Delete または Edit の各メソッドを実行する場合にエラー "権限がありません" が発生します。また、ODBCDirect ワークスペースでは、Update メソッドを実行する場合に、エラー "引数が無効です" が発生します。


AddNew メソッドの使用例 (DAO)

AddNew メソッドの使用例

次の例では、AddNew メソッドを使用して、指定した名前を持つ新しいレコードを作成します。このプロシージャを実行するには AddName 関数が必要です。

Sub AddNewX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strFirstName As String
    Dim strLastName As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", dbOpenDynaset)

    ' ユーザーからの入力を取得します。
    strFirstName = Trim(InputBox( _
        "Enter first name:"))
    strLastName = Trim(InputBox( _
        "Enter last name:"))

    ' ユーザーが、両方のフィールドに
    ' 何らかの入力をした場合のみ処理を続けます。
    If strFirstName <> "" and strLastName <> "" Then

        ' レコードを追加する関数を呼び出します。
        AddName rstEmployees, strFirstName, strLastName

        ' 新しく追加されたデータを表示します。
        With rstEmployees
            Debug.Print "New record: " & !FirstName & _
                " " & !LastName
            ' ここではデモとして新しいレコードを削除します。
            .Delete
        End With

    Else
        Debug.Print _
            "You must input a string for first and last name!"
    End If

    rstEmployees.Close
    dbsNorthwind.Close

End Sub

Function AddName(rstTemp As Recordset, _
    strFirst As String, strLast As String)

    ' 呼び出しているプロシージャから渡されたデータを使用する
    ' 新しいレコードを追加します。新しいレコードは
    ' カレント レコードになります。
    With rstTemp
        .AddNew
        !FirstName = strFirst
        !LastName = strLast
        .Update
        .Bookmark = .LastModified
    End With

End Function


Append メソッド (DAO)

Append メソッド

新しい DAO オブジェクトをコレクションに追加します。

構文

collection.Append object

Append メソッドの構文には、次の指定項目があります。

指定項目 | 説明
collection | 新しいオブジェクトを追加するコレクションを表すオブジェクト変数を指定します（制限については、このトピックの最後の表を参照してください）。
object | 追加するオブジェクトを表すオブジェクト変数を指定します。追加されるオブジェクトは、引数 collection の要素と同じ型である必要があります。

解説

Append メソッドを使用すると、新しいテーブルをデータベースに追加したり、フィールドをテーブルやインデックスに追加したりすることができます。

追加されたオブジェクトは持続的なオブジェクトになり、Delete メソッドを使用して削除するまでディスクに格納されます。ただし、引数 collection がメモリにのみ格納される Workspaces コレクションの場合、オブジェクトは Close メソッドを使用して削除するまでアクティブになります。

新しいオブジェクトの追加はすぐに実行されますが､データベース構造の変更の影響を受ける可能性のあるほかのコレクションには Refresh メソッドを使用します。

追加するオブジェクトが完全なものでない場合 （たとえば、Indexes コレクションに Index オブジェクトを追加する前に、その Index オブジェクトの Fields コレクションに Field オブジェクトを追加していない場合など）、あるいは含まれる 1 つ以上のオブジェクトに設定されているプロパティが無効である場合に、Append メソッドを使用するとエラーが発生します。たとえば、フィールド型を指定していない Field オブジェクトを、Append メソッドを使用して TableDef オブジェクトの Fields コレクションに追加しようとすると、実行時エラーが発生します。

次の表は、Append メソッドの使用に関する制限を示します。第 1 列は、第 2 列のコレクションを含むオブジェクトです。第 3 列は、コレクションにオブジェクトを追加できるかどうかを示しています。たとえば、Database オブジェクトの Containers コレクションには Container オブジェクトを追加できません。

オブジェクト | コレクション | 新しいオブジェクトを追加できるかどうか
DBEngine | Workspaces | 可。
DBEngine | Errors | 不可。新しいエラー オブジェクトは、エラーが発生した場合に自動的に追加されます。
Workspace | Connections | 不可。OpenConnection メソッドを使用すると、自動的に新しいオブジェクトが追加されます。
Workspace | Databases | 不可。OpenDatabase メソッドを使用すると、自動的に新しいオブジェクトが追加されます。
Workspace | Groups | 可。
Workspace | Users | 可。
Connection | QueryDefs | 不可。CreateQueryDef メソッドを使用すると、自動的に新しいオブジェクトが追加されます。
Connection | Recordsets | 不可。OpenRecordset メソッドを使用すると、自動的に新しいオブジェクトが追加されます。
Database | Containers | 不可。
Database | QueryDefs | QueryDef オブジェクトが新しく、名前なしで作成された追加されていないオブジェクトである場合に可。詳細は「CreateQueryDef メソッド」を参照してください。
Database | Recordsets | 不可。OpenRecordset メソッドを使用すると、自動的に新しいオブジェクトが追加されます。
Database | Relations | 可。
Database | TableDefs | 可。
Group | Users | 可。
User | Groups | 可。
Container | Documents | 不可。
QueryDef | Fields | 不可。
QueryDef | Parameters | 不可。
Recordset | Fields | 不可。
Relation | Fields | 可。
TableDef | Fields | TableDef オブジェクトの Updatable プロパティが True に設定されている場合、あるいは TableDef オブジェクトが追加されていない場合に可。
TableDef | Indexes | TableDef オブジェクトの Updatable プロパティが True に設定されている場合、あるいは TableDef オブジェクトが追加されていない場合に可。
Index | Fields | Index オブジェクトが新しく、追加されていないオブジェクトである場合に可。
Database、Field、 Index、QueryDef、 TableDef | Properties | Database、Field、Index、QueryDef、または TableDef オブジェクトが Jet データベース エンジンの Jet ワークスペースにある場合に可。
DBEngine、 Parameter、 Recordset、 Workspace | Properties | 不可。


AppendChunk メソッド (DAO)

AppendChunk メソッド

文字列式から Recordset のメモ型 (Memo)、ロング バイナリ型 (Long Binary) の Field オブジェクトにデータを追加します。

構文

recordset ! field.AppendChunk source

AppendChunk メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | Fields コレクションを含む Recordset オブジェクトを表すオブジェクト変数を指定します。
field | Type プロパティが dbMemo (メモ型)、dbLongBinary (ロング バイナリ型)、あるいは同じ値に設定されている Field オブジェクト名を表すオブジェクト変数を指定します。
source | 引数 field で指定した Field オブジェクトに追加するデータを含むサブタイプが文字列型 (String) であるバリアント型 (Variant) の式または変数を指定します。

解説

AppendChunk メソッドと GetChunk メソッドを使用すると、メモ型 (Memo) またはロング バイナリ型 (Long Binary) フィールドのデータのサブセットにアクセスすることができます。

また、これらのメソッドを使用して、メモ型 (Memo) またはロング バイナリ型 (Long Binary) のフィールドを使用する場合に、文字列の領域を節約することができます。処理によっては (コピーなど) 一時的な文字列が必要です。文字列の領域が少ない場合は、フィールド全体を使用するのではなく、フィールドの一部を使用してください。

カレント レコードが未定義の場合、AppendChunk メソッドを使用するとエラーが発生します。

メモ

  • Edit または AddNew メソッドを使用した後の最初の AppendChunk メソッドでは、引数として渡されたデータをフィールドに格納し、既存のデータに上書きします。その後、同一の Edit または AddNew メソッドで AppendChunk メソッドを呼び出すと、既存のデータの追加が行われます。

  • ODBCDirect ワークスペースでは、カレント レコードの別のフィールドを編集するまで、Edit モードで AppendChunk メソッドを使用することはできません。ただし、この場合エラーは発生しません。

  • ODBCDirect ワークスペースでは、フィールドで AppendChunk メソッドを使用すると、カレント レコードを移動してからまたそのレコードに戻るまで代入ステートメントでそのフィールドの読み取りや書き込みを行うことはできません。カレント レコードを移動してからまたそのレコードに戻るには、MoveNext および MovePrevious メソッドを使用します。


AppendChunk、GetChunk メソッドの使用例 (DAO)

AppendChunk、GetChunk メソッドの使用例

次の例では、AppendChunk と GetChunk メソッドを使用して、ほかのレコードからのデータを 32KB ずつ、OLE オブジェクト フィールドにコピーします。実際のアプリケーションでは、このようなプロシージャは、従業員の写真が入っている従業員レコードをあるテーブルからほかのテーブルへコピーするといった場合に使用できます。次の例では、レコードは単に同じテーブルにコピーされます。1 つの AddNew - Update ですべてのチャンク操作が行われていることに注意してください。

Sub AppendChunkX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim rstEmployees2 As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' Employees テーブルから 2 つの Recordset を開きます。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)
    Set rstEmployees2 = rstEmployees.Clone

    ' 最初の Recordset に新しいレコードを追加し
    ' 2 番目の Recordset からデータをコピーします。
    With rstEmployees
        .AddNew
        !FirstName = rstEmployees2!FirstName
        !LastName = rstEmployees2!LastName
        CopyLargeField rstEmployees2!Photo, !Photo
        .Update

        ' ここではデモとして新しいレコードを削除します。
        .Bookmark = .LastModified
        .Delete
        .Close
    End With

    rstEmployees2.Close
    dbsNorthwind.Close

End Sub

Function CopyLargeField(fldSource As Field, _
    fldDestination As Field)

    ' チャンク サイズをバイト単位で指定します。
    Const conChunkSize = 32768

    Dim lngOffset As Long
    Dim lngTotalSize As Long
    Dim strChunk As String

    ' 1 つの Recordset からほかの Recordset へ写真をコピーします。
    ' コピーは 32KB ごとのチャンクに区切って行われ
    ' フィールド全体がコピーされるまで繰り返されます。
    lngTotalSize = fldSource.FieldSize
    Do While lngOffset < lngTotalSize
        strChunk = fldSource.GetChunk(lngOffset, conChunkSize)
        fldDestination.AppendChunk strChunk
        lngOffset = lngOffset + conChunkSize
    Loop

End Function


BeginTrans、CommitTrans、Rollback メソッド (DAO)

BeginTrans、CommitTrans、Rollback メソッド

トランザクション メソッドは、Workspace オブジェクトで定義されたセッション中のトランザクション処理を、それぞれ次のように管理します。

  • BeginTrans メソッドは、新しいトランザクションを開始します。

  • CommitTrans メソッドは、カレント トランザクションを終了し、変更を保存します。

  • Rollback メソッドは、カレント トランザクションを終了し、Workspace オブジェクトのデータベースをカレント トランザクションを開始した時点の状態に戻します。

構文

workspace.BeginTrans | CommitTrans [dbForceOSFlush] | Rollback

プレースホルダ workspace は、Workspace オブジェクトを表すオブジェクト変数で、トランザクションを使用するデータベースが含まれる Workspace オブジェクトを表します。

解説

これらのメソッドは、セッションでデータベースに行う一連の変更を 1 単位として処理する場合に、Workspace オブジェクトで使用します。

通常、複数のテーブルでレコードの更新を行い、すべてのテーブルにおいて変更が完全に実行された (コミットされた)、またはまったく行われなかった (ロールバックされた) ことを確認する必要がある場合は、トランザクションを使用してデータの整合性を確保します。たとえば、ある銀行口座からほかの銀行口座への送金事務では、借方の口座と貸方の口座の両方への記入が必要です。どちらかの更新処理が失敗した場合、2 つの口座の貸借勘定は一致しなくなります。この場合、BeginTrans メソッドを実行してから最初のレコードを更新するようにすると、その後の更新処理が失敗した場合に、Rollback メソッドを使用するとすべての更新処理を取り消すことができます。最後のレコードの更新処理が成功したら、CommitTrans メソッドを使用して変更をコミットします。

Jet ワークスペースでは、CommitTrans メソッドを使用して、定数 dbForceOSFlush を含めることができます。これにより、Jet データベース エンジンでは、一時的にすべての変更をキャッシュする代わりに、それらの変更をすぐにディスクにフラッシュします。このオプションを使用すると、クライアント サーバー アプリケーションの信頼性が高まります。ただしアプリケーションのパフォーマンスに影響を与えます。

注意 Workspace オブジェクトでは、常に Workspace オブジェクト全体がトランザクションの対象となり、1 つの Connection オブジェクトや Database オブジェクトに対象が限定されることはありません。Workspace オブジェクトのトランザクションで 1 つ以上の接続、またはデータベースに操作を行った場合、CommitTrans メソッド、または Rollback メソッドを使用するトランザクションの解決は、その Workspace のすべての接続とデータベースでのすべての操作に影響を与えます。

CommitTrans メソッドを実行すると、トランザクション中に行った変更は取り消すことができません。ただし、そのトランザクションがネストしている別のトランザクションがロールバックされる場合を除きます。トランザクションをネストした場合、ネストの上位レベルのトランザクションを解決するには、カレント トランザクションを解決する必要があります。

ネストせずに重なった範囲でトランザクションを同時に処理するには、複数のトランザクションを含む別の Workspace オブジェクトを作成します。

処理中のトランザクションを解決せずに Workspace オブジェクトを閉じると、トランザクションは自動的にロールバックされます。

最初に BeginTrans メソッドを使用せずに、CommitTrans メソッドまたは Rollback メソッドを使用すると、エラーが発生します。

Jet ワークスペースが使用する ISAM データベースには、トランザクションをサポートしていないものもあります。その場合、Database オブジェクトまたは Recordset オブジェクトの Transactions プロパティの設定値は False になります。データベースがトランザクションをサポートしているかどうかを確認するには、BeginTrans メソッドを使用する前に、Database オブジェクトの Transactions プロパティの設定値を調べます。複数のデータベースに基づいた Recordset オブジェクトを使用している場合、Recordset オブジェクトの Transactions プロパティの設定値を調べます。Jet データベース エンジンのテーブルにのみ基づいた Recordset オブジェクトでは、常にトランザクションを使用することができます。ただし、ほかのデータベース製品に基づいた Recordset オブジェクトでは、トランザクションをサポートしていない可能性があります。たとえば Paradox のテーブルに基づいた Recordset オブジェクトでは、トランザクションは使用できません。この場合、Transactions プロパティは False になります。Database または Recordset がトランザクションをサポートしていない場合には、これらのメソッドは無視され、エラーは発生しません。

Jet データベース エンジンを使用して ODBC データ ソースにアクセスする場合には、トランザクションをネストすることはできません。

ODBC ワークスペースで CommitTrans メソッドを使用したときに、カーソルが無効になることがあります。Requeryメソッドを使用して Recordset オブジェクトの変更を表示するか、または Recordset オブジェクトを閉じて、再び開いてください。

メモ

  • データベースへのディスク アクセスを必要とする処理をいくつかのトランザクションに分割し、アプリケーションのパフォーマンスを向上させることができます。これによって処理はバッファされ、ディスク アクセスの回数が大幅に減少することがあります。

  • Jet ワークスペースでは、トランザクションはワークステーション上の TEMP 環境変数で指定したフォルダ内のファイルに記録されます。トランザクションのログ ファイルが大きくなりすぎて TEMP フォルダのあるドライブの空き容量がなくなった場合、実行時エラーが発生します。この時点で CommitTrans メソッドを使用すると、一部の操作はコミットされますが、残りのコミットされていない操作は失われてしまい、操作の再開が必要になります。Rollback メソッドを使用すると、トランザクションのログが解放され、トランザクションのすべての操作がロールバックされます。

  • トランザクションの処理中に Recordset オブジェクトの複製を閉じると、暗黙の Rollback 操作が行われます。


BeginTrans、CommitTrans、Rollback メソッドの使用例 (DAO)

BeginTrans、CommitTrans、Rollback メソッドの使用例

次の例では、データベースの Employees テーブル上にある販売代理人全員の販売員の役職を変更します。BeginTrans メソッドがトランザクションを開始すると、トランザクションは Employees テーブルに対して行われるすべての変更を分離し、その変更は、CommitTrans メソッドによって保存されます。Update メソッドを使用して保存した変更は、Rollback メソッドを使用して元に戻せることに留意してください。さらに、この例では、メインの処理は、ユーザーが行ったあらゆる変更を自動的にロールバックする別のトランザクションの中にネストされています。

ユーザーが変更を受け入れるかどうかを決定するまでの間、1 つ以上の残りのテーブル ページはロックされたままになります。このため、このテクニックは推奨できませんが、例として示しています。

Sub BeginTransX()

    Dim strName As String
    Dim strMessage As String
    Dim wrkDefault As Workspace
    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    ' 既定の Workspace を取得します。
    Set wrkDefault = DBEngine.Workspaces(0)
    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    ' 外部トランザクションの開始部分です。
    wrkDefault.BeginTrans
    ' メイン トランザクションの開始部分です。
    wrkDefault.BeginTrans

    With rstEmployees

        ' レコード セット内をループし、指定した社員の
        ' 役職名を変更するかどうかをユーザーに問い合わせます。
        Do Until .EOF
            If !Title = "Sales Representative" Then
                strName = !LastName & ", " & !FirstName
                strMessage = "Employee: " & strName & vbCr & _
                    "Change title to Account Executive?"

                ' 役職を Sales Representative (販売代理人) から
                ' Account Executive (取引先担当責任者) に
                ' 変更します。
                If MsgBox(strMessage, vbYesNo) = vbYes Then
                    .Edit
                    !Title = "Account Executive"
                    .Update
                End If
            End If

            .MoveNext
        Loop

        ' ここまでで行われたすべての変更を
        ' コミットするかどうかをユーザーに問い合わせます。
        If MsgBox("Save all changes?", vbYesNo) = vbYes Then
            wrkDefault.CommitTrans
        Else
            wrkDefault.Rollback
        End If

        ' レコード セットの中の現在のデータを出力します。
        .MoveFirst
        Do While Not .EOF
            Debug.Print !LastName & ", " & !FirstName & _
                " - " & !Title
            .MoveNext
        Loop

        ' ここではデモとしてユーザーによって行われた
        ' すべての変更をロールバックします。
        wrkDefault.Rollback
        .Close
    End With

    dbsNorthwind.Close

End Sub


Cancel メソッド (DAO)

Cancel メソッド

実行中の非同期メソッドの呼び出しの実行をキャンセルします。これは ODBCDirect ワークスペースでのみ使用することができます。

構文

object.Cancel

Cancel メソッドには、次の指定項目があります。

指定項目 | 説明
object | "対象" の一覧にあるオブジェクトの 1 つを評価する文字列式です。

解説

Cancel メソッドを使用して、非同期の Execute、MoveLast、OpenConnection、または OpenRecordset メソッドの呼び出し (つまり、dbRunAsync オプション付きで呼び出されたメソッド) を終了します。Cancel メソッドは、終了させるメソッドに dbRunAsync オプションが設定されていない場合には、実行時エラーを返します。

次の表では、オブジェクトの種類と、Cancel メソッドを使用する場合に中断されるタスクの対象を示しています。

オブジェクトの種類 | 中断される非同期のメソッド
Connection オブジェクト | Execute または OpenConnection
QueryDef オブジェクト | Execute
Recordset オブジェクト | MoveLast または OpenRecordset

Connection または Recordset オブジェクトから Cancel メソッドを呼び出すように、Cancel メソッドの呼び出しに続いて、非同期の OpenConnection や OpenRecordset オブジェクトを呼び出すことによって作成されたオブジェクトを参照しようとすると、エラーが発生します。


CancelUpdate メソッド (DAO)

CancelUpdate メソッド

Recordset オブジェクトの保存されていない更新をすべてキャンセルします。

構文

recordset.CancelUpdate type

CancelUpdate メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | 保存されていない更新をキャンセルする Recordset オブジェクトを表すオブジェクト変数を指定します。
type | (省略可能) 設定値で指定した更新の種類を示す定数を指定します。

設定値

バッチ更新が可能な場合のみ、引数 type に次の表にある値を使用することができます。

定数 | 説明
DbUpdateRegular | (既定値) キャッシュされていない、保存されていない変更をキャンセルします。
DbUpdateBatch | 更新キャッシュの保存されていない変更をキャンセルします。

解説

CancelUpdate メソッドを使用すると、Edit または AddNew の操作による保存されていない更新結果をすべてキャンセルできます。たとえば、Edit メソッドまたは AddNew メソッドを実行し、その後 Update メソッドを実行しないで、CancelUpdate メソッドを実行すると、Edit メソッドまたは AddNew メソッドを実行した後で行われたすべての変更がキャンセルされます。

キャンセルの対象となる未保存の操作があるかどうかを調べるには、Recordset オブジェクトの EditMode プロパティで確認します。

メモ CancelUpdate メソッドを使用すると、Update メソッドを使用せずに別のレコードに移動した場合と同じ結果になりますが、カレント レコードは変更されず、BOF プロパティや EOF プロパティは更新されません。


CancelUpdate メソッドの使用例 (DAO/Microsoft Jet)

CancelUpdate メソッドの使用例

次の例では、AddNew メソッドと CancelUpdate メソッドの使い方を示しています。

Sub CancelUpdateX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim intCommand As Integer

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    With rstEmployees
        .AddNew
        !FirstName = "Kimberly"
        !LastName = "Bowen"
        intCommand = MsgBox("Add new record for " & _
            !FirstName & " " & !LastName & "?", vbYesNo)
        If intCommand = vbYes Then
            .Update
            MsgBox "Record added."
            ' ここではデモとして新しいレコードを削除します。
            .Bookmark = .LastModified
            .Delete
        Else
            .CancelUpdate
            MsgBox "Record not added."
        End If
    End With

    dbsNorthwind.Close

End Sub

次の例では、Edit メソッドと CancelUpdate メソッドの使い方を示しています。

Sub CancelUpdateX2()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strFirst As String
    Dim strLast As String
    Dim intCommand As Integer

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    With rstEmployees
        strFirst = !FirstName
        strLast = !LastName
        .Edit
        !FirstName = "Cora"
        !LastName = "Edmonds"
        intCommand = MsgBox("Replace current name with " & _
            !FirstName & " " & !LastName & "?", vbYesNo)
        If intCommand = vbYes Then
            .Update
            MsgBox "Record modified."
            ' ここではデモとしてデータを元に戻します。
            .Bookmark = .LastModified
            .Edit
            !FirstName = strFirst
            !LastName = strLast
            .Update
        Else
            .CancelUpdate
            MsgBox "Record not modified."
        End If
        .Close
    End With

    dbsNorthwind.Close

End Sub


Clone メソッド (DAO)

Clone メソッド

複製元の Recordset オブジェクトを参照する Recordset オブジェクトの複製を作成します。

構文

Set duplicate = original.Clone

Clone メソッドの構文には、次の指定項目があります。

指定項目 | 説明
duplicate | 作成する Recordset オブジェクトの複製を示すオブジェクト変数を指定します。
original | 複製する Recordset オブジェクトを示すオブジェクト変数を指定します。

解説

Clone メソッドを使用して、複数の Recordset オブジェクトを作成することができます。複製された Recordset オブジェクトは、それぞれがカレント レコードを持ちます。Clone メソッドを使用しても、オブジェクトのデータや元の構造は変わりません。Clone メソッドを使用すると、複数の Recordset オブジェクトの間でブックマークを相互に取り替えることができるため、ブックマークを共有することができます。

複数のカレント レコードが必要な操作を 1 つの Recordset オブジェクトに対して行う場合に、Clone メソッドを使用することができます。この方法は、2 つ目の Recordset オブジェクトを開く場合よりも高速で効率的です。Clone メソッドで Recordset オブジェクトの複製を作成した時点では、カレント レコードは存在しません。Recordset オブジェクトの複製を使用する前にカレント レコードを作成するには、Bookmark プロパティを設定するか、Move 系メソッド、Find 系メソッド、または Seek メソッドのいずれかを使用する必要があります。

Close メソッドを元のオブジェクトまたはその複製で使用しても、ほかのオブジェクトには影響を与えません。たとえば、複製元の Recordset オブジェクトに対して Close メソッドを使用しても、複製である Recordset オブジェクトが閉じられることはありません。

メモ

  • トランザクションの処理中に Recordset オブジェクトの複製を閉じると、暗黙の Rollback の操作が行われます。

  • Jet ワークスペースでテーブル タイプの Recordset オブジェクトを複製する場合、Index プロパティの設定は Recordset の複製には設定されません。Index プロパティの設定は、手動でコピーする必要があります。

  • 前方スクロール タイプの Recordset オブジェクトに対しては、ODBCDirect ワークスペースでのみ Clone メソッドを使用することができます。


Clone メソッドの使用例 (DAO)

Clone メソッドの使用例

次の例では、Clone メソッドを使用して、Recordset のコピーを作成し、各コピーごとにレコード ポインタを配置します。

Sub CloneX()

    Dim dbsNorthwind As Database
    Dim arstProducts(1 To 3) As Recordset
    Dim intLoop As Integer
    Dim strMessage As String
    Dim strFind As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 次の SQL ステートメントが頻繁に使用される場合には
    ' 永続的な QueryDef を作成することで
    ' パフォーマンスが向上します。
    Set arstProducts(1) = dbsNorthwind.OpenRecordset( _
        "SELECT ProductName FROM Products " & _
        "ORDER BY ProductName", dbOpenSnapshot)

    ' オリジナルの Recordset に 2 つのクローンを作成します。
    Set arstProducts(2) = arstProducts(1).Clone
    Set arstProducts(3) = arstProducts(1).Clone

    Do While True

        ' それぞれのパスで、ユーザーが同じ Recordset の
        ' 異なるコピーを検索するように、配列全体をループします。
        For intLoop = 1 To 3

            ' 各 Recordset のカレント レコード ポインタが
            ' どこにあるか表示して、検索文字列を要求します。
            strMessage = _
                "Recordsets from Products table:" & vbCr & _
                "  1 - Original - Record pointer at " & _
                arstProducts(1)!ProductName & vbCr & _
                "  2 - Clone - Record pointer at " & _
                arstProducts(2)!ProductName & vbCr & _
                "  3 - Clone - Record pointer at " & _
                arstProducts(3)!ProductName & vbCr & _
                "Enter search string for #" & intLoop & ":"
            strFind = Trim(InputBox(strMessage))
            If strFind = "" Then Exit Do

            ' 検索文字列を探します。適合するものが無い場合
            ' 最後のレコードへジャンプします。
            With arstProducts(intLoop)
                .FindFirst "ProductName >= '" & strFind & "'"
                If .NoMatch Then .MoveLast
            End With

        Next intLoop

    Loop

    arstProducts(1).Close
    arstProducts(2).Close
    arstProducts(3).Close
    dbsNorthwind.Close

End Sub


Close メソッド (DAO)

Close メソッド

開いている DAO オブジェクトを閉じます。

構文

object.Close

プレースホルダ object は開いている Connection、Database、Recordset、または Workspace の各オブジェクトを表すオブジェクト変数です。

解説

開いているオブジェクトを閉じると、追加先のコレクションから削除されます。既定のワークスペースを閉じるように指定しても無視されます。

Close メソッドを使用する場合、プレースホルダ object で名前を指定した Connection、Database、Recordset、または Workspace の各オブジェクトが既に閉じている場合には、実行時エラーが発生します。

注意 Connection、Database、または Recordset オブジェクトを宣言しているプロシージャを終了すると、オブジェクトが閉じられ、処理中のトランザクションはロールバックされ、未保存の編集内容も失われます。

開いている Recordset オブジェクトが存在する Connection オブジェクトや Database オブジェクトを閉じようとすると、Recordset オブジェクトは閉じられ、未保存の更新または編集はキャンセルされます。同様に、開いている Connection オブジェクトや Database オブジェクトが存在する Workspace オブジェクトを閉じようとする場合も、Connection オブジェクトまたは Database オブジェクトは閉じられ、その Recordset オブジェクトも閉じられます。

Close メソッドで作成された Recordset オブジェクトまたはその複製元の Recordset オブジェクトで Close メソッドを使用しても、それ以外のオブジェクトは影響を受けません。

Connections、Databases、Recordsets、および Workspaces コレクション以外の更新可能なコレクションからオブジェクトを削除するには、各コレクションに対して Delete メソッドを使用します。Connections、Databases、および Errors の各コレクションに新しいメンバを追加することはできません。

Close メソッドの代わりに、オブジェクト変数の値の設定を Nothing にすることも可能です (Set dbsTemp = Nothing)。


Close メソッドの使用例 (DAO)

Close メソッドの使用例

次の例では、開かれている Recordset と Database オブジェクトの両方で Close メソッドを使用します。また、Recordset を閉じることで、保存されていないデータの変更がどのように失われるかを説明します。

Sub CloseX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    ' レコードに変更を加えますが
    ' 変更を保存する前に
    ' Recordset を閉じます。
    With rstEmployees
        Debug.Print "Original data"
        Debug.Print "    Name - Extension"
        Debug.Print "    " & !FirstName & " " & _
            !LastName & " - " & !Extension
        .Edit
        !Extension = "9999"
        .Close
    End With

    ' Recordset をもう一度開いて
    ' データが変更されていないことを示します。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        Debug.Print "Data after Close"
        Debug.Print "    Name - Extension"
        Debug.Print "    " & !FirstName & " " & _
            !LastName & " - " & !Extension
        .Close
    End With

    dbsNorthwind.Close

End Sub


CompactDatabase メソッド (DAO)

CompactDatabase メソッド

閉じているデータベースのコピーと最適化を行います。また、バージョンおよび照合順序の変更、暗号化を行います。これは Jet ワークスペースでのみ使用することができます。

構文

DBEngine.CompactDatabase olddb, newdb, locale, options, password

CompactDatabase メソッドの構文には、次の指定項目があります。

指定項目 | 説明
olddb | 閉じている既存のデータベース名を示す文字列型 (String) の変数を指定します。"C:\db1.mdb" のようにフル パス名で指定できます。ファイル名に拡張子が付いている場合、拡張子も指定してください。"\\server1\share1\dir1\db1.mdb" という形式でネットワーク パス名を指定できる場合、ネットワーク上のデータベースも指定することができます。
newdb | 作成中の最適化したデータベースのファイル名 （およびパス） を示す文字列型 (String) の変数を指定します。また、引数 olddb と同様、ネットワーク パス名も指定することができます。引数 newdb に指定したファイルと同じデータベース ファイルを指定することはできません。
locale | (省略可能) バリアント型 (Variant) の文字列式を指定します。この文字列式は、引数 newdb を作成するための照合順序を指定します。設定する値については、この下に説明されている「設定値｣を参照してください。この引数を省略した場合、値は引数 olddb と同じになります。
 | 引数 newdb パスワードを作成することもできます。次のように、引数 locale にパスワードの文字列 (";pwd=" で始まります) に定数をつけて結びつけます。
 | DbLangSpanish & ";pwd=NewPassword"
 | 引数 locale に olddb （既定値） と同じ値を使用するのに新しいパスワードを指定した場合には、パスワードの文字列を引数 locale に入れます。
 | ";pwd=NewPassword"
options | (省略可能) 1 つ以上のオプションを示す定数または定数の組み合わせを指定します。設定する値については、この下に説明されている｢設定値｣を参照してください。対応する定数を合計すると、オプションを組み合わせることができます。
password | (省略可能) データベースがパスワードで保護されている場合、パスワードを含むバリアント型 (Variant) の文字列式を指定します。パスワードの前に、文字列 ";pwd=" を入力する必要があります。引数 locale にパスワードの設定を含めた場合、この設定は無視されます。

設定値

引数 locale に次の定数 1 つを使用し、文字列比較のためのテキストの CollatingOrder プロパティを指定できます。

定数 | 照合順序
dbLangGeneral | 欧米標準 (英語、フランス語、ドイツ語、ポルトガル語、イタリア語、現代スペイン語)
dbLangArabic | アラビア語
dbLangChineseSimplified | 中国語 （中国）
dbLangChineseTraditional | 中国語 （台湾）
dbLangCyrillic | ロシア語
dbLangCzech | チェコ語
dbLangDutch | オランダ語
dbLangGreek | ギリシャ語
dbLangHebrew | ヘブライ語
dbLangHungarian | ハンガリー語
dbLangIcelandic | アイスランド語
dbLangJapanese | 日本語
dbLangKorean | 韓国語
dbLangNordic | 北欧諸国語 (Jet データベース エンジン 1.0 でのみ使用可)
dbLangNorwDan | ノルウェー語とデンマーク語
dbLangPolish | ポーランド語
dbLangSlovenian | スロベニア語
dbLangSpanish | 古スペイン語
dbLangSwedFin | スウェーデン語とフィンランド語
dbLangThai | タイ語
dbLangTurkish | トルコ語

引数 options に次の定数の 1 つを使用し、データベースを最適化している場合に暗号化するか解読するかを指定できます。

定数 | 説明
dbEncrypt | 最適化中にデータベースを暗号化します。
dbDecrypt | 最適化中にデータベースを解読します。

暗号化定数を省略したり、定数 dbDecrypt と dbEncrypt の両方を指定すると、引数 newdb の暗号は引数 olddb と同じになります。

引数 options に次の定数のいずれかを指定し、最適化したデータベースのデータ形式のバージョンを指定できます。この定数は引数 newdb のデータ形式のバージョンのみを変更し、フォームやレポートのような Access で定義されたオブジェクトのバージョンを変更することはできません。

定数 | 説明
dbVersion10 | 最適化中に、Jet データベース エンジン 1.0 のファイル形式を使用するデータベースを作成します。
dbVersion11 | 最適化中に、Jet データベース エンジン 1.1 のファイル形式を使用するデータベースを作成します。
dbVersion20 | 最適化中に、Jet データベース エンジン 2.0 のファイル形式を使用するデータベースを作成します。
dbVersion30 | 最適化中に、Jet データベース エンジン 3.0 のファイル形式 （3.5に適合します） を使用するデータベースを作成します。

バージョン定数は、1 つのみ指定できます。バージョン定数を省略すると、引数 newdb は olddb と同じバージョンになります。引数 olddb のバージョン以降のバージョンに対してのみ引数 newdb を最適化することができます。

解説

データベースのデータ変更を繰り返すと、そのデータベース ファイルに断片化 (フラグメント) が発生し、必要以上にディスク領域を使用する可能性があります。定期的に CompactDatabase メソッドを使用してデータベース ファイルを最適化してください。通常、最適化を実行すると、データベースのサイズは小さくなり、速度も向上します。また、データベースをコピーしたり最適化したりする場合、照合順序の設定、暗号化、およびデータ形式のバージョンの変更を行うこともできます。

データベースを最適化する場合、必ず引数 olddb を閉じる必要があります。マルチユーザー環境では、データベースを最適化している間、ほかのユーザーが引数 olddb を開くことはできません。引数 olddb が開かれている場合や、排他的に使用できない場合には、エラーが発生します。

CompactDatabase メソッドはデータベースのコピーを作成するため、ディスクには複製元のデータベースと複製のデータベースの 2 つを保存できる空き領域が必要です。利用可能なディスクの空き領域が不足していると、最適化操作は失敗します。データベースのコピーである引数 newdb は olddb と同じディスクにある必要はありません。データベースの最適化がうまくいった後で、引数 olddb で指定したファイルを削除し、最適化した引数 newdb のファイル名を元のファイル名に変更することができます。

CompactDatabase メソッドは、すべてのデータとセキュリティの権限の設定を引数 olddb で指定したデータベースから引数 newdb で指定したデータベースにコピーします。

CompactDatabase メソッドを使用して、Jet データベース エンジン 1.0 または 1.1 のデータベースを 2.5、3.0 または 3.5 のデータベースに変換する場合、2.5、3.0 または 3.5 を使用しているアプリケーションのみが変換したデータベースを開くことができます。

メモ ODBCDirect ワークスペースでは、CompactDatabase メソッドを使用しても、エラーを返しませんが、メモリに Jet データベース エンジンが読み込まれます。

注意 CompactDatabase メソッドでは、Access のオブジェクトを変換しないため、そのようなオブジェクトを含むデータベースを CompactDatabase メソッドで変換することはお勧めできません。Access のオブジェクトを含むデータベースを変換するには、[ツール] メニューで [データベース ユーティリティ] をポイントし、[変換] をクリックします。


CompactDatabase メソッドの使用例 (DAO/Microsoft Jet)

CompactDatabase メソッドの使用例

次の例では、CompactDatabase メソッドを使用して、データベースの照合順序を変更します。このコードは Northwind.mdb に属するモジュールでは使用できません。

Sub CompactDatabaseX()

    Dim dbsNorthwind As Database

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 元のデータベースのプロパティを表示します。
    With dbsNorthwind
        Debug.Print .Name & ", version " & .Version
        Debug.Print "    CollatingOrder = " & .CollatingOrder
        .Close
    End With

    ' 最適化したデータベースと同じ名前のファイルが
    ' 存在していないことを確認します。
    If Dir("NwindKorean.mdb") <> "" Then _
        Kill "NwindKorean.mdb"

    ' このステートメントで韓国語の照合順序を使用して
    ' Northwind データベースの最適化バージョンを作成します。
    DBEngine.CompactDatabase "Northwind.mdb", _
        "NwindKorean.mdb", dbLangKorean

    Set dbsNorthwind = OpenDatabase("NwindKorean.mdb")

    ' 最適化したデータベースのプロパティを表示します。
    With dbsNorthwind
        Debug.Print .Name & ", version " & .Version
        Debug.Print "    CollatingOrder = " & .CollatingOrder
        .Close
    End With

End Sub

次の例では、CompactDatabase メソッドを使用して、データベースのバージョンを変更します。このコードを実行するには、Nwind11.mdb と呼ばれる Jet 1.1 ファイルが必要です。また、このコードは Nwind11.mdb に属するモジュールでは使用できません。

Sub CompactDatabaseX2()

    Dim dbsNorthwind As Database
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Nwind11.mdb")

    ' 元のデータベースのプロパティを表示します。
    With dbsNorthwind
        Debug.Print .Name & ", version " & .Version
        Debug.Print "    CollatingOrder = " & .CollatingOrder
        .Close
    End With

    ' 最適化したデータベースと同じ名前のファイルが
    ' 存在しないことを確認します。
    If Dir("Nwind20.mdb") <> "" Then _
        Kill "Nwind20.mdb"

    ' このステートメントで、Jet 1.1 データベースの
    ' 最適化し、暗号化した Jet 2.0 版を作成します。
    DBEngine.CompactDatabase "Nwind11.mdb", _
        "Nwind20.mdb", , dbEncrypt + dbVersion20

    Set dbsNorthwind = OpenDatabase("Nwind20.mdb")

    ' 最適化したデータベースのプロパティを表示します。
    With dbsNorthwind
        Debug.Print .Name & ", version " & .Version
        For Each prpLoop In .Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop
        .Close
    End With

End Sub


CopyQueryDef メソッド (DAO)

CopyQueryDef メソッド

プレースホルダ recordset で表される Recordset オブジェクトを作成するために使用された、QueryDef オブジェクトのコピーである QueryDef オブジェクトを返します。これは Jet ワークスペースでのみ使用することができます。

構文

Set querydef = recordset.CopyQueryDef

CopyQueryDef メソッドの構文には、次の指定項目があります。

指定項目 | 説明
querydef | 作成する QueryDef オブジェクトのコピーを表すオブジェクト変数を指定します。
recordset | コピー元の QueryDef オブジェクトを使用して作成された Recordset オブジェクトを表すオブジェクト変数を指定します。

解説

CopyQueryDef メソッドを使用して、Recordset オブジェクトを作成するために使用される QueryDef オブジェクトのコピーである新しい QueryDef オブジェクトを作成します。

Recordset オブジェクトの作成に QueryDef オブジェクトが使用されていなかった場合、エラーが発生します。CopyQueryDef メソッドを使用する前に、OpenRecordset メソッドで Recordset オブジェクトを開いておく必要があります。

CopyQueryDef メソッドは、QueryDef オブジェクトから Recordset オブジェクトを作成する場合に便利で、Recordset オブジェクトを関数に渡します。関数は、たとえば修正をする場合などのために SQL と同じクエリーを作成し直す必要があります。


CopyQueryDef メソッドの使用例 (DAO/Microsoft Jet)

CopyQueryDef メソッドの使用例

次の例では、CopyQueryDef メソッドを使用して、既存の Recordset オブジェクトからコピーを作成し、1 つの句を SQL プロパティに追加することでコピーを修正します。永続的な QueryDef オブジェクトを作成すると、スペース、セミコロン、またはライン フィードが SQL プロパティに追加されることがあります。これらの余分な文字は、SQL ステートメントに追加される前に新しい句を取り除く必要があります。

Function CopyQueryNew(rstTemp As Recordset, _
    strAdd As String) As QueryDef

    Dim strSQL As String
    Dim strRightSQL As String

    Set CopyQueryNew = rstTemp.CopyQueryDef
    With CopyQueryNew
        ' 余分な文字を取り除きます。
        strSQL = .SQL
        strRightSQL = Right(strSQL, 1)
        Do While strRightSQL = " " Or strRightSQL = ";" Or _
                strRightSQL = Chr(10) Or strRightSQL = vbCr
            strSQL = Left(strSQL, Len(strSQL) - 1)
            strRightSQL = Right(strSQL, 1)
        Loop
        .SQL = strSQL & strAdd
    End With

End Function

次の例では、CopyQueryNew() の可能な使い方を示しています。

Sub CopyQueryDefX()

    Dim dbsNorthwind As Database
    Dim qdfEmployees As QueryDef
    Dim rstEmployees As Recordset
    Dim intCommand As Integer
    Dim strOrderBy As String
    Dim qdfCopy As QueryDef
    Dim rstCopy As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set qdfEmployees = dbsNorthwind.CreateQueryDef("NewQueryDef", _
        "SELECT FirstName, LastName, BirthDate FROM Employees")
    Set rstEmployees = qdfEmployees.OpenRecordset(dbOpenSnapshot, _
        dbForwardOnly)

    Do While True
        intCommand = Val(InputBox( _
            "Choose field on which to order a new " & _
            "Recordset:" & vbCr & "1 - FirstName" & vbCr & _
            "2 - LastName" & vbCr & "3 - BirthDate" & vbCr & _
            "[Cancel - exit]"))
        Select Case intCommand
            Case 1
                strOrderBy = " ORDER BY FirstName"
            Case 2
                strOrderBy = " ORDER BY LastName"
            Case 3
                strOrderBy = " ORDER BY BirthDate"
            Case Else
                Exit Do
        End Select
        Set qdfCopy = CopyQueryNew(rstEmployees, strOrderBy)
        Set rstCopy = qdfCopy.OpenRecordset(dbOpenSnapshot, _
            dbForwardOnly)
        With rstCopy
            Do While Not .EOF
                Debug.Print !LastName & ", " & !FirstName & " - " & _
                    !BirthDate
                .MoveNext
            Loop
            .Close
        End With
        Exit Do
    Loop

    rstEmployees.Close
    ' ここではデモとして新しい QueryDef を削除します。
    dbsNorthwind.QueryDefs.Delete qdfEmployees.Name
    dbsNorthwind.Close

End Sub


CreateDatabase メソッド (DAO)

CreateDatabase メソッド

新しい Database オブジェクトを作成してデータベースをディスクに保存し、開いている Database オブジェクトを返します。これは Jet ワークスペースでのみ使用することができます。

構文

Set database = workspace.CreateDatabase (name, locale, options)

CreateDatabase メソッドの構文には、次の指定項目があります。

指定項目 | 説明
database | 作成する Database オブジェクトを表すオブジェクト変数を指定します。
workspace | データベースを含む既存の Workspace オブジェクトを表すオブジェクト変数を指定します。この引数 workspace を省略すると、CreateDatabase は既定の Workspace オブジェクトを使用します。
name | 作成するデータベースのファイル名を示す 255 文字までの文字列型 (String) を指定します。フル パスと "C:\db1.mdb" のようなファイル名を使用することができます。ファイル名に拡張子を指定しないと、拡張子 .MDB が自動的に付けられます。ネットワークによっては "\\server1\share1\dir1\db1" のようにネットワーク パスを指定できます。このメソッドで作成できるのは MDB データベース ファイルのみです。
locale | データベースを作成するための照合順序を指定する文字列式を指定します。設定する値については、この下に説明されている「設定値」を参照してください。この引数を指定しないと、エラーが発生します。
 | 新しい Database オブジェクトのパスワードを作成することもできます。次のように、引数 locale の定数にパスワードの文字列 (";pwd=" で始まります) を結びつけます。
 | DbLangSpanish & ";pwd=NewPassword"
 | 既定の引数 locale を使用するのに新しいパスワードを指定した場合、パスワードの文字列を引数 locale に入れます。
 | ";pwd=NewPassword"
options | (省略可能) 1 つ以上のオプションを示す定数または定数の組み合わせを指定します。設定する値については、この下に説明されている｢設定値｣を参照してください。対応する定数を合計すると、オプションを組み合わせることができます。

設定値

引数 locale に次の定数 1 つを使用して、文字列比較のためにテキストの CollatingOrder プロパティを設定できます。

定数 | 照合順序
dbLangGeneral | 欧米標準 (英語、フランス語、ドイツ語、ポルトガル語、イタリア語、現代スペイン語)
dbLangArabic | アラビア語
dbLangChineseSimplified | 中国語 （中国）
dbLangChineseTraditional | 中国語 （台湾）
dbLangCyrillic | ロシア語
dbLangCzech | チェコ語
dbLangDutch | オランダ語
dbLangGreek | ギリシャ語
dbLangHebrew | ヘブライ語
dbLangHungarian | ハンガリー語
dbLangIcelandic | アイスランド語
dbLangJapanese | 日本語
dbLangKorean | 韓国語
dbLangNordic | 北欧諸国語 (Jet データベース エンジン 1.0 でのみ使用可)
dbLangNorwDan | ノルウェー語とデンマーク語
dbLangPolish | ポーランド語
dbLangSlovenian | スロベニア語
dbLangSpanish | 古スペイン語
dbLangSwedFin | スウェーデン語とフィンランド語
dbLangThai | タイ語
dbLangTurkish | トルコ語

引数 options に次の定数を指定すると、データ形式のバージョンとデータベースを暗号化するかどうかを指定できます。

定数 | 説明
dbEncrypt | 暗号化されたデータベースを作成します。
dbVersion10 | Jet データベース エンジンのファイル形式を使用するデータベースを作成します。
dbVersion11 | Jet データベース エンジン 1.1 のファイル形式を使用するデータベースを作成します。
dbVersion20 | Jet データベース エンジン 2.0 のファイル形式を使用するデータベースを作成します。
dbVersion30 | (既定値) Jet データベース エンジン 3.0 のファイル形式 （3.5に適合します） を使用するデータベースを作成します。

暗号化を指定する定数を省略すると、CreateDatabase は、暗号化されていないデータベースを作成します。バージョン定数は 1 つのバージョンのみ指定できますが、この定数を省略すると、CreateDatabase は、Jet データベース エンジン 3.0 のファイル形式を使用するデータベースを作成します。

解説

CreateDatabase メソッドを使用して、空のデータベースを新しく作成して開き、Database オブジェクトを返します。その後、DAO オブジェクトを使用して、データベースの構造と内容を完成させる必要があります。既存のデータベースの一部または全体をコピーする場合は、CompactDatabase メソッドを使用して、カスタマイズできるコピーを作成します。


CreateDatabase メソッドの使用例 (DAO/Microsoft Jet)

CreateDatabase メソッドの使用例

次の例では、CreateDatabase を使用して、暗号化した新しい Database オブジェクトを作成します。

Sub CreateDatabaseX()

    Dim wrkDefault As Workspace
    Dim dbsNew As DATABASE
    Dim prpLoop As Property

    ' 既定の Workspace を取得します。
    Set wrkDefault = DBEngine.Workspaces(0)

    ' 新しいデータベースと同じ名前のファイルが
    ' 存在しないことを確認します。
    If Dir("NewDB.mdb") <> "" Then Kill "NewDB.mdb"

    ' 指定した照合順序を持つ
    ' 新しい暗号化したデータベースを作成します。
    Set dbsNew = wrkDefault.CreateDatabase("NewDB.mdb", _
        dbLangGeneral, dbEncrypt)

    With dbsNew
        Debug.Print "Properties of " & .Name
        ' 新しい Database オブジェクトの
        ' Properties コレクションを列挙します。
        For Each prpLoop In .Properties
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
        Next prpLoop
    End With

    dbsNew.Close

End Sub


CreateField メソッド (DAO)

CreateField メソッド

新しい Field オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set field = object.CreateField (name, type, size)

CreateField メソッドの構文には、次の指定項目があります。

指定項目 | 説明
field | 作成する Field オブジェクトを表すオブジェクト変数を指定します。
object | 新しい Field オブジェクトを作成するために使用する Index、Relation、または TableDef オブジェクトを表すオブジェクト変数を指定します。
name | (省略可能) 新しい Field オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な Field オブジェクト名についての詳細は、「Name プロパティ」を参照してください。
type | (省略可能) 新しいオブジェクトのデータ型を調べる定数を指定します。有効なデータ型については、「Type プロパティ」を参照してください。
size | (省略可能) サブタイプが整数型 (Integer) であるバリアント型 (Variant) を指定します。テキストを含む Field オブジェクトの最大サイズをバイト数で指定します。引数 size の有効な値については、「Size プロパティ」を参照してください。数値や固定長のフィールドの場合、この引数は無視されます。

解説

CreateField メソッドを使用すると、フィールドの名前、データ型、フィールド サイズと同じように新しいフィールドを作成することができます。省略できる 1 つ以上の引数を省略して CreateField メソッドを使用すると、オブジェクトをコレクションに追加する前に、適切な代入ステートメントを使用して対応するプロパティの設定と解除を行うことができます。新しいオブジェクトを追加した後では、設定値を変更できないプロパティもあります。詳細については、各プロパティのトピックを参照してください。

引数 type と size は、TableDef オブジェクトに含まれる Field オブジェクトにのみ適用されます。Index オブジェクトや Relation オブジェクトに関連付けられた Field オブジェクトの場合、これらの引数は無視されます。

引数 name で、既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、Append メソッドを使用すると実行時エラーが発生します。

Fields コレクションから Field オブジェクトを削除するには、コレクションに対して Delete メソッドを使用します。そのフィールドを参照するインデックスを作成すると、TableDef オブジェクトの Fields コレクションからその Field オブジェクトを削除することはできなくなります。


CreateField メソッドの使用例 (DAO/Microsoft Jet)

CreateField メソッドの使用例

次の例では、CreateField メソッドを使用して、新しい TableDef に対して 3 つの Fields を作成します。そして、CreateField メソッドで自動的に設定される Field オブジェクトのプロパティを表示します (Field の作成時に空のプロパティは表示されません)。

Sub CreateFieldX()

    Dim dbsNorthwind As Database
    Dim tdfNew As TableDef
    Dim fldLoop As Field
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")

    ' 新しい TableDef オブジェクトに対して
    ' 新しい Field オブジェクトを作成し、追加します。
    With tdfNew
        ' CreateField メソッドは、新しい Field オブジェクトに対して
        ' サイズを指定していない場合、既定の Size プロパティを設定します。
        .Fields.Append .CreateField("TextField", dbText)
        .Fields.Append .CreateField("IntegerField", dbInteger)
        .Fields.Append .CreateField("DateField", dbDate)
    End With

    dbsNorthwind.TableDefs.Append tdfNew

    Debug.Print "Properties of new Fields in " & tdfNew.Name

    ' Fields コレクションを列挙し
    ' 新しい Field オブジェクトのプロパティを表示します。
    For Each fldLoop In tdfNew.Fields
        Debug.Print "    " & fldLoop.Name

        For Each prpLoop In fldLoop.Properties
            ' プロパティが TableDefs コレクションのコンテキストで無効な場合に
            ' 数値を読もうとするとエラーになります。
            On Error Resume Next
            Debug.Print "        " & prpLoop.Name & " - " & _
                IIf(prpLoop = "", "[empty]", prpLoop)
            On Error GoTo 0
        Next prpLoop

    Next fldLoop

    ' ここではデモとして新しい TableDef を削除します。
    dbsNorthwind.TableDefs.Delete tdfNew.Name
    dbsNorthwind.Close

End Sub


CreateGroup メソッド (DAO)

CreateGroup メソッド

新しい Group オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set group = object.CreateGroup (name, pid)

CreateGroup メソッドの構文には、次の指定項目があります。

指定項目 | 説明
group | 作成する Group オブジェクトを表すオブジェクト変数を指定します。
object | 新しい Group オブジェクトを作成する User オブジェクト、または Workspace オブジェクトを表すオブジェクト変数を指定します。
name | (省略可能) 新しい Group オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な Group オブジェクト名についての詳細は、「Nameプロパティ」を参照してください。
pid | (省略可能) グループアカウントのパーソナル ID (PID) を含むサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。一意なパーソナル ID は、半角 4 文字以上 20 文字以下 （4 バイト以上 20 バイト以下） の英数字で指定します。有効なパーソナル ID の詳細については、「PID プロパティ」を参照してください。

解説

CreateGroup メソッドを使用して、User または Workspace に新しい Group オブジェクトを作成します。CreateGroup メソッドを使用する場合に省略できる指定項目を省略すると、新しいオブジェクトをコレクションに追加する前に、代入ステートメントを使用してプロパティの値を設定または再設定することができます。新しいオブジェクトを追加した後では、設定値を変更できないプロパティもあります。詳細については、各プロパティのトピックを参照してください。

引数 name が既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、Append メソッドを使用すると実行時エラーが発生します。

Group オブジェクトをコレクションから削除するには、コレクションに対して Delete メソッドを使用します。


CreateGroup メソッドの使用例 (DAO/Microsoft Jet)

CreateGroup メソッドの使用例

次の例では、CreateGroup メソッドを使用して、新しく Group オブジェクトを作成し、"admin" ユーザーを新しい Group オブジェクトのメンバにして、そのプロパティとユーザーのリストを作成します。

Sub CreateGroupX()

    Dim wrkDefault As Workspace
    Dim grpNew As Group
    Dim grpTemp As Group
    Dim prpLoop As Property
    Dim usrLoop As User

    Set wrkDefault = DBEngine.Workspaces(0)

    With wrkDefault

        ' 新しくグループを作成し、追加します。
        Set grpNew = .CreateGroup("NewGroup", _
            "AAA123456789")
        .Groups.Append grpNew

        ' 適切な Group オブジェクトを作成し
        ' ユーザーの Groups コレクションに追加することで
        ' "admin" ユーザーを NewGroup のメンバにします。
        Set grpTemp = .Users("admin").CreateGroup("NewGroup")
        .Users("admin").Groups.Append grpTemp

        Debug.Print "Properties of " & grpNew.Name

        ' NewGroup の Properties コレクションを列挙します。
        ' PID プロパティは読み取ることが許可されていません。
        For Each prpLoop In grpNew.Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop

        Debug.Print "Users collection of " & grpNew.Name

        ' NewGroup の Users コレクションを列挙します。
        For Each usrLoop In grpNew.Users
            Debug.Print "    " & _
                usrLoop.Name
        Next usrLoop

        ' ここではデモとして新しい Group オブジェクトを削除します。
        .Groups.Delete "NewGroup"

    End With

End Sub


CreateIndex メソッド (DAO)

CreateIndex メソッド

新しい Index オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set index = tabledef.CreateIndex (name)

CreateIndex メソッドの構文には、次の指定項目があります。

指定項目 | 説明
index | 作成するインデックスを表すオブジェクト変数を指定します。
tabledef | 新しい Index オブジェクトを作成するために使用する TableDef オブジェクトを表すオブジェクト変数を指定します。
name | (省略可能) 新しい Index オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な Index オブジェクト名についての詳細は、「Name プロパティ」を参照してください。

解説

CreateIndex メソッドを使用して TableDef オブジェクトに新しい Index オブジェクトを作成します。CreateIndex メソッドを使用する場合、引数 name を省略すると、新しいオブジェクトをコレクションに追加する前に、適切な代入ステートメントを使用して Name プロパティの値を設定または再設定することができます。新しいオブジェクトを追加した後では、Indexes コレクションのオブジェクトの種類によって、設定できない場合があります。詳細については、｢Name プロパティ｣ のトピックを参照してください。

引数 name が既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、Append メソッドを使用すると実行時エラーが発生します。

Index オブジェクトをコレクションから削除するには、コレクションに対して Delete メソッドを使用します。


CreateIndex メソッドの使用例 (DAO/Microsoft Jet)

CreateIndex メソッドの使用例

次の例では、CreateIndex メソッドを使用して、2 つの新しい Index オブジェクトを作成し、Employees TableDef オブジェクトの Indexes コレクションに追加します。続いて、TableDef オブジェクトの Indexes コレクション、新しい Index オブジェクトの Fields コレクション、および新しい Index オブジェクトの Properties コレクションを列挙します。このプロシージャを実行するには、CreateIndexOutput 関数が必要です。

Sub CreateIndexX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim idxCountry As Index
    Dim idxFirstName As Index
    Dim idxLoop As Index

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind!Employees

    With tdfEmployees
        ' 最初の Index オブジェクトを作成し
        ' そこに Field オブジェクトを作成して追加します。
        ' そして、その Index オブジェクトを TableDef の
        ' Indexes コレクションに追加します。
        Set idxCountry = .CreateIndex("CountryIndex")
        With idxCountry
            .Fields.Append .CreateField("Country")
            .Fields.Append .CreateField("LastName")
            .Fields.Append .CreateField("FirstName")
        End With
        .Indexes.Append idxCountry

        ' 2 番目の Index オブジェクトを作成し
        ' そこに Field オブジェクトを作成して追加します。
        ' そして、その Index オブジェクトを TableDef の
        ' Indexes コレクションに追加します。
        Set idxFirstName = .CreateIndex
        With idxFirstName
            .Name = "FirstNameIndex"
            .Fields.Append .CreateField("FirstName")
            .Fields.Append .CreateField("LastName")
        End With
        .Indexes.Append idxFirstName

        ' コレクションの更新を行って
        ' 新しい Index オブジェクトにアクセスできるようにします。
        .Indexes.Refresh

        Debug.Print .Indexes.Count & " Indexes in " & _
            .Name & " TableDef"

        ' Indexes コレクションを列挙します。
        For Each idxLoop In .Indexes
            Debug.Print "    " & idxLoop.Name
        Next idxLoop

        ' レポートを出力します。
        CreateIndexOutput idxCountry
        CreateIndexOutput idxFirstName

        ' ここではデモとして新しい Index オブジェクトを削除します。
        .Indexes.Delete idxCountry.Name
        .Indexes.Delete idxFirstName.Name
    End With

    dbsNorthwind.Close

End Sub

Function CreateIndexOutput(idxTemp As Index)

    Dim fldLoop As Field
    Dim prpLoop As Property

    With idxTemp
        ' Index オブジェクトの Fields コレクションを列挙します。
        Debug.Print "Fields in " & .Name
        For Each fldLoop In .Fields
            Debug.Print "    " & fldLoop.Name
        Next fldLoop

        ' Index オブジェクトの Properties コレクションを列挙します。
        Debug.Print "Properties of " & .Name
        For Each prpLoop In .Properties
            Debug.Print "    " & prpLoop.Name & " - " & _
                IIf(prpLoop = "", "[empty]", prpLoop)
        Next prpLoop
    End With

End Function


CreateProperty メソッド (DAO)

CreateProperty メソッド

ユーザー定義の新しい Property オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set property = object.CreateProperty (name, type, value, DDL)

CreateProperty メソッドの構文には、次の指定項目があります。

指定項目 | 説明
property | 作成する Property オブジェクトを表すオブジェクト変数を指定します。
object | 新しい Property オブジェクトを作成するために使用する Database、Field、Index、QueryDef、Document、または TableDef のオブジェクトを表すオブジェクト変数を指定します。
name | (省略可能) 新しい Property オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な Property オブジェクト名についての詳細は、「Name プロパティ」を参照してください。
type | (省略可能) 新しい Property オブジェクトのデータ型を定義する定数を指定します。有効なデータ型については、「Type プロパティ」を参照してください。
value | (省略可能) プロパティの初期値が格納されているバリアント型 (Variant) を指定します。詳細については、「Value プロパティ」を参照してください。
DDL | (省略可能) Property オブジェクトが DDL オブジェクトであるかどうかを示すサブタイプがブール型 (Boolean) であるバリアント型 (Variant) を指定します。既定値は False です。引数 DDL が True である場合、ユーザーが Property オブジェクトの変更や削除を行うには、dbSecWriteDef の権限が必要です。

解説

ユーザー定義の Property オブジェクトは、持続的なオブジェクトの Properties コレクションでのみ作成できます。

CreateProperty メソッドを使用する場合、省略できる新しいオブジェクトをコレクションに追加する前に、代入ステートメントを使用してプロパティの値を設定または再設定することができます。新しいオブジェクトを追加した後では、変更できないプロパティもあります。詳細については、「Name プロパティ」、「Type プロパティ」、および「Value プロパティ」の各トピックを参照してください。

引数 name が既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、Append メソッドを使用すると、実行時エラーが発生します。

ユーザー定義の Property オブジェクトからコレクションを削除するには、Properties コレクションに対して Delete メソッドを使用します。組み込みプロパティを削除することはできません。

メモ 引数 DDL を省略すると、既定値である False が使用され DDL オブジェクトになりません。対応する DDL が公開されていないため、Property オブジェクトを DDL オブジェクトから非 DDL オブジェクトに変更するには、そのオブジェクトを削除して、もう一度作成し直す必要があります。


CreateProperty メソッドの使用例 (DAO/Microsoft Jet)

CreateProperty メソッドの使用例

次の例では、ユーザー定義のプロパティに値を設定します。プロパティが存在しない場合には、CreateProperty メソッドを使用して、新しいプロパティを作成し、値を設定します。このプロシージャを実行するには SetProperty プロシージャが必要です。

Sub CreatePropertyX()

    Dim dbsNorthwind As Database
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' Archive プロパティを True に設定します。
    SetProperty dbsNorthwind, "Archive", True

    With dbsNorthwind
        Debug.Print "Properties of " & .Name

        ' Northwind データベースの Properties コレクションを
        ' 列挙します。
        For Each prpLoop In .Properties
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
        Next prpLoop

        ' ここではデモとして新しいプロパティを削除します。
        .Properties.Delete "Archive"

        .Close
    End With

End Sub

Sub SetProperty(dbsTemp As Database, strName As String, _
    booTemp As Boolean)

    Dim prpNew As Property
    Dim errLoop As Error

    ' 指定したプロパティを設定します。
    On Error GoTo Err_Property
    dbsTemp.Properties(strName) = booTemp
    On Error GoTo 0

    Exit Sub

Err_Property:

    ' エラー 3270 はプロパティが見つからないことを意味します。
    If DBEngine.Errors(0).Number = 3270 Then
        ' プロパティを作成し、数値を設定して
        ' Properties コレクションに追加します。
        Set prpNew = dbsTemp.CreateProperty(strName, _
            dbBoolean, booTemp)
        dbsTemp.Properties.Append prpNew
        Resume Next
    Else
        ' 別のエラーが発生した場合、エラー メッセージを表示します。
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
        End
    End If

End Sub


CreateQueryDef メソッド (DAO)

CreateQueryDef メソッド

指定した Connection オブジェクトまたは Database オブジェクトに、新しい QueryDef オブジェクトを作成します。

構文

Set querydef = object.CreateQueryDef (name, sqltext)

CreateQueryDef メソッドの構文には、次の指定項目があります。

指定項目 | 説明
querydef | 作成する QueryDef オブジェクトを表すオブジェクト変数を指定します。
object | 新しい QueryDef オブジェクトを含んだ、開いている Connection オブジェクトまたは Database オブジェクトを表すオブジェクト変数を表します。
name | (省略可能) 新しい QueryDef オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。
sqltext | (省略可能) QueryDef オブジェクトを定義するサブタイプが文字列型 (String) であるバリアント型 (Variant) の SQL ステートメントを指定します。この引数を省略すると、コレクションに追加する前または後に、SQL プロパティの設定によって、QueryDef オブジェクトを定義することができます。

解説

Jet ワークスペースでは、QueryDef オブジェクトを作成する場合、長さ 0 の文字列 ("") 以外を名前にすると、その QueryDef オブジェクトは自動的に QueryDefs コレクションに追加されます。ODBCDirect ワークスペースでは、QueryDef オブジェクトは常に一時的です。

ODBCDirect ワークスペースでは、引数 sqltext は SQL ステートメントまたは Microsoft SQL Server のストアド プロシージャとそのパラメータを指定できます。

引数 name で指定したオブジェクトが既に QueryDefs コレクションに含まれる場合、実行時エラーが発生します。CreateQueryDef メソッドを実行する場合に引数 name に長さ 0 の文字列 ("") を指定すると、一時的な QueryDef オブジェクトを作成することができます。また新しく作成した Name プロパティに長さ 0 の文字列 ("") を設定しても、作成できます。QueryDef オブジェクトは、QueryDefs コレクションで新しいパーマネント オブジェクトを作成しない動的な SQL ステートメントをたびたび使用する場合に便利です。長さ 0 の文字列 ("") は持続的な QueryDef オブジェクト名としては有効でないため、一時的な QueryDef オブジェクトはどのコレクションにも追加できません。新しく作成した QueryDef オブジェクトの Name プロパティと SQL プロパティを設定すると、QueryDef オブジェクトを QueryDefs コレクションに追加することができます。

QueryDef オブジェクトで SQL ステートメントを実行するには、Execute メソッド、または OpenRecordset メソッドを使用します。

ODBC データベースに対して SQL パススルー クエリーを実行する場合、QueryDef オブジェクトの使用をお勧めします。

QueryDef オブジェクトを Jet データベースの QueryDefs コレクションから削除するには、コレクションで Delete メソッドを使用します。ODBCDirect データベースの場合、QueryDef オブジェクトで Close メソッドを使用します。


CreateQueryDef、OpenRecordset メソッド、および SQL プロパティの使用例 (クライアント/サーバー) [DAO/Microsoft Jet]

CreateQueryDef、OpenRecordset メソッド、および SQL プロパティの使用例 (クライアント/サーバー)

次の例では、CreateQueryDef メソッド、OpenRecordset メソッドおよび SQL プロパティを使用して、Microsoft SQL Server のサンプル データベース Pubs に対してタイトルの表にクエリーを使用し、ベストセラーのタイトルとタイトル識別子を返します。続いて、著者の表にクエリーを出し、ユーザーに対して、著者の印税の割合に基づいてボーナスの小切手を送るように指示します (ボーナスの総額は $1,000 で、著者はそれぞれ印税のパーセンテージに基づいて受け取るようにします)。

Sub ClientServerX2()

    Dim dbsCurrent As Database
    Dim qdfBestSellers As QueryDef
    Dim qdfBonusEarners As QueryDef
    Dim rstTopSeller As Recordset
    Dim rstBonusRecipients As Recordset
    Dim strAuthorList As String

    ' QueryDef オブジェクトが作成されるデータベースを開きます。
    Set dbsCurrent = OpenDatabase("DB1.mdb")

    ' 一時的な QueryDef オブジェクトを作成して
    ' Microsoft SQL Server データベースからデータを取得します。
    Set qdfBestSellers = dbsCurrent.CreateQueryDef("")
    With qdfBestSellers
        .Connect = "ODBC;DATABASE=pubs;UID=sa;PWD=;" & _
             "DSN=Publishers"
        .SQL = "SELECT title, title_id FROM titles " & _
            "ORDER BY ytd_sales DESC"
        Set rstTopSeller = .OpenRecordset()
        rstTopSeller.MoveFirst
    End With

    ' 最初のクエリーの結果に基づいて、データを
    ' Microsoft SQL Server データベースから取得するために
    ' 一時的な QueryDef オブジェクトを作成します。
    Set qdfBonusEarners = dbsCurrent.CreateQueryDef("")
    With qdfBonusEarners
        .Connect = "ODBC;DATABASE=pubs;UID=sa;PWD=;" & _
            "DSN=Publishers"
        .SQL = "SELECT * FROM titleauthor " & _
            "WHERE title_id = '" & _
            rstTopSeller!title_id & "'"
        Set rstBonusRecipients = .OpenRecordset()
    End With

    ' 出力する文字列を組み立てます。
    With rstBonusRecipients
        Do While Not .EOF
            strAuthorList = strAuthorList & "    " & _
                !au_id & ":  $" & (10 * !royaltyper) & vbCr
            .MoveNext
        Loop
    End With

    ' 結果を表示します。
    MsgBox "Please send a check to the following " & _
        vbCr &     strAuthorList & _
        strAuthorList & "for outstanding sales of " & _
        rstTopSeller!Title & )"

    rstTopSeller.Close
    dbsCurrent.Close

End Sub


CreateQueryDef メソッドの使用例 (DAO)

CreateQueryDef メソッドの使用例

次の例では、CreateQueryDef メソッドを使用して、一時的と永続的な QueryDef の両方を作成して、実行します。このプロシージャを実行するには GetrstTemp 関数が必要です。

Sub CreateQueryDefX()

    Dim dbsNorthwind As Database
    Dim qdfTemp As QueryDef
    Dim qdfNew As QueryDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' 一時的な QueryDef を作成します。
        Set qdfTemp = .CreateQueryDef("", _
            "SELECT * FROM Employees")
        ' Recordset を開いて、レポートを出力します。
        GetrstTemp qdfTemp
        ' 永続的な QueryDef を作成します。
        Set qdfNew = .CreateQueryDef("NewQueryDef", _
            "SELECT * FROM Categories")
        ' Recordset を開いて、レポートを出力します。
        GetrstTemp qdfNew
        ' ここではデモとして新しい QueryDef を削除します。
        .QueryDefs.Delete qdfNew.Name
        .Close
    End With

End Sub

Function GetrstTemp(qdfTemp As QueryDef)

    Dim rstTemp As Recordset

    With qdfTemp
        Debug.Print .Name
        Debug.Print "    " & .SQL
        ' QueryDef から Recordset を開きます。
        Set rstTemp = .OpenRecordset(dbOpenSnapshot)

        With rstTemp
            ' Recordset を配置して、レコード数を出力します。
            .MoveLast
            Debug.Print "    Number of records = " & _
                .RecordCount
            Debug.Print
            .Close
        End With

    End With

End Function


CreateRelation メソッド (DAO)

CreateRelation メソッド

新しい Relation オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set relation = database.CreateRelation (name, table, foreigntable, attributes)

CreateRelation メソッドの構文には、次の指定項目があります。

指定項目 | 説明
relation | 作成する Relation オブジェクトを表すオブジェクト変数を指定します。
database | 新しい Relation オブジェクト作成するために使用する Database オブジェクトを表す変数を指定します。
name | (省略可能) 新しい Relation オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な Relation オブジェクト名の詳細については、「Name プロパティ」を参照してください。
table | (省略可能) リレーションの主テーブルの名前になるサブタイプが文字列型 (Stirng) であるバリアント型 (Variant) を指定します。Relation オブジェクトを追加する前にテーブルが存在していないと、実行時エラーが発生します。
foreigntable | (省略可能) リレーションの外部キー側のテーブルの名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。Relation オブジェクトを追加する前にテーブルが存在していないと、実行時エラーが発生します。
attributes | (省略可能) リレーションシップの種類についての情報を含んだ 1 つ以上の定数を指定します。詳細については、「Attributes プロパティ」を参照してください。

解説

Relation オブジェクトは、2 つの TableDef オブジェクト、または QueryDef オブジェクトのフィールド間のリレーションシップに関する情報を Jet データベース エンジンに提供します。Attributes プロパティを使用すると、参照整合性を維持することができます。

CreateRelation メソッドを使用する場合、省略できる新しいオブジェクトをコレクションに追加する前に、代入ステートメントを使用してプロパティの値を設定または再設定することができます。新しいオブジェクトを追加した後では、プロパティの設定値を変更することはできません。詳細については、各プロパティのトピックを参照してください。

Relation オブジェクトに対して、Append メソッドを使用するには、適切な Field オブジェクトを追加し、外部キーのリレーションシップ テーブルを定義しておく必要があります。

引数 name が既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、または所属する Fields コレクションに含まれる Field オブジェクト名が無効な場合、Append メソッドを使用すると実行時エラーが発生します。

レプリケートされたテーブルとローカル テーブルとの間にリレーションを設定したり維持したりすることはできません。

Relation オブジェクトを Relations コレクションから削除するには、コレクションに対して Delete メソッドを使用します。


CreateRelation メソッドの使用例 (DAO/Microsoft Jet)

CreateRelation メソッドの使用例

次の例では、CreateRelation メソッドを使用して、Employees TableDef と、Departments (会社部門) という名前の新しい TableDef の間に Relation を設定します。この例では、また新しい Relation を作成することで、必要な Indexes がどのように外部キー側のテーブルに作成されるか (Employees テーブルの DepartmentsEmployees Index) を説明します。

Sub CreateRelationX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim tdfNew As TableDef
    Dim idxNew As Index
    Dim relNew As Relation
    Dim idxLoop As Index

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' 新しいフィールドを Employees テーブルに追加します。
        Set tdfEmployees = .TableDefs!Employees
        tdfEmployees.Fields.Append _
            tdfEmployees.CreateField("DeptID", dbInteger, 2)

        ' 新しい Departments テーブルを作成します。
        Set tdfNew = .CreateTableDef("Departments")

        With tdfNew
            ' 新しい TableDef オブジェクトの Fields コレクションに
            ' Field オブジェクトを作成し、追加します。
            .Fields.Append .CreateField("DeptID", dbInteger, 2)
            .Fields.Append .CreateField("DeptName", dbText, 20)

            ' Departments テーブルに対して
            ' Index オブジェクトを作成します。
            Set idxNew = .CreateIndex("DeptIDIndex")
            ' 新しい Index オブジェクトの Fields コレクションに
            ' Field オブジェクトを作成し、追加します。
            idxNew.Fields.Append idxNew.CreateField("DeptID")
            ' 主テーブル上のインデックスは
            ' Relation の一部であるためには
            ' Unique である必要があります。
            idxNew.Unique = True
            .Indexes.Append idxNew
        End With

        .TableDefs.Append tdfNew

        ' リレーションの 2 つのテーブル名を使用して
        ' EmployeesDepartments Relation オブジェクトを作成します。
        Set relNew = .CreateRelation("EmployeesDepartments", _
            tdfNew.Name, tdfEmployees.Name, _
            dbRelationUpdateCascade)

        ' 新しい Relation オブジェクトの Fields コレクションに対して
        ' Field オブジェクトを作成します。
        ' リレーションに対して使用されるフィールドに基づいて
        ' Name プロパティと ForeignName プロパティを設定します。
        relNew.Fields.Append relNew.CreateField("DeptID")
        relNew.Fields!DeptID.ForeignName = "DeptID"
        .Relations.Append relNew

        ' レポートを出力します。
        Debug.Print "Properties of " & relNew.Name & _
            " Relation"
        Debug.Print "    Table = " & relNew.Table
        Debug.Print "    ForeignTable = " & _
            relNew.ForeignTable
        Debug.Print "Fields of " & relNew.Name & " Relation"

        With relNew.Fields!DeptID
            Debug.Print "    " & .Name
            Debug.Print "        Name = " & .Name
            Debug.Print "        ForeignName = " & .ForeignName
        End With

        Debug.Print "Indexes in " & tdfEmployees.Name & _
            " TableDef"
        For Each idxLoop In tdfEmployees.Indexes
            Debug.Print "    " & idxLoop.Name & _
                ", Foreign = " & idxLoop.Foreign
        Next idxLoop

        ' ここではデモとして新しいオブジェクトを削除します。
        .Relations.Delete relNew.Name
        .TableDefs.Delete tdfNew.Name
        tdfEmployees.Fields.Delete "DeptID"
        .Close
    End With

End Sub


CreateTableDef メソッド (DAO)

CreateTableDef メソッド

新しい TableDef オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set tabledef = database.CreateTableDef (name, attributes, source, connect)

CreateTableDef メソッドの構文には、次の指定項目があります。

指定項目 | 説明
tabledef | 作成する TableDef オブジェクトを表すオブジェクト変数を指定します。
database | 新しい TableDef オブジェクトを作成するために使用する Database オブジェクトを表すオブジェクト変数を指定します。
name | (省略可能) 新しい TableDef オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な TableDef オブジェクト名の詳細については、「Name プロパティ」を参照してください。
attributes | (省略可能) 新しい TableDef オブジェクトの複数の特性を示した、1 つ以上の定数を指定します。詳細については、「Attributes プロパティ」を参照してください。
source | (省略可能) データ ソースである外部データベースのテーブル名を含んだ、サブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。文字列 source は、新しい TableDef オブジェクトの SourceTableName プロパティの設定値になります。
connect | (省略可能) 開いているデータベースのソース、パススルー クエリーに使用されるデータベースのソース、またはリンク テーブルのソースに関する情報を含んだ、サブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な接続文字列の詳細については、「Connect プロパティ」を参照してください。

解説

CreateTableDef メソッドを使用する場合、省略できる指定項目を 1 つ以上省略すると、新しいオブジェクトをコレクションに追加する前に、代入ステートメントを使用してプロパティの値を設定または再設定することができます。新しいオブジェクトを追加した後では、設定値を変更できないプロパティもあります。詳細については、各プロパティのトピックを参照してください。

引数 name が既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、あるいは追加する TableDef オブジェクトまたは Field オブジェクトのプロパティに無効な値を指定した場合、Append メソッドを使用すると実行時エラーが発生します。TableDef オブジェクトに対して少なくとも 1 つの Field を定義していないと、TableDefs コレクションに対して TableDef オブジェクトを追加することはできません。

TableDef オブジェクトを TableDefs コレクションから削除するには、コレクションに対して Delete メソッドを使用します。


Connect および ReturnsRecords プロパティの使用例 (クライアント/サーバー) [DAO/Microsoft Jet]

Connect および ReturnsRecords プロパティの使用例 (クライアント/サーバー)

次の例では、Connect プロパティと ReturnsRecords プロパティを使用して、本の販売量に基づいて作成された Microsoft SQL Server データベースから、上位 5 つの本のタイトルを選択します。販売量が等しい場合には、クエリーの結果を表示するリストのサイズを増やして、その原因を説明するメッセージを表示します。

Sub ClientServerX1()

    Dim dbsCurrent As Database
    Dim qdfPassThrough As QueryDef
    Dim qdfLocal As QueryDef
    Dim rstTopFive As Recordset
    Dim strMessage As String

    ' QueryDef オブジェクトが作成されるデータベースを開きます。
    Set dbsCurrent = OpenDatabase("DB1.mdb")

    ' パススルー クエリーを作成して
    ' Microsoft SQL Server データベースからデータを取得します。
    Set qdfPassThrough = _
        dbsCurrent.CreateQueryDef("AllTitles")
    qdfPassThrough.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
    qdfPassThrough.SQL = "SELECT * FROM titles " & _
        "ORDER BY ytd_sales DESC"
    qdfPassThrough.ReturnsRecords = True

    ' パススルー クエリーからデータを受け取るために
    ' 一時的な QueryDef オブジェクトを作成します。
    Set qdfLocal = dbsCurrent.CreateQueryDef("")
    qdfLocal.SQL = "SELECT TOP 5 title FROM AllTitles"

    Set rstTopFive = qdfLocal.OpenRecordset()

    ' クエリーの結果を表示します。
    With rstTopFive
        strMessage = _
            "Our top 5 best-selling books are:" & vbCr

        Do While Not .EOF
            strMessage = strMessage & "    " & !Title & _
                vbCr
            .MoveNext
        Loop

        If .RecordCount > 5 Then
            strMessage = strMessage & _
                "(There was a tie, resulting in " & _
                vbCr & .RecordCount & _
                " books in the list.)"
        End If

        MsgBox strMessage
        .Close
    End With

    ' ここではデモとして新しいパススルー クエリーを削除します。
    dbsCurrent.QueryDefs.Delete "AllTitles"
    dbsCurrent.Close

End Sub


CreateTableDef メソッドの使用例 (DAO/Microsoft Jet)

CreateTableDef メソッドの使用例

次の例では、新しい TableDef オブジェクトを Northwind データベースに作成します。

Sub CreateTableDefX()

    Dim dbsNorthwind As Database
    Dim tdfNew As TableDef
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 新しい TableDef オブジェクトを作成します。
    Set tdfNew = dbsNorthwind.CreateTableDef("Contacts")

    With tdfNew
        ' フィールドを作成し、新しい TableDef オブジェクトに追加します。
        ' これは、TableDef オブジェクトを Northwind
        ' データベース上の TableDefs コレクションに追加する前に
        ' 行う必要があります。
        .Fields.Append .CreateField("FirstName", dbText)
        .Fields.Append .CreateField("LastName", dbText)
        .Fields.Append .CreateField("Phone", dbText)
        .Fields.Append .CreateField("Notes", dbMemo)

        Debug.Print "Properties of new TableDef object " & _
            "before appending to collection:"

        ' 新しい TableDef オブジェクトの
        ' Properties コレクションを列挙します。
        For Each prpLoop In .Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop

        ' 新しい TableDef オブジェクトを
        ' Northwind データベースに追加します。
        dbsNorthwind.TableDefs.Append tdfNew

        Debug.Print "Properties of new TableDef object " & _
            "after appending to collection:"

        ' 新しい TableDef オブジェクトの
        ' Properties コレクションを列挙します。
        For Each prpLoop In .Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop

    End With

    ' ここではデモとして新しいプロパティを削除します。
    dbsNorthwind.TableDefs.Delete "Contacts"

    dbsNorthwind.Close

End Sub


CreateUser メソッド (DAO)

CreateUser メソッド

新しい User オブジェクトを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

Set user = object.CreateUser (name, pid, password)

CreateUser メソッドの構文には、次の指定項目があります。

指定項目 | 説明
user | 作成する User オブジェクトを表すオブジェクト変数を指定します。
object | 新しい User オブジェクトを作成するために使用する、Group オブジェクトまたは Workspace オブジェクトを表す変数を指定します。
name | (省略可能) 新しい User オブジェクトの一意な名前になるサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。有効な User オブジェクト名の詳細については、「Name プロパティ」を参照してください。
pid | (省略可能) ユーザー アカウントのパーソナル ID (PID) を含むサブタイプが文字列型 (String) であるバリアント型 （Variant) を指定します。パーソナル ID は、半角 4 文字以上 20 文字以下 （4 バイト以上 20 バイト以下） の英数字で指定します。有効なパーソナル ID の詳細については、「PID プロパティ」を参照してください。
password | (省略可能) 新しい User オブジェクトに対するパスワードを表すサブタイプが文字列型 （String) であるバリアント型 （Variant) を指定します。パスワードは、半角 14 文字以下 （14 バイト以下） で指定し、ASCII コード 0 （Null) 以外の任意の文字を含めることができます。有効なパスワードの詳細については、「Password プロパティ」を参照してください。

解説

CreateUser メソッドを使用する場合、省略できる指定項目を 1 つ以上省略すると、新しいオブジェクトをコレクションに追加する前に、代入ステートメントを使用してプロパティの値を設定または再設定することができます。新しいオブジェクトを追加した後では、設定値を変更できないプロパティもあります。詳細については、PID、Name、および Password の各プロパティのトピックを参照してください。

引数 name が既に追加先コレクションのメンバとなっているオブジェクトを参照する場合、Append メソッドを使用すると実行時エラーが発生します。

User オブジェクトを Users コレクションから削除するには、コレクションに対して Delete メソッドを使用します。


CreateUser メソッドと Password、PID プロパティの使用例 (DAO/Microsoft Jet)

CreateUser メソッドと Password、PID プロパティの使用例

次の例では、CreateUser メソッドと Password および PID プロパティを使用して、新しく User オブジェクトを作成し、新しい User オブジェクトを異なる Group オブジェクトのメンバにして、そのプロパティとグループのリストを作成します。

Sub CreateUserX()

    Dim wrkDefault As Workspace
    Dim usrNew As User
    Dim grpNew As Group
    Dim usrTemp As User
    Dim prpLoop As Property
    Dim grpLoop As Group

    Set wrkDefault = DBEngine.Workspaces(0)

    With wrkDefault

        ' 新しく User オブジェクトを作成し、追加します。
        Set usrNew = .CreateUser("NewUser")
        usrNew.PID = "AAA123456789"
        usrNew.Password = "NewPassword"
        .Users.Append usrNew

        ' 新しく Group オブジェクトを作成し、追加します。
        Set grpNew = .CreateGroup("NewGroup", _
            "AAA123456789")
        .Groups.Append grpNew

        ' 適切な User オブジェクトを作成し
        ' グループの Users コレクションに追加することで
        ' ユーザー "NewUser" を
        ' グループ "NewGroup" のメンバにします。
        Set usrTemp = _
            .Groups("NewGroup").CreateUser("NewUser")
        .Groups("NewGroup").Users.Append usrTemp

        Debug.Print "Properties of " & usrNew.Name

        ' Newuser の Properties コレクションを列挙します。
        ' PID プロパティは読み取ることができません。
        For Each prpLoop In usrNew.Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop

        Debug.Print "Groups collection of " & usrNew.Name

        ' NewUser の Groups コレクションを列挙します。
        For Each grpLoop In usrNew.Groups
            Debug.Print "    " & _
                grpLoop.Name
        Next grpLoop

        ' ここではデモとして新しい User と Group オブジェクトを削除します。
        .Users.Delete "NewUser"
        .Groups.Delete "NewGroup"

    End With

End Sub


CreateWorkspace メソッド (DAO)

CreateWorkspace メソッド

新しい Workspace オブジェクトを作成します。

構文

Set workspace = CreateWorkspace(name, user, password, type)

CreateWorkspace メソッドの構文には、次の指定項目があります。

指定項目 | 説明
workspace | 作成する Workspace オブジェクトを表すオブジェクト変数を指定します。
name | 新しい Workspace オブジェクトの一意な名前になる文字列型 (String) を指定します。有効な Workspace オブジェクト名の詳細については、「Name プロパティ」を参照してください。
user | 新しい Workspace オブジェクトの所有者を示す文字列型 (String) を指定します。詳細については、「UserName プロパティ」を参照してください。
password | 新しい Workspace オブジェクトのパスワードを表す文字列型 (String) を指定します。パスワードは、半角 14 文字以下 （14 バイト以下） で指定し、ASCII コード 0 （Null） 以外の省略可能な文字を含めることができます。有効なパスワードの詳細については、「Password プロパティ」を参照してください。
type | (省略可能) ワークスペースの種類を示す定数を指定します。設定可能な値については、この下に説明されている｢設定値｣を参照してください。

設定値

引数 type に使用することができる定数は次の通りです。

定数 | 説明
dbUseJet | Jet ワークスペースを作成します。
dbUseODBC | ODBCDirect ワークスペースを作成します。

解説

CreateWorkspace メソッドを使用して、新しい Workspace オブジェクトを作成すると、Workspace セッションが開始され、作成した Workspace オブジェクトをアプリケーションから参照することができます。

Workspace オブジェクトは持続的なものではなく、ディスクに保存することはできません。Workspace オブジェクトの作成後、プロパティの値を変更することはできませんが、Name プロパティのみ、Workspace オブジェクトを Workspaces コレクションに追加する前に修正することができます。

作成された Workspace オブジェクトは、コレクションに追加しなくても使用することができます。Workspaces コレクションを通じて参照する必要がある場合にのみ、新しい Workspace オブジェクトを追加します。

引数 type は、新しい Workspace オブジェクトが Jet と ODBCDirect のどちらのワークスペースであるかを調べます。引数 type に dbUseODBC を設定して、Jet ワークスペースを作成していなかった場合、Jet データベース エンジンはメモリに読み込まれず、すべての作業はその後に示された Connection オブジェクトの ODBC データ ソースで発生します。引数 type を省略すると、DBEngine オブジェクトの DefaultType プロパティは、Workspace オブジェクトが接続されているデータ ソースの種類を調べます。Jet と ODBCDirect のワークスペースは、同時に開くことができます。

Workspace オブジェクトを Workspaces コレクションから削除するには、開いているデータベースと接続をすべて閉じた後、Workspace オブジェクトに対して Close メソッドを使用します。


CreateWorkspace メソッドの使用例 (DAO)

CreateWorkspace メソッドの使用例

次の例では、CreateWorkspace メソッドを使用して、Jet ワークスペースと ODBCDirect ワークスペースを作成します。続いて、ワークスペースの両方の種類のプロパティのリストを作成します。

Sub CreateWorkspaceX()

    Dim wrkODBC As Workspace
    Dim wrkJet As Workspace
    Dim wrkLoop As Workspace
    Dim prpLoop As Property

    ' ODBCDirect ワークスペースを作成します。
    ' Jet ワークスペースを作成するまで
    ' データベース エンジンはメモリにロードされません。
    Set wrkODBC = CreateWorkspace("ODBCWorkspace", "admin", _
        "", dbUseODBC)
    Workspaces.Append wrkODBC

    DefaultType = dbUseJet
    ' DBEngine の DefaultType プロパティで指定したタイプ (dbUseJet) の
    ' 名前が付いていない Workspace オブジェクトを作成します。
    Set wrkJet = CreateWorkspace("", "admin", "")

    ' Workspaces コレクションを列挙します。
    Debug.Print "Workspace objects in Workspaces collection:"
    For Each wrkLoop In Workspaces
        Debug.Print "    " & wrkLoop.Name
    Next wrkLoop

    With wrkODBC
        ' ODBCDirect ワークスペースの
        ' Properties コレクションを列挙します。
        Debug.Print "Properties of " & .Name
        On Error Resume Next
        For Each prpLoop In .Properties
            Debug.Print "    " & prpLoop.Name & " = " & prpLoop
        Next prpLoop
        On Error GoTo 0
    End With

    With wrkJet
        ' Jet ワークスペースの
        ' Properties コレクションを列挙します。
        Debug.Print _
            "Properties of unnamed Microsoft Jet workspace"
        On Error Resume Next
        For Each prpLoop In .Properties
            Debug.Print "    " & prpLoop.Name & " = " & prpLoop
        Next prpLoop
        On Error GoTo 0
    End With

    wrkODBC.Close
    wrkJet.Close

End Sub


Delete メソッド (DAO)

Delete メソッド

  • Recordset オブジェクトの場合 - 更新可能な Recordset オブジェクトのカレント レコードを削除します。ODBCDirect ワークスペースでは、ドライバの種類によって、Recordset オブジェクトが更新可能かどうか、また、Delete メソッドをサポートしているかどうかが決まります。

  • コレクションの場合 - コレクションから持続的なオブジェクトを削除します。

構文

recordset.Delete

collection.Delete objectname

Delete メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | 削除するレコードが含まれている、更新可能な Recordset オブジェクトを表すオブジェクト変数を指定します。
collection | 引数 objectname を削除するコレクションを表すオブジェクト変数を指定します。
objectname | 引数 collection が示すオブジェクトの Name プロパティの設定値である文字列型 (String) を指定します。

解説

Delete メソッドを使用すると、Recordset からカレント レコードを削除したり、データベースに格納されているテーブル、テーブルに格納されているフィールド、またはテーブルに格納されているインデックスなどのメンバをコレクションから削除したりすることができます。

レコード セット

Delete メソッドを使用する場合、Recordset にカレント レコードが含まれている必要があります。カレント レコードがない場合は実行時エラーが発生します。

更新可能な Recordset オブジェクトで Delete メソッドを使用すると、カレント レコードが削除され、アクセスできなくなります。削除したレコードの編集や使用はできませんが、削除レコードがそのままカレント レコードになります。別のレコードに移動すると削除レコードをカレント レコードにすることはできなくなります。Recordset で削除したレコードを参照すると、エラーが発生します。

トランザクションを実行中の場合、Rollback メソッドを使用して、削除したレコードを復活させることができます。

ベース テーブルが連鎖削除リレーションの主テーブルである場合、カレント レコードを削除すると、外部キー側のテーブルの 1 つ以上のレコードも削除される可能性があります。

メモ レコードの追加、編集、削除を行うには、元のデータ ソースにあらかじめ一意なインデックスが必要です。一意なインデックスがない場合、Jet ワークスペースでは、AddNew、Delete、または Edit の各メソッドを実行しようとするとエラー "権限が拒否されました" が発生します。また、ODBCDirect ワークスペースでは、Update メソッドを実行しようとすると、エラー "引数が無効です" が発生します。

コレクション

Delete メソッドを使用して、持続的なオブジェクトを削除することができます。ただし、Databases、Recordsets、または Workspaces コレクションの場合は、オブジェクトはいずれもメモリ上にのみ格納されます。この場合、Close メソッドを使用して開いているオブジェクト、またはアクティブなオブジェクトを閉じると、そのオブジェクトは削除されます。

格納されているオブジェクトの削除はすぐに行われますが、データベース構造が変更される可能性のあるほかのコレクションには Refresh メソッドを適用してください。

TableDefs コレクションの TableDef オブジェクトを削除すると、テーブルの定義とデータが削除されます。

次の表は、Delete メソッドの使用に関する制限を示します。第 1 列は、第 2 列のコレクションを含むオブジェクトです。第 3 列は、コレクションからオブジェクトを削除できる場合を示しています。たとえば、Database オブジェクトの Containers コレクションから Container オブジェクトは削除できません。

オブジェクト | コレクション | Delete メソッドを使用できるかどうか
DBEngine | Workspaces | 不可。オブジェクトを閉じると削除できます。
DBEngine | Errors | 不可。
Workspace | Connections | 不可。オブジェクトを閉じると削除できます。
Workspace | Databases | 不可。オブジェクトを閉じると削除できます。
Workspace | Groups | 可。
Workspace | Users | 可。
Connection | QueryDefs | 不可。
Connection | Recordsets | 不可。オブジェクトを閉じると削除できます。
Database | Containers | 不可。
Database | QueryDefs | 可。
Database | Recordsets | 不可。オブジェクトを閉じると削除できます。
Database | Relations | 可。
Database | TableDefs | 可。
Group | Users | 可。
User | Groups | 可。
Container | Documents | 不可。
QueryDef | Fields | 不可。
QueryDef | Parameters | 不可。
Recordset | Fields | 不可。
Relation | Fields | 追加されていない新しい Relation オブジェクトの場合にのみ可。
TableDef | Fields | データベースに追加されていない新しい TableDef オブジェクトの場合、または TableDef オブジェクトの Updatable プロパティが True に設定されている場合に可。
TableDef | Indexes | データベースに追加されていない新しい TableDef オブジェクトの場合、または Updatable プロパティが True に設定されている場合にのみ可。
Index | Fields | データベースに追加されていない新しい Index オブジェクトの場合にのみ可。
Database、Field、 Index、QueryDef、 TableDef | Properties | ユーザー定義プロパティの場合にのみ可。
DBEngine、Parameter、 Recordset、Workspace | Properties | 不可。


Delete メソッドの使用例 (DAO)

Delete メソッドの使用例

次の例では、Delete メソッドを使用して、Recordset で指定したレコードを削除します。このプロシージャを実行するには、DeleteRecord プロシージャが必要です。

Sub DeleteX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim lngID As Long

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    ' 削除する一時的なレコードを追加します。
    With rstEmployees
        .Index = "PrimaryKey"
        .AddNew
        !FirstName = "Janelle"
        !LastName = "Tebbs"
        .Update
        .Bookmark = .LastModified
        lngID = !EmployeeID
    End With

    ' 指定した ID ナンバーを持った従業員レコードを削除します。
    DeleteRecord rstEmployees, lngID

    rstEmployees.Close
    dbsNorthwind.Close

End Sub

Sub DeleteRecord(rstTemp As Recordset, _
    lngSeek As Long)

    With rstTemp
        .Seek "=", lngSeek
        If .NoMatch Then
            MsgBox "No employee #" & lngSeek & " in file!"
        Else
            .Delete
            MsgBox "Record for employee #" & lngSeek & _
                " deleted!"
        End If
    End With

End Sub


Edit メソッド (DAO)

Edit メソッド

更新可能な Recordset オブジェクトのカレント レコードを、編集できるようにコピー バッファにコピーします。

構文

recordset.Edit

プレースホルダ recordset は、編集するレコードが含まれ、開いている更新可能な Recordset オブジェクト名を表します。

解説

Edit メソッドを使用すると、これ以後カレント レコードのフィールドに対して加えた変更はコピー バッファにコピーされます。カレント レコードの編集が終わったら、Update メソッドを使用して変更内容を保存してください。

カレント レコードは、Edit メソッドを使用した後も同じです。

注意 レコードを編集した後、Update メソッドで更新せずに別のレコードに移動すると、編集内容は警告なしに失われます。さらに、recordset を閉じた場合、あるいは Recordset オブジェクトやそれを含む Database オブジェクト、または Connection オブジェクトを宣言しているプロシージャを終了した場合には、編集したレコードは警告なしに破棄されます。

次のような場合に Edit メソッドを使用するとエラーが発生します。

  • カレント レコードが未定義の場合。

  • Connection、Database、または Recordset オブジェクトが読み取り専用で開かれている場合。

  • レコードに更新可能なフィールドがない場合。

  • Database または Recordset を別のユーザーが排他モードで開いている場合。(Jet ワークスペースの場合)

  • カレント レコードが含まれているページを別のユーザーがロックしている場合。(Jet ワークスペースの場合)

Jet ワークスペースでは、マルチユーザー環境で Recordset オブジェクトの LockEdits プロパティが True に設定されている場合 (排他的ロック)、Edit メソッドを実行してから更新の完了までの間、レコードはロックされます。LockEdits プロパティが False に設定されている場合 (共有的ロック)、レコードはデータベースの更新直前にロックされ、編集前のレコードと比較されます。Edit メソッドの実行後にレコードが変更されている場合、dbSeeChanges を設定せずに OpenRecordset メソッドを使用すると Update メソッド操作は失敗し、実行時エラーが発生します。既定値では、Jet 接続型 ODBC データベースと組み込み可能な ISAM データベースでは、常に共有的ロックが使用されます。

ODBCDirect ワークスペースでは、一度レコードの主キー フィールドを編集 (また場合によっては Update メソッドを使用して更新) すると、Recordset オブジェクトを閉じるまで、そのレコードのフィールドを編集することはできなくなり、次のクエリーでレコードを取得します。

メモ レコードの追加、編集、削除を行うには、元のデータ ソースにあらかじめ一意なインデックスが必要です。一意なインデックスがない場合、Jet ワークスペースでは、AddNew、Delete、または Edit などを使用してレコードの追加の各メソッドを実行しようとするとエラー "権限が拒否されました" が発生します。また、ODBCDirect ワークスペースでは、Update メソッドを実行しようとするとエラー "引数が無効です" が発生します。


Edit メソッドの使用例 (DAO)

Edit メソッドの使用例

次の例では、Edit メソッドを使用して、指定した名前を持つカレント データを置き換えます。このプロシージャを実行するには、EditName プロシージャが必要です。

Sub EditX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strOldFirst As String
    Dim strOldLast As String
    Dim strFirstName As String
    Dim strLastName As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    ' 元のデータを格納します。
    strOldFirst = rstEmployees!FirstName
    strOldLast = rstEmployees!LastName

    ' レコードのための新しいデータを取得します。
    strFirstName = Trim(InputBox( _
            "Enter first name:"))
    strLastName = Trim(InputBox( _
            "Enter last name:"))

    ' ユーザーが両方のフィールドに何かを入力すれば、続行します。
    If strFirstName <> "" and strLastName <> "" Then
        ' 新しいデータでレコードを更新します。
        EditName rstEmployees, strFirstName, strLastName

        With rstEmployees
            ' 古いデータと新しいデータを表示します。
            Debug.Print "Old data: " & strOldFirst & _
                " " & strOldLast
            Debug.Print "New data: " & !FirstName & _
                " " & !LastName
            ' ここではデモとして元のデータに戻します。
            .Edit
            !FirstName = strOldFirst
            !LastName = strOldLast
            .Update
        End With

    Else
        Debug.Print _
            "You must input a string for first and last name!"
    End If

    rstEmployees.Close
    dbsNorthwind.Close

End Sub

Sub EditName(rstTemp As Recordset, _
    strFirst As String, strLast As String)

    ' レコードを変更し
    ' ブックマークを設定して
    ' 同じレコードをカレントのままにします。
    With rstTemp
        .Edit
        !FirstName = strFirst
        !LastName = strLast
        .Update
        .Bookmark = .LastModified
    End With

End Sub


Execute メソッド (DAO)

Execute メソッド

指定した Connection オブジェクトや Database オブジェクトで、アクション クエリーまたは SQL ステートメントを実行します。

構文

object.Execute source, options

querydef.Execute options

Execute メソッドの構文には、次の指定項目があります。

指定項目 | 説明
object | クエリーを実行する Connection オブジェクト、または Database オブジェクト変数を指定します。
querydef | QueryDef オブジェクトを表すオブジェクト変数を指定します。QueryDef オブジェクトの SQL プロパティは実行するステートメントを設定します。
source | SQL ステートメントまたは QueryDef オブジェクトの Name プロパティの値を示す文字列型 (String) を指定します。
options | (省略可能) データの一貫性に関するクエリーの特性を表す定数または定数の組み合わせを指定します。使用する定数については、この下に説明されている｢設定値｣を参照してください。

設定値

引数 options には次の定数が使用できます。

定数 | 説明
dbDenyWrite | ほかのユーザーに対して書き込みの権限を拒否します (Jet ワークスぺースでのみ使用可)。
dbInconsistent | (既定値) 矛盾した更新を実行します (Jet ワークスペースでのみ使用可)。
dbConsistent | 一貫性のある更新を実行します (Jet ワークスペースでのみ使用可)。
dbSQLPassThrough | SQL パススルー クエリーを実行します。SQL ステートメントは ODBC データベースに渡されて処理されます (Jet ワークスペースでのみ使用可)。
dbFailOnError | エラーが発生すると更新をロールバックします (Jet ワークスペースでのみ使用可)。
dbSeeChanges | 編集中のデータをほかのユーザーが変更している場合、実行時エラーを発生させます (Jet ワークスペースでのみ使用可)。
dbRunAsync | クエリーを非同期クエリーで実行します(ODBCDirect の Connection、QueryDef オブジェクトでのみ使用可)。
dbExecDirect | SQLPrepare ODBC API 関数を呼び出さずにステートメントを実行します (ODBCDirect の Connection、QueryDef オブジェクトでのみ使用可)。

メモ 定数 dbConsistent と dbInconsistent とは、相互に排他的な関係です。どちらかを使用できますが、OpenRecordset のインスタンスで両方を使用することはできません。dbConsistent と dbInconsistent の両方を使用するとエラーが発生します。

解説

Execute メソッドは、アクション クエリーに対してのみ有効です。ほかのクエリーに対して Execute メソッドを使用すると、エラーが発生します。アクション クエリーではレコードが返されないため、Execute メソッドを実行しても Recordset は返されません （Recordset が返されない場合、ODBCDirect ワークスペース で SQL パススルー クエリーを実行してもエラーは返されません）。

Connection、Database、QueryDef の各オブジェクトの RecordsAffected プロパティを使用して、最後に実行した Execute メソッドによって操作されたレコード数を調べることができます。たとえば、RecordsAffected プロパティには、アクション クエリーの実行によって削除、更新、または挿入の行われたレコード数が含まれています。Execute メソッドを使用してクエリーを実行した場合、実行された QueryDef オブジェクトの RecordsAffected プロパティの値は、操作されたレコード数に設定されます。

Jet ワークスペースでは、SQL ステートメントに構文の誤りがなく、適切な権限が与えられていれば、たとえ変更や削除を行う行が 1 行もない場合でも、Execute メソッドは失敗しません。したがって、Execute メソッドで更新クエリーおよび削除クエリーを実行する場合、引数 options に定数 dbFailOnError を必ず指定する必要があります。この指定を使用すると、クエリーによって操作されるレコードが 1 つでもロックされていて、更新または削除が不可能な場合には実行時エラーが発生し、既に成功していた変更はすべてロールバックされます。

以前のバージョンの Jet データベース エンジンでは、SQL ステートメントは自動的に暗黙トランザクションに埋め込まれます。実行中にステートメントの一部で dbFailOnError が発生した場合、ステートメント全体がロールバックされます。パフォーマンスを向上させるため、このような暗黙トランザクションはバージョン 3.5 から取り除かれました。旧式の DAO コードを更新する場合は、Execute ステートメント付近では明示的なトランザクションを使用してください。

特に Jet ワークスペースのマルチユーザー環境で、パフォーマンスを向上させるには、Execute メソッドをトランザクションにネストしてください。具体的には、カレントの Workspace オブジェクトに対して BeginTrans メソッドを使用し、次に Execute メソッドを使用して、最後に CommitTrans メソッドを使用してトランザクションを終了します。これで変更内容がディスクに保存され、クエリーが実行されている間にかけられたロックも解除されます。

ODBCDirect ワークスペースでは、省略可能な定数 dbRunAsync を含む場合、クエリーを非同期に実行します。非同期のクエリーが実行されているかどうかを参照するには、Execute メソッドを呼び出したオブジェクトの StillExecuting プロパティの値を調べます。非同期の Execute メソッドの呼び出しを中断するには、Cancel メソッドを使用します。

ODBCDirect ワークスペースでは、文字列の指定にシングル クォーテーションを使用しないと、エラーが発生します。


Execute メソッドの使用例 (DAO)

Execute メソッドの使用例

次の例では、QueryDef オブジェクトと Database オブジェクトの両方から Execute メソッドを実行した場合について説明します。このプロシージャを実行するには、ExecuteQueryDef と PrintOutput プロシージャが必要です。

Sub ExecuteX()

    Dim dbsNorthwind As Database
    Dim strSQLChange As String
    Dim strSQLRestore As String
    Dim qdfChange As QueryDef
    Dim rstEmployees As Recordset
    Dim errLoop As Error

    ' アクション クエリーに対して
    ' 2 つの SQL ステートメントを定義します。
    strSQLChange = "UPDATE Employees SET Country = " & _
        "'United States' WHERE Country = 'USA'"
    strSQLRestore = "UPDATE Employees SET Country = " & _
        "'USA' WHERE Country = 'United States'"

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' 一時的な QueryDef オブジェクトを作成します。
    Set qdfChange = dbsNorthwind.CreateQueryDef("", _
        strSQLChange)
    Set rstEmployees = dbsNorthwind.OpenRecordset( _
        "SELECT LastName, Country FROM Employees", _
        dbOpenForwardOnly)

    ' 元のデータのレポートを出力ます。
    Debug.Print _
        "Data in Employees table before executing the query"
    PrintOutput rstEmployees

    ' 一時的な QueryDef を実行します。
    ExecuteQueryDef qdfChange, rstEmployees

    ' 新しいデータのレポートを出力します。
    Debug.Print _
        "Data in Employees table after executing the query"
    PrintOutput rstEmployees

    ' アクション クエリーを実行してデータを戻します。
    ' エラーをトラップするために、必要に応じて Errors コレクションをチェックします。
    On Error GoTo Err_Execute
    dbsNorthwind.Execute strSQLRestore, dbFailOnError
    On Error GoTo 0

    ' レコード セットに再クエリーを行って
    ' カレント データを取得します。
    rstEmployees.Requery

    ' 格納したデータのレポートを出力します。
    Debug.Print "Data after executing the query " & _
        "to restore the original information"
    PrintOutput rstEmployees

    rstEmployees.Close

    Exit Sub

Err_Execute:

    ' クエリーの実行の結果で生じたあらゆるエラーを
    ' ユーザーに通知します。
    If DBEngine.Errors.Count > 0 Then
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub

Sub ExecuteQueryDef(qdfTemp As QueryDef, _
    rstTemp As Recordset)

    Dim errLoop As Error

    ' 指定した QueryDef オブジェクトを実行します。
    ' エラーをトラップして、必要に応じて Errors コレクションをチェックします。
    On Error GoTo Err_Execute
    qdfTemp.Execute dbFailOnError
    On Error GoTo 0

    ' レコード セットに再クエリーを実行して
    ' カレントデータを取得します。
    rstTemp.Requery

    Exit Sub

Err_Execute:

    ' クエリーの実行の結果生じたあらゆるエラーを
    ' ユーザーに報告します。
    If DBEngine.Errors.Count > 0 Then
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub

Sub PrintOutput(rstTemp As Recordset)

    ' Recordset を列挙します。
    Do While Not rstTemp.EOF
        Debug.Print "    " & rstTemp!LastName & _
            ", " & rstTemp!Country
        rstTemp.MoveNext
    Loop

End Sub


FillCache メソッド (DAO)

FillCache メソッド

Jet 接続型 ODBC データ ソースのデータを含む Recordset オブジェクトをローカル キャッシュの全部あるいは一部に格納します。これは Jet 接続型 ODBC データベースでのみ使用することができます。

構文

recordset.FillCache rows, startbookmark

FillCache メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | ODBC データ ソースから作成された Recordset オブジェクトを表すオブジェクト変数を指定します。リンク テーブルを表す TableDef や、TableDef オブジェクトから作成された QueryDef などを指定することができます。
rows | (省略可能) キャッシュに格納する行数を指定するサブタイプが整数型 (Integer) であるバリアント型 (Variant) を指定します。この引数を省略すると、値は CacheSize プロパティの設定によって決まります。
startbookmark | (省略可能) ブックマークを指定するサブタイプが文字列型 (Stirng) であるバリアント型 (Variant) を指定します。このブックマークが示すレコードからキャッシュに格納されます。この引数を省略すると、CacheStart プロパティが示すレコードからキャッシュに格納されます。

解説

キャッシュを使用すると、リモート サーバーからデータを取得するアプリケーションの効率を向上させることができます。キャッシュはローカル メモリに確保され、一番最後に取得されたデータを保存します。アプリケーションの実行中にこのデータが要求された場合、キャッシュから取得します。データが要求されると、Jet データベース エンジンは要求されたデータをサーバーから取得する前に、まずそのデータがキャッシュに置かれていないかを調べます。キャッシュからのデータの取得は、サーバーからのデータの取得よりも高速に行うことができます。ODBC データ ソースから取得するデータ以外のデータは、キャッシュに保存されません。

FillCache メソッドを使用すると、レコードを取得するごとにキャッシュに格納するのではなく、任意にキャッシュにデータを入れることができます。FillCache メソッドは、1 つずつレコードを取得するのではなく複数のレコードを一度に取得するため、キャッシュに格納する速度が向上します。たとえば、1 画面分のレコードを表示している間に、FillCache メソッドを使用して次の 1 画面分のレコードを取得することができます。

Recordset オブジェクトでアクセスされるすべての Jet 接続型 ODBC データ ソースにはローカル キャッシュを持つことができます。キャッシュを作成するには、リモート データ ソースから Recordset オブジェクトを開き、Recordset の CacheSize プロパティと CacheStart プロパティを設定します。

引数 rows と startbookmark が指定する範囲の一部または全部が、CacheSize プロパティと CacheStart プロパティで指定する範囲外にある場合、引数 recordset のうちこの範囲外の部分は無視され、キャッシュに保存されません。

FillCache メソッドが、リモート データ ソースに含まれるレコードよりも多くのレコードを要求する場合、Jet データベース エンジンは残っているレコードのみを取得し、エラーは発生しません。

メモ

  • キャッシュから取得されたレコードには、同時にほかのユーザーがデータ ソースに行った変更は反映されません。

  • FillCache メソッドは、キャッシュに格納していないレコードのみを取得します。キャッシュ内のデータをすべて強制的に更新するには、Recordset の CacheSize プロパティを 0 に設定してから、元のキャッシュ サイズに再設定し、FillCache メソッドを実行します。


CreateTableDef、FillCache メソッド、および CacheSize、CacheStart、SourceTableName プロパティの使用例 (クライアント/サーバー) [DAO/Microsoft Jet]

CreateTableDef、FillCache メソッド、および CacheSize、CacheStart、SourceTableName プロパティの使用例 (クライアント/サーバー)

次の例では、CreateTableDef メソッドと FillCache メソッド、および CacheSize、CacheStart、SourceTableName の各プロパティを使用して、リンク テーブルのレコードを 2 回列挙します。次に、50 レコードのキャッシュを使用して、レコードを 2 回列挙します。続いて、リンク テーブルを通したキャッシュなしと、キャッシュありの実行でのパフォーマンス統計を表示します。

Sub ClientServerX3()

    Dim dbsCurrent As Database
    Dim tdfRoyalties As TableDef
    Dim rstRemote As Recordset
    Dim sngStart As Single
    Dim sngEnd As Single
    Dim sngNoCache As Single
    Dim sngCache As Single
    Dim intLoop As Integer
    Dim strTemp As String
    Dim intRecords As Integer

    ' リンク テーブルが追加されるデータベースを開きます。
    Set dbsCurrent = OpenDatabase("DB1.mdb")

    ' Microsoft SQL Server データベースと
    ' 接続するリンク テーブルを作成します。
    Set tdfRoyalties = _
        dbsCurrent.CreateTableDef("Royalties")
    tdfRoyalties.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
    tdfRoyalties.SourceTableName = "roysched"
    dbsCurrent.TableDefs.Append tdfRoyalties
    Set rstRemote = _
        dbsCurrent.OpenRecordset("Royalties")

    With rstRemote
        ' Recordset オブジェクトの数を 2 回列挙して
        ' 経過時間を記録します。
        sngStart = Timer

        For intLoop = 1 To 2
            .MoveFirst
            Do While Not .EOF
                ' パフォーマンス テストのための簡単な操作を
                ' 実行します。
                strTemp = !title_id
                .MoveNext
            Loop
        Next intLoop

        sngEnd = Timer
        sngNoCache = sngEnd - sngStart

        ' 最初の 50 レコードをキャッシュします。
        .MoveFirst
        .CacheSize = 50
        .FillCache
        sngStart = Timer

        ' Recordset オブジェクトの数を 2 回列挙して
        ' 経過時間を記録します。
        For intLoop = 1 To 2
            intRecords = 0
            .MoveFirst
            Do While Not .EOF
                ' パフォーマンス テストのための簡単な操作を
                ' 実行します。
                strTemp = !title_id
                ' レコード数を数えます。キャッシュの終わりに達したら
                ' 次の 50 レコードをキャッシュするように
                ' キャッシュを再設定します。
                intRecords = intRecords + 1
                .MoveNext
                If intRecords Mod 50 = 0 Then
                    .CacheStart = .Bookmark
                    .FillCache
                End If
            Loop
        Next intLoop

        sngEnd = Timer
        sngCache = sngEnd - sngStart

        ' パフォーマンスの結果を表示します。
        MsgBox "Caching Performance Results:" & vbCr & _
            "    No cache: " & Format(sngNoCache, _
            "##0.000") & " seconds" & vbCr & _
            "    50-record cache: " & Format(sngCache, _
            "##0.000") & " seconds"
        .Close
    End With

    ' ここではデモとしてリンク テーブルを削除します。
    dbsCurrent.TableDefs.Delete tdfRoyalties.Name
    dbsCurrent.Close

End Sub


FindFirst、FindLast、FindNext、FindPrevious メソッド (DAO)

FindFirst、FindLast、FindNext、FindPrevious メソッド

ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトで、指定した条件を満たす先頭、最後、次、前のレコードを検索し、そのレコードをカレント レコードにします。これは Jet ワークスペースでのみ使用することができます。

構文

recordset.{FindFirst | FindLast | FindNext | FindPrevious} criteria

Find メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | 既存のダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトを表すオブジェクト変数を指定します。
criteria | レコードの検索条件として使用される文字列型 (String) を指定します。SQL ステートメントの WHERE 句の予約語 WHERE を省略した式と同じ形です。

解説

特定の条件を満たすものではなく、すべてのレコードを対象にして検索する場合、レコードからレコードへの移動を行う Move 系メソッドを使用します。テーブル タイプの Recordset オブジェクトでレコードを検索するには、Seek メソッドを使用します。

条件を満たすレコードが見つからない場合、カレント レコードは未定義になり、NoMatch プロパティは True に設定されます。条件を満たすレコードがレコード セットに複数存在する場合、FindFirst メソッドでは条件を満たす最初のレコードが検索され、FindNext メソッドでは条件を満たす次のレコードが検索されます。

Find 系メソッドの検索開始位置と検索方向は、次の表のとおりです。

Find 系メソッド | 開始位置 | 検索方向
FindFirst | レコード セットの先頭 | レコード セットの終端
FindLast | レコード セットの終端 | レコード セットの先頭
FindNext | カレント レコード | レコード セットの終端
FindPrevious | カレント レコード | レコード セットの先頭

FindLast 系メソッドを使用する場合、Jet データベース エンジンでは、検索を開始する前にすべてのレコードを Recordset に読み込みます。

Find 系メソッドと Move メソッドでは動作が異なります。Move メソッドは、単に先頭や最後、前や次のレコードをカレント レコードにするのみで、条件は適用されません。検索処理 (Find) の後、移動処理 (Move) を行うことができます。

検索処理を行ったら常に NoMatch プロパティの値を調べ、検索処理が成功したかどうかを確認してください。検索が成功した場合、NoMatch プロパティは False になります。検索が失敗した場合、NoMatch プロパティは True になり、カレント レコードは未定義になります。この場合、カレント レコードの位置を有効なレコードに戻す必要があります。

Jet 接続型 ODBC データ ソースを通してアクセスしているレコード セットに対して Find 系メソッドを使用すると、効率が悪くなることがあります。特に大きなレコード セットを扱う場合には引数 criteria の記述を変更して、特定のレコードを検索するほうが処理が高速になることがあります。

ネットワーク上の ODBC 接続を通しての Find メソッドと Seek メソッドの実行はあまり効率がよくないので、ODBCDirect ワークスペースでは、Recordset オブジェクトの種類に関わらず、Find メソッドと Seek メソッドは使用できません。この場合、Find メソッドと Seek メソッドで使用する条件に合ったレコードのみを返すように制限する、適切な WHERE 句を含むクエリー （つまり、引数 source に OpenRecordset メソッドを使用) を使用する必要があります。

Jet 接続型 ODBC データベースや大きなダイナセット タイプの Recordset オブジェクトを扱う場合、Find 系メソッドや Sort、または Filter プロパティを使用すると処理に時間がかかる場合があります。この場合、カスタマイズした ORDER BY 句や WHERE 句を使用した SQL クエリー、パラメータ クエリー、特定のレコードを取得する QueryDef オブジェクトなどを使用すると、パフォーマンスを向上させることができます。

日付を含むフィールドを検索する場合、米国式の日付書式 (月-日-年) を使用してください。英語版以外の Jet データベース エンジン 3.5 を使用している場合でも、この日付書式を使用します。ほかの日付書式を使用した場合、データの検索に失敗する可能性があります。次の例のように Visual Basic の Format 関数を使用して、日付を変換します。

rstEmployees.FindFirst "HireDate > #" _
    & Format(mydate, 'm-d-yy' ) & "#"

引数 criteria は、整数型 (Integer) ではない値の文字連鎖で構成され、システムのパラメータは、カンマのような米国式 10 進法ではない文字を指定した場合 (例: strSQL = "PRICE > " & lngPrice, および lngPrice = 125,50)、メソッドを実行しようとするとエラーが発生します。これは、連鎖の間に数値がシステムの既定の 10 進法の文字に変換され、Jet SQL が受け入れるのは米国式 10 進法の文字のみであるためです。

メモ

  • パフォーマンスを向上させるため、引数 criteria の形式は、"field = value" か "field LIKE prefix" のいずれかにします。引数 field は元のベース テーブルのインデックス フィールドで、引数 prefix は文字列を検索する接頭辞です (例:, "ART*")。

  • 一般に、同じ種類の検索では、Seek メソッドは Find メソッドよりも高いパフォーマンスを提供します。これは、テーブル タイプの Recordset オブジェクトが一番検索効率がよいということになります。


FindFirst、FindLast、FindNext、FindPrevious の各メソッドの使用例 (DAO/Microsoft Jet)

FindFirst、FindLast、FindNext、FindPrevious の各メソッドの使用例

次の例では、FindFirst、FindLast、FindNext および FindPrevious の各メソッドを使用して、提示された検索文字列とコマンドに基づいて Recordset のレコード ポインタを動かします。このプロシージャを実行するには FindAny 関数が必要です。

Sub FindFirstX()

    Dim dbsNorthwind As Database
    Dim rstCustomers As Recordset
    Dim strCountry As String
    Dim varBookmark As Variant
    Dim strMessage As String
    Dim intCommand As Integer

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstCustomers = dbsNorthwind.OpenRecordset( _
        "SELECT CompanyName, City, Country " & _
        "FROM Customers ORDER BY CompanyName", _
        dbOpenSnapshot)

    Do While True
        ' ユーザーからの入力を取得して
        ' 検索文字列を組み立てます。
        strCountry = _
            Trim(InputBox("Enter country for search."))
        If strCountry = "" Then Exit Do
        strCountry = "Country = '" & strCountry & "'"

        With rstCustomers
            ' レコード セットを配置します。
            .MoveLast
            ' 検索文字列に該当する最初のレコードを検索します。
            ' 該当するレコードが存在しない場合、ループを抜けます。
            .FindFirst strCountry
            If .NoMatch Then
                MsgBox "No records found with " & _
                    strCountry & "."
                Exit Do
            End If

            Do While True
                ' カレント レコードのブックマークを格納します。
                varBookmark = .Bookmark
                ' ユーザーは使用するメソッドを選びます。
                strMessage = "Company: " & !CompanyName & _
                    vbCr & "Location: " & !City & ", " & _
                    !Country & vbCr & vbCr & _
                    strCountry & vbCr & vbCr & _
                    "[1 - FindFirst, 2 - FindLast, " & _
                    vbCr & "3 - FindNext, " & _
                    "4 - FindPrevious]"
                intCommand = Val(Left(InputBox(strMessage), 1))
                If intCommand < 1 Or intCommand > 4 Then Exit Do

                ' 選択された Find メソッドを使用します。
                ' 検索が失敗した場合、最後のカレントレコードに戻ります。
                If FindAny(intCommand, rstCustomers, _
                        strCountry) = False Then
                    .Bookmark = varBookmark
                    MsgBox "No match--returning to " & _
                        "current record."
                End If

            Loop

        End With

        Exit Do
    Loop

    rstCustomers.Close
    dbsNorthwind.Close

End Sub

Function FindAny(intChoice As Integer, _
    rstTemp As Recordset, _
    strFind As String) As Boolean

    ' ユーザーからの入力に基づいて Find メソッドを使用します。
    Select Case intChoice
        Case 1
            rstTemp.FindFirst strFind
        Case 2
            rstTemp.FindLast strFind
        Case 3
            rstTemp.FindNext strFind
        Case 4
            rstTemp.FindPrevious strFind
    End Select

    ' NoMatch プロパティの値に基づいて戻り値を設定します。
    FindAny = IIf(rstTemp.NoMatch, False, True)

End Function


GetChunk メソッド (DAO)

GetChunk メソッド

Recordset オブジェクトの Fields コレクションにあるメモ型 (Memo) またはロング バイナリ型 (Long Binary) の Field オブジェクトのデータのすべて、または一部を返します。

構文

Set variable = recordset ! field.GetChunk (offset, numbytes)

GetChunk メソッドの構文には、次の指定項目があります。

指定項目 | 説明
variable | 引数 field で指定した Field オブジェクトのデータを格納するサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。
recordset | Fields コレクションを含んだ Recordset オブジェクトを表すオブジェクト変数を指定します。
field | Type プロパティが dbMemo (メモ型) または dbLongBinary (ロング バイナリ型) に設定されている Field オブジェクトを表すオブジェクト変数を指定します。
offset | コピーを開始する位置までのオフセット バイト数に等しい長整数型 (Long) の値です。
numbytes | 返す値のバイト数に等しい長整数型 (Long) の値です。

解説

GetChunk が返すデータは引数 variable に代入されます。全体のデータの値を複数回に分けて返すには、そのたびに GetChunk メソッドを使用します。分割されたデータをまとめるには AppendChunk メソッドを使用します。

引数 offset に 0 を指定すると、GetChunk メソッドはフィールドの 1 バイト目からコピーします。

引数 numbytes に指定した値がフィールドに格納されているデータのバイト数を超える場合、GetChunk メソッドは実際のバイト数を返します。

注意 テキスト データにはメモ型 (Memo) フィールドを使用し、ロング バイナリ型 (Long Binary) フィールドにはバイナリ データのみを格納してください。それ以外のデータを格納した場合は不都合が生じることがあります。


GetRows メソッド (DAO)

GetRows メソッド

Recordset オブジェクトから複数の行を取得します。

構文

Set varArray = recordset.GetRows (numrows)

GetRows メソッドの構文には、次の指定項目があります。

指定項目 | 説明
varArray | 返されたデータを格納するバリアント型 (Variant) を指定します。
recordset | Recordset オブジェクトを表すオブジェクト変数を指定します。
numrows | 取得する行数と等しいバリアント型 (Variant) を指定します。

解説

GetRows メソッドを使用して、Recordset オブジェクトからレコードをコピーします。このメソッドでは 2 次元の配列を返します。1 つ目の添字はフィールドを示し、2 つ目の添字は行番号を示します。次の例では、intField はフィールドを表し、intRecord は行番号を示します。

avarRecords(intField, intRecord)

返された行の 2 行目にある 1 番目のフィールドの値を取得するには、次のようなコードにします。

field1 = avarRecords(0,1)

1 行目にある 2 番目のフィールドの値を取得するには、次のようなコードにします。

field2 = avarRecords(1,0)

avarRecords 変数は、GetRows がデータを返す場合に自動的に 2 次元の配列になります。

実際の行数よりも多い値を引数 numrows に指定した場合、実際に存在する行数のみが返されます。配列のサイズは取得した行数に合わせて決定されるので、Visual Basic for Applications の UBound 関数を使用して、実際に GetRows が取得した行数を調べることができます。たとえば、varA というバリアント型 (Variant) 変数に戻り値を格納している場合、実際に取得した行数を調べるには次のようにします。

numReturned = UBound(varA,2) + 1

返された最初の行は配列のインデックス 0 の要素に格納されているので、必ず "+ 1" を行ってください。取得できる行数は使用可能なメモリの制約を受けます。大きなテーブルの場合、GetRows メソッドを使用してテーブル全体を配列に格納するべきではありません。

GetRows メソッドは、Recordset のすべてのフィールドを配列に返します。これにはメモ型 (Memo) フィールドやロング バイナリ型 (Long Binary) フィールドも含まれるため、返された列を限定するためにクエリーを使用したほうがよい場合があります。

GetRows メソッドを呼び出した後、カレント レコードは次の読み込まれていない行に配置されます。つまり、カレント レコードの移動に関しては GetRows メソッドと Move numrows メソッドは同じ結果になります。

GetRows メソッドを複数回呼び出してすべての行を取得する場合、Recordset の末尾に達していることを確認するために EOF プロパティを使用します。GetRows メソッドは、Recordset の末尾に達した場合、または指定した範囲内で取得できなかった行があった場合、指定した行よりも少ない行数を返します。たとえば、10 個のレコードを取得しようとして、5 番目のレコードの取得に失敗した場合、GetRows は 4 個のレコードを返し、5 番目のレコードをカレント レコードにします。この場合、実行時エラーは発生しません。このような状況は、ほかのユーザーがダイナセット タイプの Recordset オブジェクトのレコードを削除した場合などに起こります。


GetRows メソッドの使用例 (DAO)

GetRows メソッドの使用例

次の例では、GetRows メソッドを使用して、Recordset で指定した行数を取得し、配列に結果のデータを埋め込みます。EOF に達していた場合、または GetRows メソッドがほかのユーザーによって削除されたレコードを取得しようとしている場合には、GetRows メソッドは、指定した数よりも少ない行数のデータを返します。後者の場合にのみ、この関数は False を返します。このプロシージャを実行するには、GetRowsOK 関数が必要です。

Sub GetRowsX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strMessage As String
    Dim intRows As Integer
    Dim avarRecords As Variant
    Dim intRecord As Integer

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = dbsNorthwind.OpenRecordset( _
        "SELECT FirstName, LastName, Title " & _
        "FROM Employees ORDER BY LastName", dbOpenSnapshot)

    With rstEmployees
        Do While True
            ' 行数をユーザーから受け取ります。
            strMessage = "Enter number of rows to retrieve."
            intRows = Val(InputBox(strMessage))

            If intRows <= 0 Then Exit Do

            ' GetRowsOK メソッドがうまく行われた場合には
            ' その結果を出力します。
            ' ファイルの終わりまで来たら何もしません。
            If GetRowsOK(rstEmployees, intRows, _
                    avarRecords) Then
                If intRows > UBound(avarRecords, 2) + 1 Then
                    Debug.Print "(Not enough records in " & _
                        "Recordset to retrieve " & intRows & _
                        " rows.)"
                End If
                Debug.Print UBound(avarRecords, 2) + 1 & _
                    " records found."

                ' 取得したデータを出力します。
                For intRecord = 0 To UBound(avarRecords, 2)
                    Debug.Print "    " & _
                        avarRecords(0, intRecord) & " " & _
                        avarRecords(1, intRecord) & ", " & _
                        avarRecords(2, intRecord)
                Next intRecord
            Else
                ' GetRows のエラーはほかのユーザーによる
                ' データの変更が原因だと推測すると
                ' Requery を使用して Recordset を更新し
                ' もう一度はじめから行います。
                If .Restartable Then
                    If MsgBox("GetRows failed--retry?", _
                            vbYesNo) = vbYes Then
                        .Requery
                    Else
                        Debug.Print "GetRows failed!"
                        Exit Do
                    End If
                Else
                    Debug.Print "GetRows failed! " & _
                        "Recordset not Restartable!"
                    Exit Do
                End If
            End If

            ' GetRows メソッドを使用すると、カレント レコードの
            ' ポインタは、最後にアクセスされたレコードに残っているため
            ' ループを戻って別の検索を行う前に
            ' Recordset の先頭にポインタを戻します。
            .MoveFirst
        Loop
    End With

    rstEmployees.Close
    dbsNorthwind.Close

End Sub

Function GetRowsOK(rstTemp As Recordset, _
    intNumber As Integer, avarData As Variant) As Boolean

    ' GetRows メソッドの結果を配列に格納します。
    avarData = rstTemp.GetRows(intNumber)
    ' 必要とされるより少ない数の行が返ってきた場合、または
    ' レコード セットの終わりに到達していない場合にのみ
    ' False を返します。
    If intNumber > UBound(avarData, 2) + 1 And _
            Not rstTemp.EOF Then
        GetRowsOK = False
    Else
        GetRowsOK = True
    End If

End Function


Idle メソッド (DAO)

Idle メソッド

データ処理を一時中断し、Jet データベース エンジンがメモリの最適化や、ページ タイムアウトなど実行が中断しているタスクを実行し完了させます。これは Jet ワークスペースでのみ使用することができます。

構文

DBEngine.Idle [dbRefreshCache]

解説

Idle メソッドは、大量のデータ処理のためバックグラウンド タスクが実行できない場合、データ処理を一時中断させ、Jet データベース エンジンにバックグラウンド タスクを完了させます。Recordset オブジェクトのすべてのレコードをカレントとして保持するための十分なバックグラウンド処理時間を持たないマルチユーザー、またはマルチタスク環境で有効です。

通常、マウスの移動も含めてほかの処理が発生していない場合のみ、読み取りロックが解除され、ローカルのダイナセット タイプの Recordset オブジェクトのデータが更新されます。定期的に Idle メソッドを使用すれば、不必要な読み取りロックが解除され、Jet データベース エンジンはバックグラウンド処理を実行することができます。

引数に dbRefreshCache を指定すると、メモリの内容が .mdb ファイルのカレントのデータのみで更新されます。引数 dbForceOSFlush では、.mdb ファイルへの保留中の書き込みが CommitTrans メソッドの一部として強制的に行われます。

このメソッドは、アプリケーションの複数のインスタンスが起動していない場合にのみ、シングル ユーザー環境で使用する必要はありません。Idle メソッドは、メモリ内のデータ ディスクに書き込まれ、メモリのロックが解除されるため、マルチユーザー環境での処理が向上することがあります。

メモ トランザクションを利用して、読み取りロックを解除することもできます。


Idle メソッドの使用例 (DAO/Microsoft Jet)

Idle メソッドの使用例

次の例では、Idle メソッドを使用して、出力プロシージャがデータベースからカレントのデータにアクセスしていることを確認します。このプロシージャを実行するには、IdleOutput プロシージャが必要です。

Sub IdleX()

    Dim dbsNorthwind As Database
    Dim strCountry As String
    Dim strSQL As String
    Dim rstOrders As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' ユーザーから国名を取得し
    ' 取得した国名に基づいて
    ' SQL ステートメントをビルドします。
    strCountry = Trim(InputBox("Enter country:"))
    strSQL = "SELECT * FROM Orders WHERE ShipCountry = '" & _
        strCountry & "' ORDER BY OrderID"

    ' SQL ステートメントを使用して、Recordset を開きます。
    Set rstOrders = dbsNorthwind.OpenRecordset(strSQL)

    ' Recordset の内容を表示します。
    IdleOutput rstOrders, strCountry

    rstOrders.Close
    dbsNorthwind.Close

End Sub

Sub IdleOutput(rstTemp As Recordset, strTemp As String)

    ' Idle メソッドを呼び出して、不必要なロックを解除し
    ' 書き込みを強制します。続いて、.mdb ファイルの
    ' カレント データでメモリを更新します。
    DBEngine.Idle dbRefreshCache

    ' Recordset を列挙します。
    With rstTemp
        Debug.Print "Orders from " & strTemp & ":"
        Debug.Print , "OrderID", "CustomerID", "OrderDate"
        Do While Not .EOF
            Debug.Print , !OrderID, !CustomerID, !OrderDate
            .MoveNext
        Loop
    End With

End Sub


MakeReplica メソッド (DAO)

MakeReplica メソッド

ほかのデータベース レプリカから新しいレプリカを作成します。これは Jet ワークスペースでのみ使用することができます。

構文

database.MakeReplica replica, description, options

MakeReplica メソッドの構文には、次の指定項目があります。

指定項目 | 説明
database | 既存のレプリカの Database を表すオブジェクト変数を指定します。
replica | 新しいレプリカのパスとファイル名を含んだ文字列型 (String) を指定します。引数 replica が既存のファイル名と同じである場合、エラーが発生します。
description | 作成するレプリカの説明を含んだ文字列型 (String) を指定します。
options | (省略可能) 作成するレプリカの属性を指定する定数を単独、または組み合わせて指定します。定数については、この下に説明されている｢設定値｣を参照してください。

設定値

引数 options には、次の定数を単独、または複数指定することができます。

定数 | 説明
dbRepMakePartial | 部分レプリカを作成します。
dbRepMakeReadOnly | 新しいレプリカのレプリケート可能なオブジェクトの内容をユーザーが修正できないようにします。ただし、新しいレプリカとほかのレプリカ セットのメンバとの同期をとった場合、デザインとデータの変更が新しいレプリカに反映されます。

解説

新しく作成した部分レプリカはすべての ReplicaFilter プロパティが False に設定されていて、テーブルにデータはありません。


MakeReplica メソッドの使用例 (DAO/Microsoft Jet)

MakeReplica メソッドの使用例

次の例では MakeReplica メソッドを使用して既存のデザイン マスターの追加のレプリカを作成します。引数 intOptions は、定数 dbRepMakeReadOnly と dbRepMakePartial の組み合わせになるか 0 になります。たとえば、読み取り専用の部分レプリカを作成するには、定数 dbRepMakeReadOnly + dbRepMakePartial の値を引数 inputOptions の値として渡す必要があります。

Function MakeAdditionalReplica(strReplicableDB As _
    String, strNewReplica As String, intOptions As _
    Integer) As Integer

    Dim dbsTemp As Database
    On Error GoTo ErrorHandler

    Set dbsTemp = OpenDatabase(strReplicableDB)

    ' MakeAdditionalReplica にオプションが渡されていない場合には
    ' オプションの引数を省略することで
    ' 既定値である読み取り/書き込みが可能なフル レプリカを作成します。
    ' オプションが渡されている場合には
    ' intOptions の値を使用します。

    If intOptions = 0 Then
        dbsTemp.MakeReplica strNewReplica, _
            "Replica of " & strReplicableDB
    Else
        dbsTemp.MakeReplica strNewReplica, _
            "Replica of " & strReplicableDB, _
            intOptions
    End If

    dbsTemp.Close

ErrorHandler:
    Select Case Err
        Case 0:
            MakeAdditionalReplica = 0
            Exit Function
        Case Else:
            MsgBox "Error " & Err & " : " & Error
            MakeAdditionalReplica = Err
            Exit Function
    End Select

End Function


Move メソッド (DAO)

Move メソッド

Recordset オブジェクトのカレント レコードの位置を移動します。

構文

recordset.Move rows, start

Move メソッドには、次の指定項目があります。

指定項目 | 説明
recordset | カレント レコードの位置を移動する Recordset オブジェクトを表すオブジェクト変数を指定します。
rows | 移動する行数を指定する符号付き長整数型 (Long) の値を指定します。引数 rows が正の場合は、前方 (レコード セットの末尾方向) に移動します。引数 rows が負の場合は、後方 (レコード セットの先頭方向) に移動します。
startbookmark | (省略可能) ブックマークを示すサブタイプが文字列型 (String) であるバリアント型 (Variant) の値を指定します。引数 startbookmark を指定した場合、このブックマークを基準に移動を開始します。省略した場合、Move はカレント レコードから移動を開始します。

解説

Move メソッドを使用して、カレント レコードのポインタの位置を先頭レコードの前に移動すると、カレント レコードのポインタはファイルの先頭に移動します。Recordset にレコードがなく、BOF プロパティが True の場合、このメソッドを使用して後方へ移動するとエラーが発生します。

Move メソッドを使用して、カレント レコードのポインタの位置を末尾レコードの後に移動すると、カレント レコードのポインタはファイルの末尾に移動します。Recordset にレコードがなく、EOF プロパティが True の場合、このメソッドを使用して前方へ移動するとエラーが発生します。

BOF プロパティ、または EOF プロパティのどちらかが True の場合に、有効なブックマークがない状態でこのメソッドを使用すると、実行時エラーが発生します。

メモ

  • 前方スクロール タイプの Recordset オブジェクトで Move メソッドを使用する場合には、引数 rows に正の整数値を指定する必要があります。ブックマークは指定できないため、前方にのみ移動することができます。

  • Recordset の先頭、最後、次または前のレコードをカレント レコードにするには、MoveFirst、MoveLast、MoveNext、MovePrevious メソッドのいずれかを使用してください。

  • 引数 rows に 0 を指定して Move メソッドを使用すると、カレント レコードに対して元のデータを簡単に取得することができます。この方法は、カレント レコードにベース テーブルの最新のデータが存在しているかどうかを確認する場合に便利です。また、保留中の Edit メソッド、または AddNew メソッドの呼び出しをすべてキャンセルします。


MoveFirst、MoveLast、MoveNext、MovePrevious メソッド (DAO)

MoveFirst、MoveLast、MoveNext、MovePrevious メソッド

Recordset オブジェクトの先頭、末尾、次または前のレコードに移動し、そのレコードをカレント レコードにします。

構文

recordset.{MoveFirst | MoveLast [dbRunAsync] | MoveNext | MovePrevious}

プレースホルダ recordset は、開いている Recordset オブジェクトを表すオブジェクト変数です。

解説

Move 系メソッドを使用して、条件を適用せずに単にレコードからレコードへ移動します。

注意 カレント レコードを編集した場合には、別のレコードに移動する前に必ず Update メソッドで変更内容を保存してください。更新を行わずに別のレコードに移動すると、変更内容は警告なしに失われます。

Recordset オブジェクトを開いた場合、先頭のレコードがカレント レコードになり、BOF プロパティは False に設定されます。Recordset オブジェクトにレコードが含まれていない場合、BOF プロパティは True に設定され、カレント レコードは未定義になります。

先頭のレコードまたは末尾のレコードが既にカレント レコードの場合には、MoveFirst メソッド、または MoveLast メソッドを使用しても、そのカレント レコードは変更されません。

先頭のレコードがカレント レコードの場合、MovePrevious メソッドを使用すると、BOF プロパティは True になり、カレント レコードは未定義になります。ここでさらに MovePrevious メソッドを使用するとエラーが発生し、BOF プロパティは True のまま変化しません。

末尾のレコードがカレント レコードの場合、MoveNext メソッドを使用すると、EOF プロパティは True になり、カレント レコードは未定義になります。ここでさらに MoveNext メソッドを使用するとエラーが発生し、EOF プロパティは True のまま変化しません。

プレースホルダ recordset にテーブル タイプの Recordset オブジェクトを指定した場合 (これは Jet ワークスペースでのみ使用可)、レコードの移動はそのテーブルのカレント インデックスに従います。カレント インデックスは Index プロパティで設定できます。カレント インデックスを設定しない場合には、返されるレコードの順序は未定義になります。

重要 MoveLast メソッドを使用して、ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトを完全に取得して、Recordset オブジェクトの現在のレコード数を提示することができます。ただし、この方法で MoveLast メソッドを使用すると、アプリケーションのパフォーマンスが低下する可能性があります。新しく開いた Recordset オブジェクトの正確なレコード数の取得が本当に必要な場合にのみ、MoveLast メソッドを使用してください。MoveLast メソッドで dbRunAsync 定数を指定すると、メソッドの呼び出しは非同期になります。StillExecuting プロパティを使用して、いつ Recordset を完全に取得するかを決めることができます。また、Cancel メソッドを使用して、非同期の MoveLast メソッドの呼び出しを中断することもできます。

前方スクロール タイプの Recordset オブジェクトに対して、MoveFirst、MoveLast、および MovePrevious メソッドを使用することはできません。

Recordset オブジェクトのカレント レコードの位置を、指定のレコード数のみ前後に移動するには、Move メソッドを使用します。


MoveFirst、MoveLast、MoveNext、MovePrevious の各メソッドの使用例 (DAO)

MoveFirst、MoveLast、MoveNext、MovePrevious の各メソッドの使用例

次の例では、MoveFirst、MoveLast、MoveNext および MovePrevious の各メソッドを使用して、指定したコマンドに基づいて Recordset のレコード ポインタを動かします。このプロシージャを実行するには、MoveAny プロシージャが必要です。

Sub MoveFirstX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strMessage As String
    Dim intCommand As Integer

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = dbsNorthwind.OpenRecordset( _
        "SELECT FirstName, LastName FROM Employees " & _
        "ORDER BY LastName", dbOpenSnapshot)

    With rstEmployees
        ' レコード セットを配置します。
        .MoveLast
        .MoveFirst
        Do While True
            ' カレント レコードに関する情報を表示して
            ' ユーザーのメソッドの選択を取得します。
            strMessage = "Name: " & !FirstName & " " & _
                !LastName & vbCr & "Record " & _
                (.AbsolutePosition + 1) & " of " & _
                .RecordCount & vbCr & vbCr & _
                "[1 - MoveFirst, 2 - MoveLast, " & vbCr & _
                "3 - MoveNext, 4 - MovePrevious]"
            intCommand = Val(Left(InputBox(strMessage), 1))
            If intCommand < 1 Or intCommand > 4 Then Exit Do

            ' ユーザーの入力に基づいてメソッドを呼び出します。
            MoveAny intCommand, rstEmployees
        Loop
        .Close
    End With

    dbsNorthwind.Close

End Sub

Sub MoveAny(intChoice As Integer, _
    rstTemp As Recordset)

    ' 指定したメソッドを使用します。
    ' BOF と EOF の場合はトラップします。
    With rstTemp
        Select Case intChoice
            Case 1
                .MoveFirst
            Case 2
                .MoveLast
            Case 3
                .MoveNext
                If .EOF Then
                    MsgBox "Already at end of recordset!"
                    .MoveLast
                End If
            Case 4
                .MovePrevious
                If .BOF Then
                    MsgBox "Already at beginning of recordset!"
                    .MoveFirst
                End If
        End Select
    End With

End Sub


NewPassword メソッド (DAO)

NewPassword メソッド

既存のユーザー アカウントまたは Jet データベースのパスワードを変更します。これは Jet ワークスペースでのみ使用することができます。

構文

object.NewPassword oldpassword, newpassword

NewPassword メソッドの構文には、次の指定項目があります。

指定項目 | 説明
object | Password プロパティを変更する User オブジェクト、または Jet データベース エンジン 3.x の Database オブジェクトを表すオブジェクト変数を指定します。
oldpassword | User オブジェクトまたは Jet データベース エンジン 3.x の Database オブジェクトの Password プロパティに現在の設定値である文字列型 (String) を指定します。
newpassword | User オブジェクトまたは Jet データベース エンジン 3.x の Database オブジェクトの Password プロパティに新しい設定値である文字列型 (String) を指定します。

解説

引数 oldpassword と newpassword には、半角14文字 (14 バイト) までの ASCII 0 (Null) を除く任意の文字を含むことができます。パスワードを削除するには、引数 newpassword に長さ 0 の文字列 ("") を使用します。

パスワードではアルファベットの大文字と小文字の区別をします。

引数 object が、Users コレクションにまだ追加されていない User オブジェクトを参照する場合には、エラーが発生します。新しいパスワードを設定するには、パスワードを変更するユーザーのユーザー アカウントでログインするか、または管理者グループのメンバである必要があります。User オブジェクトの Password プロパティは書き込み専用なので、ユーザーが現在のパスワードの設定を読み取ることはできません。

引数 object が、Jet データベース エンジン 3.0 以降の Database オブジェクトを参照する場合には、このメソッドはパスワード保護でいくつかのセキュリティを提供します。Jet データベース エンジン 3.x の .mdb ファイルを作成または開いた場合、Connect 接続文字列の一部でパスワードを記述することができます。

データベースにパスワードが設定されていない場合、Jet データベース エンジン 3.5 では古いパスワードとして長さ 0 の文字列 ("") を設定して、自動的にパスワードを作成します。

注意 パスワードを失った場合、データベースを二度と開くことができなくなります。


NewPassword メソッドの使用例 (DAO/Microsoft Jet)

NewPassword メソッドの使用例

次の例では、ユーザー Pat Smith のパスワードをユーザーに問い合わせます。入力した文字列が、1 文字から 14 文字までの間の場合には、NewPassword メソッドを使用して新パスワードを変更します。ユーザーは、ユーザー Pat Smith か、Admins グループのメンバとしてログインする必要があります。

Sub NewPasswordX()

    Dim wrkDefault As Workspace
    Dim usrNew As User
    Dim grpNew As Group
    Dim grpMember As Group
    Dim strPassword As String

    ' 既定の workspace を取得します。
    Set wrkDefault = DBEngine.Workspaces(0)

    With wrkDefault

        ' 新しくユーザーを作成し、追加します。
        Set usrNew = .CreateUser("Pat Smith", _
            "abc123DEF456", "Password1")
        .Users.Append usrNew

        ' 新しくグループを作成し、追加します。
        Set grpNew = .CreateGroup("Accounting", _
            "UVW987xyz654")
        .Groups.Append grpNew

        ' 新しいユーザーを新しいグループのメンバにします。
        Set grpMember = usrNew.CreateGroup("Accounting")
        usrNew.Groups.Append grpMember

        ' ユーザーにパスワードを問い合わせます。
        ' 入力が長すぎる場合には、もう一度入力を促します。
        Do While True
            strPassword = InputBox("Enter new password:")
            Select Case Len(strPassword)
                Case 1 To 14
                    usrNew.NewPassword "Password1", strPassword
                    MsgBox "Password changed!"
                    Exit Do
                Case Is > 14
                    MsgBox "Password too long!"
                Case 0
                    Exit Do
            End Select
        Loop

        ' ここではデモとして新しい User オブジェクトと
        ' Group オブジェクトを削除します。
        .Users.Delete "Pat Smith"
        .Groups.Delete "Accounting"

    End With

End Sub


NextRecordset メソッド (DAO)

NextRecordset メソッド

OpenRecordset メソッドの呼び出しで、複数の選択クエリーから返された次のレコード セットを取得し、1 つ以上のレコードがまだ残っているかどうかを示すブール型 (Boolean) を返します。これは ODBCDirect ワークスペースでのみ使用することができます。

構文

boolean = recordset.NextRecordset

NextRecordset メソッドには、次の指定項目があります。

指定項目 | 説明
boolean | ブール型 (Boolean) 変数を指定します。True に設定されている場合は、次のレコード セットが引数 recordset で使用できることを示しています。False に設定されている場合は、保留中のレコードは存在せず、引数 recordset が空であることを示しています。
recordset | 保留中のレコードが返される既存の Recordset 変数を指定します。

解説

次の例のように、ODBCDirect ワークスペースでは、OpenRecordset オブジェクトの引数 source に存在する 1 つ以上の選択クエリーを含む Recordset オブジェクトや、選択クエリーの QueryDef オブジェクトの SQL プロパティを開くことができます。

SELECT LastName, FirstName FROM Authors
WHERE LastName = 'Smith';
SELECT Title, ISBN FROM Titles
WHERE Pub_ID = 9999S

返された Recordset オブジェクトは、最初のクエリーの実行結果に基づいて開かれます。次に続くクエリーからのレコードの結果セットを取得するには、NextRecordset メソッドを使用します。

OpenRecordset の呼び出し、または SQL プロパティで、別の選択クエリーが存在していて、複数のレコードが使用できる場合、次のクエリーから返されるレコードは Recordset オブジェクトに読み込まれ、NextRecordset はレコードが使用できることを示す True を返します。最後の選択クエリーの実行結果が Recordset オブジェクトに読み込まれた場合のように、使用できるレコードがない場合には、NextRecordset は False を返し、Recordset オブジェクトは空になります。

Recordset オブジェクトの内容をフラッシュする場合にも、Cancel メソッドを使用しますが、Cancel メソッドは、まだ読み込まれていない追加されたレコードの内容もフラッシュします。


NextRecordset メソッドと DefaultCursorDriver プロパティの使用例 (DAO/ODBCDirect)

NextRecordset メソッドと DefaultCursorDriver プロパティの使用例

次の例では、NextRecordset メソッドを使用して、複合 SELECT クエリーからデータを表示します。クエリーを実行する場合には、DefaultCursorDriver プロパティは dbUseODBCCursor が設定されている必要があります。SELECT ステートメントのいくつかまたはすべてがレコード数 0 の 3/4 を返す場合にも、NextRecordset メソッドは True を返します。各 SQL 句のすべてが検査された後で、NextRecordset メソッドは False を返します。

Sub NextRecordsetX()

    Dim wrkODBC As Workspace
    Dim conPubs As Connection
    Dim rstTemp As Recordset
    Dim intCount As Integer
    Dim booNext As Boolean

    ' ODBCDirect Workspace オブジェクトを作成し
    ' Connection オブジェクトを開きます。
    ' 複合 SQL ステートメントを使用する場合には
    ' DefaultCursorDriver を設定する必要があります。
    Set wrkODBC = CreateWorkspace("", _
        "admin", "", dbUseODBC)
    wrkODBC.DefaultCursorDriver = dbUseODBCCursor
    Set conPubs = wrkODBC.OpenConnection("Publishers", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' 複合 SELECT ステートメントを作成します。
    Set rstTemp = conPubs.OpenRecordset("SELECT * " & _
        "FROM authors; " & _
        "SELECT * FROM stores; " & _
        "SELECT * FROM jobs")

    ' 3 つの SELECT ステートメントの
    ' 実行結果の出力を試みます。
    booNext = True
    intCount = 1
    With rstTemp
        Do While booNext
            Debug.Print "Contents of recordset #" & intCount
            Do While Not .EOF
                Debug.Print , .Fields(0), .Fields(1)
                .MoveNext
            Loop
            booNext = .NextRecordset
            Debug.Print "    rstTemp.NextRecordset = " & _
                booNext
            intCount = intCount + 1
        Loop
    End With

    rstTemp.Close
    conPubs.Close
    wrkODBC.Close

End Sub

同じタスクを完了する別の方法としては、SQL の複合ステートメントを持つ準備されたステートメントを作成する方法があります。QueryDef オブジェクトの CacheSize プロパティは必ず 1 に設定し、Recordset オブジェクトは前方スクロール タイプで読み取り専用である必要があります。

Sub NextRecordsetX2()

    Dim wrkODBC As Workspace
    Dim conPubs As Connection
    Dim qdfTemp As QueryDef
    Dim rstTemp As Recordset
    Dim intCount As Integer
    Dim booNext As Boolean

    ' ODBCDirect Workspace オブジェクトを作成し
    ' Connection オブジェクトを開きます。
    ' 複合 SQL ステートメントを使用している場合には
    ' DefaultCursorDriver を設定する必要があります。
    Set wrkODBC = CreateWorkspace("", _
        "admin", "", dbUseODBC)
    wrkODBC.DefaultCursorDriver = dbUseODBCCursor
    Set conPubs = wrkODBC.OpenConnection("Publishers", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' 複合 SELECT ステートメントで
    ' 一時的なストアド プロシージャを作成します。
    Set qdfTemp = conPubs.CreateQueryDef("", _
        "SELECT * FROM authors; " & _
        "SELECT * FROM stores; " & _
        "SELECT * FROM jobs")
    ' CacheSize を設定して複数の Recordset に
    ' アクセスを許可する引数を持つ Recordset を開きます。
    qdfTemp.CacheSize = 1
    Set rstTemp = qdfTemp.OpenRecordset(dbOpenForwardOnly, _
        dbReadOnly)

    ' 3 つの SELECT ステートメントの
    ' それぞれの実行結果を出力を試します。
    booNext = True
    intCount = 1
    With rstTemp
        Do While booNext
            Debug.Print "Contents of recordset #" & intCount
            Do While Not .EOF
                Debug.Print , .Fields(0), .Fields(1)
                .MoveNext
            Loop
            booNext = .NextRecordset
            Debug.Print "    rstTemp.NextRecordset = " & _
                booNext
            intCount = intCount + 1
        Loop
    End With

    rstTemp.Close
    qdfTemp.Close
    conPubs.Close
    wrkODBC.Close

End Sub


OpenConnection メソッド (DAO)

OpenConnection メソッド

ODBC データ ソースで Connection オブジェクトを開きます。これは ODBCDirect ワークスペースでのみ使用することができます。

構文

Set connection = workspace.OpenConnection (name, options, readonly, connect)

OpenConnection メソッドには、次の指定項目があります。

指定項目 | 説明
connection | 新しい接続を割り当てる Connection オブジェクト変数を指定します。
workspace | (省略可能) 新しい接続を含める既存の Workspace オブジェクトを参照する Workspace オブジェクトのデータ型の変数を指定します。
name | 文字列式を指定します。詳細については、この下に説明されている「解説」を参照してください。
options | (省略可能) 接続に対してさまざまな引数を設定するバリアント型 (Variant) を指定します。詳細については、この下に説明されている｢設定値｣を参照してください。この設定値に基づいて、ODBC ドライバ マネージャはユーザーに対して、データ ソース名 (DSN)、ユーザー名、パスワードなどの接続情報を表示します。
readonly | (省略可能) ブール型 (Boolean) の値を指定します。接続を読み取り専用で開く場合には、True を設定し、接続を既定である読み取り/書き込み権限で開く場合には、False を設定します。
connect | (省略可能) ODBC 接続文字列を指定します。この文字列のそれぞれの要素と構文については、「Connect プロパティ」を参照してください。"ODBC" が文字列の先頭に付けられていることが必要です。引数 connect が省略されると、UID と PWD の両方あるいはそのどちらかが、Workspace オブジェクトの UserName および Password プロパティから取得されます。

設定値

引数 options を使用して、接続の設定についてユーザーに確認するかどうか、いつ確認するか、および非同期に接続を開くかどうかを決めます。次の定数のいずれかを使用することができます。

定数 | 説明
dbDriverNoPrompt | ODBC ドライバ マネージャは、引数 dbname と connect で指定した接続文字列を使用します。十分な情報が与えられない場合、実行時エラーが発生します。
dbDriverPrompt | ODBC ドライバ マネージャは、引数 dbname または connect で提示された関連情報を表示する [ODBC データ ソース] ダイアログ ボックスを表示します。接続文字列は、このダイアログ ボックスから選択したデータ ソース名 (DSN) によって構成されています。DSN を指定しない場合には、既定の DSN が使用されます。
dbDriverComplete | (既定値) 引数 connect が接続を完了するための必要な情報をすべて含んでいる場合には、ODBC ドライバ マネージャは引数 connect 内の文字列を使用します。必要な情報で含まれていないものがある場合、定数 dbDriverPrompt を指定する場合と同じように動作します。
dbDriverCompleteRequired | このオプションは、定数 dbDriverComplete と同様の動作をしますが、ODBC ドライバでは接続を完了するために要求されていない情報は表示できません。
dbRunAsync | メソッドを非同期で実行します。この定数は、ほかの引数 options 定数と組み合わせて使用することもできます。

解説

OpenConnection メソッドを使用して、ODBCDirect ワークスペースから ODBC データ ソースへの接続を設定します。OpenConnection メソッドは、OpenDatabase メソッドと似ていますが、同じではありません。OpenConnection は ODBCDirect ワークスペースのみで使用できる点が大きく異なります。

登録された ODBC データ ソース名 (DSN) を引数 connect に指定すると、引数 name にはどんな有効な文字列も使用でき、Connection オブジェクトに対して Name プロパティを提供します。有効な DSN が引数 connect に含まれていない場合には、引数 name は Name プロパティと同じ設定になる有効な ODBC DSN を参照する必要があります。引数 name と connect のどちらも有効な DSN を含んでいない場合には、引数 options によって ODBC ドライバ マネージャが必要な接続情報をユーザーに対して表示するように設定できます。ODBC ドライバ マネージャで表示され有効な名前を割り当てられた DSN は、Name プロパティを提示します。

OpenConnection は、接続情報を含んでいる Connection オブジェクトを返します。Connection オブジェクトは Database オブジェクトと似ています。主な違いは Database オブジェクトは通常データベースを表しますが、Jet ワークスペースから ODBC データ ソースへの接続を表すこともできます。


OpenConnection メソッドの使用例 (DAO/ODBCDirect)

OpenConnection メソッドの使用例

次の例では、3 つの異なるパラメータを持つ OpenConnection メソッドを使用して、3 つの異なる種類の Connection オブジェクトを開きます。

Sub OpenConnectionX()

    Dim wrkODBC As Workspace
    Dim conPubs As Connection
    Dim conPubs2 As Connection
    Dim conPubs3 As Connection
    Dim conLoop As Connection

    ' ODBCDirect Workspace オブジェクトを作成します。
    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)

    ' 接続文字列で指定した情報を使用して
    ' Connection オブジェクトを開きます。
    ' この情報が十分でない場合でも
    ' ODBC ドライバ マネージャのダイアログ ボックスを開かずに
    ' エラーをトラップすることができます。
    MsgBox "Opening Connection1..."
    Set conPubs = wrkODBC.OpenConnection("Connection1", _
        dbDriverNoPrompt, , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' ODBC ドライバ マネージャのダイアログ ボックスに入力した
    ' 情報に基づいて、読み取り専用の Connection オブジェクトを開きます。
    MsgBox "Opening Connection2..."
    Set conPubs2 = wrkODBC.OpenConnection("Connection2", _
        dbDriverPrompt, True, "ODBC;DSN=Publishers;")

    ' ODBC ドライバ マネージャのダイアログ ボックスで
    ' 不足している情報のみを入力して
    ' 読み取り専用の Connection オブジェクトを開きます。
    MsgBox "Opening Connection3..."
    Set conPubs3 = wrkODBC.OpenConnection("Connection3", _
        dbDriverCompleteRequired, True, _
        "ODBC;DATABASE=pubs;DSN=Publishers;")

    ' Connections コレクションを列挙します。
    For Each conLoop In wrkODBC.Connections
        Debug.Print "Connection properties for " & _
            conLoop.Name & ":"

        With conLoop
            ' 各 Property オブジェクトを呼び出して
            ' 明示的にプロパティ値を出力します。
            ' Connection オブジェクトは
            ' Properties コレクションをサポートしていません。
            Debug.Print "    Connect = " & .Connect
            ' Property オブジェクトは実際に Database オブジェクトを返します。
            Debug.Print "    Database[.Name] = " & _
                .Database.Name
            Debug.Print "    Name = " & .Name
            Debug.Print "    QueryTimeout = " & .QueryTimeout
            Debug.Print "    RecordsAffected = " & _
                .RecordsAffected
            Debug.Print "    StillExecuting = " & _
                .StillExecuting
            Debug.Print "    Transactions = " & .Transactions
            Debug.Print "    Updatable = " & .Updatable
        End With

    Next conLoop

    conPubs.Close
    conPubs2.Close
    conPubs3.Close
    wrkODBC.Close

End Sub


OpenDatabase メソッド (DAO)

OpenDatabase メソッド

Workspace オブジェクトで指定したデータベースを開き、そのデータベースを表す Database オブジェクトへの参照を返します。

構文

Set database = workspace.OpenDatabase (dbname, options, read-only, connect)

OpenDatabase メソッドの構文には、次の指定項目があります。

指定項目 | 説明
database | 開く Database オブジェクトを表すオブジェクト変数を指定します。
workspace | (省略可能) データベースを含める既存の Workspace オブジェクトを表すオブジェクト変数を指定します。引数 workspace が値を持たない場合、OpenDatabase メソッドは既定のワークスペースを使用します。
dbname | 既存の Jet データベースのファイル名、または ODBC データ ソースのデータ ソース名 （DSN） を表す文字列型 (String) を指定します。設定する値については、「Name プロパティ」を参照してください。
options | (省略可能) データベースにさまざまな引数を設定するバリアント型 (Variant) を指定します。この下に説明されている｢設定値｣を参照してください。
read-only | (省略可能) サブタイプがブール型 (Boolean) であるバリアント型 (Variant) を指定します。データベースを読み取り専用権限で開く場合は、True が設定され、読み取り/書き込み権限で開く場合は、False が設定されます。
connect | (省略可能) パスワードを含むさまざまな接続情報を示すサブタイプが文字列型 (String) であるバリアント型 (Variant) を指定します。

設定値

Jet ワークスペースでは、引数 options に使用できる値は次のとおりです。

設定値 | 説明
True | 排他モードでデータベースを開きます。
False | (既定値) 共有モードでデータベースを開きます。

ODBCDirect ワークスペースでは、引数 options は接続を確立するか、またはいつ確立するかをユーザーに表示するかを決定します。次のいずれかの定数を使用できます。

定数 | 説明
dbDriverNoPrompt | ODBC ドライバ マネージャは、引数 dbname および connect で提示された接続文字列を使用します。十分な情報が与えられない場合、実行時エラーが発生します。
dbDriverPrompt | ODBC ドライバ マネージャは [ODBC データ ソース] ダイアログ ボックスを表示し、引数 dbname または connect に与えられた関連情報を表示します。接続文字列は、このダイアログ ボックスで選択したデータ ソース名によって構成されます。データ ソース名を指定しない場合、既定のデータ ソース名が使用されます。
dbDriverComplete | (既定値) 引数 connect および dbname が接続を完了するための必要な情報をすべて含んでいる場合には、ODBC ドライバ マネージャは引数 connect 内の文字列を使用します。必要な情報がすべて含まれていない場合、定数 dbDriverPrompt を指定する場合と同じ動作をします。
dbDriverCompleteRequired | この引数は、定数 dbDriverComplete と同様の動作をしますが、ODBC ドライバは接続の完了に要求されていない情報は表示しません。

解説

データベースを開くと、自動的に Databases コレクションに追加されます。ODBCDirect ワークスペースでは、新しい Database オブジェクトに対応する Connection オブジェクトも作成され、同じ Workspace オブジェクトの Connections コレクションに追加されます。

引数 dbname を使用する場合、次の点に注意してください。

  • ほかのユーザーが既に排他モードで開いているデータベースを参照すると、エラーが発生します。

  • 指定したデータベースが既存のデータベースでない場合、または有効な ODBC データ ソース名でない場合、エラーが発生します。

  • この引数が長さ 0 の文字列 ("") で、引数 connect が "ODBC;" の場合、登録されているすべての ODBC のデータ ソース名の一覧を表示するダイアログ ボックスが表示され、データベースを選択することができます。

  • ODBCDirect ワークスペースを通してデータベースを開いて、引数 connect にデータ ソース名を与えると、引数 dbname に選択した文字列を設定して、次のコードでそのデータベースを参照することができます。

引数 connect は、データベースの種類と、セミコロンに続く任意指定の引数との 2 つの部分で表現されています。まず最初に "ODBC;" または " Excel 5.0;" などのデータベースの種類を提示し、続けて任意指定の引数を指定します。任意指定の引数には特定の順序はなく、それぞれセミコロンで区切られます。パラメータにパスワードが含まれることもあります。その場合には、たとえば次のようになります。

" Excel 5.0; pwd=mypassword"

ODBCDirect データベース以外の Database オブジェクトで、NewPassword メソッドを使用すると、この引数の ";pwd=..." の部分のパスワード パラメータは変更されます。この場合、必ず引数 options および read-only を指定し、ソースの文字列を指定してください。構文については「Connect プロパティ」を参照してください。

データベースを閉じ、Databases コレクションから Database オブジェクトを削除するには、そのオブジェクトに対して Close メソッドを使用します。

メモ Jet 接続型 ODBC データ ソースにアクセスする場合、ODBC データ ソースの指定のリンク テーブルに個別に TableDef オブジェクトをリンクするよりも、ODBC データ ソースに接続している Database オブジェクトを開くほうが、アプリケーションのパフォーマンスを向上させることができます。


OpenDatabase メソッドの使用例 (DAO)

OpenDatabase メソッドの使用例

次の例では、OpenDatabase メソッドを使用して、1 つの Jet データベースと 2 つの Jet 接続型 ODBC データベースを開きます。

Sub OpenDatabaseX()

    Dim wrkJet As Workspace
    Dim dbsNorthwind As Database
    Dim dbsPubs As Database
    Dim dbsPubs2 As Database
    Dim dbsLoop As Database
    Dim prpLoop As Property

    ' Jet Workspace オブジェクトを作成します。
    Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)

    ' 保存された Jet データベースから
    ' 排他モードで Database オブジェクトを開きます。
    MsgBox "Opening Northwind..."
    Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", _
        True)

    ' 接続文字列の情報に基づいて
    ' 読み取り専用の Database オブジェクトを開きます。
    MsgBox "Opening pubs..."
    Set dbsPubs = wrkJet.OpenDatabase("Publishers", _
        dbDriverNoPrompt, True, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' ODBC ドライバ マネージャのダイアログ ボックスで
    ' 不足している情報のみを入力して
    ' 読み取り専用の Database オブジェクトを開きます
    MsgBox "Opening second copy of pubs..."
    Set dbsPubs2 = wrkJet.OpenDatabase("Publishers", _
        dbDriverCompleteRequired, True, _
        "ODBC;DATABASE=pubs;DSN=Publishers;")

    ' Databases コレクションを列挙します。
    For Each dbsLoop In wrkJet.Databases
        Debug.Print "Database properties for " & _
            dbsLoop.Name & ":"

        On Error Resume Next
        ' 各 Database オブジェクトの
        ' Properties コレクションを列挙します。
        For Each prpLoop In dbsLoop.Properties
            If prpLoop.Name = "Connection" Then
                ' Property オブジェクトは
                ' 実際に Connection オブジェクトを返します。
                Debug.Print "    Connection[.Name] = " & _
                    dbsLoop.Connection.Name
            Else
                Debug.Print "    " & prpLoop.Name & " = " & _
                    prpLoop
            End If
        Next prpLoop
        On Error GoTo 0

    Next dbsLoop

    dbsNorthwind.Close
    dbsPubs.Close
    dbsPubs2.Close
    wrkJet.Close

End Sub


OpenRecordset メソッド (DAO)

OpenRecordset メソッド

新しく Recordset オブジェクトを作成し、Recordsets コレクションに追加します。

構文

Connection オブジェクトと Database オブジェクトには次の構文を使用します。

Set recordset = object.OpenRecordset (source, type, options, lockedits)

QueryDef、Recordset オブジェクト、および TableDef オブジェクトには次の構文を使用します。

Set recordset = object.OpenRecordset (type, options, lockedits)

OpenRecordset メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | 開く Recordset オブジェクトを表すオブジェクト変数を指定します。
object | 新しい Recordset オブジェクトを作成する既存のオブジェクトを表すオブジェクト変数を指定します。
source | 新しい Recordset オブジェクトのレコードのソースを示す文字列型 (String) を指定します。ソースはテーブル名、クエリー名、またはレコードを返す SQL ステートメントを指定します。Jet データベースのテーブル タイプの Recordset オブジェクトの場合、この引数にはテーブル名のみを指定できます。
type | (省略可能) 開く Recordset の種類を示す定数を指定します。指定する値については、この下に説明されている｢設定値｣を参照してください。
options | (省略可能) 新しい Recordset の特性を指定する定数の組み合わせを指定します。指定する値については、この下に説明されている｢設定値｣を参照してください。
lockedits | (省略可能) Recordset のロック状態を決定する定数を指定します。指定する値については、この下に説明されている｢設定値｣を参照してください。

設定値

引数 type には次の定数から 1 つを使用します。

定数 | 説明
dbOpenTable | テーブル タイプの Recordset オブジェクトを開きます (Jet ワークスペースでのみ使用可)。
dbOpenDynamic | 動的 タイプの Recordset オブジェクトを開きます。これは ODBC 動的カーソルに似ています。(ODBCDirect ワークスペースでのみ使用可)。
dbOpenDynaset | ダイナセット タイプの Recordset オブジェクトを開きます。これは ODBC キーセット カーソルに似ています。
dbOpenSnapshot | スナップショット タイプの Recordset オブジェクトを開きます。これは ODBC 静的カーソルに似ています。
dbOpenForwardOnly | 前方スクロール タイプの Recordset オブジェクトを開きます。

メモ Jet ワークスペースで Recordset を開く場合、その種類を指定しないと OpenRecordset オブジェクトは、テーブル タイプの Recordset オブジェクト (このオブジェクトが作成可能な場合) を作成します。リンク テーブルやクエリーを指定している場合、OpenRecordset オブジェクトはダイナセット タイプの Recordset オブジェクトを作成します。ODBCDirect ワークスペースでは、既定の設定値は dbOpenForwardOnly になります。

引数 options には、次の定数の組み合わせを使用できます。

定数 | 説明
dbAppendOnly | ユーザーは Recordset に新しいレコードを追加することができますが、既存のレコードの編集および削除を行うことはできません (Jet データベース エンジンのダイナセット タイプの Recordset オブジェクトでのみ使用可)。
dsbSQLPassThrough | SQL ステートメントを Jet 接続型 ODBC データ ソースに渡して処理します (Jet データベース エンジンのスナップショット タイプの Recordset オブジェクトでのみ使用可)。
dbSeeChanges | 編集中のデータをほかのユーザーが変更しようとした場合、実行時エラーが発生します (Jet データベース エンジンのダイナセット タイプの Recordset オブジェクトでのみ使用可)。複数のユーザーが同じデータへの同時読み取り/書き込み権限を持っているアプリケーションで便利です。
dbDenyWrite | ほかのユーザーがレコードを修正したり、追加できないようにします (Jet データベース エンジンの Recordset オブジェクトでのみ使用可)。
dbDenyRead | ほかのユーザーがテーブルのデータの読み取りをできないようにします (Jet データベース エンジンのテーブル タイプの Recordset オブジェクトでのみ使用可)。
dbForwardOnly | 前方スクロール タイプの Recordset オブジェクトを作成します (Jet データベース エンジンのスナップショット タイプの Recordset オブジェクトでのみ使用可)。これは上位互換性のためにのみ提供されていますので、このオプションを使用する代わりに、引数 type に定数 dbOpenForwardOnly を使用するようにしてください。
dbReadOnly | ほかのユーザーが Recordset を変更できないようにします (Jet データベース エンジンでのみ使用可)。引数 lockedits に定数 dbReadOnly を指定すると、このオプションを置き換えます。これは上位互換性のためのみに提供されています。
dbRunAsync | 非同期クエリーを実行します (ODBCDirect ワークスペースでのみ使用可)。
dbExecDirect | SQLPrepare をスキップし SQLExecDirect を直接呼び出して、クエリーを実行します (ODBCDirect ワークスペースでのみ使用可)。このオプションは、パラメータ クエリーに基づく Recordset を開いていない場合にのみ使用します。
dbInconsistent | 矛盾を許す更新を可能にします (Jet データベース エンジンのダイナセット タイプとスナップショット タイプの Recordset オブジェクトでのみ使用可)。
dbConsistent | 一貫性のある更新のみを可能にします (ダイナセット タイプ および スナップショット タイプの Recordset オブジェクトでのみ使用可)。

メモ 定数 dbConsistent と dbInconsistent は相互に排他的であり、両方を使用すると、エラーが発生します。引数 options に定数 dbReadOnly を使用していて、引数 lockedits を提示した場合も、エラーが発生します。

引数 lockedits に使用できる定数は次のとおりです。

定数 | 説明
dbReadOnly | ユーザーが Recordset オブジェクトを変更できないようにします (ODBCDirect ワークスペースの既定値)。dbReadOnly は引数 options と lockedits のどちらも使用できますが、両方には使用できません。両方の引数に使用すると、実行時エラーが発生します。
dbPessimistic | マルチユーザー環境での Recordset オブジェクトの変更方法を決めるために、排他的ロック状態を使用します。Edit メソッドを使用すると、編集中のレコードを含むページはすぐにロックされます (Jet ワークスペースの既定値)。
dbOptimistic | マルチユーザー環境での Recordset オブジェクトの変更方法を決める際に、共有的ロックを使用します。レコードを含むページは、Update メソッドを実行するまでロックされません。
dbOptimisticValue | 列の値に基づく共有的同時実行を使用します (ODBCDirect ワークスペースでのみ使用可)。
dbOptimisticBatch | バッチ更新を可能にします (ODBCDirect ワークスペースでのみ使用可)。

解説

Jet ワークスペースで、引数 object が QueryDef オブジェクト、またはダイナセット タイプや、スナップショット タイプの Recordset オブジェクトを参照する場合、引数 source が SQL ステートメントを参照する場合、またはリンク テーブルを表す TableDef オブジェクトを参照する場合には、引数 type には定数 dbOpenTable を使用することはできません。このような場合に定数 dbOpenTable を使用すると、実行時エラーが発生します。Jet 接続型 ODBC データ ソースのリンク テーブルで SQL パススルー クエリーを使用する場合には、始めにリンク テーブルのデータベースの Connect プロパティの値を有効な ODBC 接続文字列に設定する必要があります。Jet 接続型 ODBC データ ソースから開いた Recordset にパススルー クエリーを 1 つしか作成する必要がない場合、引数 type に dbOpenForwardOnly を使用すると、パフォーマンスを向上させることができます。

引数 object がダイナセット タイプ、またはスナップショット タイプの Recordset オブジェクトを参照する場合、新しい Recordset オブジェクトは、引数 object と同じ種類になります。引数 object がテーブル タイプの Recordset オブジェクトを参照する場合、新しいオブジェクトの種類はダイナセット タイプの Recordset オブジェクトになります。前方スクロール タイプまたは ODBCDirect Recordset オブジェクトから、新しく Recordset オブジェクトを開くことはできません。

ODBCDirect ワークスペースでは、次の例のように、引数 source に、複数の選択クエリーを含む Recordset オブジェクトを開くことができます。

"SELECT LastName, FirstName FROM Authors
WHERE LastName = 'Smith';
SELECT Title, ISBN FROM Titles
WHERE ISBN Like '1-55615-*'"

返される Recordset は、最初のクエリーの結果によって開かれます。次のクエリーのレコードの結果セットを取得するには、NextRecordset メソッドを使用します。

メモ DAO クエリーは、ODBCDirect を経由して、さまざまなデータベース サーバーに渡されますが、サーバーによっては、SQL の文法がわずかに異なることがあります。このため、Jet SQL では、状況依存ヘルプが提供されていません。ただし、Jet SQL のオンライン ヘルプは、以前と同様にヘルプ メニューから参照できます。ODBCDirect 接続や Jet 接続型クライアント/サーバー アプリケーションでパススルー クエリーを使用する場合には、使用しているデータベース サーバーの SQL 文法について、適切なリファレンス マニュアルを必ず確認してください。

複数のユーザーが同じレコードの編集または削除中に、変更をトラップする場合、Jet ワークスペースで定数 dbSeeChanges を使用します。たとえば、2 人のユーザーが同一のレコードを編集し始めた場合、どちらかのユーザーが先に実行する Update メソッドは成功します。その後もう 1 人のユーザーが Update メソッドを実行すると、実行時エラーが発生します。同様に、どちらかのユーザーが変更したレコードを、もう 1 人が Delete メソッドで削除しようとすると、実行時エラーが発生します。

一般に、レコードの更新中にこのエラーが発生した場合、フィールドの内容を更新して、新たに修正された値を取得するコードに記述します。削除中にこのエラーが発生した場合、新しいデータを表示して、データが最近変更されたことを示すメッセージを表示するようなコードを記述します。そして、レコードを削除するかどうかの確認をユーザーに求めます。

また、IDENTITY の列を含む Microsoft SQL Server 6.0 以降のテーブルに対して、Jet 接続型 ODBC ワークスペースで Recordset オブジェクトを開く場合、定数 dbSeeChanges を使用します。定数 dbSeeChanges を使用しない場合には、エラーが発生することがあります。

ODBCDirect ワークスペースでは、引数 options に定数 dbRunAsync を設定して非同期クエリーを実行することができます。この場合、アプリケーションは、クエリーをバックグラウンドで実行している間に、ほかのステートメントの処理を続けることができます。ただし、クエリーが完了するまで、Recordset のデータにアクセスすることはできません。クエリーの実行が完了したかどうかを調べるには、新しい Recordset オブジェクトの StillExecuting プロパティを調べます。クエリーの完了に予想より時間がかかる場合、Cancel メソッドを使用してクエリーの実行を終了させることができます。

OpenRecordset の呼び出しで接続がビジー状態になっている場合には、ODBC データ ソースの 1 つ以上の Recordset を開けないことがあります。サーバー側カーソルと ODBCDirect とをサーバーがサポートしている場合は、それらを使用してください。ほかに Recordset を開いてすぐに MoveLast メソッドで Recordset を完全に作成する方法もあります。

dbUseClientBatchCursor に設定された DefaultCursorDriver で、Connection オブジェクトを開く場合、ODBCDirect ワークスペースでは、Recordset を開いてデータの変更をキャッシュするバッチ更新を行うことができます。引数 lockedits に dbOptimisticBatch を指定すると、変更をキャッシュするようになります。ディスクにすぐに変更を書き込む方法や、変更をキャッシュしてディスクにバッチとして書き込む方法の詳細については、Update メソッドのトピックを参照してください。

Close メソッドを使用して、Recordset オブジェクトを閉じると、その Recordset オブジェクトは自動的に Recordsets コレクションから削除されます。

メモ 引数 source が整数以外の値と連結した文字列から構成されている SQL ステートメントを参照し、システムのパラメータがカンマなど米国式の 10 進法以外の文字を指定している場合 （たとえば、strSQL = "PRICE > " & lngPrice, および lngPrice = 125,50)、Recordset を開こうとすると、エラーが発生します。これは、連結の間に、数字はシステムの既定の 10 進法の文字を使用した文字列に変換されますが、SQL は米国式の 10 進法の文字のみを受け付けるためです。


OpenRecordset メソッドの使用例 (DAO)

OpenRecordset メソッドの使用例

次の例では、OpenRecordset メソッドを使用して 5 つの異なるタイプの Recordset オブジェクトを開いて内容を表示します。このプロシージャを実行するには、OpenRecordsetOutput プロシージャが必要です。

Sub OpenRecordsetX()

    Dim wrkJet As Workspace
    Dim wrkODBC As Workspace
    Dim dbsNorthwind As Database
    Dim conPubs As Connection
    Dim rstTemp As Recordset
    Dim rstTemp2 As Recordset

    ' Jet ワークスペース、ODBCDirect ワークスペース
    ' Jet データベースおよび ODBCDirect 接続を開きます。
    Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
    Set wrkODBC = CreateWorkspace("", "admin", "", dbUseODBC)
    Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb")
    Set conPubs = wrkODBC.OpenConnection("", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' 5 つの異なるタイプの Recordset オブジェクトを開いて
    ' 各オブジェクトのタイプの内容を表示します。

    Debug.Print "Opening forward-only-type recordset " & _
        "where the source is a QueryDef object..."
    Set rstTemp = dbsNorthwind.OpenRecordset( _
        "Ten Most Expensive Products", dbOpenForwardOnly)
    OpenRecordsetOutput rstTemp

    Debug.Print "Opening read-only dynaset-type " & _
        "recordset where the source is an SQL statement..."
    Set rstTemp = dbsNorthwind.OpenRecordset( _
        "SELECT * FROM Employees", dbOpenDynaset, dbReadOnly)
    OpenRecordsetOutput rstTemp

    ' Filter プロパティを使用して
    ' 次の OpenRecordset の呼び出しを行う
    ' レコードのみを取得します。
    Debug.Print "Opening recordset from existing " & _
        "Recordset object to filter records..."
    rstTemp.Filter = "LastName >= 'M'"
    Set rstTemp2 = rstTemp.OpenRecordset()
    OpenRecordsetOutput rstTemp2

    Debug.Print "Opening dynamic-type recordset from " & _
        "an ODBC connection..."
    Set rstTemp = conPubs.OpenRecordset( _
        "SELECT * FROM stores", dbOpenDynamic)
    OpenRecordsetOutput rstTemp

    ' StillExecuting プロパティを使用して
    ' Recordset の操作時期を確認します。
    Debug.Print "Opening snapshot-type recordset based " & _
        "on asynchronous query to ODBC connection..."
    Set rstTemp = conPubs.OpenRecordset("publishers", _
        dbOpenSnapshot, dbRunAsync)
    Do While rstTemp.StillExecuting
        Debug.Print "    [still executing...]"
    Loop
    OpenRecordsetOutput rstTemp

    rstTemp.Close
    dbsNorthwind.Close
    conPubs.Close
    wrkJet.Close
    wrkODBC.Close

End Sub

Sub OpenRecordsetOutput(rstOutput As Recordset)

    ' 指定した Recordset を列挙します。
    With rstOutput
        Do While Not .EOF
            Debug.Print , .Fields(0), .Fields(1)
            .MoveNext
        Loop
    End With

End Sub


PopulatePartial メソッド (DAO)

PopulatePartial メソッド

フル レプリカと部分レプリカの間ですべての変更の同期をとり、部分レプリカのすべてのレコードをクリアにしてから、カレントのレプリカ フィルタに基づいて部分レプリカをもう一度作成します。これは Jet データベースでのみ使用することができます。

構文

database.PopulatePartial dbname

PopulatePartial メソッドには、次の指定項目があります。

指定項目 | 説明
database | 作成する部分レプリカの Database オブジェクトを参照するオブジェクト変数を指定します。
dbname | レコードを作成するフル レプリカのパスとパス名を指定する文字列型 (String) を指定します。

解説

部分レプリカとフル レプリカ間で同期をとると、部分レプリカに "孤立" レコードが作成されることがあります。たとえば、ReplicaFilter プロパティに "区域 = '東京'" と設定された顧客テーブルがあると仮定します。ユーザーが部分レプリカで、顧客の区域を東京から大阪に変更すると、Synchronize メソッドによって同期の作業が発生します。部分レプリカで行った変更はフル レプリカまで伝わりますが、レプリカ フィルタの基準に適さないために、大阪を含んでいる部分レプリカのレコードは "孤立" レコードになります。

この "孤立" レコードの問題を解決するには、PopulatePartial メソッドを使用します。PopulatePartial メソッドは Synchronize メソッドに似ていますが、PopulatePartial メソッドはフル レプリカに対してすべての変更の同期をとり、部分レプリカのすべてのレコードを削除してから、カレントのレプリカ フィルタに基づいて部分レプリカをもう一度作成します。レプリカ フィルタを変更していない場合でも、PopulatePartial メソッドは、部分レプリカのすべてのレコードを削除して、カレント フィルタに基づいてレコードをもう一度作成します。

通常は、部分レプリカを作成する場合や、レプリカ フィルタを変更する場合には、PopulatePartial メソッドを使用する必要があります。使用中のアプリケーションでレプリカ フィルタを変更する場合には、次の操作に従ってください。

  1. フィルタが変更されている部分レプリカとフル レプリカの間で同期をとります。

  2. ReplicaFilter と PartialReplica プロパティを使用して、レプリカ フィルタを変更します。

  3. PopulatePartial メソッドを呼び出して、部分レプリカからすべてのレコードを削除し、フル レプリカから新しいレプリカ フィルタの基準に合致したすべてのレコードを移動します。

レプリカ フィルタを変更して、最初に PopulatePartial メソッドを呼び出さずに Synchronize メソッドが呼び出されると、トラップ可能なエラーが発生します。

PopulatePartial メソッドは、排他的アクセスで開かれている部分レプリカでのみ呼び出すことができます。また、部分レプリカ自体で実行されているコードから PopulatePartial メソッドは呼び出すことができません。その代わりに、フル レプリカまたはほかのデータベースから排他モードで部分レプリカを開き、PopulatePartial メソッドを呼び出すようにしてください。

メモ PopulatePartial メソッドは、部分レプリカを削除してもう一度作成する前に、一方向の同期をとるようになっていますが、PopulatePartial メソッドを呼び出す前に Synchronize メソッドを呼び出すことをお勧めします。これは、Synchronize メソッドの呼び出しが失敗すると、トラップ可能なエラーが発生するためです。部分レプリカのすべてのレコードの削除を行う PopulatePartial メソッドをこのまま遂行するかどうかを、このトラップ可能なエラーに基づいて決めることができます。PopulatePartial メソッドを単体で呼び出した場合、レコードの同期をとっている間にエラーが発生した場合でも、部分レプリカのレコードは削除されるため、不都合な結果を招くことがあります。


PopulatePartial メソッドの使用例 (DAO/Microsoft Jet)

PopulatePartial メソッドの使用例

次の例では、レプリカ フィルタの変更後に PopulatePartial メソッドを使用します。

Sub PopulatePartialX()

    Dim tdfCustomers As TableDef
    Dim strFilter As String
    Dim dbsTemp As Database

' 排他モードで部分レプリカを開きます。
    Set dbsTemp = OpenDatabase("F:\SALES\FY96CA.MDB", True)

    With dbsTemp
        Set tdfCustomers = .TableDefs("Customers")

        ' レプリカ フィルタを設定する前に
        ' フル レプリカで同期をとります。
        .Synchronize "C:\SALES\FY96.MDB"

        strFilter = "Region = 'CA'"
        tdfCustomers.ReplicaFilter = strFilter

        ' フル レプリカからレコードを配置します。
        .PopulatePartial "C:\SALES\FY96.MDB"

        .Close
    End With

End Sub


Refresh メソッド (DAO)

Refresh メソッド

カレント データベースのスキーマを反映させるために、コレクションに含まれるオブジェクトを更新します。

構文

collection.Refresh

プレースホルダ collection は持続的なコレクションを表すオブジェクト変数です。

解説

Connections、Databases、Recordsets、Workspaces の各コレクション、または Connection オブジェクトの QueryDefs コレクションなどの持続的ではないコレクションに対しては、Refresh メソッドを使用できません。

Jet データベース エンジンが、QueryDef、Recordset、または TableDef オブジェクトの Fields コレクションで、Field オブジェクトの位置を決定するには、各 Field オブジェクトの OrdinalPosition プロパティを使用します。Field オブジェクトの OrdinalPosition プロパティを変更しても、Refresh メソッドを使用するまでは、コレクションの Field オブジェクトの順序は変わらない可能性があります。

Refresh メソッドは、ほかのユーザーがデータベースを変更する可能性があるマルチユーザー環境で使用します。また、データベースの変更によって間接的に影響を受けるコレクションでも Refresh メソッドが必要になることがあります。たとえば、Users コレクションを変更した場合には、Groups コレクションを使用する前に Groups コレクションに Refresh メソッドを適用して、アカウント情報を更新することが必要な場合もあります。

コレクションは、最初に参照された場合にオブジェクトが格納され、ほかのユーザーによって行われた変更は、コレクションには自動的に反映されません。ほかのユーザーによってコレクションが変更されているような場合、コレクションの特定のオブジェクトの有無が関係するような処理をアプリケーションで行う前に、すぐにコレクションに Refresh メソッドを使用してください。これにより、コレクションは最新のものになります。ただし、Refresh メソッドを使用する場合、パフォーマンスが下がることがあります。


RefreshLink メソッド (DAO)

RefreshLink メソッド

リンク テーブルの接続情報を更新します。これは Jet ワークスペースでのみ使用することができます。

構文

tabledef.RefreshLink

プレースホルダ tabledef は、接続情報を更新する対象となるリンク テーブルを表す TableDef オブジェクトを指定します。

解説

リンク テーブルの接続情報を変更する場合、対応する TableDef オブジェクトの Connect プロパティを再設定し、RefreshLink メソッドを使用して接続情報を更新します。RefreshLink メソッドを使用しても、リンク テーブルのプロパティと Relation オブジェクトは変更されません。

リンク テーブルを表す TableDef オブジェクトに関連するすべてのコレクションにこの接続情報を反映させる場合には、コレクションごとに Refresh メソッドを使用してください。


RefreshLink メソッドの使用例 (DAO/Microsoft Jet)

RefreshLink メソッドの使用例

次の例では、RefreshLink メソッドを使用して、リンク テーブルの接続があるデータ ソースから別のデータ ソースに変更された後に、リンク テーブルのデータを更新します。このプロシージャを実行するには、RefreshLinkOutput プロシージャが必要です。

Sub RefreshLinkX()

    Dim dbsCurrent As Database
    Dim tdfLinked As TableDef

    ' リンク テーブルが追加されたデータベースを開きます。
    Set dbsCurrent = OpenDatabase("DB1.mdb")

    ' Microsoft SQL Server データベースを指定している
    ' リンク テーブルを作成します。
    Set tdfLinked = _
        dbsCurrent.CreateTableDef("AuthorsTable")
    tdfLinked.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
    tdfLinked.SourceTableName = "authors"
    dbsCurrent.TableDefs.Append tdfLinked

    ' リンク テーブルの内容を表示します。
    Debug.Print _
        "Data from linked table connected to first source:"
    RefreshLinkOutput dbsCurrent

    ' リンク テーブルの接続情報を変更し
    ' 新しいデータを使用可能にするために、接続を更新します。
    tdfLinked.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=NewPublishers"
    tdfLinked.RefreshLink

    ' リンク テーブルの内容を表示します。
    Debug.Print _
        "Data from linked table connected to second source:"
    RefreshLinkOutput dbsCurrent

    ' ここではデモとしてリンク テーブルを削除します。
    dbsCurrent.TableDefs.Delete tdfLinked.Name

    dbsCurrent.Close

End Sub

Sub RefreshLinkOutput(dbsTemp As Database)

    Dim rstRemote As Recordset
    Dim intCount As Integer

    ' リンク テーブルを開きます。
    Set rstRemote = _
        dbsTemp.OpenRecordset("AuthorsTable")

    intCount = 0

    ' Recordset を列挙し
    ' その数が 50 になったら列挙を中止します。
    With rstRemote
        Do While Not .EOF And intCount < 50
            Debug.Print , .Fields(0), .Fields(1)
            intCount = intCount + 1
            .MoveNext
        Loop
        If Not .EOF Then Debug.Print , "[more records]"
        .Close
    End With

End Sub


RegisterDatabase メソッド (DAO)

RegisterDatabase メソッド

Windows レジストリに ODBC データ ソースの接続情報を入力します。セッション中に ODBC データ ソースを開く場合、ODBC ドライバには接続情報が必要になります。

構文

DBEngine.RegisterDatabase dbname, driver, silent, attributes

RegisterDatabase メソッドには、次の指定項目があります。

指定項目 | 説明
dbname | OpenDatabase メソッドで使用される名前を文字列型 (String) で指定します。この文字列は、データ ソースに関する記述情報のブロックを参照します。たとえば、データ ソースが ODBC リモート データベースの場合には、サーバーの名前になります。
driver | ODBC ドライバの名前を文字列型 (Stirng) で指定します。これは、ODBC ドライバのダイナミック リンク ライブラリ (DLL) ファイルの名前ではありません。たとえば、SQL Server はドライバ名、SQLSRVR.DLL は DLL ファイルの名前です。ODBC および適切なドライバが既にインストールされている必要があります。
silent | ブール型 (Boolean) で、ドライバ情報を表示する ODBC ドライバ ダイアログ ボックスを表示しない場合は True、表示する場合は False を指定します。引数 silent が True の場合、引数 attributes は必要なドライバ情報を必ずすべて含んでいる必要があります。情報が含まれていない場合は、ダイアログ ボックスが表示されます。
attributes | Windows レジストリに追加するキーワードの一覧を示す文字列型 (String) を指定します。キーワードはキャリッジ リターンで区切ります。

解説

RegisterDatabase メソッドを使用する場合、そのデータベースが、接続情報が既に入っている Windows レジストリに既に登録されている場合には、その接続情報は更新されます。

RegisterDatabase メソッドの実行が失敗した場合、Windows レジストリ ファイルは変更されず、エラーが発生します。

Microsoft SQL Server などの ODBC ドライバの詳細については、ドライバに付属するドキュメントを参照してください。

データ ソースを新たに追加したり、既存のエントリを変更する場合、[コントロール パネル] ウィンドウの [ODBC データ ソース] ダイアログ ボックスを使用する必要があります。ただし、RegisterDatabase メソッドを使用する場合、必ず引数 silent を True に設定してください。


RegisterDatabase メソッドの使用例 (DAO)

RegisterDatabase メソッドの使用例

次の例では、RegisterDatabase メソッドを使用して、Windows のレジストリに Publishers の名前が付いた SQL データ ソースのレジストリへの登録を行います。

データ ソース名の作成、変更、削除を行う場合には、Windows ODBC の [コントロール パネル] アイコンを使用することをお勧めします。

Sub RegisterDatabaseX()

    Dim dbsRegister As Database
    Dim strDescription As String
    Dim strAttributes As String
    Dim errLoop As Error

    ' キーワード文字列をビルドします。
    strDescription = InputBox( "Enter a description " & _
        "for the database to be registered.")
    strAttributes = "Database=pubs" & _
        vbCr & "Description=" & strDescription & _
        vbCr & "OemToAnsi=No" & _
        vbCr & "Server=Server1"

    ' Windows レジストリを更新します。
    On Error GoTo Err_Register
    DBEngine.RegisterDatabase "Publishers", "SQL Server", _
        True, strAttributes
    On Error GoTo 0

    MsgBox "Use regedit.exe to view changes: " & _
        "HKEY_CURRENT_USER\" & _
        "Software\ODBC\ODBC.INI"

    Exit Sub

Err_Register:

    ' 無効なデータによって発生した
    ' すべてのエラーをユーザーに通知します。
    If DBEngine.Errors.Count > 0 Then
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & _
                vbCr & errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub


RepairDatabase メソッド (DAO)

RepairDatabase メソッド

メモ RepairDatabase メソッドは、利用できなくなりました。ここでは、上位互換性のために解説しています。代わりに、CompactDatabase メソッドを使用してください。

破損した Jet データベースを修復します。これは Jet データベースでのみ使用することができます。

構文

DBEngine.RepairDatabase dbname

引数 dbname は、既存の Jet データベース ファイルのパスとファイル名である文字列型 (String) を表します。パスを省略すると、カレント ディレクトリのみ検索されます。システムが UNC (uniform naming convention) をサポートしている場合は、"\\server1\share1\dir1\db1.mdb" のようにネットワーク パスを指定することもできます。

解説

引数 dbname に指定するデータベースは修復する前に閉じてください。マルチユーザー環境では、修復中のデータベースをほかのユーザーが開くことはできません。引数 dbname に指定したデータベースが閉じられていない場合、または排他モードで開くことができない場合、エラーが発生します。

RepairDatabase メソッドは、不完全な書き込み操作で破損した可能性があるデータベースを修復します。データベースの破損は、停電やハードウェアの問題で Jet データベース エンジンを使用するアプリケーションが異常終了した場合に発生します。Close メソッドを使用したり、アプリケーションを正常に終了した場合、データベースが破損することはありません。

また、RepairDatabase メソッドはすべてのシステム テーブルとすべてのインデックスを検査します。修復できないデータは破棄されます。データベースの修復が不可能な場合、実行時エラーが発生します。

破損したデータベースを開いたり最適化すると、実行時エラーが発生します。ただし、場合によってはデータベースの破損が検出されずエラーが発生しないこともあります。データベースが正しく動作しない場合には、ユーザーが RepairDatabase メソッドを使用できる方法をアプリケーションに組み込むことをお勧めします。

データベースの種類によっては、Database オブジェクトや Recordset オブジェクトおよび Jet データベース エンジンを閉じずにアプリケーションを終了すると、破損する場合があります。これは、Windows などのシステムが、データ キャッシュの内容をデータベースに書き込むことができないためです。データベースの破損を防ぐには、アプリケーションやシステムを終了する場合にキャッシュに格納されているページが、必ずデータベースに保存されるような手順を確立してください。場合によっては、一時的な電圧降下によるデータの損失を防ぐために、安定した電源が必要になることもあります。

メモ データベースを修復をした後で、CompactDatabase メソッドを使用してファイルを最適化して、ディスクの空き容量を増やすこともできます。


RepairDatabase メソッドの使用例 (DAO/Microsoft Jet)

RepairDatabase メソッドの使用例

次の例では、Northwind.mdb と名付けられたデータベースの修復を行います。このプロシージャは、Northwind.mdb のモジュールからは実行することはできません。

Sub RepairDatabaseX()

    Dim errLoop As Error

    If MsgBox("Repair the Northwind database?", _
            vbYesNo) = vbYes Then
        On Error GoTo Err_Repair
        DBEngine.RepairDatabase "Northwind.mdb"
        On Error GoTo 0
        MsgBox "End of repair procedure!"
    End If

    Exit Sub

Err_Repair:

    For Each errLoop In DBEngine.Errors
        MsgBox "Repair unsuccessful!" & vbCr & _
            "Error number: " & errLoop.Number & _
            vbCr & errLoop.Description
    Next errLoop

End Sub


Requery メソッド (DAO)

Requery メソッド

Recordset オブジェクトが元のクエリーを再度実行して、Recordset オブジェクトのデータを更新します。

構文

recordset.Requery newquerydef

Requery メソッドの構文には、次の指定項目があります。

指定項目 | 説明
recordset | 既存の Jet データベース エンジンのダイナセット タイプ、スナップショット タイプ、および前方スクロール タイプの Recordset オブジェクトまたは ODBCDirect の Recordset オブジェクトのオブジェクト変数を指定します。
newquerydef | (省略可能) QueryDef オブジェクトの Name プロパティの値を表すバリアント型 (Variant) を指定します (Jet ワークスペースでのみ使用可)。

解説

Requery メソッドを使用して、Recordset オブジェクトに確実にカレントのデータが含まれるようにします。カレントのクエリー パラメータを使用するか、あるいは Jet ワークスペースで引数 newquerydef に指定された新しいクエリー パラメータを使用して、カレントの Recordset をもう一度作成します。

ODBCDirect ワークスペースでは、元のクエリーが非同期クエリーである場合、Requery も非同期クエリーを実行します。

引数 newquerydef を指定しない場合、Recordset は、最初の作成時に使用されたのと同じクエリーの定義とパラメータに基づいて、Recordset をもう一度作成します。データ元への変更はすべて、もう一度作成している間に反映されます。QueryDef オブジェクトを使用することなく Recordset オブジェクトを作成すると、まったく新しい Recordset がもう一度作成されます。

引数 newquerydef に元の QueryDef オブジェクトを指定した場合、その QueryDef オブジェクトで指定していたパラメータを使用して Recordset オブジェクトにクエリーが再実行されます。データ元への変更はすべてもう一度作成している間に反映されます。Recordset のクエリー パラメータの値へ変更を反映させるには、引数 newquerydef を指定する必要があります。

Recordset オブジェクトを作成するのに使用した元の QueryDef オブジェクトと異なる QueryDef オブジェクトを指定すると、Recordset オブジェクトは、最初から新しく作成されます。

Requery メソッドを使用すると、Recordset オブジェクトの最初のレコードがカレント レコードになります。

ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトの Restartable プロパティが False に設定されている場合、そのオブジェクトには Requery メソッドを使用できません。ただし、引数 newquerydef を提示された場合、Restartable プロパティは無視されます。

Requery メソッドの実行後、Recordset オブジェクトの BOF および EOF プロパティが両方とも True である場合、クエリーはレコードを返さず、Recordset オブジェクトがデータを含んでいないことを表します。


Requery メソッドの使用例 (DAO)

Requery メソッドの使用例

次の例では、Requery メソッドを使用した、処理中のデータが変更された後のクエリーの更新方法を示しています。

Sub RequeryX()

    Dim dbsNorthwind As Database
    Dim qdfTemp As QueryDef
    Dim rstView As Recordset
    Dim rstChange As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set qdfTemp = dbsNorthwind.CreateQueryDef("", _
        "PARAMETERS ViewCountry Text; " & _
        "SELECT FirstName, LastName, Country FROM " & _
        "Employees WHERE Country = [ViewCountry] " & _
        "ORDER BY LastName")

    qdfTemp.Parameters!ViewCountry = "USA"
    Debug.Print "Data after initial query, " & _
        [ViewCountry] = USA"
    Set rstView = qdfTemp.OpenRecordset
    Do While Not rstView.EOF
        Debug.Print "    " & rstView!FirstName & " " & _
            rstView!LastName & ", " & rstView!Country
        rstView.MoveNext
    Loop

    ' 処理中のデータを変更します。
    Set rstChange = dbsNorthwind.OpenRecordset("Employees")
    rstChange.AddNew
    rstChange!FirstName = "Nina"
    rstChange!LastName = "Roberts"
    rstChange!Country = "USA"
    rstChange.Update

    rstView.Requery
    Debug.Print "Requery after changing underlying data"
    Set rstView = qdfTemp.OpenRecordset
    Do While Not rstView.EOF
        Debug.Print "    " & rstView!FirstName & " " & _
            rstView!LastName & ", " & rstView!Country
        rstView.MoveNext
    Loop

    ' ここではデモとして元のデータを修復します。
    rstChange.Bookmark = rstChange.LastModified
    rstChange.Delete
    rstChange.Close

    rstView.Close
    dbsNorthwind.Close

End Sub

次の例では、クエリー パラメータが変更された後のクエリーの更新方法を示しています。

Sub RequeryX2()

    Dim dbsNorthwind As Database
    Dim qdfTemp As QueryDef
    Dim prmCountry As Parameter
    Dim rstView As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set qdfTemp = dbsNorthwind.CreateQueryDef("", _
        "PARAMETERS ViewCountry Text; " & _
        "SELECT FirstName, LastName, Country FROM " & _
        "Employees WHERE Country = [ViewCountry] " & _
        "ORDER BY LastName")
    Set prmCountry = qdfTemp.Parameters!ViewCountry

    qdfTemp.Parameters!ViewCountry = "USA"
    Debug.Print "Data after initial query, " & _
        [ViewCountry] = USA"
    Set rstView = qdfTemp.OpenRecordset
    Do While Not rstView.EOF
        Debug.Print "    " & rstView!FirstName & " " & _
            rstView!LastName & ", " & rstView!Country
        rstView.MoveNext
    Loop

    ' クエリー パラメータを変更します。
    qdfTemp.Parameters!ViewCountry = "UK"
    ' 変更の結果で返される Recordset に
    ' クエリー パラメータでの変更を反映させるには
    ' 引数 QueryDef が含まれる必要があります。
    rstView.Requery qdfTemp
    Debug.Print "Requery after changing parameter, " & _
        "[ViewCountry] = UK"
    Do While Not rstView.EOF
        Debug.Print "    " & rstView!FirstName & " " & _
            rstView!LastName & ", " & rstView!Country
        rstView.MoveNext
    Loop

    rstView.Close
    dbsNorthwind.Close

End Sub


Seek メソッド (DAO)

Seek メソッド

インデックスの付いた Recordset オブジェクトのレコードのうち、カレント インデックスに対して指定した条件を満たすレコードを検索し、そのレコードをカレント レコードにします。これは Jet ワークスペースでのみ使用することができます。

構文

recordset.Seek comparison, key1, key2...key13

Seek メソッドには、次の指定項目があります。

指定項目 | 説明
recordset | Index プロパティで指定された定義済みのインデックスを持っている、既存のテーブル タイプの Recordset オブジェクトを表すオブジェクト変数を指定します。
comparison | 文字列式 “<”、“<=”、“=”、“>=”、または “>” のいずれかを指定します。
key1, key2...key13 | Recordset オブジェクトの Index プロパティの値で指定された、カレント インデックスのフィールドに対応する 1 つ以上の値を指定します。引数 key は 13 まで使用できます。

解説

Seek メソッドを使用する前に、Index プロパティでカレント インデックスを設定しておく必要があります。インデックスが重複のあるキー フィールドを示している場合、Seek メソッドは条件を満たす最初のレコードを検索します。

Seek メソッドは指定したキー フィールドの中から、引数 comparison と key1 で指定した条件を満たす最初のレコードを検索します。見つかったレコードはカレント レコードになり、NoMatch プロパティの値は False に設定されます。条件を満たすレコードが見つからなかった場合、NoMatch プロパティは True に設定され、カレント レコードは未定義になります。

引数 comparison に "="、">="、">" のいずれかを指定した場合、Seek メソッドはインデックスの先頭から検索を開始します。

引数 comparison に "<" か "<=" を指定して Seek メソッドを使用する場合には、インデックスの最後に重複する値が入力されている場合を除いて、インデックスの最後から検索が開始され、検索はインデックスの先頭に向かって行われます。ただし、インデックスの最後に重複する値が入力されている場合、重複する値の中から任意の値を起点として検索が開始されます。

インデックスで定義されているすべてのフィールドに対して、値を指定する必要があります。複数列インデックスに対して Seek メソッドを使用する場合、複数列インデックスのすべてのフィールドに対して比較値を指定しないと、"=" 演算子を使用することはできません。これは、検索条件フィールドの一部 (key2, key3, など) が既定値では Null 値になり、対応する可能性が低いためです。したがって、目的のキー以外がすべて Null 値のレコードである場合にのみ "=" 演算子は正しく機能することになります。代わりに ">=" 演算子の使用をお勧めします。

引数 key1 のフィールドのデータ型は、カレント インデックスと同じである必要があります。たとえば、カレント インデックスが数値フィールド (社員コードなど) を参照している場合、引数 key1 は数値でなければなりません。同様に、カレント インデックスがテキスト型 (Text) フィールド (氏名など) を参照している場合は、引数 key1 は文字列でなければなりません。

Seek メソッドはカレント レコードがない場合でも使用することができます。

Indexes コレクションを使用すると、既存のインデックスの一覧を列挙することができます。

ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトで、既存のインデックスに含まれていない特定の条件を満たすレコードを検索する場合には、Find 系メソッドを使用してください。特定の条件を満たすものではなく、すべてのレコードを検索する場合には、レコードからレコードへの移動を行う Move 系メソッドを使用してください。

リンク テーブルはテーブル タイプの Recordset オブジェクトとして開くことができないため、リンク テーブルには Seek メソッドを使用することはできません。ただし、OpenDatabase メソッドを使用して、組み込み可能な ISAM を経由してアクセスできる ODBC ではないデータベースを直接開いた場合には、そのデータベースのテーブルに対して Seek メソッドを使用することができます。

ODBCDirect ワークスペースを通して、ODBC 接続での Find メソッドまたは Seek メソッドの実行は、ネットワーク上での効率はあまりよくないため、Recordset オブジェクトの種類に関わらず、Find メソッドおよび Seek メソッドを使用することはできません。その代わりに、Find メソッドおよび Seek メソッド を使用する場合の条件を満たすレコードのみを返すように制限する、適切な WHERE 句を持つクエリー （引数 source を OpenRecordset メソッドに指定します） をデザインするようにしてください。


Seek メソッドの使用例 (DAO/Microsoft Jet)

Seek メソッドの使用例

次の例では、ID ナンバーに基づいた製品名を検索することで、Seek メソッドを説明します。

Sub SeekX()

    Dim dbsNorthwind As Database
    Dim rstProducts As Recordset
    Dim intFirst As Integer
    Dim intLast As Integer
    Dim strMessage As String
    Dim strSeek As String
    Dim varBookmark As Variant

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' インデックスと Seek メソッドを使用するには
    ' テーブル タイプの Recordset オブジェクトを開く必要があります。
    Set rstProducts = _
        dbsNorthwind.OpenRecordset("Products", dbOpenTable)

    With rstProducts
        ' インデックスを設定します。
        .Index = "PrimaryKey"

        ' 最小と最大の製品 ID を取得します。
        .MoveLast
        intLast = !ProductID
        .MoveFirst
        intFirst = !ProductID

        Do While True
            ' カレント レコードの情報を表示して
            ' ユーザーに ID 番号を問い合わせます。
            strMessage = "Product ID: " & !ProductID & vbCr & _
                "Name: " & !ProductName & vbCr & vbCr & _
                "Enter a product ID between " & intFirst & _
                " and " & intLast & "."
            strSeek = InputBox(strMessage)

            If strSeek = "" Then Exit Do

            ' Seek メソッドが失敗した場合にそなえて
            ' カレント ブックマークを格納します。
            varBookmark = .Bookmark

            .Seek "=", Val(strSeek)

            ' Seek メソッドが失敗した場合には
            ' カレント レコードに戻ります。
            If .NoMatch Then
                MsgBox "ID not found!"
                .Bookmark = varBookmark
            End If
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


SetOption メソッド (DAO)

SetOption メソッド

Windows レジストリの Jet データベース エンジン キーの値を一時的に上書きします。これは Jet ワークスペースでのみ使用することができます。

構文

DBEngine.SetOption parameter, newvalue

SetOption メソッドの構文には、次の指定項目があります。

指定項目 | 説明
parameter | 長整数型 (Long) の定数を指定します。詳細については、この下に説明されている「設定値」を参照してください。
newvalue | 引数 parameter を設定するバリアント型 (Variant) の値を指定します。

設定値

各定数はパス Jet\3.5\Engines\Jet 3.5\ に対応するレジストリ キーを参照します。たとえば、定数 dbSharedAsyncDelay は、レジストリ キー Jet\3.5\Engines\Jet 3.5\SharedAsyncDelay に対応します。

定数 | 説明
dbPageTimeout | PageTimeout キー
dbSharedAsyncDelay | SharedAsyncDelay キー
dbExclusiveAsyncDelay | ExclusiveAsyncDelay キー
dbLockRetry | LockRetry キー
dbUserCommitSync | UserCommitSync キー
dbImplicitCommitSync | ImplicitCommitSync キー
dbMaxBufferSize | MaxBufferSize キー
dbMaxLocksPerFile | MaxLocksPerFile キー
dbLockDelay | LockDelay キー
dbRecycleLVs | RecycleLVs キー
dbFlushTransactionTimeout | FlushTransactionTimeout キー

解説

SetOption メソッドを使用して、実行時にレジストリの値を上書きします。SetOption で設定された新しい値は、別の SetOption の呼び出しで変更されるか、DBEngine オブジェクトが閉じるまで有効です。

レジストリ キーと、設定する適切な値については、「 Microsoft Jet 4.0 データベース エンジン ドライバの初期化」を参照してください。


SetOption メソッドの使用例 (DAO/Microsoft Jet)

SetOption メソッドの使用例

次の例では、SetOption メソッドを使用して、ユーザーからの入力に基いた 2 つのレジストリ キーの値を変更します。SetOption メソッドはカレント アプリケーションに対しては格納されたレジストリの値のみを上書きします。格納された設定値は変更されずそのままに残っていますが、REGEDIT.EXE. を実行することでのみユーザーはこの設定値を識別することができます。

Sub SetOptionX()

    Dim intExclusiveDelay As Integer
    Dim intSharedDelay As Integer

    ' レジストリ キー ExclusiveAsyncDelay と SharedAsyncDelay の
    ' 新しい値に対して、ユーザーからの入力を取得します。
    intExclusiveDelay = Val(InputBox("Enter a new value " & _
        " for the ExclusiveAsyncDelay registry key " & _
        "(in milliseconds):"))
    intSharedDelay = Val(InputBox("Enter a new value " & _
        "for the SharedAsyncDelay registry key " & _
        "(in milliseconds):"))

    If intExclusiveDelay > 0 And intSharedDelay > 0 Then
        ' レジストリ キーの値を変更します。
        SetOption dbExclusiveAsyncDelay, intExclusiveDelay
        SetOption dbSharedAsyncDelay, intSharedDelay
        MsgBox "Registry keys changed to new values " & _
            "for duration of program.
    Else
        MsgBox "Registry keys left unchanged."
    End If

End Sub


Synchronize メソッド (DAO)

Synchronize メソッド

2 つのレプリカの同期をとります。これは Jet データベースでのみ使用することができます。

構文

database.Synchronize pathname, exchange

Synchronize メソッドの構文には、次の指定項目があります。

指定項目 | 説明
database | レプリカである Database オブジェクトを表すオブジェクト変数を指定します。
pathname | 引数 database で指定したデータベースと同期をとるデータベースのパスを含む文字列型 (String) を指定します。拡張子 .mdb は省略できます。
exchange | (省略可能) 2 つのデータベース間で同期をとる方向を示す定数を指定します。設定する値については、この下に説明されている｢設定値｣を参照してください。

設定値

引数 exchange に使用できる定数は次のとおりです。最初の 3 つの定数のうちのいずれか 1 つか、それに 4 つ目の定数を加えたものを使用できます。

定数 | 内容
dbRepExportChanges | 引数 database で指定したデータベースから引数 pathname で指定したデータベースに変更内容を送信します。
dbRepImportChanges | 引数 pathname で指定したデータベースから引数 database で指定したデータベースに変更内容を送信します。
dbRepImpExpChanges | (既定値) 引数 pathname で指定したデータベースと引数 database で指定したデータベース間で、変更内容を送受信します。
dbRepSyncInternet | インターネットパスウェイによって接続されたファイル間でデータ交換を行います。

解説

Synchronize メソッドを使用して、2 つのデータベース間でデータとデザインの変更内容の交換を行います。デザインの変更の交換が必ず最初に行われます。交換を行うには、2 つのデータベースのデザイン レベルが同じでなければなりません。たとえば、dbRepExportChanges 型の交換を行う場合、データの変更は引数 database から pathname にデータが送信されるのみですが、レプリカのデザインが変更される可能性があります。

引数 pathname が示すレプリカは、同一のレプリカ セットのレプリカである必要があります。2 つのレプリカの ReplicaID プロパティの設定が同じ、または両方とも異なるレプリカ セットのデザイン マスターである場合には、同期は失敗します。

2 つのレプリカをインターネットで同期をとる場合、定数 dbRepSyncInternet を使用する必要があります。この場合、引数 pathname に、ローカルエリア ネットワークのパスを指定する代わりに、URL アドレスを指定します。

メモ 部分レプリカとほかの部分レプリカとの同期をとることはできません。詳細については、「PopulatePartial メソッド」を参照してください。

インターネット上での同期化には、レプリケーション マネージャが必要です。レプリケーション マネージャ は、Office 97 の Developer Edition でのみ使用することができます。


Synchronize メソッドの使用例 (DAO/Microsoft Jet)

Synchronize メソッドの使用例

これらの 4 つの例では、Synchronize メソッドを使用して 2 つのレプリカ セットのメンバ間で、一方向と双方向の情報の交換を行います。Northwind.mdb をデザイン マスターに変換し (これについては「Replicable プロパティ」を参照してください)、デザイン マスターでレプリカを作成した場合には、これらのメンバは作動します。レプリカ名は指定した Nwreplica.mdb です。使用しているコンピュータの使用環境に合わせてレプリカ名を変更するか、必要な場合には MakeReplica メソッドを使用してレプリカを作成してください。

次の例では、Northwind のデザイン マスターから Nwreplica に変更内容を送信します。この下の行を、使用しているコンピュータ上の Northwind のパスに変更してください。

Sub SendChangeToReplicaX()

    Dim dbsNorthwind As Database

    'レプリケート可能なデータベース Northwind.mdb を開きます。
    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    'データまたは構造変更をレプリカに送信します。
    dbsNorthwind.Synchronize "Nwreplica.mdb", _
        dbRepExportChanges

    dbsNorthwind.Close

End Sub

次の例では、レプリケート可能なデータベース Northwind .mdb はパスにある Nwreplica からの変更を受信します。変更を受信しているデータベースからこのプロシージャを実行する必要があります。

Sub ReceiveChangeX()

    Dim dbsNorthwind As Database

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    'レプリカからデザイン マスターに変更を送信します。
    dbsNorthwind.Synchronize "Nwreplica.mdb", _
        dbRepImportChanges

    dbsNorthwind.Close

End Sub

次の例では、レプリケート可能なデータベース Northwind とレプリカの両方からの変更を交換します。このメソッドに対しては、既定の引数です。

Sub TwoWayExchangeX()

    Dim dbsNorthwind As Database

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    '各レプリカでの変更を
    'ほかのレプリカに送信します。
    dbsNorthwind.Synchronize "Nwreplica.mdb", _
        dbRepImpExpChanges

    dbsNorthwind.Close

End Sub

次のコード例では、インターネット上で 2 つのデータベースの同期をとります。

Sub InternetSynchronizeX()

    Dim dbsTemp As Database

    Set dbsTemp = OpenDatabase("C:\Data\OrdEntry.mdb")

    ' インターネット サーバー上で
    ' レプリカを使用して、ローカルのデータベースの同期をとります。
    dbsTemp.Synchronize _
        "www.mycompany.myserver.com" _
        & "/files/Orders.mdb", _
        dbRepImpExpChanges + dbRepSyncInternet

    dbsTemp.Close

End Sub


Update メソッド (DAO)

Update メソッド

コピー バッファの内容を、更新可能な Recordset オブジェクトに保存します。

構文

recordset.Update (type, force)

Update メソッドの構文には、次の指定項目があります。

指定項目 | 説明
Recordset | 開いている更新可能な Recordset オブジェクトを表すオブジェクト変数を指定します。
Type | (省略可能) 更新の種類を示す定数を指定します (ODBCDirect ワークスペースでのみ使用可)。この下に説明されている｢設定値｣を参照してください。
Force | (省略可能) AddNew、Delete、または Edit メソッドの呼び出しで、別のユーザーがデータ元の変更を行ったかどうかに関わらず、変更をデータベースに行うかどうかを示すブール型 (Boolean) の値を指定します。True に設定すると、変更が行われ、ほかのユーザーによる変更は単に上書きされます。False (既定値) に設定すると、更新が保留されている間にほかのユーザーが行った変更は、それが矛盾を含む場合は失敗します。エラーは発生しませんが更新の処理中に BatchCollisionCount プロパティと BatchCollisions プロパティには矛盾した数とそれによる影響を受ける行がそれぞれ示されます (ODBCDirect ワークスペースでのみ使用可)。

設定値

引数 type に使用できる定数は次のとおりです。バッチ更新が可能な場合にのみ、既定値以外の値を使用できます。

定数 | 説明
DbUpdateRegular | (既定値) 保存されていない変更はキャッシュされずにそのままディスクに書き込まれます。
DbUpdateBatch | 更新キャッシュの保存されていないすべての変更は、ディスクに書き込まれます。
DbUpdateCurrentRecord | カレント レコードの保存されていない変更のみがディスクに書き込まれます。

解説

Update メソッドを使用して、カレント レコードとカレント レコードに行ったすべての変更を保存します。

注意 次の場合、カレント レコードへの変更内容は失われます。

  • Edit または AddNew メソッドを使用した後、Update を使用する前に別のレコードに移動した場合。

  • Edit または AddNew メソッドを使用した後、Update を使用する前に再度 Edit または AddNew メソッドを使用した場合。

  • Bookmark プロパティを別のレコードに設定した場合。

  • Update メソッドを使用せずにプレースホルダ Recordset を閉じた場合。

  • CancelUpdate メソッドを使用して Edit の操作をキャンセルした場合。

レコードを編集するには、Edit メソッドを使用して、カレント レコードの内容をコピー バッファにコピーします。Edit メソッドを使用せずに、Update メソッドを使用したり、フィールドの値を変更したりしようとすると、エラーが発生します。

ODBCDirect ワークスペースでは、カーソル ライブラリがバッチ更新をサポートし、Recordset が共有的一括ロックで開かれている場合には、バッチ更新を行うことができます。

Jet ワークスペースでは、マルチユーザー環境で Recordset オブジェクトの LockEdits プロパティを True (排他的ロック) に設定すると、Edit メソッドを使用してから Update メソッドが呼び出されるまで、または編集がキャンセルされるまでの間、レコードはロックされたままです。LockEdits プロパティを False (共有的ロック) に設定すると、データベースで更新される直前にレコードはロックされ、編集前のレコードと比較されます。Edit メソッドを使用した後でレコードが変更されている場合、Update 操作は失敗します。Jet 接続型 ODBC データ ソースと組み込み可能な ISAM データベースでは、常に共有的ロックが使用されます。行った変更で Update の操作を続けるには、Update メソッドをもう一度使用します。ほかのユーザーが変更した状態にレコードを戻すには、Move 0 を使用してカレント レコードを更新します。

メモ レコードの追加、編集、削除を行うには、元のデータ ソースのレコードに一意なインデックスが必要になります。一意なインデックスがない場合、Jet ワークスペースでは、AddNew、Delete、または Edit の各メソッドを呼び出した場合、エラー ”権限が拒否されました” が発生し、ODBCDirect ワークスペースでは、Update メソッドを呼び出した場合、エラー ”引数が無効です” が発生します。


Update メソッドの使用例 (DAO)

Update メソッドの使用例

次の例では、Edit メソッドと共に使用される Update メソッドを説明します。

Sub UpdateX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strOldFirst As String
    Dim strOldLast As String
    Dim strMessage As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        .Edit
        ' 元のデータを格納します。
        strOldFirst = !FirstName
        strOldLast = !LastName
        ' Edit バッファのデータを変更します。
        !FirstName = "Linda"
        !LastName = "Kobara"

        ' バッファの内容を表示して
        ' ユーザーからの入力を取得します。
        strMessage = "Edit in progress:" & vbCr & _
            "    Original data = " & strOldFirst & " " & _
            strOldLast & vbCr & "    Data in buffer = " & _
            !FirstName & " " & !LastName & vbCr & vbCr & _
            "Use Update to replace the original data with " & _
            "the buffered data in the Recordset?"

        If MsgBox(strMessage, vbYesNo) = vbYes Then
            .Update
        Else
            .CancelUpdate
        End If

        ' 返された結果のデータを表示します。
        MsgBox "Data in recordset = " & !FirstName & " " & _
            !LastName

        ' ここではデモとして元のデータに戻します。
        If Not (strOldFirst = !FirstName And _
                strOldLast = !LastName) Then
            .Edit
            !FirstName = strOldFirst
            !LastName = strOldLast
            .Update
        End If

        .Close
    End With

    dbsNorthwind.Close

End Sub

次の例では、AddNew メソッドと共に使用される Update メソッドを説明します。

Sub UpdateX2()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strOldFirst As String
    Dim strOldLast As String
    Dim strMessage As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        .AddNew
        !FirstName = "Bill"
        !LastName = "Sornsin"

        ' バッファの内容を表示して
        ' ユーザーからの入力を取得します。
        strMessage = "AddNew in progress:" & vbCr & _
            "    Data in buffer = " & !FirstName & " " & _
            !LastName & vbCr & vbCr & _
            "Use Update to save buffer to recordset?"

        If MsgBox(strMessage, vbYesNoCancel) = vbYes Then
            .Update
            ' 新しいレコードに移動して
            ' 結果のデータを表示します。
            .Bookmark = .LastModified
            MsgBox "Data in recordset = " & !FirstName & _
                " " & !LastName
            ' ここではデモとして新しいデータを削除します。
            .Delete
        Else
            .CancelUpdate
            MsgBox "No new record added."
        End If

        .Close
    End With

    dbsNorthwind.Close

End Sub


オブジェクトによる DAO プロパティ

次のリファレンスでは、オブジェクトまたはコレクションごとにすべての DAO プロパティをグループ化しています。Jet データベースまたは ODBC データベースで使用できる特定のプロパティを識別するには、そのプロパティのヘルプ トピックを参照してください。

Connection

Container

Database

DBEngine

Document

Error

Field

Group

Index

 Parameter

Property

QueryDef

Recordset

Relation

TableDef

User

Workspace


Jet ワークスペースの DAO プロパティ

次のリファレンスでは、Jet ワークスペースで使用することができる、すべての DAO プロパティをアルファベット順に示しています。

A-C

AbsolutePosition

AllowZeroLength

AllPermissions

Attributes

BOF

Bookmark

Bookmarkable

CacheSize

 CacheStart

Clustered

CollatingOrder

ConflictTable

Connect

Container

Count

D-H

DataUpdatable

DateCreated

DefaultUser

DefaultPassword

DefaultValue

Description

DesignMasterID

DistinctCount

EditMode

 EOF

FieldSize

Filter

Foreign

ForeignName

ForeignTable

HelpContext

HelpFile

I-O

IgnoreNulls

Index

Inherit

Inherited

IniPath

IsolateODBCTrans

KeepLocal

LastModified

LastUpdated

LockEdits

 LoginTimeout

LogMessages

MaxRecords

Name

NoMatch

Number

ODBCTimeout

OrdinalPosition

Owner

P-R

PartialReplica

Password

PercentPosition

Permissions

PID

Primary

QueryTimeout

RecordCount

 RecordsAffected

Replicable

ReplicableBool

ReplicaFilter

ReplicaID

Required

Restartable

ReturnsRecords

S-Z

Size

Sort

Source

SourceField

SourceTable

SourceTableName

SQL

SystemDB

Table

Transactions

 Type

Unique

Updatable

UserName

V1xNullBehavior

ValidateOnSet

ValidationRule

ValidationText

Value

Version


ODBCDirect ワークスペースの DAO プロパティ

次の例では、ODBCDirect ワークスペースで使用することができる、すべての DAO プロパティをアルファベット順に示しています。

A-D

AbsolutePosition

Attributes

BatchCollisionCount

BatchCollisions

BatchSize

BOF

Bookmark

Bookmarkable

CacheSize

 Connect

Connection

Count

Database

DataUpdatable

DefaultCursorDriver

DefaultType

Description

Direction

E-Q

EditMode

EOF

FieldSize

HelpContext

HelpFile

LastModified

LockEdits

LoginTimeout

LogMessages

 MaxRecords

Name

Number

ODBCTimeout

OrdinalPosition

OriginalValue

PercentPosition

Prepare

QueryTimeout

R-Z

RecordCount

RecordsAffected

RecordStatus

Restartable

Size

Source

SourceField

SourceTable

SQL

 StillExecuting

Transactions

Type

Updatable

UpdateOptions

UserName

Value

Version

VisibleValue


AbsolutePosition プロパティ (DAO)

AbsolutePosition プロパティ

Recordset オブジェクトのカレント レコードの先頭からの位置を設定または返します。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。0 から Recordset オブジェクトのレコード数より 1 少ない数までの値になります。この値は、Recordset オブジェクトの先頭のカレント レコードの位置に相当します。

解説

AbsolutePosition プロパティを使用すると、ダイナセット タイプやスナップショット タイプの Recordset オブジェクトの先頭のレコードから数えた番号 (位置) に基づいて、特定のレコードをカレント レコードにできます。AbsolutePosition プロパティの設定値を確認するとカレント レコードの番号を調べることができます。

AbsolutePosition プロパティの値は、0 から始まります。設定値 0 は、Recordset オブジェクトの最初のレコードであることを表します。したがって、存在するレコード数に等しい値やそれを超える値を設定することはできません。設定した場合、トラップ可能なエラーが発生します。Recordset オブジェクトのレコード数を調べるには、RecordCount プロパティの設定値を確認します。AbsolutePosition プロパティに設定できる最大値は、RecordCount プロパティの値から 1 を引いた数です。

Recordset オブジェクトにレコードが存在しないなど、カレント レコードが存在しない場合、AbsolutePosition は -1 を返します。カレント レコードを削除すると、AbsolutePosition プロパティの値は未定義になり、その値を参照しようとするとトラップ可能なエラーが発生します。新しく作成したレコードは、並び順の最後に追加されます。

AbsolutePosition プロパティは、レコード番号の代わりとして使用するためのものではありません。特定の位置を保持したり特定の位置に戻ったりするには、ブックマークを使用します。また、ブックマークは、すべてのタイプの Recordset オブジェクトでカレント レコードの位置を設定する唯一の方法です。レコードの位置は、そのレコードより前にある 1 つまたは複数のレコードが削除された場合に変更されることに注意してください。また、Recordset オブジェクトを再度作成した場合、すべてのレコードが常に同じ位置に来るとは限りません。これは、SQL ステートメントの ORDER BY 句を使用して Recordset オブジェクトを再度作成しない限り、その Recordset オブジェクトの個々のレコードの並び順は保証されないためです。

メモ

  • 新しく開かれてまだ配置されていない Recordset オブジェクトで、AbsolutePosition プロパティに 0 より大きい値を設定すると、トラップ可能なエラーが発生します。最初に MoveLast メソッドを使用してから、その Recordset オブジェクトを配置してください。

  • 前方スクロール タイプの Recordset オブジェクトや、Jet 接続型 ODBC データベースに対してパススルー クエリーを使用して開いた Recordset オブジェクトには、AbsolutePosition プロパティを使用することはできません。


AbsolutePosition プロパティの使用例 (DAO)

AbsolutePosition プロパティの使用例

次の例では、AbsolutePosition プロパティを使用して、Recordset のすべてのレコードを列挙するループの動きを追跡します。

Sub AbsolutePositionX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strMessage As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' AbsolutePosition プロパティはダイナセット タイプまたは
    ' スナップショット タイプの Recordset オブジェクトでのみ使用できます。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenSnapshot)

    With rstEmployees
        ' Recordset を配置します。
        .MoveLast
        .MoveFirst

        ' Recordset を列挙します。
        Do While Not .EOF
            ' カレント レコードの情報を表示します。
            ' AbsolutePosition の値は 0 から始まるので
            ' 1 を足します。
            strMessage = "Employee: " & !LastName & vbCr & _
                "(record " & (.AbsolutePosition + 1) & _
                " of " & .RecordCount & ")"
            If MsgBox(strMessage, vbOKCancel) = vbCancel _
                Then Exit Do
            .MoveNext
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


AllowZeroLength プロパティ (DAO)

AllowZeroLength プロパティ

データ型がテキスト型 (Text) またはメモ型 (Memo) (Jet ワークスペースのみ) である Field オブジェクトの Value プロパティに、長さ 0 の文字列 ("") を設定できるかどうかを示す値を設定または返します。

設定値と戻り値

設定値または戻り値垂ﾍ、値が有効かどうかを示すブール型 (Boolean) の値です。True の場合、Field オブジェクトの Value プロパティに長さ 0 の文字列 ("") を設定できます。既定値は、False です。

解説

オブジェクトが Fields コレクションにまだ追加されていない場合は、このプロパティは読み取り/書き込みが可能です。

次の表に示すように、Fields コレクションに追加されたオブジェクトの AllowZeroLength プロパティの使い方は、Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。

Required、ValidateOnSet、または ValidationRule の各プロパティと共に AllowZeroLength プロパティを使用すると、フィールドに入力される値を確認することができます。


AllowZeroLength プロパティの使用例 (DAO/Microsoft Jet)

AllowZeroLength プロパティの使用例

次の例では、AllowZeroLength プロパティで、Field の値を空の文字列 ("") に設定できるようにします。これにより、データが不明なレコードと、データが入力されていないレコードを区別できるようになります。

Sub AllowZeroLengthX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim fldTemp As Field
    Dim rstEmployees As Recordset
    Dim strMessage As String
    Dim strInput As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind.TableDefs("Employees")
    ' 新しく Field オブジェクトを作成して
    ' Employees テーブルの Fields コレクションに追加します。
    Set fldTemp = tdfEmployees.CreateField("FaxPhone", _
        dbText, 24)
    fldTemp.AllowZeroLength = True
    tdfEmployees.Fields.Append fldTemp

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        ' ユーザーからの入力を取得します。
        .Edit
        strMessage = !FirstName & " " & !LastName & _
            "Enter fax number for" & vbCr & _
            "[? - unknown, X - has no fax]"
        strInput = UCase(InputBox(strMessage))
        If strInput <> "" Then
            Select Case strInput
                Case "?"
                    !FaxPhone = Null
                Case "X"
                    !FaxPhone = ""
                Case Else
                    !FaxPhone = strInput
            End Select

            .Update

            ' レポートを出力します。
            Debug.Print "Name - Fax number"
            Debug.Print !FirstName & " " & !LastName & " - ";

            If IsNull(!FaxPhone) Then
                Debug.Print "[Unknown]"
            Else
                If !FaxPhone = "" Then
                    Debug.Print "[Has no fax]"
                Else
                    Debug.Print !FaxPhone
                End If
            End If

        Else
            .CancelUpdate
        End If

        .Close
    End With

    ' ここではデモとして新しいフィールドを削除します。
    tdfEmployees.Fields.Delete fldTemp.Name
    dbsNorthwind.Close

End Sub


AllPermissions プロパティ (DAO)

AllPermissions プロパティ

Container オブジェクトまたは Document オブジェクトのカレントの UserName プロパティに適用されるすべての権限を返します。この権限には、ユーザーがグループからメンバとして継承する権限のほかに、ユーザーに固有な権限も含まれます。これは Jet ワークスペースでのみ使用することができます。

戻り値

Container オブジェクトまたは Document オブジェクトの戻り値は、長整数型 (Long) の値か、次に示す定数のいずれかになります。

定数 | 説明
dbSecReadDef | フィールドとインデックスの情報を含むテーブル定義の読み取りができます。
dbSecWriteDef | フィールドとインデックスの情報を含むテーブル定義を修正または削除できます。
dbSecRetrieveData | Document オブジェクトからデータを取得できます。
dbSecInsertData | レコードを追加できます。
dbSecReplaceData | レコードを修正できます。
dbSecDeleteData | レコードを削除できます。

Databases コレクションの Databases コンテナ、および Documents コレクションの Document オブジェクトの戻り値は、次の表に示す定数のいずれかになります。

定数 | 説明
dbSecDeleteData | レコードを削除できます。
dbSecDBAdmin | データベースをレプリケートしたり、データベースのパスワードを変更できます。
dbSecDBCreate | 新しいデータベースを作成できます。この設定はワークグループ情報ファイル (System.mdw) の Databases コンテナでのみ有効です。
dbSecDBExclusive | 排他モードでデータベースにアクセスできます。
dbSecDBOpen | データベースを開くことができます。

解説

AllPermissions プロパティは、Permissions プロパティとは異なります。Permissions プロパティはユーザー別に指定した権限のみを返し、ユーザーがグループのメンバとして持つ権限は含まれません。UserName プロパティにグループが設定されている場合は、AllPermissions プロパティと Permissions プロパティは同じ値になります。


AllPermissions、Permissions、SystemDB の各プロパティの使用例 (DAO/Microsoft Jet)

AllPermissions、Permissions、SystemDB の各プロパティの使用例

次の例では、SystemDB、AllPermissions、および Permissions プロパティを使用して、ユーザーが属しているグループの権限に基づいて、ユーザーによる異なる権限の取得方法を示しています。

Sub AllPermissionsX()

    ' Jet ワークグループ情報ファイルが利用できることを確認します。
    DBEngine.SystemDB = "system.mdw"

    Dim dbsNorthwind As Database
    Dim ctrLoop As Container

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' Containers コレクションを列挙し
    ' 現在のユーザーとユーザーに対する権限を表示します。
    For Each ctrLoop In dbsNorthwind.Containers
        With ctrLoop
            Debug.Print "Container: " & .Name
            Debug.Print "User: " & .UserName
            Debug.Print "    Permissions: " & .Permissions
            Debug.Print "    AllPermissions: " & _
                .AllPermissions
        End With
    Next ctrLoop

    dbsNorthwind.Close

End Sub


Attributes プロパティ (DAO)

Attributes プロパティ

Field、Relation、または TableDef の各オブジェクトが持つ 1 つ以上の属性を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。既定値は 0 です。

Field オブジェクトの Attributes プロパティの値は、Field オブジェクトが表すフィールドの属性を示します。この値は、次の定数の組み合わせになります。

定数 | 説明
dbAutoIncrField | 新しいレコードのフィールドの値は自動的に増えて一意な長整数型 (Long) の値になります。この値は変更できません (Jet ワークスペースでは、Jet データベース (.mdb) のテーブルにのみ使用可)。
dbDescending | フィールドは、降順 (Z ～ A、100 ～ 0、ん ～ あ) に並べ替えられます。この引数は、Index オブジェクトの Fields コレクションの Field オブジェクトにのみ適用されます。この定数を省略すると、フィールドは昇順 (A ～ Z、0 ～ 100、あ ～ ん) に並べ替えられます。Index フィールドおよび TableDef フィールドの既定値です (Jet ワークスペースでのみ使用可)。
dbFixedField | フィールドのサイズは固定です。Numeric 型 (Numeric) フィールドの既定値です。
dbHyperlinkField | フィールドは、ハイパーリンク情報を含んでいます (メモ型 (Memo) フィールドでのみ使用可)。
dbSystemField | フィールドは、レプリカのレプリケーション情報を含んでいます。この型のフィールドを削除することはできません (Jet ワークスペースでのみ使用可)。
dbUpdatableField | フィールドの値を変更できます。
dbVariableField | フィールドのサイズは可変です (テキスト型 (Text) フィールドでのみ使用可)。

Relation オブジェクトの Attributes プロパティの値は、Relation オブジェクトが表すリレーションシップの属性を示します。この値は、次の定数の組み合わせになります。

定数 | 説明
dbRelationUnique | リレーションシップは一対一リレーションシップです。
dbRelationDontEnforce | リレーションシップには参照整合性が適用されていません。
dbRelationInherited | リレーションシップは、2 つのリンク テーブルを含むカレント データベース以外のデータベースに存在します。
dbRelationUpdateCascade | 連鎖更新します。
dbRelationDeleteCascade | 連鎖削除します。
dbRelationLeft | Microsoft Access のみです。デザイン ビューでは、左結合を既定の結合型として表示します。
dbRelationRight | Microsoft Access のみです。デザイン ビューでは、右結合を既定の結合型として表示します。

メモ Relation オブジェクトの Attributes プロパティに連鎖更新や連鎖削除を設定すると、Jet データベース エンジンでは、主テーブルに変更が加えられた場合、ほかの関連する 1 つまたは複数のテーブルのレコードも自動的に更新または削除されます。

たとえば、[顧客] テーブルと [注文] テーブルの間にリレーションシップを設定し、連鎖削除を有効にした場合、[顧客] テーブルからレコードを削除すると、[注文] テーブルのその顧客に関連する [注文] テーブルのレコードも削除されます。さらに、連鎖削除を有効にした場合、[注文] テーブルとほかのテーブルの間のリレーションシップで連鎖削除を設定した場合も、[顧客] テーブルのレコードを削除すると、自動的にそれらのテーブルからも関連するレコードが削除されます。

TableDef オブジェクトの Attributes プロパティの値は、TableDef オブジェクトが表すテーブルの属性を示します。この値は、次の長整数型 (Long) の定数の組み合わせになります。

定数 | 説明
dbAttachExclusive | Jet データベース エンジンを使用するデータベースで、排他モードで開いたリンク テーブルです。ローカル テーブルに追加された TableDef オブジェクトには設定できますが、リモート テーブルには設定できません。
dbAttachSavePWD | Jet データベース エンジンを使用するデータベースで、リモート テーブルに対するユーザー ID とパスワードは接続情報と共に保存されます。リモート テーブルに追加された TableDef オブジェクトにはこの定数を設定できますが、ローカル テーブルには設定できません。
dbSystemObject | Jet データベース エンジンによって提供されるシステム テーブルです。追加された TableDef オブジェクトに設定できます。
dbHiddenObject | Jet データベース エンジンによって提供される非表示のテーブルです。この定数は、追加された TableDef オブジェクトに設定できます。
dbAttachedTable | Jet データベースや Paradox などの非 ODBC データ ソースのリンク テーブルです。読み取り専用です。
dbAttachedODBC | Microsoft SQL Server などの ODBC データ ソースのリンク テーブルです。読み取り専用です。

解説

オブジェクトがコレクションにまだ追加されていない場合、このプロパティは、読み取り/書き込みが可能です。

コレクションに追加された Field オブジェクトの Attributes プロパティの使い方は、Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | Index オブジェクトの追加先である TableDef オブジェクトが Database オブジェクトに追加されるまでは、読み取り/書き込みが可能です。その後は、読み取り専用です。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。

コレクションに追加された Relation オブジェクトの Attributes プロパティは、読み取り専用です。

コレクションに追加された TableDef オブジェクトの Attributes プロパティは、読み取り/書き込みが可能です。ただし、｢設定値と戻り値｣ の説明にもありますが、オブジェクトが追加されている場合、すべての定数を設定できるわけではありません。

複数の属性を設定する場合、適切な定数の組み合わせを指定します。無効な値を指定すると、その値は無視され、エラーは発生しません。


Attributes プロパティの使用例 (DAO)

Attributes プロパティの使用例

次の例では、Northwind データベースの Field、Relation、および TableDef の各オブジェクトに対して Attributes プロパティを表示します。

Sub AttributesX()

    Dim dbsNorthwind As Database
    Dim fldLoop As Field
    Dim relLoop As Relation
    Dim tdfloop As TableDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind

        ' TableDef オブジェクトのフィールドの属性を表示します。
        Debug.Print "Attributes of fields in " & _
            .TableDefs(0).Name & " table:"
        For Each fldLoop In .TableDefs(0).Fields
            Debug.Print "    " & fldLoop.Name & " = " & _
                fldLoop.Attributes
        Next fldLoop

        ' Northwind データベースのリレーションの属性を表示します。
        Debug.Print "Attributes of relations in " & _
            .Name & ":"
        For Each relLoop In .Relations
            Debug.Print "    " & relLoop.Name & " = " & _
                relLoop.Attributes
        Next relLoop

        ' Northwind データベースのテーブルの属性を表示します。
        Debug.Print "Attributes of tables in " & .Name & ":"
        For Each tdfloop In .TableDefs
            Debug.Print "    " & tdfloop.Name & " = " & _
                tdfloop.Attributes
        Next tdfloop

        .Close
    End With

End Sub


BatchCollisionCount プロパティ (DAO)

BatchCollisionCount プロパティ

最後のバッチ更新で完了しなかったレコード数を返します。これは ODBCDirect ワークスペースでのみ使用することができます。

戻り値

戻り値は、バッチ更新に失敗したレコード数を示す長整数型 (Long) の値です。すべてのレコードが正常に更新された場合は 0 を返します。

解説

BatchCollisionCount プロパティは、最後のバッチ更新処理中に矛盾を起こしたレコード数、または矛盾がない場合は更新に失敗したレコード数を示します。BatchCollisionCount プロパティの値は、BatchCollisions プロパティのブックマーク数に対応しています。

更新対象の Recordset オブジェクトの Bookmark プロパティに BatchCollisions 配列中の各ブックマークの値を設定すると、直前のバッチ Update 操作を完了できなかったそれぞれのレコードに移動することができます。

矛盾しているレコードを修正した後、再度バッチ モードで Update メソッドを呼び出すことができます。この場合、DAO は、前回とは別のバッチ更新を実行し、BatchCollisions には、2 回目以降のバッチ更新に失敗したレコード セットが再び反映されます。前回のバッチ更新で正常に更新されたレコードは、その RecordStatus プロパティが dbRecordUnmodified になるため、その後の更新処理では送られません。以上の処理は、矛盾がなくなるまで、または更新を取りやめて結果セットを閉じるまで続けることができます。


BatchCollisionCount、BatchCollisions、RecordStatus、OriginalValue、および VisibleValue の各プロパティと Update メソッドの使用例 (DAO/ODBCDirect)

BatchCollisionCount、BatchCollisions、RecordStatus、OriginalValue、および VisibleValue の各プロパティと Update メソッドの使用例

次の例では、BatchCollisionCount、BatchCollisions、RecordStatus、OriginalValue、および VisibleValue の各プロパティと Update メソッドを使用して、ローカルのレコード セット、元のデータベース、およびカレントのデータベースの各フィールドの値を比較することで発生しているすべての矛盾が解決されるところで行うバッチ更新を説明します。このプロシージャを実行するには、CollisionResolve プロシージャが必要です。

この例では、テーブルに主キーが含まれていることを想定しています。

Sub BatchX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim rstTemp As Recordset
    Dim intLoop As Integer
    Dim strPrompt As String

    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    ' バッチ更新をするには DefaultCursorDriver を
    ' 次のように設定する必要があります。
    wrkMain.DefaultCursorDriver = dbUseClientBatchCursor

    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    ' バッチ更新をするにはロック引数を次のようにする必要があります。
    Set rstTemp = conMain.OpenRecordset( _
        "SELECT * FROM roysched", dbOpenDynaset, 0, _
        dbOptimisticBatch)

    With rstTemp
        ' ローカルのレコード セットでデータを変更します。
        Do While Not .EOF
            .Edit
            If !royalty <= 20 Then
                !royalty = !royalty - 4
            Else
                !royalty = !royalty + 2
            End If
            .Update
            .MoveNext
        Loop

        ' バッチ更新を試みます。
        .Update dbUpdateBatch

        ' 矛盾がある場合は
        ' 変更を強行するか、それぞれ解決するかを
        ' ユーザーに問い合わせます。
        If .BatchCollisionCount > 0 Then
            strPrompt = "There are collisions. " & vbCr & _
                "Do you want the program to resolve them?" & _
                vbCr & "(Otherwise, the program will force " & _
                vbCr & "an update using the local data.)"
            If MsgBox(strPrompt, vbYesNo) = vbNo Then
                .Update dbUpdateBatch, True
            Else
                CollisionResolve rstTemp
            End If
        End If

        .Close
    End With

    conMain.Close
    wrkMain.Close

End Sub

Sub CollisionResolve(rstTemp As Recordset)

    Dim strPrompt As String

    With rstTemp

        ' 矛盾の原因になったレコードを指している
        ' ブックマークの配列について、ループします。
        For intLoop = 0 To UBound(.BatchCollisions) - 1
            .Bookmark = .BatchCollisions(intLoop)

            ' ユーザーへのメッセージを組み立てます。
            strPrompt = _
                "Choose one of the following:" & vbCr
            strPrompt = strPrompt & _
                "  1. local recordset value = " & _
                !royalty & vbCr
            strPrompt = strPrompt & _
                "  2. current database value = " & _
                !royalty.VisibleValue & vbCr
            strPrompt = strPrompt & _
                "  3. original field value = " & _
                !royalty.OriginalValue

            Select Case InputBox(strPrompt)
                Case 1
                    ' ローカルのレコード セット値を使用することを
                    ' ユーザーが選んだ場合、サーバーへの更新を
                    ' 強行します。矛盾により、RecordStatus
                    ' プロパティは自動的に dbRecordModified に
                    ' 設定されます。
                    .Update dbUpdateCurrentRecord, True
                Case 2
                    ' 現在のデータベースの値を使用することを
                    ' ユーザーが選び、後で再クエリーがある場合は
                    ' 何もする必要はありません。
                    .RecordStatus = dbRecordUnmodified
                Case 3
                    ' 元のフィールドの値を使用することを
                    ' ユーザーが選んだ場合は
                    ' ローカルの値を変更してから
                    ' サーバーへの更新を強行します。
                    ' 矛盾により、RecordStatus プロパティは
                    ' 自動的に dbRecodModified に
                    ' 設定されます。
                    !royalty = !royalty.OriginalValue
                    .Update dbUpdateCurrentRecord, True
            End Select

        Next intLoop

        ' ローカルのレコード セットを
        ' 現在のサーバーのデータに更新します。
        .Requery
    End With

End Sub


BatchCollisions プロパティ (DAO)

BatchCollisions プロパティ

最後のバッチ更新処理中に矛盾を起こした行を示すブックマークの配列を返します。これは ODBCDirect ワークスペースでのみ使用することができます。

戻り値

戻り値は、ブックマークの配列を持つバリアント式です。

解説

BatchCollisions プロパティは、最後のバッチ Update の呼び出し中に矛盾が起こったブックマークの配列を持ちます。BatchCollisionCount プロパティは、配列の要素の数を示します。

更新対象の Recordset オブジェクトの Bookmark プロパティに BatchCollisions 配列中のブックマークの値を設定すると、直前のバッチ Update を完了できなかったそれぞれのレコードに移動することができます。

矛盾しているレコードを修正した後、再度バッチ モードで Update メソッドを呼び出すことができます。この場合、DAO オブジェクトは、前回とは別のバッチ更新を実行し、BatchCollisions には、2 回目以降のバッチ更新に失敗したレコード セットが再び反映されます。前回のバッチ更新で正常に更新されたレコードは、その RecordStatus プロパティが dbRecordUnmodified になるため、その後の更新処理では送られません。以上の処理は、矛盾がなくなるまで、または更新を取りやめて結果セットを閉じるまで続けることができます。

この配列は、バッチ モードで Update メソッドを実行するたびに新しく作成されます。


BatchSize プロパティ (DAO)

BatchSize プロパティ

バッチ処理のたびにサーバーに送り返されるステートメントの数を設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、1 回のバッチ更新でサーバーに送られるステートメントの数を示す長整数型 (Long) の値です。既定値は 15 です。

解説

BatchSize プロパティは、ステートメントをバッチ更新でサーバーに送る場合に使用するバッチ サイズを決めます。つまり、1 つのコマンド バッファでサーバーに送るステートメントの数を決めます。既定では、バッチ処理を行うたびに 15 のステートメントがサーバーに送られます。この BatchSize プロパティはいつでも変更することができます。データベース サーバーがステートメントのバッチ処理をサポートしていない場合は、BatchSize プロパティに 1 を設定して、各ステートメントを 1 つずつ送るようにすることができます。


BatchSize プロパティと UpdateOptions プロパティの使用例 (DAO/ODBCDirect)

BatchSize プロパティと UpdateOptions プロパティの使用例

次の例では、BatchSize および UpdateOptions プロパティを使用して、指定した Recordset オブジェクトのバッチ更新の設定を変更します。

Sub BatchSizeX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim rstTemp As Recordset

    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    ' バッチ更新をするには DefaultCursorDriver を
    ' 次のように設定する必要があります。
    wrkMain.DefaultCursorDriver = dbUseClientBatchCursor

    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    ' バッチ更新をするにはロック引数を次のようにする必要があります。
    Set rstTemp = conMain.OpenRecordset( _
        "SELECT * FROM roysched", dbOpenDynaset, 0, _
        dbOptimisticBatch)

    With rstTemp
        ' 1 回のバッチ更新でサーバーに送られる
        ' ステートメントの数を増やし
        ' 更新時にサーバーにアクセスする回数を減らします。
        .BatchSize = 25

        ' UpdateOptions プロパティを変更して
        ' サーバーに送られるバッチ ステートメントの WHERE 句が
        ' キー列に加えて更新された列も含むようにします。
        ' また、レコードへの変更が、ただ元のレコードを変更するのではなく
        ' 元のレコードを削除してから変更したものを追加する形で
        ' 行うようにします。
        .UpdateOptions = dbCriteriaModValues + _
            dbCriteriaDeleteInsert

        ' 上のような新しい設定でバッチ更新を使用します。
        ' ...

        .Close
    End With

    conMain.Close
    wrkMain.Close

End Sub


BOF、EOF プロパティ (DAO)

BOF、EOF プロパティ

  • BOF プロパティ - カレント レコードの位置が、Recordset オブジェクトの最初のレコードよりも前にあるかどうかを示す値を返します。

  • EOF プロパティ - カレント レコードの位置が Recordset オブジェクトの最後のレコードよりも後にあるかどうかを示す値を返します。

戻り値

BOF プロパティおよび EOF プロパティの戻り値は、ブール型 (Boolean) の値です。

BOF プロパティは、カレント レコードの位置が最初のレコードよりも前にある場合は True に設定され、カレント レコードの位置が最初のレコードか、それより後にある場合は False に設定されます。

EOF プロパティは、カレント レコードの位置が最後のレコードの位置よりも後にある場合は True に設定され、カレント レコードの位置が最後のレコードか、それより前にある場合は False に設定されます。

解説

BOF プロパティと EOF プロパティを使用すると、Recordset オブジェクトがレコードを含んでいるかどうか、またはレコード間を移動した場合に Recordset オブジェクトの範囲を超えていないかなどを調べることができます。

BOF プロパティと EOF プロパティの戻り値は、カレント レコードの位置によって決まります。

BOF プロパティと EOF プロパティのいずれかが True である場合、カレント レコードはありません。

レコードを 1 つも持たない Recordset オブジェクトを開くと、BOF プロパティと EOF プロパティが共に True に設定され、Recordset オブジェクトの RecordCount プロパティは 0 に設定されます。1 つ以上のレコードを持つ Recordset オブジェクトを開くと、最初のレコードがカレント レコードになり、BOF プロパティと EOF プロパティの設定値は False になります。この場合、MovePrevious メソッドを使用して、Recordset オブジェクトの先頭を超えるまでは、BOF プロパティの設定値は False のままです。同様に、MoveNext メソッドを使用して Recordset オブジェクトの最後を超えるまでは、EOF プロパティの設定値は False のままです。Recordset オブジェクトの先頭または最後を超える場合、カレント レコードが存在しないか、またはレコードが存在しません。

Recordset オブジェクトのレコードをすべて削除しても、カレント レコードの位置を移動するまでは、BOF プロパティと EOF プロパティの設定値は False のままです。

レコードを持つ Recordset オブジェクトに MoveLast メソッドを使用すると、最後のレコードがカレント レコードになります。そこで MoveNext メソッドを使用すると、カレント レコードは存在せず、EOF プロパティは True に設定されます。逆に、レコードを持つ Recordset オブジェクトに MoveFirst メソッドを使用すると、最初のレコードがカレント レコードになります。そこで MovePrevious メソッドを使用すると、カレント レコードは存在せず、BOF プロパティは True に設定されます。

Recordset オブジェクトに含まれるすべてのレコードに対して操作を行う場合、通常は、EOF プロパティの値が True になるまで、MoveNext メソッドを使用してレコード全体をループ処理します。

EOF プロパティが True に設定されている場合に MoveNext メソッドを使用したり、BOF プロパティが True に設定されている場合に MovePrevious メソッドを使用したりすると、エラーが発生します。

次の表に、BOF プロパティと EOF プロパティのそれぞれの組み合わせについて、有効な Move 系メソッドを示します。

 | MoveFirst、 MoveLast | MovePrevious、 Move < 0 | Move 0 | MoveNext、 Move > 0
BOF=True、 EOF=False | 有効 | エラー | エラー | 有効
BOF=False、 EOF=True | 有効 | 有効 | エラー | エラー
共に True | エラー | エラー | エラー | エラー
共に False | 有効 | 有効 | 有効 | 有効

この表の Move 系メソッドが有効という意味は、目的のレコードに正確に移動できることではなく、その Move 系メソッドがエラーを発生させることなく実行されることを示しています。Move 系メソッドの実行結果によっては、BOF プロパティと EOF プロパティの状態が変更することもあります。

OpenRecordset メソッドは MoveFirst メソッドを内部的に呼び出します。このため、OpenRecordset メソッドを空のレコード セットに適用すると、BOF プロパティと EOF プロパティは True に設定されます。MoveFirst メソッドの処理が失敗した場合の動作については、後の表を参照してください。

すべての Move 系メソッドは、正しく目的のレコードに移動すると、BOF プロパティと EOF プロパティの両方を False に設定します。

Jet ワークスペースでは、空の Recordset オブジェクトにレコードを追加すると、BOF プロパティの値は False になりますが、EOF プロパティの値は True のままになり、現在の位置が Recordset オブジェクトの終わりであることを示します。ODBCDirect ワークスペースでは BOF プロパティと EOF プロパティは共に False になり、現在の位置が新しいレコードであることを示します。

Delete メソッドを使用して、Recordset オブジェクトからすべてのレコードを削除しても、BOF プロパティと EOF プロパティの設定値は変更されません。

次の表に、Move 系メソッドがレコードの処理に失敗した場合の BOF プロパティと EOF プロパティの設定状態を示します。

 | BOF | EOF
MoveFirst、MoveLast | True | True
Move 0 | 変化なし | 変化なし
MovePrevious、Move < 0 | True | 変化なし
MoveNext、Move > 0 | 変化なし | True


BOF、EOF プロパティの使用例 (DAO)

BOF、EOF プロパティの使用例

次の例では、BOF と EOF プロパティを使用して、Recordset の中を前後に移動する方法を説明します。

Sub BOFX()

    Dim dbsNorthwind As Database
    Dim rstCategories As Recordset
    Dim strMessage As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstCategories = _
        dbsNorthwind.OpenRecordset("Categories", _
        dbOpenSnapshot)

    With rstCategories
        ' Recordset を配置します。
        .MoveLast
        .MoveFirst

        Do While True
            ' カレント レコードの情報を表示して
            ' ユーザーからの入力を取得します。
            strMessage = "Category: " & !CategoryName & _
                vbCr & "(record " & (.AbsolutePosition + 1) & _
                "/" & .RecordCount & ")" & vbCr & vbCr & _
                "Enter 1 to go forward, 2 to go backward"

            ' 前方または後方に移動して
            ' BOF または EOF ではトラップします。
            Select Case InputBox(strMessage)
                Case 1
                    .MoveNext
                    If .EOF Then
                        MsgBox _
                            "End of the file!" & vbCr & _
                            "Pointer being moved to last record."
                        .MoveLast
                    End If

                Case 2
                    .MovePrevious
                    If .BOF Then
                        MsgBox _
                            "Beginning of the file!" & vbCr & _
                            "Pointer being moved to first record."
                        .MoveFirst
                    End If

                Case Else
                    Exit Do
            End Select

        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


Bookmark プロパティ (DAO)

Bookmark プロパティ

Recordset オブジェクトに含まれるカレント レコードを一意に識別するブックマークを設定または返します。

設定値と戻り値

設定値または戻り値は、有効なブックマークを示す文字列式またはバリアント式です。値はバイト型 (Byte) データのバリアント型 (Variant) の配列です。

解説

Jet データベース エンジンのテーブルに完全に基づいた Recordset オブジェクトでは、Bookmarkable プロパティの設定値には True が設定されるため、Recordset プロパティと組み合わせて Bookmark プロパティを使用することができます。ほかのデータベース製品ではブックマークがサポートされていない場合があります。たとえば、Paradox の主キーを持たないリンク テーブルに基づいた Recordset オブジェクトでは、ブックマークを使用することはできません。

Recordset オブジェクトを作成または開く場合、Recordset オブジェクトの各レコードは、既に一意なブックマークを持っています。Bookmark プロパティの値を変数に代入すると、カレント レコードのブックマークを保存することができます。別のレコードに移動した後も、この変数の値を Recordset オブジェクトの Bookmark プロパティに設定すると、いつでもこのレコードに戻ることができます。

設定するブックマークの数に制限はありません。カレント レコード以外のレコードのブックマークを作成する場合、ブックマークを作成するレコードに移動してから、Bookmark プロパティの値を、そのレコードを識別するための文字列型 (String) の変数に代入します。

Recordset オブジェクトがブックマークをサポートしているかどうかを確認するには、Bookmark プロパティを使用する前に、Recordset オブジェクトの Bookmarkable プロパティの値を調べます。Bookmarkable プロパティが False に設定されている場合、その Recordset オブジェクトはブックマークをサポートしていません。この場合、Bookmark プロパティを使用すると、トラップ可能なエラーが発生します。

Clone メソッドを使用して Recordset オブジェクトのコピーを作成すると、複製元の Recordset オブジェクトと複製された Recordset オブジェクトの Bookmark プロパティは同じになるため、ブックマークを互換性を持って使用することができます。異なる Recordset オブジェクトのブックマークは、それらが同じオブジェクトや同じ SQL ステートメントを使用して作成されていても、互換性を持って使用することはできません。

削除されたレコードを表す値を Bookmark プロパティに設定すると、トラップ可能なエラーが発生します。

Bookmark プロパティの値は、レコード番号とは異なります。


Bookmarkable プロパティ (DAO)

Bookmarkable プロパティ

Recordset オブジェクトがブックマークをサポートしているかどうかを示す値を返します。ブックマークは、Bookmark プロパティを使用して設定できます。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、Recordset オブジェクトはブックマークをサポートしています。

解説

Bookmark プロパティを設定または確認する前に、Recordset オブジェクトの Bookmarkable プロパティの設定値を確認してください。

Jet データベース エンジンのテーブルに基づいている Recordset オブジェクトでは、Bookmarkable プロパティの値は True に設定されるため、ブックマークを使用することができます。ほかのデータベース製品ではブックマークがサポートされていない場合もあります。たとえば、Paradox の主キーを持たないリンク テーブルに基づいている Recordset オブジェクトでは、ブックマークを使用することはできません。


CacheSize プロパティ (DAO)

CacheSize プロパティ

ローカルにキャッシュされる ODBC データ ソースから取得されたレコード数を設定または返します。

設定値と戻り値

設定値または戻り値は、5 ～ 1200 までの長整数型 (Long) の値です。ただし、使用可能なメモリより大きい数を指定することはできません。通常は、100 に設定します。キャッシュを使用しない場合は、0 に設定します。

解説

Recordset オブジェクトを使用してリモート サーバーからデータを取得する場合、キャッシュを使用するとパフォーマンスが向上します。キャッシュとは、実行中のアプリケーションが同じデータを再度要求する場合に備えて、サーバーから取得した最新のデータを一時的に保持しておくためのローカル メモリ領域のことです。Jet データベース エンジンは、データが要求された場合、まずそのデータがキャッシュにないかどうかを調べます。データがキャッシュになければサーバーから取得しますが、その場合はキャッシュから取得する場合よりも時間がかかります。キャッシュには ODBC データ ソースからのデータのみが保存されます。

リンク テーブルなどの Jet 接続型 ODBC データ ソースには、ローカル キャッシュを持たせることができます。キャッシュを作成するには、リモート データ ソースから Recordset オブジェクトを開き、CacheSize プロパティおよび CacheStart プロパティを設定してから、FillCache メソッドを使用するか、または Move 系メソッドを使用して該当するレコードに移動します。

ODBCDirect ワークスペースは、ローカル キャッシュを使用することができます。キャッシュを作成するには、QueryDef オブジェクトに CacheSize プロパティを設定します。Relation オブジェクトでは、CacheSize プロパティは読み取り専用で、QueryDef オブジェクトの CacheSize プロパティの値によって決まります。ODBCDirect ワークスペースでは、FillCache メソッドで CacheStart プロパティを使用することはできません。Jet ワークスペースでは、CacheSize プロパティは QueryDef オブジェクトで使用できません。

CacheSize プロパティには、アプリケーションで一度に操作できるレコード数を設定します。たとえば、Recordset オブジェクトから読み込んだデータを一度に 20 レコード表示する場合は、CacheSize プロパティを 20 に設定します。

Jet データベース エンジンは、レコードを要求する場合にキャッシュ範囲内のレコードはキャッシュから、キャッシュ範囲外のレコードはサーバーから、それぞれ要求します。

キャッシュから取得されたレコードには、ほかのユーザーが同時にデータ ソースに対して行った変更結果は反映されません。

キャッシュされているすべてのデータを強制的に更新するには、Recordset オブジェクトの CacheSize プロパティをいったん 0 に設定し、最初に要求したキャッシュ サイズに設定し直してから、FillCache メソッドを使用します。


CacheStart プロパティ (DAO)

CacheStart プロパティ

ODBC データ ソースからローカルにキャッシュするデータを含む、ダイナセット タイプの Recordset オブジェクトの最初のレコードのブックマークを指定する値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブックマークを指定する文字列型 (String) の値です。

解説

ダイナセット タイプの Recordset オブジェクトを使用してリモート サーバーからデータを取得する場合、キャッシュを使用するとパフォーマンスが向上します。キャッシュとは、実行中のアプリケーションが同じデータを再度要求する場合に備えて、サーバーから取得した最新のデータを一時的に保持しておくためのローカル メモリ領域のことです。Jet データベース エンジンは、データが要求された場合、まずそのデータがキャッシュにないかどうかを調べます。データがキャッシュになければサーバーから取得しますが、その場合はキャッシュから取得する場合よりも時間がかかります。キャッシュには ODBC データ ソースからのデータのみが保存されます。

リンク テーブルなどの Jet 接続型 ODBC データ ソースには、ローカル キャッシュを持たせることができます。キャッシュを作成するには、リモート データ ソースから Recordset オブジェクトを開き、CacheSize プロパティおよび CacheStart プロパティを設定してから、FillCache メソッドを使用するか、または Move 系メソッドを使用して該当するレコードに移動します。

CacheStart プロパティは、Recordset オブジェクト内のレコードのうち、キャッシュ対象の最初のレコードのブックマークになります。CacheStart プロパティを設定する場合、オブジェクト内のすべてのレコードのブックマークを使用することができます。キャッシュの先頭となるレコードをカレント レコードとし、CacheStart プロパティの値を Bookmark プロパティと同じ値に設定します。

Jet データベース エンジンは、レコードを要求する場合にキャッシュ範囲内のレコードはキャッシュから、キャッシュ範囲外のレコードはサーバーから、それぞれ要求します。

キャッシュから取得されたレコードには、ほかのユーザーが同時にデータ ソースに対して行った変更結果は反映されません。

キャッシュされているすべてのデータを強制的に更新するには、Recordset オブジェクトの CacheSize プロパティをいったん 0 に設定し、最初に要求したキャッシュ サイズに設定し直してから、FillCache メソッドを使用します。


Clustered プロパティ (DAO)

Clustered プロパティ

Index オブジェクトが、テーブルのクラスタ化インデックスを表すかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、Index オブジェクトはクラスタ化インデックスを表します。

解説

組み込み可能な ISAM デスクトップ データベース形式には、クラスタ化インデックスを使用するものがあります。クラスタ化インデックスは、テーブルのすべてのレコードをあらかじめ決められた順序で配置するための主キー フィールド以外の 1 つまたは複数のフィールドで構成されます。クラスタ化インデックスを使用すると、テーブルのインデックスの値が重複する場合でも、各レコードに効率的にアクセスすることができます。

Clustered プロパティは、まだコレクションに追加されていない新しい Index オブジェクトでは読み取り/書き込みが可能で、Indexes コレクションの既存の Index オブジェクトでは読み取り専用です。

メモ

  • Jet データベース エンジンではクラスタ化インデックスをサポートしていないため、Jet データベースでは Clustered プロパティは無視されます。

  • ODBC データ ソースでは、Clustered プロパティは常に False を返します。Clustered プロパティを使用して ODBC データ ソースがクラスタ化インデックスを持っているかどうかを調べることはできません。


CollatingOrder プロパティ (DAO)

CollatingOrder プロパティ

文字列比較や並べ替えを行う場合のテキスト型 (Text) の並べ替え順序を示す値を返します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、長整数型 (Long) の値か、次に示す定数のいずれかになります。

定数 | 並べ替え順序
dbSortGeneral | 欧米標準 (英語、フランス語、ドイツ語、ポルトガル語、イタリア語、現代スペイン語)
dbSortArabic | アラビア語
dbSortChineseSimplified | 中国語 (中国)
dbSortChineseTraditional | 中国語 (台湾)
dbSortCyrillic | ロシア語
dbSortCzech | チェコ語
dbSortDutch | オランダ語
dbSortGreek | ギリシャ語
dbSortHebrew | ヘブライ語
dbSortHungarian | ハンガリー語
dbSortIcelandic | アイスランド語
dbSortJapanese | 日本語
dbSortKorean | 韓国語
dbSortNeutral | 上記以外
dbSortNorwDan | ノルウェー語、デンマーク語
dbSortPDXIntl | Paradox の International の並べ替え順序
dbSortPDXNor | Paradox のノルウェー語とデンマーク語の並べ替え順序
dbSortPDXSwe | Paradox のスウェーデン語とフィンランド語の並べ替え順序
dbSortPolish | ポーランド語
dbSortSlovenian | スロベニア語
dbSortSpanish | 古スペイン語
dbSortSwedFin | スウェーデン語、フィンランド語
dbSortThai | タイ語
dbSortTurkish | トルコ語
dbSortUndefined | 未定義または不明な並べ替え順序

解説

次の表に示すように、CollatingOrder プロパティの使い方は、Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り専用です。

CollatingOrder プロパティの設定値は、データベース作成時に CreateDatabase メソッドで指定した引数 locale または、最後のデータベースの最適化時に CompactDatabase メソッドで指定した locale に対応します。

データベースまたはフィールドの文字列の並び順を調べるには、Database オブジェクトまたは Field オブジェクトの CollatingOrder プロパティの設定値を確認します。新しく作成され、まだ追加されていない Field オブジェクトでは、CollatingOrder プロパティを設定して、その Field オブジェクトを含む Database オブジェクトの設定値とは異なる並び順を指定することができます。

インデックスの文字列の並び順が昇順か降順かは、Index オブジェクトの Fields コレクションに含まれる Field オブジェクトの CollatingOrder および Attributes プロパティの設定値によって決まります。ただし、照合順序はテーブル全体にのみ設定することができ、インデックスごとに設定することはできません。


CollatingOrder プロパティの使用例 (DAO/Microsoft Jet)

CollatingOrder プロパティの使用例

次の例では、Northwind データベースとテーブルの個々のフィールドに対して、CollatingOrder プロパティを表示します。

Sub CollatingOrderX()

    Dim dbsNorthwind As Database
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' Northwind データベースの照合順を表示します。
        Debug.Print "Collating order of " & .Name & " = " & _
            .CollatingOrder

        ' TableDef オブジェクトのフィールドの照合順を表示します。
        Debug.Print "Collating order of fields in " & _
            .TableDefs(0).Name & " table:"
        For Each fldLoop In .TableDefs(0).Fields
            Debug.Print "    " & fldLoop.Name & " = " & _
                fldLoop.CollatingOrder
        Next fldLoop

        .Close
    End With

End Sub


ConflictTable プロパティ (DAO)

ConflictTable プロパティ

2 つのレプリカの同期をとっている間に、整合性がとれなくなったデータベース レコードを含む競合テーブルの名前を返します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、文字列型 (String) の値です。競合テーブルがない場合やデータベースがレプリカではない場合、長さ 0 の文字列 ("") を返します。

解説

2 人のユーザーが異なるレプリカを使用している場合、それぞれがデータベースの同じレコードを変更すると、一方のユーザーが行った変更は他方のユーザーが使用しているレプリカには反映されません。したがって、変更が反映されなかった側のユーザーは、競合を解決する必要があります。

競合はフィールド間ではなく、レコードのレベルで発生します。たとえば、あるユーザーが "住所" フィールドを変更し、別のユーザーが同じレコードの "電話番号" フィールドを変更すると、どちらかの変更が拒否されます。競合がレコードのレベルで発生するため、変更するデータは競合しないように見えても、実際にはどちらかの変更が拒否されます。

変更が行われていた場合、同期はテーブルに含まれるはずの情報を含む競合テーブルを作成することによって、レコードの競合を処理します。これらの競合テーブルを調べて、1 行ずつ適切に修正することができます。

競合テーブルはすべて "table_conflict" という名前になります。引数 table は、元のテーブル名を表します。ただし、テーブル名の最大長を超えた部分は切り捨てられます。


ConflictTable プロパティの使用例 (DAO/Microsoft Jet)

ConflictTable プロパティの使用例

次の例では、ConflictTable プロパティを使用して、同期中に競合がおこっているテーブル名を出力します。

Sub ConflictTableX()

    Dim dbsNorthwind As Database
    Dim tdfTest As TableDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' TableDefs コレクションを列挙し
    ' 各 ConflictTable プロパティを調べます。
    For Each tdfTest In dbsNorthwind.TableDefs
        If tdfTest.ConflictTable <> "" Then _
            Debug.Print tdfTest.Name & " had a conflict."
    Next tdfTest

    dbsNorthwind.Close

End Sub

この例では、競合テーブルと、競合の原因になったテーブルの 1 つから Recordset を開きます。次に、RequiredData フィールドを使用して、より最近に更新されたほうのテーブルからもう一方のテーブルに情報をコピーすることで、これらのテーブルのレコードを処理します。

Sub ConflictTableX2(dbsResolve As Database)

    Dim tdfTest As TableDef
    Dim rstSource As Recordset
    Dim rstConflict As Recordset
    Dim fldLoop As Field

    Set tdfTest = dbsResolve.TableDefs("Orders")

    If tdfTest.ConflictTable <> "" Then

        Set rstSource = dbsResolve.OpenRecordset( _
            tdfTest.Name, dbOpenTable)
        Set rstConflict = dbsResolve.OpenRecordset( _
            tdfTest.ConflictTable, dbOpenTable)
        rstSource.Index = "[d_Guid]"
        rstConflict.MoveFirst

        Do Until rstConflict.EOF
            rstSource.Seek "=", rstConflict![s_Guid]
            If Not rstSource.NoMatch Then
                If rstSource!RequiredDate < _
                        rstConflict!RequiredDate Then
                    On Error Resume Next
                        For Each fldLoop in rstConflict.Fields
                            fldLoop = rstSource(fldLoop.Name)
                        Next fldLoop
                    On Error Goto 0
                End If
            End If
            rstConflict.Delete
            rstConflict.MoveNext
        Loop

        rstConflict.Close
        rstSource.Close
    End If

End Sub


Connect プロパティ (DAO)

Connect プロパティ

開いている接続、データベース、パススルー クエリーで使用されるデータベース、およびリンク テーブルのソースに関する情報を提供する値を設定または返します。Database オブジェクト、新しい Connection オブジェクト、リンク テーブル、およびコレクションにまだ追加されていない TableDef オブジェクトの場合、Connect プロパティは、読み取り/書き込みが可能です。QueryDef オブジェクトとベース テーブルの場合は、このプロパティは読み取り専用です。

構文

object.Connect = databasetype;parameters;

Connect プロパティには、次の指定項目があります。

指定項目 | 説明
object | 評価結果が "対象" 一覧にあるオブジェクトを参照するオブジェクト式です。
databasetype | (省略可能) データベースの種類を指定する文字列型 (String) 。Jet データベースでは、この引数は省略します。引数 parameters を指定する場合、セミコロン (;) をプレースホルダとして使用します。
parameters | (省略可能) ODBC ドライバまたは組み込み可能な ISAM ドライバに渡される追加のパラメータを指定する文字列型 (String) の値です。複数のパラメータを指定する場合は、セミコロン (;) で区切ります。

設定値

Connect プロパティの設定値は文字列型 (String) の値で、データベースの種類を指定する文字列と、セミコロンで区切られたパラメータで構成されます。ただし、パラメータは省略可能です。Connect プロパティは、必要に応じて ODBC ドライバや特定の ISAM ドライバに付加情報を渡すことができます。

Jet データベースの拡張子 .mdb を持つファイルにリンクしているテーブルに対して、SQL パススルー クエリーを実行するには、まず、リンク テーブルのデータベースの Connect プロパティに有効な ODBC 接続文字列を設定します。

リンク テーブルを表す TableDef オブジェクトの場合、Connect プロパティの設定値は 1 つまたは 2 つの部分 (データベースの種類を指定する文字列とデータベースへのパス) で構成され、各部分の最後にセミコロン (;) が付きます。

次の表のパスは、データベース ファイルが含まれるフォルダのフル パスで、識別子 "DATABASE=" の後に続けて指定します。Excel および Jet データベースなどを指定した場合は、具体的なファイル名をデータベース パスの引数に含めます。

次の表は、使用可能なデータベースの種類とそれに対応するデータベースの指定子とパスの一覧です。データベースの指定子とパスを組み合わせて Connect プロパティを設定します。ODBCDirect ワークスペースでは "ODBC" 指定子のみを使用することができます。

データベースの種類 | 指定子 | 例
Jet データベース | [database]; | drive:\path\filename.mdb
dBASE III | dBASE III; | drive:\path
dBASE IV | dBASE IV; | drive:\path
dBASE 5 | dBASE 5.0; | drive:\path
Paradox 3.x | Paradox 3.x; | drive:\path
Paradox 4.x | Paradox 4.x; | drive:\path
Paradox 5.x | Paradox 5.x; | drive:\path
Microsoft Excel 3.0 | Excel 3.0; | drive:\path\filename.xls
Microsoft Excel 4.0 | Excel 4.0; | drive:\path\filename.xls
Microsoft Excel 5.0 または Microsoft Excel 95 | Excel 5.0; | drive:\path\filename.xls
Microsoft Excel 97 | Excel 8.0; | drive:\path\filename.xls
Lotus 1-2-3 WKS and WK1 | Lotus WK1; | drive:\path\filename.wk1
Lotus 1-2-3 WK3 | Lotus WK3; | drive:\path\filename.wk3
Lotus 1-2-3 WK4 | Lotus WK4; | drive:\path\filename.wk4
HTML Import | HTML Import; | drive:\path\filename
HTML Export | HTML Export; | drive:\path
Text | Text; | drive:\path
ODBC ODBC;DATABASE=database;
UID=user; PWD=password;
DSN= datasourcename;
[LOGINTIMEOUT=seconds;] 		なし
Microsoft Exchange Exchange 4.0;
MAPILEVEL=folderpath;
[TABLETYPE={ 0 | 1 }];
[PROFILE=profile;]
[PWD=password;]
[DATABASE=database;] 		drive:\path\filename.mdb

解説

指定子が "ODBC;" のみの場合、登録されているすべての ODBC データ ソース名を一覧表示するダイアログ ボックスが ODBC ドライバによって表示され、この中からデータベースを選択することができます。

Jet 4.0 では、FoxPro ISAM はサポートされなくなりました。代りに、FoxPro ODBC ドライバを使用してください。

パスワードが必要な場合に、Connect プロパティでパスワードが設定されていないと、テーブルに最初にアクセスするときに、ODBC ドライバによって [ログイン] ダイアログ ボックスが表示されます。また、接続を閉じて再度開いた場合にも、[ログイン] ダイアログ ボックスが表示されます。

Exchange のデータの場合、必要な MAPILEVEL キーには、フォルダのフル パスを設定する必要があります (たとえば、"Mailbox - Pat SmithIAlpha/Today")。このパスには、テーブルとして開かれるフォルダ名は含まれません。その代わりに、そのフォルダ名は、CreateTable メソッドに対して、引数 name として指定します。フォルダを開く場合は TABLETYPE キーを "0" (既定値) に、アドレス帳を開く場合は "1" に設定する必要があります。PROFILE キーの既定値は、現在使用しているプロファイルになります。

Jet データベース (.mdb) のベース テーブルの場合、Connect プロパティの設定値は、長さ 0 の文字列 ("") になります。

OpenDatabase メソッドに引数 source を指定すると、Database オブジェクトの Connect プロパティを設定できます。この設定値を調べると、そのデータベースの種類、パス、ユーザー ID、パスワード、および ODBC データ ソースを確認できます。

Jet ワークスペースの QueryDef オブジェクトの場合、Connect プロパティを ReturnsRecords プロパティと共に使用して ODBC SQL パススルー クエリーを作成します。接続文字列の databasetype は "ODBC;" です。それ以外の部分には、リモート データにアクセスするために使用する ODBC ドライバに一意な情報が含まれます。詳細については、それぞれのドライバのマニュアルを参照してください。

メモ

  • Connect プロパティの設定は、ReturnsRecords プロパティを設定する前に行う必要があります。

  • アクセスするデータベース サーバーを含むコンピュータへのアクセス権を持っている必要があります。


Connection プロパティ (DAO)

Connection プロパティ

Database オブジェクトでは、データベースに対応している Connection オブジェクトを設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

Recordset オブジェクトでは、Recordset を所有している Connection オブジェクトを設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、Connection オブジェクトを表すオブジェクト変数です。Connection プロパティは、Recordset オブジェクトでは読み取り/書き込みが可能ですが、Database オブジェクトでは読み取り専用です。

解説

Database オブジェクトでは、Connection プロパティを使用して、Database オブジェクトに対応している Connection オブジェクトへの参照を取得します。DAO では、Connection オブジェクトとそれに対応している Database オブジェクトは、どちらも同じオブジェクトを参照するオブジェクト変数です。Connection オブジェクトの Database プロパティと Database オブジェクトの Connection プロパティを利用すれば、ODBCDirect を使用する場合に Jet データベース エンジン経由による ODBC データ ソースへの接続を簡単に変更することができます。

バッチ更新が可能な Recordset オブジェクトでは、Connection プロパティを変更することで、Recordset オブジェクトを開いていたものとは別の Connection オブジェクトに Recordset オブジェクトを割り当てることができます。この操作により、データの "パイプライン処理" が可能になります。パイプライン処理では、あるデータベースへのクエリーによって Recordset オブジェクトを開き、Connection プロパティを変更してから、バッチ更新をしてデータを別のデータベースに書き込むことができます。新しい設定は、元の Connection オブジェクトと同じ Workspace オブジェクトの中で開いている Connection オブジェクトを参照する必要があります。


Container プロパティ (DAO)

Container プロパティ

Document オブジェクトを含む Container オブジェクト名を返します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、文字列型 (String) の値です。


Container プロパティの使用例 (DAO/Microsoft Jet)

Container プロパティの使用例

次の例では、Document オブジェクトの異なる種類に対して、Container プロパティを表示します。

Sub ContainerPropertyX()

    Dim dbsNorthwind As Database
    Dim ctrLoop As Container

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 各 Container オブジェクトの Documents コレクションの
    ' 一番はじめの Document オブジェクトに対して、Container 名を表示します。
    For Each ctrLoop In dbsNorthwind.Containers
        Debug.Print "Document: " & ctrLoop.Documents(0).Name
        Debug.Print "    Container = " & _
            ctrLoop.Documents(0).Container
    Next ctrLoop

    dbsNorthwind.Close

End Sub


Count プロパティ (DAO)

Count プロパティ

コレクションが持つオブジェクト数を返します。

戻り値

戻り値は、整数型 (Integer) の値です。

解説

コレクションのメンバには、0 から順に番号が割り当てられます。したがって、ループを使用する場合、必ず 0 から始め、Count プロパティより 1 少ない値で終わるようにしてください。Count プロパティを確認せずにコレクションのメンバをループする場合には、For Each...Next コマンドを使用してください。

Count プロパティの設定値が Null 値になることはありません。設定値が 0 の場合、コレクションにオブジェクトがないことを示しています。


Count プロパティの使用例 (DAO)

Count プロパティの使用例

次の例では、Northwind データベースで 3 つの異なるコレクションを持つ Count プロパティを説明します。Count プロパティは各コレクションのオブジェクトの数を取得し、コレクションを列挙するループの最終値を設定します。Count プロパティを使用しないでコレクションを列挙するには、For Each...Next ステートメントを使用します。

Sub CountX()

    Dim dbsNorthwind As Database
    Dim intloop As Integer

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' TableDefs コレクションの情報を出力します。
        Debug.Print .TableDefs.Count & _
            " TableDefs in Northwind"
        For intloop = 0 To .TableDefs.Count - 1
            Debug.Print "    " & .TableDefs(intloop).Name
        Next intloop

        ' QueryDefs コレクションの情報を出力します。
        Debug.Print .QueryDefs.Count & _
            " QueryDefs in Northwind"
        For intloop = 0 To .QueryDefs.Count - 1
            Debug.Print "    " & .QueryDefs(intloop).Name
        Next intloop

        ' Relations コレクションの情報を出力します。
        Debug.Print .Relations.Count & _
            " Relations in Northwind"
        For intloop = 0 To .Relations.Count - 1
            Debug.Print "    " & .Relations(intloop).Name
        Next intloop

        .Close
    End With

End Sub


Database プロパティ (DAO)

Database プロパティ

この接続に対応している Database オブジェクトを返します。これは ODBCDirect ワークスペースでのみ使用することができます。

戻り値

戻り値は、Database オブジェクトを表すオブジェクト変数です。

解説

Connection オブジェクトでは、Database プロパティを使用して、Connection オブジェクトに対応している Database オブジェクトへの参照を取得します。DAO では、Connection オブジェクトとそれに対応している Database オブジェクトは、どちらも同じオブジェクトを参照するオブジェクト変数です。Connection オブジェクトの Database プロパティと Database オブジェクトの Connection プロパティを利用すれば、ODBCDirect を使用する場合に Jet データベース エンジン経由による ODBC データ ソースへの接続を簡単に変更することができます。


Database プロパティの使用例 (DAO/ODBCDirect)

Database プロパティの使用例

次の例では、Database プロパティを使用して、Jet データベース エンジンを経由して ODBC データにアクセスするコードを、ODBCDirect Connection オブジェクトを使用するように変換する方法を示します。

OldDatabaseCode プロシージャは、Jet 接続型 ODBC データ ソースを使用して ODBC データベースにアクセスします。

Sub OldDatabaseCode()

    Dim wrkMain As Workspace
    Dim dbsPubs As Database
    Dim prpLoop As Property

    ' Jet Workspace オブジェクトを作成します。
    Set wrkMain = CreateWorkspace("", "admin", "", dbUseJet)

    ' 接続文字列の情報に基づいて Database オブジェクトを開きます。
    Set dbsPubs = wrkMain.OpenDatabase("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' Database オブジェクトの Properties コレクションを列挙します。
    With dbsPubs
        Debug.Print "Database properties for " & _
            .Name & ":"

        On Error Resume Next
        For Each prpLoop In .Properties
            If prpLoop.Name = "Connection" Then
                ' Property は実際に Connection オブジェクトを返します。
                Debug.Print "    Connection[.Name] = " & _
                    .Connection.Name
            Else
                Debug.Print "    " & prpLoop.Name & " = " & _
                    prpLoop
            End If
        Next prpLoop
        On Error GoTo 0

    End With

    dbsPubs.Close
    wrkMain.Close

End Sub

次の NewDatabaseCode の例では、ODBCDirect ワークスペースにある Connection オブジェクトを開きます。続いて、古いプロシージャのデータ ソース名を持つオブジェクト変数に、Connection オブジェクトの Database プロパティを割り当てます。Jet ワークスぺースに特定の機能を使用しない限り、次に続くコードは変更する必要はありません。

Sub NewDatabaseCode()

    Dim wrkMain As Workspace
    Dim conPubs As Connection
    Dim dbsPubs As Database
    Dim prpLoop As Property

    ' Jet Workspace オブジェクトの代わりに
    ' ODBCDirect Workspace オブジェクトを作成します。
    Set wrkMain = CreateWorkspace("", "admin", "", dbUseODBC)

    ' 接続文字列の情報に基づいて
    ' Connection オブジェクトを開きます。
    Set conPubs = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    ' 古いコードにある同名のオブジェクト変数に
    ' Database プロパティを割り当てます。
    Set dbsPubs = conPubs.Database

    ' Database オブジェクトの Properties コレクションを列挙します。
    ' この時点で、コードは古いサンプルのコードと同名になります。
    With dbsPubs
        Debug.Print "Database properties for " & _
            .Name & ":"

        On Error Resume Next
        For Each prpLoop In .Properties
            If prpLoop.Name = "Connection" Then
                ' Property は実際に Connection オブジェクトを返します。
                Debug.Print "    Connection[.Name] = " & _
                    .Connection.Name
            Else
                Debug.Print "    " & prpLoop.Name & " = " & _
                    prpLoop
            End If
        Next prpLoop
        On Error GoTo 0

    End With

    dbsPubs.Close
    wrkMain.Close

End Sub


DataUpdatable プロパティ (DAO)

DataUpdatable プロパティ

Field オブジェクトが表すフィールドのデータが更新可能かどうかを示す値を返します。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、そのフィールドのデータは更新可能です。

解説

DataUpdatable プロパティは、Field オブジェクトの Value プロパティを変更できるかどうかを調べます。Attributes プロパティが dbAutoIncrField である Field オブジェクトでは、このプロパティは常に False です。

DataUpdatable プロパティは、QueryDef、Recordset、および Relation の各オブジェクトの Fields コレクションに追加された Field オブジェクトでは使用できますが、Index オブジェクトまたは TableDef オブジェクトの Fields コレクションに追加された Field オブジェクトでは使用できません。


DataUpdatable プロパティの使用例 (DAO)

DataUpdatable プロパティの使用例

次の例では、6 つの異なる Recordset オブジェクトから一番はじめのフィールドを使用して、DataUpdatable プロパティを説明します。このプロシージャを実行するには、DataOutput 関数が必要です。

Sub DataUpdatableX()

    Dim dbsNorthwind As Database
    Dim rstNorthwind As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' テーブル タイプの Recordset オブジェクトを開いて
        ' それに関するレポートを出力します。
        Set rstNorthwind = .OpenRecordset("Employees")
        DataOutput rstNorthwind

        ' ダイナセット タイプの Recordset オブジェクトを開いて
        ' それに関するレポートを出力します。
        Set rstNorthwind = .OpenRecordset("Employees", _
            dbOpenDynaset)
        DataOutput rstNorthwind

        ' スナップショット タイプの Recordset オブジェクトを開いて
        ' それに関するレポートを出力します。
        Set rstNorthwind = .OpenRecordset("Employees", _
            dbOpenSnapshot)
        DataOutput rstNorthwind

        ' 前方スクロール タイプの Recordset オブジェクトを開いて
        ' それに関するレポートを出力します。
        Set rstNorthwind = .OpenRecordset("Employees", _
            dbOpenForwardOnly)
        DataOutput rstNorthwind

        ' 選択クエリーに基づいた Recordset を開いて
        ' それに関するレポートを出力します。
        Set rstNorthwind = _
            .OpenRecordset("Current Product List")
        DataOutput rstNorthwind

        ' 結果を計算する選択クエリーに基づいた Recordset を開いて
        ' それに関するレポートを出力します。
        Set rstNorthwind = .OpenRecordset("Order Subtotals")
        DataOutput rstNorthwind

        .Close
    End With

End Sub

Function DataOutput(rstTemp As Recordset)

    With rstTemp
        Debug.Print "Recordset: " & .Name & ", ";
        Select Case .Type
            Case dbOpenTable
                Debug.Print "dbOpenTable"
            Case dbOpenDynaset
                Debug.Print "dbOpenDynaset"
            Case dbOpenSnapshot
                Debug.Print "dbOpenSnapshot"
            Case dbOpenForwardOnly
                Debug.Print "dbOpenForwardOnly"
        End Select
        Debug.Print "    Field:" & .Fields(0).Name & ", " & _
            "DataUpdatable = " & .Fields(0).DataUpdatable
        Debug.Print
        .Close
    End With

End Function


DateCreated、LastUpdated プロパティ (DAO)

DateCreated、LastUpdated プロパティ

  • DateCreated プロパティ - オブジェクトが作成された日付と時刻を返します。テーブル タイプの Recordset オブジェクトの場合、ベース テーブルが作成された日付と時刻を示します。これは Jet ワークスペースでのみ使用することができます。

  • LastUpdated プロパティ - オブジェクトが最後に変更された日付と時刻を返します。テーブル タイプの Recordset オブジェクトの場合、ベース テーブルが最後に変更された日付と時刻を示します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、サブタイプが日付/時刻型 (Date/Time) であるバリアント型 (Variant) の値です。

解説

テーブル タイプの Recordset オブジェクトでは、そのベース テーブルが作成されたコンピュータか、または最後に更新されたコンピュータから日付と時刻の値を取得します。ほかのオブジェクトでは、DateCreated プロパティと LastUpdated プロパティは、そのオブジェクトが作成された日付と時刻か、または最後に更新された日付と時刻の値を返します。マルチユーザー環境で DateCreated プロパティと LastUpdated プロパティを使用する場合、直接ファイル サーバーから値を取得し、矛盾を避ける必要があります。


DateCreated、LastUpdated プロパティの使用例 (DAO/Microsoft Jet)

DateCreated、LastUpdated プロパティの使用例

次の例では、既存の TableDef オブジェクトに新しい Field オブジェクトを追加し、新しく TableDef オブジェクトを作成して、DateCreated と LastUpdated プロパティを説明します。このプロシージャを実行するには、DateOutput 関数が必要です。

Sub DateCreatedX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim tdfNewTable As TableDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        Set tdfEmployees = .TableDefs!Employees

        With tdfEmployees
            ' Employees テーブルに関する現在の情報を出力します。
            DateOutput "Current properties", tdfEmployees

            ' フィールドを作成して
            ' Employees テーブルに追加します。
            .Fields.Append .CreateField("NewField", dbDate)

            ' 新しい Employees テーブルに関する情報を出力します。
            DateOutput "After creating a new field", _
                tdfEmployees

            ' ここではデモとして新しいフィールドを削除します。
            .Fields.Delete "NewField"
        End With

        ' 新しく TableDef オブジェクトを作成して
        ' Northwind データベースに追加します。
        Set tdfNewTable = .CreateTableDef("NewTableDef")
        With tdfNewTable
            .Fields.Append .CreateField("NewField", dbDate)
        End With
        .TableDefs.Append tdfNewTable

        ' 新しく TableDef オブジェクトに関する情報を出力します。
        DateOutput "After creating a new table", tdfNewTable

        ' ここではデモとして TableDef オブジェクトを削除します。
        .TableDefs.Delete tdfNewTable.Name
        .Close
    End With

End Sub

Function DateOutput(strTemp As String, _
    tdfTemp As TableDef)

    ' 指定した TableDef オブジェクトに関する
    ' 作成日と最終更新日の情報を出力します。
    Debug.Print strTemp
    Debug.Print "    TableDef: " & tdfTemp.Name
    Debug.Print "        DateCreated = " & _
        tdfTemp.DateCreated
    Debug.Print "        LastUpdated = " & _
        tdfTemp.LastUpdated
    Debug.Print

End Function


DefaultCursorDriver プロパティ (DAO)

DefaultCursorDriver プロパティ

OpenConnection または OpenDatabase メソッドで作成した接続で使用するカーソル ドライバの種類を設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。次の表に示す定数のいずれかになります。

定数 | 説明
dbUseDefaultCursor | (既定値) サーバーがサーバー側カーソルをサポートしている場合は、それを使用します。サポートしていない場合には、ODBC カーソル ライブラリを使用します。
dbUseODBCCursor | 常に ODBC カーソル ライブラリを使用します。結果セットが小さい場合、この定数の設定によって処理効率が良くなりますが、結果セットが比較的大きい場合には著しく処理効率が落ちます。
dbUseServerCursor | 常にサーバー側カーソルを使用します。通常の大きなレコード セットの操作では、この定数の設定によって処理効率が良くなりますが、ネットワークのトラフィック量が増える可能性もあります。
dbUseClientBatchCursor | 常にクライアントのバッチ カーソル ライブラリを使用します。この定数は、バッチ更新で必要になります。
dbUseNoCursor | すべてのカーソル (Recordset オブジェクト) を、前方スクロール タイプおよび読み取り専用として開き、行セットのサイズを 1 に設定します。"カーソルなしクエリー" とも呼ばれます。

解説

DefaultCursorDriver プロパティの設定は、プロパティの設定後に確立された接続にのみ作用します。DefaultCursorDriver プロパティを変更しても、既存の接続には作用しません。


DefaultType プロパティ (DAO)

DefaultType プロパティ

作成された Workspace オブジェクトが使用するワークスペースの種類 (Jet ワークスペースまたは ODBCDirect ワークスペース) を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。次の表に示す定数のどちらかになります。

定数 | 説明
dbUseJet | Jet データベース エンジンに接続する Workspace オブジェクトを作成します。
dbUseODBC | ODBC データ ソースに接続する Workspace オブジェクトを作成します。

解説

CreateWorkspace メソッドの引数 type を設定することにより、1 つの Workspace オブジェクトについてこの設定を変更することができます。


DefaultType プロパティの使用例 (DAO)

DefaultType プロパティの使用例

次の例では、DefaultType プロパティを使用して、CreateWorkspace メソッドを呼び出す場合に、どのような種類の Workspace オブジェクトを作成するかをあらかじめ決めておきます。このプロシージャを実行するには、TypeOutput 関数が必要です。

Sub DefaultTypeX()

    Dim wrkODBC As Workspace
    Dim wrkJet As Workspace
    Dim prpLoop As Property

    ' DefaultType プロパティを設定し
    ' 特定の種類を持たない Workspace オブジェクトを作成します。
    DBEngine.DefaultType = dbUseODBC
    Set wrkODBC = CreateWorkspace("ODBCWorkspace", _
        "admin", "")

    Debug.Print "DBEngine.DefaultType = " & _
        TypeOutput(DBEngine.DefaultType)
    With wrkODBC
        ' Workspace オブジェクトの Properties コレクションを列挙します。
        Debug.Print "Properties of " & .Name
        On Error Resume Next
        For Each prpLoop In .Properties
            Debug.Print "    " & prpLoop.Name & " = " & prpLoop
            If prpLoop.Name = "Type" Then Debug.Print _
                "        (" & TypeOutput(prpLoop.Value) & ")"
        Next prpLoop
        On Error GoTo 0
    End With

    ' DefaultType プロパティを設定し
    ' 特定の種類を持たない Workspace オブジェクトを作成します。
    DBEngine.DefaultType = dbUseJet
    Set wrkJet = CreateWorkspace("JetWorkspace", "admin", "")

    Debug.Print "DBEngine.DefaultType = " & _
        TypeOutput(DBEngine.DefaultType)
    With wrkJet
        ' Workspace オブジェクトの Properties コレクションを列挙します。
        Debug.Print "Properties of " & .Name
        On Error Resume Next
        For Each prpLoop In .Properties
            Debug.Print "    " & prpLoop.Name & " = " & prpLoop
            If prpLoop.Name = "Type" Then Debug.Print _
                "        (" & TypeOutput(prpLoop.Value) & ")"
        Next prpLoop
        On Error GoTo 0
    End With

    wrkODBC.Close
    wrkJet.Close

End Sub

Function TypeOutput(intTemp As Integer) As String

    If intTemp = dbUseJet Then
        TypeOutput = "dbUseJet"
    Else
        TypeOutput = "dbUseODBC"
    End If

End Function


DefaultUser、DefaultPassword プロパティ (DAO)

DefaultUser、DefaultPassword プロパティ

  • DefaultUser プロパティ - Workspace オブジェクトを初期化するときに、既定の Workspace オブジェクトを作成するために使用するユーザー名を設定します。

  • DefaultPassword プロパティ - Workspace オブジェクトを初期化するときに、既定の Workspace オブジェクトを作成するために使用するパスワードを設定します。

設定値

DefaultUser プロパティの設定値は、文字列型 (String) の値です。Jet ワークスペースでは、半角 20 文字 (20 バイト) まで設定できます。ODBCDirect ワークペースでは文字数に制限はありません。アルファベット、アクセント記号付き文字、数字、およびスペースを使用することができます。記号を使用することもできますが、" (引用符)、/ (スラッシュ)、\ (円記号)、[ ] (角かっこ)、: (コロン)、| (パイプ)、< (小なり記号)、> (大なり記号)、+ (プラス記号)、= (等号)、; (セミコロン)、, (カンマ)、? (疑問符)、* (アスタリスク)、先頭のスペース、および制御文字 (ASCII 文字の 00 ～ 31) を含めることはできません。

DefaultPassword プロパティの設定値も、文字列型 (String) の値です。Jet データベースでは半角 14 文字 (14 バイト) まで設定できます。ODBCDirect 接続では文字数に制限はありません。ASCII 文字の 0 を除く任意の文字を使用することができます。

DefaultUser プロパティの既定値は "admin" で、DefaultPassword プロパティの既定値は長さ 0 の文字列 ("") です。

解説

通常は、ユーザー名に大文字と小文字の区別はありません。ただし、削除したユーザー アカウントや別のワークグループで作成したユーザー アカウントをもう一度作成する場合、大文字と小文字が元の名前と正確に一致しなければなりません。パスワードでは、大文字と小文字は区別されます。

通常は、CreateWorkspace メソッドに設定したユーザー名とパスワードを使用して Workspace オブジェクトを作成します。ただし、セキュリティが設定されたデータベースを使用していない場合や、前のバージョンとの互換性が必要である場合のために、Workspace オブジェクトがまだ開かれていなければ、必要に応じて Jet データベース エンジンによって既定の Workspace オブジェクトが自動的に作成されます。この場合、既定の Workspace オブジェクトのユーザー名とパスワードには、DefaultUser プロパティと DefaultPassword プロパティの値が使用されます。

このプロパティの設定を有効にするには、DAO メソッドを呼び出す前に設定しておく必要があります。


DefaultUser プロパティと DefaultPassword プロパティの使用例 (DAO)

DefaultUser プロパティと DefaultPassword プロパティの使用例

次の例では、既定の Workspace オブジェクトの設定を決める、DefaultUser プロパティと DefaultPassword プロパティを設定します。

Sub DefaultUserX()

    ' DBEngine オブジェクトに対して
    ' DefaultUser と DefaultPassword プロパティを設定します。
    DBEngine.DefaultUser = "NewUser"
    DBEngine.DefaultPassword = ""

    Debug.Print _
        "Setting DBEngine.DefaultUser to 'NewUser'..."
    Debug.Print _
        "Setting DBEngine.DefaultPassword to " & _
            "[zero-length string]..."

    Dim wrkJet As Workspace
    Dim wrkLoop As Workspace
    Dim prpLoop As Property

    Set wrkJet = CreateWorkspace("JetWorkspace", "admin", _
        "", dbUseJet)

    ' Workspaces コレクションを列挙します。
    On Error Resume Next
    For Each wrkLoop In Workspaces
        Debug.Print "Workspace: " & wrkLoop.Name
        ' それぞれの Workspace オブジェクトについて
        ' Properties コレクションを列挙します。
        For Each prpLoop In wrkLoop.Properties
            Debug.Print "    " & prpLoop.Name & " = " & prpLoop
        Next prpLoop
    Next wrkLoop
    On Error GoTo 0

    wrkJet.Close

End Sub


DefaultValue プロパティ (DAO)

DefaultValue プロパティ

Field オブジェクトの既定値を設定または返します。Fields コレクションに追加されていない Field オブジェクトでは、このプロパティは読み取り/書き込みが可能です。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、半角 255 文字 (255 バイト) 以内の文字列型 (String) の値です。テキストまたは式を指定できます。プロパティの設定値が式の場合、ユーザー定義関数、Jet データベース エンジンの SQL 集計関数、およびクエリーやフォーム、そのほかの Field オブジェクトの参照をその式に含めることはできません。

メモ TableDef オブジェクトの Field オブジェクトの DefaultValue プロパティに、"GenUniqueID( )" という特別な値を設定することもできます。レコードが追加または作成されると、このフィールドには必ず乱数が代入されるため、各レコードには一意な識別子を指定します。このフィールドの Type プロパティは、長整数型 (Long) の値でなければなりません。

解説

次の表に示すように、DefaultValue プロパティの使い方は、Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。

新しいレコードを作成すると、DefaultValue プロパティの設定値が自動的にフィールドの値として入力されます。Value プロパティの値を設定すると、フィールドの値を変更できます。

DefaultValue プロパティは、オートナンバー型 (AutoNumber) フィールドとロング バイナリ型 (Long Binary) フィールドには適用されません。


DefaultValue プロパティの使用例 (DAO/Microsoft Jet)

DefaultValue プロパティの使用例

次の例では、DefaultValue プロパティを使用して、フィールドの標準値のユーザーに入力を促す場合に警告を出します。さらに、ほかの入力がない場合に、DefaultValue プロパティがどのように新しいレコードの情報を埋めるかについて説明します。このプロシージャを実行するには、DefaultPrompt 関数が必要です。

Sub DefaultValueX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim strOldDefault As String
    Dim rstEmployees As Recordset
    Dim strMessage As String
    Dim strCode As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind.TableDefs!Employees

    ' 元の DefaultValue に関する情報を格納して
    ' プロパティに新しい値を設定します。
    strOldDefault = _
        tdfEmployees.Fields!PostalCode.DefaultValue
    tdfEmployees.Fields!PostalCode.DefaultValue = "98052"

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    With rstEmployees
        ' Recordset に新しいレコードを追加します。
        .AddNew
        !FirstName = "Bruce"
        !LastName = "Oberg"

        ' ユーザーからの入力を取得します。
        ' ユーザーが値を入力すると
        ' フィールドにそのデータが設定されます。
        ' ユーザーからの入力がない場合には
        ' フィールドには DefaultValue の情報が設定されます。
        strMessage = "Enter postal code for " & vbCr & _
            !FirstName & " " & !LastName & ":"
        strCode = DefaultPrompt(strMessage, !PostalCode)
        If strCode <> "" Then !PostalCode = strCode
        .Update

        ' 新しいレコードに進み、そのレコードに関する情報を出力します。
        .Bookmark = .LastModified
        Debug.Print "    FirstName = " & !FirstName
        Debug.Print "    LastName = " & !LastName
        Debug.Print "    PostalCode = " & !PostalCode

        ' ここではデモとして新しいレコードを削除します。
        .Delete
        .Close
    End With

    ' ここではデモとして
    ' DefaultValue プロパティを元の値に戻します。
    tdfEmployees.Fields!PostalCode.DefaultValue = _
        strOldDefault

    dbsNorthwind.Close

End Sub

Function DefaultPrompt(strPrompt As String, _
    fldTemp As Field) As String

    Dim strFullPrompt As String

    ' 指定した Field オブジェクトに
    ' 新しい DefaultValue の設定を促します。
    strFullPrompt = strPrompt & vbCr & _
        "[Default = " & fldTemp.DefaultValue & _
        ", Cancel - use default]"
    DefaultPrompt = InputBox(strFullPrompt)

End Function


Description プロパティ (DAO)

Description プロパティ

エラーに対応するエラー メッセージを返します。これは、Error オブジェクトに対する既定のプロパティです。

戻り値

戻り値は、文字列型 (String) の値です。この値は、エラーに関する説明です。

解説

Description プロパティは、エラーについての簡単な説明で構成されています。このプロパティを使用して、カスタム アプリケーションで処理できないエラーまたは処理しないエラーをユーザーに警告します。


Error オブジェクト、Errors コレクション、および Description、Number、Source、HelpFile、HelpContext の各プロパティの使用例 (DAO)

Error オブジェクト、Errors コレクション、および Description、Number、Source、HelpFile、HelpContext の各プロパティの使用例

次の例では、エラー トラップを設定し、返された Error オブジェクトの Description、Number、Source、HelpContext、および HelpFile の各プロパティを表示します。

Sub DescriptionX()

    Dim dbsTest As Database

    On Error GoTo ErrorHandler

    ' 故意にエラーを起こします。
    Set dbsTest = OpenDatabase("NoDatabase")

    Exit Sub

ErrorHandler:
    Dim strError As String
    Dim errLoop As Error

    ' Errors コレクションを列挙し
    ' 各 Error オブジェクトのプロパティを表示します。
    For Each errLoop In Errors
        With errLoop
            strError = _
                "Error #" & .Number & vbCr
            strError = strError & _
                "    " & .Description & vbCr
            strError = strError & _
                "    (Source: " & .Source & ")" & vbCr
            strError = strError & _
                "Press F1 to see topic " & .HelpContext & vbCr
            strError = strError & _
                "    in the file " & .HelpFile & "."
        End With
        MsgBox strError
    Next

    Resume Next

End Sub


DesignMasterID プロパティ (DAO)

DesignMasterID プロパティ

レプリカ セットのデザイン マスターを一意に識別する 16 バイトの値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、GUID 型 (GUID) の値です。デザイン マスターを一意に識別します。

解説

DesignMasterID プロパティの設定は、現在のデザイン マスターを移動する必要がある場合にのみ行います。このプロパティを設定すると、レプリカ セットの指定したレプリカがデザイン マスターになります。

注意 レプリカ セットに 2 つ目のデザイン マスターを作成しないでください。2 つ目のデザイン マスターが存在すると、データが失われることがあります。

非常事態が起きた場合、たとえば、デザイン マスターが消去または破損した場合は、このプロパティを現在のレプリカに設定することができます。ただし、レプリカ セットにほかのデザイン マスターが既に存在する場合、別のレプリカにこのプロパティを設定すると、レプリカが 2 つの統合不可能なセットに分割され、その後のデータの同期をとることができなくなることがあります。

あるレプリカをレプリカ セットの新しいデザイン マスターにする場合、レプリカの DesignMasterID プロパティを設定する前に、レプリカ セットのすべてのレプリカと同期をとってください。デザイン マスターにするためには、レプリカを排他モードで開く必要があります。

読み取り専用で指定したレプリカをデザイン マスターにする場合、そのレプリカは読み取り/書き込みが可能になります。古いデザイン マスターも読み取り/書き込み可能のままです。

DesignMasterID プロパティの設定値は、MSysRepInfo システム テーブルに格納されます。


DesignMasterID プロパティの使用例 (DAO/Microsoft Jet)

DesignMasterID プロパティの使用例

次の例では、DesignMasterID プロパティを別のデータベースの Replica ID プロパティに設定し、そのデータベースをレプリカ セットのデザイン マスターにします。古いデザイン マスターと新しいデザイン マスターは同期がとられ、デザインの変更を更新します。このコードを動作させるには、適切な名前とパス含んでいるデザイン マスターとレプリカを作成する必要があります。そして、古いデザイン マスターと新しいデザイン マスター以外のデータベースから、このコードを実行してください。

Sub SetNewDesignMaster(strOldDM as String, _
    strNewDM as String)

    Dim dbsOld As Database
    Dim dbsNew As Database

    ' 排他モードでカレントのデザイン マスターを開きます。
    Set dbsOld = OpenDatabase(strOldDM, True)

    ' 新しいデザイン マスターになるデータベースを開きます。
    Set dbsNew = OpenDatabase(strNewDM)

    ' 新しいデータベースをデザイン マスターに設定します。
    dbsOld.DesignMasterID = dbsNew.ReplicaID

    ' 双方向の変換を設定して、古いデザイン マスターと
    ' 新しいデザイン マスターの同期をとります。
    dbsOld.Synchronize strNewDM, dbRepImpExpChanges
    dbsOld.Close
    dbsNew.Close

End Sub


Direction プロパティ (DAO)

Direction プロパティ

Parameter オブジェクトが、入力パラメータ、出力パラメータ、入出力パラメータ、またはプロシージャからの戻り値のうちどれを表しているかを示す値を設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。次の表に示す定数のいずれかになります。

定数 | 説明
dbParamInput | (既定値) 情報をプロシージャに渡します。
dbParamInputOutput | プロシージャに情報を渡すと共に、プロシージャから情報を取得します。
dbParamOutput | プロシージャからの情報を SQL の出力パラメータとして返します。
dbParamReturnValue | プロシージャからの戻り値を渡します。

解説

Direction プロパティは、使用するパラメータが入力パラメータ、出力パラメータ、入出力パラメータ、またはプロシージャからの戻り値のいずれであるかを指定します。ODBC ドライバには、SELECT ステートメントやプロシージャ呼び出しのパラメータの方向に関する情報を示さないものがあります。このような場合は、クエリーの実行前にその方向を設定する必要があります。

たとえば、次のプロシージャは、"get_employees" という名前のストアド プロシージャから値を返します。

{? = call get_employees}

この呼び出しによって、1 つのパラメータ、つまり戻り値が生成されます。QueryDef メソッドを実行する場合は、その前にこのパラメータの方向を dbParamOutput または dbParamReturnValue に設定しておく必要があります。

パラメータの取得や設定を行う場合や、QueryDef メソッドを実行する場合は、その前に、dbParamInput 以外のすべてのパラメータの方向を設定しておく必要があります。

戻り値には dbParamReturnValue を使用する必要がありますが、ドライバやサーバーでこの定数がサポートされていない場合は、代わりに dbParamOutput を使用することができます。

メモ Microsoft SQL Server 6.0 ドライバは、すべてのプロシージャ パラメータについて Direction プロパティを自動的に設定します。ただし、ODBC ドライバについては、すべてのドライバがクエリー パラメータの方向を決定できるわけではありません。そのような場合は、パラメータの方向を設定してからクエリーを実行する必要があります。


Direction プロパティの使用例 (DAO/ODBCDirect)

Direction プロパティの使用例

次の例では、Direction プロパティを使用して、ODBC データ ソースにクエリーのパラメータを設定します。

Sub DirectionX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim qdfTemp As QueryDef
    Dim rstTemp As Recordset
    Dim strSQL As String
    Dim intLoop As Integer

    ' ODBC ワークスペースを作成して
    ' Microsoft SQL Server データベースとの接続を開きます。
    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' SQL 文字列を、ストアド プロシージャ getempsperjob を
    ' 呼び出すように設定します。
    strSQL = "{ call getempsperjob (?, ?) }"

    Set qdfTemp = conMain.CreateQueryDef("", strSQL)

    With qdfTemp
        ' 2 つのクエリー パラメータが、ストアド プロシージャに
        ' 情報を渡すだけであることを指示します。
        .Parameters(0).Direction = dbParamInput
        .Parameters(1).Direction = dbParamInput

        ' 最初のパラメータ値を代入します。
        .Parameters(0) = "0877"
        .Parameters(1) = 0

        Set rstTemp = .OpenRecordset()

        With rstTemp
            ' 2 番目のパラメータに有効なすべての値でループします。
            ' 値ごとにレコード セットに再クエリーを行い
            ' 正しい結果を得てからレコード セットの内容を表示します。
            For intLoop = 1 To 14
                qdfTemp.Parameters(1) = intLoop
                .Requery
                Debug.Print "Publisher = " & _
                    qdfTemp.Parameters(0) & _
                    ", job = " & intLoop
                Do While Not .EOF
                    Debug.Print , .Fields(0), .Fields(1)
                    .MoveNext
                Loop
            Next intLoop
            .Close
        End With

    End With

    conMain.Close
    wrkMain.Close

End Sub


DistinctCount プロパティ (DAO)

DistinctCount プロパティ

関連付けられたテーブルに含まれている Index オブジェクトの一意な値の数を返します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、長整数型 (Long) の値です。

解説

DistinctCount プロパティを調べると、インデックスが持つ一意な値やキーの数を確認できます。重複する値が有効なインデックスでは同じ値が複数存在しますが、DistinctCount プロパティでは各キーを 1 回だけ数えます。DistinctCount プロパティの情報は、インデックス情報を参照してデータ アクセスを最適化するアプリケーションで役立ちます。一意な値の数は、Index オブジェクトの "基数" と呼ばれることもあります。

DistinctCount プロパティは、常に実際のキーの数を反映しているとは限りません。たとえば、トランザクションのロールバックによる変更はすぐには DistinctCount プロパティに反映されません。また、一意なキーを持ったレコードを削除しても、すぐには DistinctCount プロパティの値には反映されません。数値は、CreateIndex メソッドを使用した直後に正確な値になります。


DistinctCount プロパティの使用例 (DAO/Microsoft Jet)

DistinctCount プロパティの使用例

次の例では、DistinctCount プロパティを使用して、Index オブジェクトの一意な値の数を識別する方法を表示しています。ただし、この値は、Index オブジェクトの作成直後にのみ有効です。テーブルのキーを変更しなかったり、またはキーを追加するのみで削除しなかった場合、値は有効ですが、それ以外の操作を行った場合などには、その値が有効であるかどうかは保証できません。このプロシージャを何度も実行すると、既存の Index オブジェクトの DistinctCount プロパティの値がどのように変わるかを確認することができます。

Sub DistinctCountX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim idxCountry As Index
    Dim idxLoop As Index
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind!Employees

    With tdfEmployees
        ' 新しく Index オブジェクトを作成して
        ' Employees テーブルに追加します。
        Set idxCountry = .CreateIndex("CountryIndex")
        idxCountry.Fields.Append _
            idxCountry.CreateField("Country")
        .Indexes.Append idxCountry

        ' 新しく DistinctCount データを利用するには
        ' コレクションを更新する必要があります。
        .Indexes.Refresh

        ' Indexes コレクションを列挙し
        ' カレントの DistinctCount の値を表示します。
        Debug.Print "Indexes before adding new record"
        For Each idxLoop In .Indexes
            Debug.Print "    DistinctCount = " & _
                idxLoop.DistinctCount & ", Name = " & _
                idxLoop.Name
        Next idxLoop

        Set rstEmployees = _
            dbsNorthwind.OpenRecordset("Employees")

        ' Employees テーブルに新しいレコードを追加します。
        With rstEmployees
            .AddNew
            !FirstName = "April"
            !LastName = "LaMonte"
            !Country = "Canada"
            .Update
        End With

        ' Indexes コレクションを列挙し
        ' 修正した DistinctCount の値を表示します。
        Debug.Print "Indexes after adding new record and " & _
            "refreshing Indexes"
        .Indexes.Refresh
        For Each idxLoop In .Indexes
            Debug.Print "    DistinctCount = " & _
                idxLoop.DistinctCount & ", Name = " & _
                idxLoop.Name
        Next idxLoop

        ' ここではデモとして新しいレコードを削除します。
        With rstEmployees
            .Bookmark = .LastModified
            .Delete
            .Close
        End With

        ' ここではデモとして新しい Indexes コレクションを削除します。
        .Indexes.Delete idxCountry.Name
    End With

    dbsNorthwind.Close

End Sub


EditMode プロパティ (DAO)

EditMode プロパティ

カレント レコードの編集状態を示す値を返します。

戻り値

戻り値は、長整数型 (Long) の値です。この値は、編集状態を示します。次の表に、戻り値を示します。

定数 | 説明
dbEditNone | 編集の操作は行われていません。
dbEditInProgress | Edit メソッドが呼び出されています。カレント レコードはコピー バッファにあります。
dbEditAdd | AddNew メソッドが呼び出されています。コピー バッファのカレント レコードはデータベースに保存されていない新しいレコードです。

解説

入力検査中のエラーなどによって編集プロセスが妨げられた場合などに、EditMode プロパティが役立ちます。EditMode プロパティの値を使用して、Update メソッドまたは CancelUpdate メソッドのどちらを使用すべきかを調べることができます。

また、カレント ページがロックされているかどうかを調べるには、LockEdits プロパティの設定値が True であり、EditMode プロパティの設定値が定数 dbEditInProgress であるかどうかを確認します。


EditMode プロパティの使用例 (DAO)

EditMode プロパティの使用例

次の例では、異なった状況での EditMode プロパティの値を表示しています。このプロシージャを実行するには、EditModeOutput 関数が必要です。

Sub EditModeX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    ' 異なった編集状況での EditMode プロパティの値を表示します。
    With rstEmployees
        EditModeOutput "Before any Edit or AddNew:", .EditMode
        .Edit
        EditModeOutput "After Edit:", .EditMode
        .Update
        EditModeOutput "After Update:", .EditMode
        .AddNew
        EditModeOutput "After AddNew:", .EditMode
        .CancelUpdate
        EditModeOutput "After CancelUpdate:", .EditMode
        .Close
    End With

    dbsNorthwind.Close

End Sub

Function EditModeOutput(strTemp As String, _
    intEditMode As Integer)

    ' EditMode プロパティの値に基づいたレポートを出力します。
    Debug.Print strTemp
    Debug.Print "    EditMode = ";

    Select Case intEditMode
        Case dbEditNone
            Debug.Print "dbEditNone"
        Case dbEditInProgress
            Debug.Print "dbEditInProgress"
        Case dbEditAdd
            Debug.Print "dbEditAdd"
    End Select

End Function


FieldSize プロパティ (DAO)

FieldSize プロパティ

Recordset オブジェクトの Fields コレクションにあるメモ型 (Memo) または ロング バイナリ型 (LongBinary) の Field オブジェクトのうち、メモリ内ではなくデータベース内で使用されるバイト数を返します。

戻り値

戻り値は、メモ型 (Memo) フィールドの場合は文字数、ロング バイナリ型 (Long Binary) フィールドの場合はバイト数を示す長整数型 (Long) の値です。

解説

FieldSize プロパティを AppendChunk および GetChunk メソッドと共に使用すると、サイズの大きなフィールドを操作することができます。

ロング バイナリ型 (Long Binary) またはメモ型 (Memo) のフィールドのサイズは 64KB を超えることがあります。このため、長整数型 （Long) の値を格納するのに十分な大きさを持つ変数に、FieldSize プロパティが返す値を割り当ててください。

メモ型 (Memo) およびロング バイナリ型 (Long Binary) 以外の Field オブジェクトのサイズを調べるには、Size プロパティを使用します。

メモ ODBCDirect ワークスペースでは、次のいずれかに該当する場合、FieldSize プロパティを使用することはできません。

  • データベース サーバーまたは ODBC ドライバがサーバー側カーソルをサポートしていない場合。

  • ODBC カーソル ライブラリを使用している場合 (DefaultCursorDriver プロパティが dbUseODBC に設定されているか、または dbUseDefault にサーバーがサーバー側カーソルをサポートしていない場合)。

  • カーソルなしクエリーを使用している場合 (DefaultCursorDriver プロパティが dbUseNoCursor に設定されている場合)。

たとえば、Microsoft SQL Server Version 4.21 ではサーバー側カーソルがサポートされていないため、FieldSize プロパティを使用することはできません。

FieldSize プロパティおよび VBA Len() または LenB() 関数は、同じ文字列の長さと異なる値を返す場合があります。文字列は、多重バイト文字セット (MBCS) の形式で Jet データベースに保存されますが、Unicode 形式で VBA を通じて使用されます。通常、Len() 関数は文字数を返し、LenB は文字数の 2 倍の値を返します。これは、Unicode では各文字に対して 2 バイトが使用されるためです。文字列に MBCS 文字が含まれる場合、FieldSize は前述の値の範囲内で値を返します。たとえば、文字列に通常の文字が 3 文字、MBCS 文字が 2 文字含まれているとします。Len() は 5 を返し、LenB() は 10 を返します。FieldSize は 7 を返します。この数値は、通常の各文字を 1、各 MBCS 文字を 2 として計算した場合の合計です。


FieldSize プロパティの使用例 (DAO)

FieldSize プロパティの使用例

次の例では、FieldSize プロパティを使用して、2 つの異なるテーブルにあるメモ型 (Memo) とロング バイナリ型 (Long Binary) の Field オブジェクトで使用するバイト数の一覧を示しています。

Sub FieldSizeX()

    Dim dbsNorthwind As Database
    Dim rstCategories As Recordset
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstCategories = _
        dbsNorthwind.OpenRecordset("Categories", _
        dbOpenDynaset)
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    Debug.Print _
        "Field sizes from records in Categories table"

    With rstCategories
        Debug.Print "    CategoryName - " & _
            "Description (bytes) - Picture (bytes)"

    ' Categories Recordset のレコードを列挙して
    ' 各レコードのピクチャ フィールドのサイズをバイト数で示します。
        Do While Not .EOF
            Debug.Print "        " & !CategoryName & " - " & _
                !Description.FieldSize & " - " & _
                !Picture.FieldSize
            .MoveNext
        Loop

        .Close
    End With

    Debug.Print "Field sizes from records in Employees table"

    With rstEmployees
        Debug.Print "    LastName - Notes (bytes) - " & _
            "Photo (bytes)"

    ' Employees Recordset のレコードを列挙して
    ' 各レコードのピクチャ フィールドのサイズをバイト数で出力します。
        Do While Not .EOF
            Debug.Print "        " & !LastName & " - " & _
                !Notes.FieldSize & " - " & !Photo.FieldSize
            .MoveNext
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


Filter プロパティ (DAO)

Filter プロパティ

次に開かれる Recordset オブジェクトに含まれるレコードを決定する値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。SQL ステートメントの WHERE 句から予約語 WHERE を除いた値になります。

解説

ダイナセット タイプ、スナップショット タイプ、または前方スクロール タイプの Recordset オブジェクトにフィルタを適用するには、Filter プロパティを使用します。

Filter プロパティを使用すると、既存の Recordset オブジェクトに基づいて新しい Recordset オブジェクトを開く場合、既存の Recordset オブジェクトから取得するレコードを制限することができます。

通常は、WHERE 句を含む SQL ステートメントを使用して新しい Recordset オブジェクトを開く方が、より早く必要なレコードを取得することができます。

日付を含むフィールドにフィルタを適用する場合、Jet データベース エンジンの英語版を使用していない場合でも、米国式の日付書式 (月-日-年) を使用してください。この場合、たとえば strMonth & "-" & strDay & "-" & strYear のように、文字列を連結して日付をまとめる必要があります。米国式の日付書式を使用しないと、データは指定したとおりに抽出されません。

整数値以外の文字を連結した文字列をプロパティに設定する場合に、システム パラメータで米国式 10 進文字以外のカンマなどの文字を指定していると (たとえば、strFilter = "PRICE > " & lngPrice で lngPrice = 125,50 というような場合)、次の Recordset オブジェクトを開こうとしたときに、エラーが発生します。これは、文字列の連結の際に、数値はシステムの既定の 10 進文字を使用して文字列に変換されますが、Jet SQL は米国式の 10 進文字しか認識しないためです。


Filter プロパティの使用例 (DAO/Microsoft Jet)

Filter プロパティの使用例

次の例では、Filter プロパティを使用して、指定した条件に基づいて既存の Recordset から新しく Recordseｔ を作成します。このプロシージャを実行するには、FilterField 関数が必要です。

Sub FilterX()

    Dim dbsNorthwind As Database
    Dim rstOrders As Recordset
    Dim intOrders As Integer
    Dim strCountry As String
    Dim rstOrdersCountry As Recordset
    Dim strMessage As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstOrders = dbsNorthwind.OpenRecordset("Orders", _
        dbOpenSnapshot)

    ' Recordset を配置します。
    rstOrders.MoveLast
    intOrders = rstOrders.RecordCount

    ' ユーザーからの入力を取得します。
    strCountry = Trim(InputBox( _
        "Enter a country to filter on:"))

    If strCountry <> "" Then
        ' フィルタを適用した Recordset を開きます。
        Set rstOrdersCountry = _
            FilterField(rstOrders, "ShipCountry", strCountry)

        With rstOrdersCountry
            ' Recordset を作成する前に、RecordCount の値を調べます。
            ' 調べない場合には、エラーが起こることがあります。
            If .RecordCount <> 0 Then .MoveLast
            ' 元の Recordset と
            ' フィルタを適用した Recordset の
            ' レコード数を出力します。
            strMessage = "Orders in original recordset: " & _
                vbCr & intOrders & vbCr & _
                "Orders in filtered recordset (Country = '" & _
                strCountry & "'): " & vbCr & .RecordCount
            MsgBox strMessage
            .Close
        End With

    End If

    rstOrders.Close

    dbsNorthwind.Close

End Sub

Function FilterField(rstTemp As Recordset, _
    strField As String, strFilter As String) As Recordset

    ' 指定した Recordset にフィルタを適用して
    ' 新しく Recordset を開きます。
    rstTemp.Filter = strField & " = '" & strFilter & "'"
    Set FilterField = rstTemp.OpenRecordset

End Function

メモ フィルタを適用した rstOrders の効果を知るには、Filter プロパティを設定し、rstOrders に基づいた 2 番目の Recordset オブジェクトを開きます。

メモ 選択するデータが分かっている場合には、SQL ステートメントを使用して Recordset を作成するほうが、より効率的です。次の例では、Recordset を 1 つのみ作成して、特定の国からのレコードを取得する方法を示してします。

Sub FilterX2()

    Dim dbsNorthwind As Database
    Dim rstOrders As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 出荷国に基づいたテーブルからレコードを選択する
    ' Recordset を開きます。
    Set rstOrders = _
        dbsNorthwind.OpenRecordset("SELECT * " & _
        "FROM Orders WHERE ShipCountry = 'USA'", _
        dbOpenSnapshot)

    rstOrders.Close
    dbsNorthwind.Close

End Sub


Foreign プロパティ (DAO)

Foreign プロパティ

Index オブジェクトがテーブルの外部キーを表しているかどうかを示す値を返します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、Index オブジェクトは外部キーを表しています。

解説

外部キーは、主テーブルのすべてのレコードを一意に識別する外部キー側のテーブルの 1 つまたは複数のフィールドから構成されます。

参照整合性を適用するリレーションシップを作成する場合に、Jet データベース エンジンによって外部キー側のテーブルに Index オブジェクトが作成され、Foreign プロパティの値が設定されます。


ForeignName プロパティ (DAO)

ForeignName プロパティ

リレーションシップで、主テーブルのフィールドに対応する外部キー側のテーブルの Field オブジェクト名を指定する値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。評価結果が TableDef オブジェクトの Fields コレクションに含まれる Field オブジェクト名を示します。

Database オブジェクトに追加されていない Field オブジェクトを持つ Relation オブジェクトでは、ForeignName プロパティの読み取り/書き込みが可能です。いったん Relation オブジェクトがデータベースに追加されると、ForeignName プロパティは読み取り専用となります。

解説

ForeignName プロパティを使用することができるのは、Relation オブジェクトの Fields コレクションに格納された Field オブジェクトのみです。

リレーションシップの主テーブルと外部キー側のテーブルの間で対応するフィールド名は、Field オブジェクトの Name プロパティと ForeignName プロパティ設定を使用して指定します。リレーションシップの主テーブルと外部キー側のテーブルは、Relation オブジェクトの Table プロパティと ForeignTable プロパティを使用して指定します。

たとえば、有効な部品コードの一覧が "部品コード" というフィールド名で [部品] テーブルに保存されている場合、[受注アイテム] テーブルとの間にリレーションシップを設定すると、[部品] テーブルに存在しない部品コードは [受注アイテム] テーブルに入力できません。入力した部品コードが [部品] テーブルに存在せず、Relation オブジェクトの Attributes プロパティに dbRelationDontEnforce を設定していない場合、トラップ可能なエラーが発生します。

この場合、[受注アイテム] テーブルが外部キー側のテーブルになります。したがって、Relation オブジェクトの ForeignTable プロパティには "受注アイテム" が設定され、Relation オブジェクトの Table プロパティには "部品" が設定されます。Relation オブジェクトの Fields コレクションにある Field オブジェクトの Name プロパティと ForeignName プロパティには、共に "部品コード" が設定されます。

次の図に、上で説明したリレーションシップを示します。


ForeignName、ForeignTable、および Table プロパティの使用例 (DAO/Microsoft Jet)

ForeignName、ForeignTable、および Table プロパティの使用例

次の例では、Table、ForeignTable、および ForeignName プロパティが、どのように 2 つのテーブル間の Relation の項を定義するかを示しています。

Sub ForeignNameX()

    Dim dbsNorthwind As Database
    Dim relLoop As Relation

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    Debug.Print "Relation"
    Debug.Print "                 Table - Field"
    Debug.Print "    Primary (One)     ";
    Debug.Print ".Table - .Fields(0).Name"
    Debug.Print "    Foreign (Many)   ";
    Debug.Print ".ForeignTable - .Fields(0).ForeignName"

    ' データベース Northwind の Relations コレクションを列挙し
    ' Relation オブジェクトとその Field オブジェクトの
    ' プロパティの値に関するレポートを出力します。
    For Each relLoop In dbsNorthwind.Relations
        With relLoop
            Debug.Print
            Debug.Print .Name & " Relation"
            Debug.Print "                 Table - Field"
            Debug.Print "    Primary (One)     ";
            Debug.Print .Table & " - " & .Fields(0).Name
            Debug.Print "    Foreign (Many)   ";
            Debug.Print .ForeignTable & " - " & _
                .Fields(0).ForeignName
        End With
    Next relLoop

    dbsNorthwind.Close

End Sub


ForeignTable プロパティ (DAO)

ForeignTable プロパティ

リレーションシップの外部キー側のテーブル名を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。評価結果が Database オブジェクトの TableDefs コレクションに含まれるテーブル名を示します。このプロパティは、まだコレクションに追加されていない新しい Relation オブジェクトでは、読み取り/書き込みが可能ですが、Relations コレクションの既存の Relation オブジェクトでは、読み取り専用です。

解説

Relation オブジェクトの ForeignTable プロパティの設定値は、外部キー側のテーブルやクエリーを表す TableDef オブジェクトまたは QueryDef オブジェクトの Name プロパティの設定値と同じです。Table プロパティの設定値は、主テーブルまたはクエリーを表す TableDef オブジェクトまたは QueryDef オブジェクトの Name プロパティの設定値と同じです。

たとえば、有効な部品コードの一覧が "部品コード" というフィールド名で [部品] テーブルに保存されている場合、[受注アイテム] テーブルとの間にリレーションシップを設定すると、[部品] テーブルに存在しない部品コードは [受注アイテム] テーブルに入力できません。入力した部品コードが [部品] テーブルに存在せず、Relation オブジェクトの Attributes プロパティを dbRelationDontEnforce に設定していない場合、トラップ可能なエラーが発生します。

この場合、[部品] テーブルが外部キー側のテーブルになります。したがって、Relation オブジェクトの Table プロパティには "部品" が設定され、Relation オブジェクトの ForeignTable プロパティには "受注アイテム" が設定されます。Relation オブジェクトの Fields コレクションにある Field オブジェクトの Name プロパティと ForeignName プロパティには、共に "部品コード" が設定されます。

次の図に、上で説明したリレーションシップを示します。


HelpContext、HelpFile プロパティ (DAO)

HelpContext、HelpFile プロパティ

  • HelpContext プロパティ -ヘルプ ファイルのトピックを表すコンテキスト ID を長整数型 (Long) の変数で返します。

  • HelpFile プロパティ - 目的のヘルプ ファイルへのフル パスを文字列型 (String) の値で返します。

解説

ヘルプ ファイルを HelpFile プロパティに指定すると、HelpContext プロパティでは自動的にヘルプ トピックを識別して表示します。

メモ 一般的なエラーを処理するプロシージャをアプリケーションに作成する必要があります。オブジェクトを使用してプログラミングする場合には、そのオブジェクトのヘルプ ファイルが提供するヘルプを使用して、より高度な処理を行うことができます。また、エラーが回復不能である場合に、ユーザーに有意なメッセージを表示することもできます。


IgnoreNulls プロパティ (DAO)

IgnoreNulls プロパティ

インデックス フィールドに Null 値を持つレコードがインデックスを持つかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、Null 値のフィールドはインデックスを持ちません。コレクションにまだ追加されていない新しい Index オブジェクトでは、このプロパティの読み取り/書き込みが可能です。Indexes コレクションの既存の Index オブジェクトでは、読み取り専用です。

解説

レコードの検索の処理を高速化するには、フィールドにインデックスを設定します。インデックスが設定されたフィールドに Null 値を入力できるように設定し、多くのレコードに Null 値が入力されることが予想される場合は、その Index オブジェクトの IgnoreNulls プロパティを True に設定すると、インデックスに使用される保存領域を節約できます。

インデックス フィールドに Null 値を持つレコードがインデックスを持つかどうかは、IgnoreNulls プロパティと Required プロパティの設定値によって決まります。

IgnoreNulls | Required | インデックス フィールドの Null 値
True | False | Null 値を入力できますが、インデックスは追加されません。
False | False | Null 値を入力でき、インデックスは追加されます。
True または False | True | Null 値は入力できません。また、インデックスも追加されません。


IgnoreNulls プロパティの使用例 (DAO/Microsoft Jet)

IgnoreNulls プロパティの使用例

次の例では、新しい Index オブジェクトの IgnoreNulls プロパティに、ユーザーからの入力に基づいて、True または False のどちらかの値を設定します。続いて、レコードのキー フィールドが Null 値を含む Recordset での効果を説明します。

Sub IgnoreNullsX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim idxNew As Index
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind!Employees

    With tdfEmployees
        ' 新しく Index オブジェクトを作成します。
        Set idxNew = .CreateIndex("NewIndex")
        idxNew.Fields.Append idxNew.CreateField("Country")

        ' ユーザーからの入力に基づいて
        ' 新しい Index オブジェクトの IgnoreNulls プロパティを設定します。
        Select Case MsgBox("Set IgnoreNulls to True?", _
            vbYesNoCancel)
            Case vbYes
                idxNew.IgnoreNulls = True
            Case vbNo
                idxNew.IgnoreNulls = False
            Case Else
                dbsNorthwind.Close
                End
        End Select

        ' Employees テーブルの Indexes コレクションに
        ' 新しい Index オブジェクトを追加します。
        .Indexes.Append idxNew
        .Indexes.Refresh
    End With

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        ' Employees テーブルに新しいレコードを追加します。
        .AddNew
        !FirstName = "Gary"
        !LastName = "Haarsager"
        .Update

        ' 新しいインデックスを使用して
        ' レコードの並び順を設定します。
        .Index = idxNew.Name
        .MoveFirst

        Debug.Print "Index = " & .Index & _
            ", IgnoreNulls = " & idxNew.IgnoreNulls
        Debug.Print "    Country - Name"

        ' Recordset を列挙します。
        ' IgnoreNulls プロパティの値は、出力の際に追加されたレコードが
        ' 表示される場合に決まります。
        Do While Not .EOF
            Debug.Print "        " & _
                IIf(IsNull(!Country), "[Null]", !Country) & _
                " - " & !FirstName & " " & !LastName
            .MoveNext
        Loop

        ' ここではデモとして新しいレコードを削除します。
        .Index = ""
        .Bookmark = .LastModified
        .Delete
        .Close
    End With

    ' ここではデモとして新しいインデックスを削除します。
    tdfEmployees.Indexes.Delete idxNew.Name
    dbsNorthwind.Close

End Sub


Index プロパティ (DAO)

Index プロパティ

テーブル タイプの Recordset オブジェクトの現在の Index オブジェクト名を示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。評価結果が TableDef オブジェクト、またはテーブル タイプの Recordset オブジェクトの TableDef オブジェクトの Indexes コレクションに含まれる Index オブジェクト名を示します。

解説

ベース テーブルのレコードは、順不同で保存されています。Index プロパティを設定すると、データベースから取得するレコードの順序を変更することができます。ただし、レコードを保存する順序には影響しません。

指定した Index オブジェクトはあらかじめ定義されていなければなりません。Index プロパティに存在しない Index オブジェクトが設定されている場合や、Index プロパティが設定されていない状態で Seek メソッドを使用した場合、トラップ可能なエラーが発生します。

TableDef オブジェクトから作成したテーブル タイプの Recordset オブジェクトで使用可能な Index オブジェクトを確認するには、その TableDef オブジェクトの Indexes コレクションを調べます。

テーブルにインデックスを新しく設定するには、新しい Index オブジェクトを作成してプロパティを設定します。次に、元の TableDef オブジェクトの Indexes コレクションにその Index オブジェクトを追加してから、Recordset オブジェクトをもう一度開きます。

テーブル タイプの Recordset オブジェクトから取得するレコードは、元の TableDef オブジェクトで定義されているインデックスによってのみ並べ替えることができます。それ以外の順序でレコードを並べ替えるには、SQL ステートメントの ORDER BY 句を使用して、ダイナセット タイプ、スナップショット タイプ、または前方スクロール タイプの Recordset オブジェクトを開きます。

メモ

  • テーブルにインデックスを作成する必要はありません。ただし、インデックスが設定されていない大きなテーブルでは、特定のレコードへのアクセスや Recordset オブジェクトの作成に時間がかかる場合があります。一方、あまり多くのインデックスを作成すると、更新、追加、および削除処理を行う場合にすべてのインデックスが自動的に更新されるため、処理速度が低下します。

  • インデックスのないテーブルから取得したレコードは、不特定の順序で返されます。

  • Index オブジェクトの各 Field オブジェクトの Attributes プロパティによって、レコードの順序が決まり、その結果、インデックスを使用するためのアクセス方法が決まります。

  • 一意なインデックスを使用すると、レコードの検索を最適化できます。

  • インデックスを使用してもベース テーブルの物理的な順序には影響しません。インデックスは、特定のインデックスが選択された際および Recordset オブジェクトが開かれる際に、テーブル タイプの Recordset オブジェクトがレコードにアクセスする方法にのみ影響を与えます。


Index プロパティの使用例 (DAO/Microsoft Jet)

Index プロパティの使用例

次の例では、Index プロパティを使用して、テーブル タイプの Recordset オブジェクトの異なるレコードの並び順を設定します。

Sub IndexPropertyX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim rstEmployees As Recordset
    Dim idxLoop As Index

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")
    Set tdfEmployees = dbsNorthwind.TableDefs!Employees

    With rstEmployees

        ' Employees テーブルの Indexes コレクションを列挙します。
        For Each idxLoop In tdfEmployees.Indexes
            .Index = idxLoop.Name
            Debug.Print "Index = " & .Index
            Debug.Print "    EmployeeID - PostalCode - Name"
            .MoveFirst

            ' Recordset を列挙して
            ' レコードの並び順を示します。
            Do While Not .EOF
                Debug.Print "        " & !EmployeeID & " - " & _
                    !PostalCode & " - " & !FirstName & " " & _
                    !LastName
                .MoveNext
            Loop

        Next idxLoop

        .Close
    End With

    dbsNorthwind.Close

End Sub


Inherit プロパティ (DAO)

Inherit プロパティ

新しい Document オブジェクトが Permissions プロパティの既定値を継承するかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、Document オブジェクトは Permissions プロパティの既定値を継承します。

解説

Inherit プロパティを Permissions プロパティと共に使用すると、新しい Document オブジェクトを作成した場合に、その Document オブジェクトに自動的に与えられる権限を定義できます。Inherit プロパティを True に設定した後で Container オブジェクトに権限を設定すると、その Container オブジェクトで新しく作成されるすべての Document オブジェクトに同じ権限が設定されます。この方法は、オブジェクトの権限をあらかじめ設定しておく場合に役立ちます。

Inherit プロパティを設定しても、Container オブジェクトの既存の Document オブジェクトの設定は変更されません。Inherit プロパティを True に設定し、新しい権限を設定しても、すべての既存の Document オブジェクトの設定は変更されません。Inherit プロパティを設定した後で、新しく作成した Document オブジェクトにのみ、Permissions プロパティの設定値が継承されます。


Inherited プロパティ (DAO)

Inherited プロパティ

Property オブジェクトが元のオブジェクトから継承されているかどうかを示す値を返します。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、Property オブジェクトは継承されます。定義済みプロパティを表す組み込み Property オブジェクトでは常に False が返されます。ODBCDirect ワークスペースでは、このプロパティは常に False に設定されます。

解説

Inherited プロパティを使用すると、ユーザー定義の Property オブジェクトが、それを適用するオブジェクト用に作成されたのか、または別のオブジェクトから継承されたプロパティなのかを確認することができます。たとえば、QueryDef オブジェクト用に新しく Property を作成し、その QueryDef オブジェクトから Recordset オブジェクトを開くと、この新しいプロパティは Recordset オブジェクトの Properties コレクションの一部になり、その Inherited プロパティは True に設定されます。これは、Inherited プロパティが Recordset オブジェクト用ではなく、QueryDef オブジェクト用に作成されたためです。


Inherited プロパティの使用例 (DAO)

Inherited プロパティの使用例

次の例では、Inherited プロパティを使用して、ユーザー定義タイプの Property オブジェクトが、Recordset に対して作成されたのか、または処理中のオブジェクトに対して作成されたのかを確認します。

Sub InheritedX()

    Dim dbsNorthwind As Database
    Dim tdfTest As TableDef
    Dim rstTest As Recordset
    Dim prpNew As Property
    Dim prpLoop As Property

    ' 保存された TableDef オブジェクトに対して新しいプロパティを作成します。
    ' 続いて、TableDef オブジェクトからレコード セットを開きます。
    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfTest = dbsNorthwind.TableDefs(0)
    Set prpNew = tdfTest.CreateProperty("NewProperty", _
        dbBoolean, True)
    tdfTest.Properties.Append prpNew
    Set rstTest = tdfTest.OpenRecordset(dbOpenForwardOnly)

    ' TableDef の新しいプロパティ名と
    ' Inherited プロパティを表示します。
    Debug.Print "NewProperty of " & tdfTest.Name & _
        " TableDef:"
    Debug.Print "    Inherited = " & _
        tdfTest.Properties("NewProperty").Inherited

    ' Recordset の新しいプロパティ名と
    ' Inherited プロパティを表示します。
    Debug.Print "NewProperty of " & rstTest.Name & _
        " Recordset:"
    Debug.Print "    Inherited = " & _
        rstTest.Properties("NewProperty").Inherited

    ' ここではデモとして新しい TableDef を削除します。
    tdfTest.Properties.Delete prpNew.Name
    dbsNorthwind.Close

End Sub


IniPath プロパティ (DAO)

IniPath プロパティ

Jet データベース エンジンに関する値を含む Windows のレジストリ キーについての情報を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。Jet データベース エンジンの設定値、または組み込み可能な ISAM データベースに必要なパラメータを含む Windows のレジストリ キーの中のユーザーが提供する部分を示します。

解説

Windows レジストリを使用して Jet データベース エンジンを設定することができます。レジストリを使用すると、組み込み可能な ISAM DLL などのオプションを設定できます。

このオプションを有効にするには、アプリケーションが DAO コードを呼び出す前に、IniPath プロパティを設定しておく必要があります。IniPath プロパティの設定値の適用範囲は、そのアプリケーションに制限されます。適用範囲を変更するには、アプリケーションの再起動が必要です。

また、レジストリを使用して、組み込み可能な ISAM データベース ドライバに初期設定パラメータを設定することもできます。たとえば、Paradox 4.0 を使用するには、IniPath プロパティに適切なパラメータを含むレジストリの一部を設定します。

このプロパティでは、HKEY_LOCAL_MACHINE と HKEY_LOCAL_USER が区別されます。ルート キーがない場合、既定値では HKEY_LOCAL_MACHINE になります。

Jet データベース エンジン 2.5 以前では、初期化情報は .INI ファイルに保存されています。


IniPath プロパティの使用例 (DAO/Microsoft Jet)

IniPath プロパティの使用例

次の例では、IniPath プロパティで Windows レジストリのアプリケーション キーへのパスを設定します。

Sub IniPathX()

    ' IniPath プロパティを変更して、設定情報が
    ' Windows レジストリのほかのセクションを指すようにします。
    Debug.Print "Original IniPath setting = " & _
        IIf(DBEngine.IniPath = "", "[Empty]", _
        DBEngine.IniPath)
    DBEngine.IniPath = _
        "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _
        "Jet\4.0\ISAM Formats\Excel 5.0"
    Debug.Print "New IniPath setting = " & _
        IIf(DBEngine.IniPath = "", "[Empty]", _
        DBEngine.IniPath)

End Sub


IsolateODBCTrans プロパティ (DAO)

IsolateODBCTrans プロパティ

同一の Jet 接続型 ODBC データ ソースを必要とする、複数のトランザクションを分離するかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、同一の ODBC 接続を必要とする複数のトランザクションを分離します。False の場合、同一の ODBC 接続を必要とする複数のトランザクションを分離せずに実行します。既定値は False です。

解説

同一の ODBC データベース接続に対し、複数のトランザクションを同時に待ち状態にする必要がある場合があります。この場合、各トランザクションに対して個別に Workspace オブジェクトを開く必要があります。各 Workspace オブジェクトは個別にデータベースに ODBC 接続することができますが、システムのパフォーマンスが低下します。通常は、トランザクションの分離は必要ないため、1 人のユーザーが開いた複数の Workspace オブジェクトの ODBC 接続は、既定では共有されています。

Microsoft SQL Server のような ODBC サーバーには、単一の接続で複数のトランザクションを同時に設定できないものがあります。このようなデータベースの複数のトランザクションを同時に待ち状態にする必要がある場合は、各 Workspace オブジェクトを開いた直後に、それぞれの IsolateODBCTrans プロパティを True に設定します。これにより、ODBC 接続が各 Workspace オブジェクトに対して強制的に ODBC 接続を個別に行うことができます。


IsolateODBCTrans プロパティの使用例 (DAO/Microsoft Jet)

IsolateODBCTrans プロパティの使用例

次の例では、3 つの ODBCDirect ワークスペースを開いて、それらの IsolateODBCTrans プロパティに True を設定します。この設定を行うことで、同じデータ ソースに対する複数のトランザクション処理を分離して行うことができます。

Sub IsolateODBCTransX()

    DBEngine.DefaultType = dbUseJet

    Dim wrkJet1 As Workspace
    Dim wrkJet2 As Workspace
    Dim wrkJet3 As Workspace

    ' 3 つの ODBCDirect ワークスペースを開いて
    ' 同じ ODBC データ ソースを含んでいるトランザクション処理を分離します。
    Set wrkJet1 = CreateWorkspace("", "admin", "")
    wrkJet1.IsolateODBCTrans = True

    Set wrkJet2 = CreateWorkspace("", "admin", "")
    wrkJet2.IsolateODBCTrans = True

    Set wrkJet3 = CreateWorkspace("", "admin", "")
    wrkJet3.IsolateODBCTrans = True

    wrkJet1.Close
    wrkJet2.Close
    wrkJet3.Close

End Sub


KeepLocal プロパティ (DAO)

KeepLocal プロパティ

データベースがレプリケートされる場合、レプリケートしないテーブル、クエリー、フォーム、レポート、マクロ、またはモジュールの値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

メモ TableDef オブジェクトまたは QueryDef オブジェクトの KeepLocal プロパティを設定または取得するには、CreateProperty メソッドを使用して KeepLocal プロパティを作成し、オブジェクトの Properties コレクションに追加しておく必要があります。

設定値と戻り値

設定値または戻り値は、テキスト型 (Text) の値です。このプロパティを "T" に設定した場合、データベースがレプリケートされるとオブジェクトはローカルのままになります。レプリケート後はオブジェクトに KeepLocal プロパティを使用することはできません。

解説

KeepLocal プロパティを設定すると、ホスト オブジェクトを表している Document オブジェクトの Properties コレクションに KeepLocal プロパティが表示されます。

KeepLocal プロパティを設定する前に、Replicable プロパティの値を確認してください。

データベースがレプリケートされた後は、デザイン マスターまたはレプリカ セット内のほかのレプリカで作成されるすべての新しいオブジェクトは、ローカル オブジェクトになります。ローカル オブジェクトは、それが作成されたレプリカに残り、レプリカ セット全体にはコピーされません。レプリカ セットで新しいレプリカを作成する場合、新しいレプリカには元のレプリカのレプリケート可能なオブジェクトはすべて含まれますが、元のレプリカのローカル オブジェクトは含まれません。

レプリカで新しいオブジェクトを作成してすべてのユーザーが使用できるようにローカルからレプリケート可能に変更する場合、オブジェクトをデザイン マスターで作成またはインポートすることができます。この場合は、すべてのレプリカからローカル オブジェクトを削除しなければなりません。削除しない場合は、デザイン エラーが発生します。オブジェクトがデザイン マスターの一部になった後で、オブジェクトの Replicable プロパティを True に設定してください。

KeepLocal プロパティを設定するオブジェクトは、既にこのプロパティをほかのオブジェクトから継承している場合があります。ただし、ほかのオブジェクトによって設定された値は、ローカルにするオブジェクトには影響しません。それぞれのオブジェクトで明示的にプロパティを設定する必要があります。


KeepLocal プロパティの使用例 (DAO/Microsoft Jet)

KeepLocal プロパティの使用例

次の例は、KeepLocal プロパティを、Nortwind データベースにある Utilities モジュールのためのドキュメント オブジェクトのプロパティ コレクションに追加します。データベースをレプリケート可能にする前に、このプロパティをテーブルなどのオブジェクトに設定します。データベースがデザイン マスターに変換されると、ローカルに指定したオブジェクトは、レプリカ セットのほかのメンバに対して分散されません。使用しているコンピュータ上の適切なディレクトリで、Northwind.mdb へのパスを変更してください。

Sub KeepLocalNWObjectX()

    Dim dbsNorthwind As Database
    Dim docTemp As Document
    Dim prpTemp As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set docTemp = dbsNorthwind.Containers("Modules"). _
        Documents("Utility Functions")
    Set prpTemp = doc.CreateProperty("KeepLocal", _
        dbText, "T")
    docTemp.Properties.Append prpTemp
    dbsNorthwind.Close

End Sub

以下の例では、指定の TableDef オブジェクトで KeepLocal プロパティを "T" に設定します。KeepLocal プロパティが存在しない場合には、KeepLocal プロパティを作成してテーブルの Properties コレクションに追加し、"T" の値を設定します。

Sub SetKeepLocal(tdfTemp As TableDef)

    On Error GoTo ErrHandler

    tdfTemp.Properties("KeepLocal") = "T"

    On Error GoTo 0

    Exit Sub

ErrHandler:

    Dim prpNew As Property

    If Err.Number = 3270 Then
        Set prpNew = tdfTemp.CreateProperty("KeepLocal", _
            dbText, "T")
        tdfTemp.Properties.Append prpNew
    Else
        MsgBox "Error " & Err & ": " & Error
    End If

End Sub


LastModified プロパティ (DAO)

LastModified プロパティ

最後に追加または変更されたレコードを示すブックマークを返します。

戻り値

戻り値は、バイト型 (Byte) の値を持つバリアント型 (Variant) の配列です。

解説

LastModified プロパティを使用すると、最後に追加または更新したレコードに移動することができます。LastModified プロパティは、テーブル タイプおよびダイナセット タイプの Recordset オブジェクトで使用します。Recordset オブジェクトに対してレコードが追加または修正されていない場合、LastModified プロパティは値を持ちません。


LastModified プロパティの使用例 (DAO)

LastModified プロパティの使用例

次の例では、LastModified プロパティを使用してカレント レコードのポインタを、変更されたレコードと新規作成されたレコードに移動します。

Sub LastModifiedX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim strFirst As String
    Dim strLast As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    With rstEmployees
        ' カレント データを格納します。
        strFirst = !FirstName
        strLast = !LastName
        ' カレント データのデータを変更します。
        .Edit
        !FirstName = "Julie"
        !LastName = "Warren"
        .Update
        ' カレント レコードのポインタを
        ' 最近変更、または追加されたレコードに移動します。
        .Bookmark = .LastModified
        Debug.Print _
            "Data in LastModified record after Edit: " & _
            !FirstName & " " & !LastName

        ' ここではデモとして元のデータを削除します。
        .Edit
        !FirstName = strFirst
        !LastName = strLast
        .Update

        ' 新しいレコードを追加します。
        .AddNew
        !FirstName = "Roger"
        !LastName = "Harui"
        .Update
        ' カレント レコードのポインタを
        ' 最近変更、または追加されたレコードに移動します。
        .Bookmark = .LastModified
        Debug.Print _
            "Data in LastModified record after AddNew: " & _
            !FirstName & " " & !LastName

        ' ここでは新しいレコードを削除します。
        .Delete
        .Close
    End With

    dbsNorthwind.Close

End Sub


LockEdits プロパティ (DAO)

LockEdits プロパティ

編集中に有効なロックの種類を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。次の表に、ロック状態の種類を示します。

設定値 | 説明
True | (既定値) 排他的ロックが行われます。Edit メソッドを使用すると、編集するレコードを含む 2KB のページがロックされます。
False | 共有的ロックが行われます。Update メソッドが実行されるまで 2KB のページはロックされません。

解説

LockEdits プロパティは、更新可能な Recordset オブジェクトで使用できます。

ページがロックされると、ほかのユーザーはそのページに含まれるレコードを編集できなくなります。LockEdits プロパティに True を設定してほかのユーザーが既にページをロックしている場合、Edit メソッドを使用するとエラーが発生します。ほかのユーザーはロックされたページからデータを読み取ることができます。

LockEdits プロパティに False を設定してほかのユーザーがページをロックしている場合、Update メソッドを使用するとエラーが発生します。編集中のレコードにほかのユーザーが加えた変更を確認するには、引数を 0 に設定して Move メソッドを使用します。ただし、この操作を行うとそのレコードに対してそれまで行った変更は失われます。

Jet 接続型 ODBC データ ソースでは、LockEdits プロパティは常に False に設定され、共有的ロックが行われます。Jet データベース エンジンで外部データベース サーバーの使用するロック機能を制御することはできません。

メモ Recordset を最初に開く場合、OpenRecordset メソッドの引数 lockedits を設定すると、LockEdits の値をあらかじめ設定できます。引数 lockedits に dbPessimistic を設定すると、LockEdits プロパティは True に設定され、引数 lockedits をほかの値に設定すると、LockEdits プロパティは False に設定されます。


LockEdits プロパティの使用例 (DAO)

LockEdits プロパティの使用例

次の例では、LockEdits プロパティに True を設定して、排他的ロックを説明します。続いて、LockEdits プロパティに False を設定して共有的ロックを説明します。また、この例では、フィールドを修正するために、マルチユーザー環境のデータベースでどのようなエラー処理が必要なのかを説明します。このプロシージャを実行するには、PessimisticLock と OptimisticLock 関数が必要です。

Sub LockEditsX()

    Dim dbsNorthwind As Database
    Dim rstCustomers As Recordset
    Dim strOldName As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstCustomers = _
        dbsNorthwind.OpenRecordset("Customers", _
        dbOpenDynaset)

    With rstCustomers
        ' 元のデータを格納します。
        strOldName = !CompanyName

        If MsgBox("Pessimistic locking demonstration...", _
                vbOKCancel) = vbOK Then

            ' 排他的ロックを有効にして、データを変更します。
            If PessimisticLock(rstCustomers, !CompanyName, _
                    "Acme Foods") Then
                MsgBox "Record successfully edited."

                ' 元のデータに戻します。
                .Edit
                !CompanyName = strOldName
                .Update
            End If

        End If

        If MsgBox("Optimistic locking demonstration...", _
                vbOKCancel) = vbOK Then

            ' 共有的ロックを有効にして、データを変更します。
            If OptimisticLock(rstCustomers, !CompanyName, _
                    "Acme Foods") Then
                MsgBox "Record successfully edited."

                ' 元のデータに戻します。
                .Edit
                !CompanyName = strOldName
                .Update
            End If

        End If

        .Close
    End With

    dbsNorthwind.Close

End Sub

Function PessimisticLock(rstTemp As Recordset, _
    fldTemp As Field, strNew As String) As Boolean

    dim ErrLoop as Error

    PessimisticLock = True

    With rstTemp
        .LockEdits = True

        ' LockEdits プロパティに True を設定した場合は
        ' Edit メソッドを呼び出す場合にエラーをトラップします。
        On Error GoTo Err_Lock
        .Edit
        On Error GoTo 0

        ' Edit メソッドが進行中でない場合は
        ' エラーは発生していないので、データを修正できます。
        If .EditMode = dbEditInProgress Then
            fldTemp = strNew
            .Update
            .Bookmark = .LastModified
        Else
            ' カレント レコードを取得して
            ' ほかのユーザーによる変更を調べます。
            .Move 0
        End If

    End With

    Exit Function

Err_Lock:

    If DBEngine.Errors.Count > 0 Then
        ' Errors コレクションを列挙します。
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number:" & errLoop.Number & _
                vbCr & errLoop.Description
        Next errLoop
        PessimisticLock = False
    End If

    Resume Next

End Function

Function OptimisticLock(rstTemp As Recordset, _
    fldTemp As Field, strNew As String) As Boolean

    dim ErrLoop as Error

    OptimisticLock = True

    With rstTemp
        .LockEdits = False
        .Edit
        fldTemp = strNew

        ' LockEdits プロパティに False を設定した場合は
        ' Update メソッドの呼び出し時にエラーをトラップします。
        On Error GoTo Err_Lock
        .Update
        On Error GoTo 0

        ' Edit メソッドが進行中でない場合には
        ' エラーは発生していないので、データを修正できます。
        If .EditMode = dbEditNone Then
            ' カレント レコードのポインタを
            ' 最後に変更されたレコードに移動します。
            .Bookmark = .LastModified
        Else
            .CancelUpdate
            ' カレント レコードを取得して
            ' ほかのユーザーによる変更を調べます。
            .Move 0
        End If

    End With

    Exit Function

Err_Lock:

    If DBEngine.Errors.Count > 0 Then
        ' Errors コレクションを列挙します。
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & _
                vbCr & errLoop.Description
        Next errLoop
        OptimisticLock = False
    End If

    Resume Next

End Function


LoginTimeout プロパティ (DAO)

LoginTimeout プロパティ

ODBC データベースにログインしようとする場合の、タイムアウト エラーが発生するまでの秒数を設定または返します。

設定値と戻り値

設定値または戻り値は、整数型 (Integer) の値で、ログイン タイムアウト エラーが発生するまでの秒数を表します。既定値は 20 秒です。LoginTimeout プロパティを 0 に設定すると、タイムアウトは発生しません。

解説

Microsoft SQL Server などの ODBC データベースにログインする場合、ネットワーク エラーやサーバーが起動されていないことが原因で接続に失敗することがあります。このような場合、既定の 20 秒の接続待機時間の代わりに、エラーが発生するまでの待機時間を指定できます。サーバーへのログインは、外部のサーバーにあるデータベースに対するクエリーの実行など、さまざまなイベントの一部として内部的に発生します。

LoginTimeout プロパティは、Jet ワークスペースと ODBCDirect ワークスペースの DBEngine オブジェクトで使用することができます。Workspace オブジェクトに対して LoginTimeout プロパティを使用することができるのは、ODBCDirect ワークスペースの場合のみです。Workspace オブジェクトの LoginTimeout プロパティに -1 を設定すると、その値は DBEngine オブジェクトの LoginTimeout の現在の設定に対する既定値になります。Workspace オブジェクトの LoginTimeout プロパティはいつでも変更することができます。新しい設定値は、次に Connection オブジェクトまたは Database オブジェクトが開かれたときに有効になります。

既定値は ODBC ドライバによって決まります。Jet ワークスペースで ODBC ドライバの既定値を無効にするには、レジストリ パス \HKEY_LOCAL_MACHINE\SOFTWARE\Jet\3.5\ に新しい "ODBC" キーを作成し、このキーに LoginTimeout パラメータを作成して適切な値を設定します。


LoginTimeout プロパティの使用例 (DAO)

LoginTimeout プロパティの使用例

次の例では、DBEngine オブジェクトの LoginTimeout プロパティを 120 秒に設定します。続いて、3 つの ODBCDirect ワークスペースを開いて、DBEngine オブジェクトから継承した既定値から LoginTimeout プロパティを変更します。

Sub LoginTimeoutX()

    ' 既定の LoginTimeout 値を変更します。
    DBEngine.LoginTimeout = 120

    Dim wrkODBC1 As Workspace
    Dim wrkODBC2 As Workspace
    Dim wrkODBC3 As Workspace

    Set wrkODBC1 = CreateWorkspace("", "admin", "", _
        dbUseODBC)
    Set wrkODBC2 = CreateWorkspace("", "admin", "", _
        dbUseODBC)
    Set wrkODBC3 = CreateWorkspace("", "admin", "", _
        dbUseODBC)

    ' ODBCDirect ワークスペースの LoginTimeout を
    ' それぞれ 60 秒、既定値 (120 秒)、タイムアウトなし
    ' に設定します。
    wrkODBC1.LoginTimeout = 60
    wrkODBC2.LoginTimeout = -1
    wrkODBC3.LoginTimeout = 0

    wrkODBC1.Close
    wrkODBC2.Close
    wrkODBC3.Close

End Sub


LogMessages プロパティ (DAO)

LogMessages プロパティ

Jet 接続型 ODBC データ ソースから返されたメッセージを保存するかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

メモ LogMessages プロパティの値を設定または取得する前に、CreateProperty メソッドを使用して LogMessages プロパティを作成し、QueryDef オブジェクトの Properties コレクションに追加しておく必要があります。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、ODBC が生成したメッセージを保存します。

解説

パススルー クエリーには、データと共にメッセージを返すものがあります。LogMessages プロパティに True を設定すると、Jet データベース エンジンはテーブルを作成し、そこにパススルー クエリーから返されたメッセージを格納します。このテーブル名はユーザー名に 00 から始まる連番をハイフン (-) でつなげたものになります。たとえば、既定のユーザー名が ADMIN の場合、テーブル名は Admin-00、Admin-01 などになります。

クエリーからメッセージを返すには、ユーザー定義の LogMessages プロパティを作成して QueryDef オブジェクトに追加し、データ型の種類をブール型 (Boolean) に指定して、値に True を設定します。

これらのテーブルでの処理が終了したら、そのテーブルを作成するために使用した一時的なクエリーとテーブルをデータベースから削除してください。


LogMessages プロパティと ReturnsRecords プロパティの使用例 (DAO/Microsoft Jet)

LogMessages プロパティと ReturnsRecords プロパティの使用例

次の例では、LogMessages と ReturnsRecords プロパティを使用して、リモート サーバーで作成されたデータとすべてのメッセージを返すパススルー クエリーを作成します。

Sub LogMessagesX()

    Dim wrkJet As Workspace
    Dim dbsCurrent As Database
    Dim qdfTemp As QueryDef
    Dim prpNew As Property
    Dim rstTemp As Recordset

    ' Jet Workspace オブジェクトを作成します。
    Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)

    Set dbsCurrent = wrkJet.OpenDatabase("DB1.mdb")

    ' サーバーからのメッセージを
    ' 一時的なテーブルで記録する QueryDef を作成します。
    Set qdfTemp = dbsCurrent.CreateQueryDef("NewQueryDef")
    qdfTemp.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
    qdfTemp.SQL = "SELECT * FROM stores"
    qdfTemp.ReturnsRecords = True
    Set prpNew = qdfTemp.CreateProperty("LogMessages", _
        dbBoolean, True)
    qdfTemp.Properties.Append prpNew

    ' クエリーを実行し、その結果を表示します。
    Set rstTemp = qdfTemp.OpenRecordset()

    Debug.Print "Contents of recordset:"
    With rstTemp
        Do While Not .EOF
            Debug.Print , .Fields(0), .Fields(1)
            .MoveNext
        Loop
        .Close
    End With

    ' ここではデモとして新しい QueryDef オブジェクトを削除します。
    dbsCurrent.QueryDefs.Delete qdfTemp.Name
    dbsCurrent.Close
    wrkJet.Close

End Sub


MaxRecords プロパティ (DAO)

MaxRecords プロパティ

ODBC データ ソースに対するクエリーから返されるレコードの最大数を設定または返します。

設定値と戻り値

設定値または戻り値は、返されるレコード数を表す長整数型 (Long) の値です。既定値は 0 で、返されるレコード数に制限がないことを示します。

解説

MaxRecords プロパティで指定した数の行がアプリケーションの Recordset オブジェクトに返されると、クエリー プロセッサは、Recordset オブジェクトに含めることのできるレコードがまだ存在している場合でも、レコードを返すのを中止します。MaxRecords プロパティは、クライアントのリソースが制限されていて多数のレコードを管理できない場合に便利です。

メモ MaxRecords プロパティは、Jet または ODBCDirect ワークスペースで接続されている ODBC データ ソースでのみ設定可能です。


MaxRecords プロパティの使用例 (DAO)

MaxRecords プロパティの使用例

次の例では、MaxRecords プロパティを使用して、ODBC データ ソースでクエリーから返されるレコード数の限度数を設定します。

Sub MaxRecordsX()

    Dim dbsCurrent As Database
    Dim qdfPassThrough As QueryDef
    Dim qdfLocal As QueryDef
    Dim rstTemp As Recordset

    ' QueryDef オブジェクトを作成するデータベースを開きます。
    Set dbsCurrent = OpenDatabase("DB1.mdb")

    ' パススルー クエリーを作成し
    ' SQL サーバー データベースからデータを取得します。
    Set qdfPassThrough = _
        dbsCurrent.CreateQueryDef("")

    ' 新しいクエリーのプロパティで
    ' 返されるレコード数を 20 に設定します。
    qdfPassThrough.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"
    qdfPassThrough.SQL = "SELECT * FROM titles"
    qdfPassThrough.ReturnsRecords = True
    qdfPassThrough.MaxRecords = 20

    Set rstTemp = qdfPassThrough.OpenRecordset()

    ' クエリーの実行結果を表示します。
    Debug.Print "Query results:"
    With rstTemp
        Do While Not .EOF
            Debug.Print , .Fields(0), .Fields(1)
            .MoveNext
        Loop
        .Close
    End With

    dbsCurrent.Close

End Sub


Name プロパティ (DAO)

Name プロパティ

DAO オブジェクトのユーザー定義の名前を設定または返します。コレクションに追加されていないオブジェクトでは、読み取り/書き込みが可能です。

設定値と戻り値

設定値または戻り値は、名前を指定する文字列型 (String) の値です。名前の先頭には文字を使用する必要があります。文字列の最大長は、Name プロパティが適用されるオブジェクトの種類によって異なります (「解説」を参照してください)。名前には数字とアンダースコア (_) を使用することができますが、句読点やスペースを含むことはできません。

解説

TableDef、QueryDef、Field、Index、User、および Group の各オブジェクトは、同じコレクションでは同じ名前を持つことはできません。

SQL ステートメントを使用して開いた Recordset オブジェクトの Name プロパティの値は、SQL ステートメントの最初の半角 256 文字 (256 バイト) になります。

コードの中で Visual Basic for Applications の Dim ステートメントと共にオブジェクトの Name プロパティを使用すると、そのオブジェクトのほかのインスタンスを作成できます。

メモ TableDef、Field、または QueryDef の各オブジェクト名のように、多くの DAO オブジェクトの Name プロパティは、Database オブジェクトに認識されている名前になります。DAO オブジェクト名と、DAO オブジェクトを参照するために使用するオブジェクト変数の間には直接的な関係はありません。

Name プロパティの読み取り/書き込みの使い方は、Name プロパティが適用されるオブジェクトの種類やオブジェクトがコレクションに追加されているかどうかによって異なります。ODBCDirect ワークスペースでは、追加されたオブジェクトの Name プロパティは常に読み取り専用です。次の表では、特に記述がない限り、Jet ワークスペースでオブジェクトがコレクションに追加されている場合に、Name プロパティが読み取り専用か、読み取り/書き込みが可能かを示します。また、読み取り/書き込みが可能な場合、文字列の最大長も示します。

オブジェクト | 使い方 | 文字列の最大長
Container オブジェクト | 読み取り専用 |
Connection オブジェクト | 読み取り専用 |
Database オブジェクト | 読み取り専用 |
Document オブジェクト | 読み取り専用 |
Field オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 64
Index オブジェクトに追加されている | 読み取り専用 |
QueryDef オブジェクトに追加されている | 読み取り専用 |
Recordset オブジェクトに追加されている | 読み取り専用 |
TableDef オブジェクト (ネイティブ) に追加されている | 読み取り/書き込みが可能 | 64
TableDef オブジェクト (リンクを持つ) に追加されている | 読み取り専用 |
Relation オブジェクトに追加されている | 読み取り専用 |
Group オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 20
追加されている | 読み取り専用 |
Index オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 64
追加されている | 読み取り専用 |
Parameter オブジェクト | 読み取り専用 |
Property オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 64
追加されている | 読み取り専用 |
組み込まれている | 読み取り専用 |
QueryDef オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 64
一時的なオブジェクトの | 読み取り専用 |
追加されている | 読み取り/書き込みが可能 | 64
Recordset オブジェクト | 読み取り専用 |
Relation オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 64
追加されている | 読み取り専用 |
TableDef オブジェクト | 読み取り/書き込みが可能 | 64
User オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 20
追加されている | 読み取り専用 |
Workspace オブジェクト |  |
追加されていない | 読み取り/書き込みが可能 | 20
追加されている | 読み取り専用 |


Name プロパティの使用例 (DAO)

Name プロパティの使用例

次の例では、Name プロパティを使用して、新しく作成したオブジェクトに名前を付け、与えられたコレクションのオブジェクトを表示します。また、コレクションからオブジェクトを削除します。

Sub NameX()

    Dim dbsNorthwind As Database
    Dim qdfNew As QueryDef
    Dim qdfLoop As QueryDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' 新しく永続的な QueryDef オブジェクトを作成し
        ' QueryDefs コレクションに追加します。
        Set qdfNew = .CreateQueryDef()
        qdfNew.Name = "NewQueryDef"
        qdfNew.SQL = "SELECT * FROM Employees"
        .QueryDefs.Append qdfNew

        ' QueryDefs コレクションを列挙し
        ' QueryDef オブジェクト名を表示します。
        Debug.Print "Names of queries in " & .Name

        For Each qdfLoop In .QueryDefs
            Debug.Print "    " & qdfLoop.Name
        Next qdfLoop

        ' ここではデモとして新しい QueryDef オブジェクトを削除します。
        .QueryDefs.Delete qdfNew.Name

        .Close
    End With

End Sub


NoMatch プロパティ (DAO)

NoMatch プロパティ

Seek メソッドや、Find 系メソッドのいずれかを使用して検索したレコードが見つかったかどうかを示します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、ブール型 (Boolean) の値です。検索したレコードが見つからなかった場合、True になります。Recordset オブジェクトを開くか作成した場合、その NoMatch プロパティは False に設定されます。

解説

特定のレコードを検索し移動する場合、テーブル タイプの Recordset オブジェクトでは、Seek メソッドを使用します。ダイナセット タイプやスナップショット タイプの Recordset オブジェクトでは、Find 系メソッドのいずれかを使用します。これらのメソッドを使用してから NoMatch プロパティの設定値を調べると、レコードが見つかったかどうかを確認できます。

レコードが見つからなかった場合、NoMatch プロパティの値は True に設定され、カレント レコードは無効になります。元のカレント レコードに戻る必要がある場合、Seek メソッドや Find 系メソッドを使用する前に、カレント レコードのブックマークを取得しておきます。

メモ Recordset オブジェクトに対してどの Move 系メソッドを使用しても、NoMatch プロパティの設定値は変わりません。


NoMatch プロパティの使用例 (DAO/Microsoft Jet)

NoMatch プロパティの使用例

次の例では、NoMatch プロパティを使用して、Seek メソッドと FindFirst メソッドを使用した処理がうまく行われたかどうかを識別します。失敗している場合には、適当なフィードバックを返します。このプロシージャを実行するには、SeekMatch と FindMatch プロシージャが必要です。

Sub NoMatchX()

    Dim dbsNorthwind As Database
    Dim rstProducts As Recordset
    Dim rstCustomers As Recordset
    Dim strMessage As String
    Dim strSeek As String
    Dim strCountry As String
    Dim varBookmark As Variant

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' 既定値は dbOpenTable です。
    ' Index プロパティが使用される場合に必要となります。
    Set rstProducts = dbsNorthwind.OpenRecordset("Products")

    With rstProducts
        .Index = "PrimaryKey"

        Do While True
            ' カレント レコードの情報を表示して
            ' ユーザーからの入力を促します。
            strMessage = "NoMatch with Seek method" & vbCr & _
                "Product ID: " & !ProductID & vbCr & _
                "Product Name: " & !ProductName & vbCr & _
                "NoMatch = " & .NoMatch & vbCr & vbCr & _
                "Enter a product ID."
            strSeek = InputBox(strMessage)
            If strSeek = "" Then Exit Do

            ' プロシージャを呼び出して、ユーザーから提示された
            ' ID 番号に基づいたレコードを探します。
            SeekMatch rstProducts, Val(strSeek)
        Loop

        .Close
    End With

    Set rstCustomers = dbsNorthwind.OpenRecordset( _
        "SELECT CompanyName, Country FROM Customers " & _
        "ORDER BY CompanyName", dbOpenSnapshot)

    With rstCustomers

        Do While True
            ' カレント レコードの情報を表示して
            ' ユーザーからの入力を促します。
            strMessage = "NoMatch with FindFirst method" & _
                vbCr & "Customer Name: " & !CompanyName & _
                vbCr & "Country: " & !Country & vbCr & _
                "NoMatch = " & .NoMatch & vbCr & vbCr & _
                "Enter country on which to search."
            strCountry = Trim(InputBox(strMessage))
            If strCountry = "" Then Exit Do

            ' プロシージャを呼び出して、ユーザーから提示された
            ' 国名に基づいたレコードを検索します。
            FindMatch rstCustomers, _
                "Country = '" & strCountry & "'"
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub

Sub SeekMatch(rstTemp As Recordset, _
    intSeek As Integer)

    Dim varBookmark As Variant
    Dim strMessage As String

    With rstTemp
        ' カレント レコードの位置を格納します。
        varBookmark = .Bookmark
        .Seek "=", intSeek

        ' Seek メソッドを使用しての処理が失敗した場合に
        ' ユーザーに通知し、最後のカレント レコードに戻ります。
        If .NoMatch Then
            strMessage = _
                "Not found! Returning to current record." & _
                vbCr & vbCr & "NoMatch = " & .NoMatch
            MsgBox strMessage
            .Bookmark = varBookmark
        End If

    End With

End Sub

Sub FindMatch(rstTemp As Recordset, _
    strFind As String)

    Dim varBookmark As Variant
    Dim strMessage As String

    With rstTemp
        ' カレント レコードの位置を格納します。
        varBookmark = .Bookmark
        .FindFirst strFind

        ' Find メソッドを使用しての処理が失敗した場合に
        ' ユーザーに通告し、最後のカレント レコードに返ります。
        If .NoMatch Then
            strMessage = _
                "Not found! Returning to current record." & _
                vbCr & vbCr & "NoMatch = " & .NoMatch
            MsgBox strMessage
            .Bookmark = varBookmark
        End If

    End With

End Sub


Number プロパティ (DAO)

Number プロパティ

エラーを指定する数値を返します。

戻り値

戻り値は、エラー番号を表す長整数型 (Long) の値です。

解説

Number プロパティは、発生したエラーを調べるのに使用します。Number プロパティの値はエラー条件の一意なトラップ番号に対応しています。トラップ番号とエラー条件の一覧については、「 トラップ可能な Microsoft Jet のエラー」を参照してください。


ODBCTimeout プロパティ (DAO)

ODBCTimeout プロパティ

ODBC データベースで QueryDef が実行されている場合、タイムアウト エラーが発生するまで待機する秒数を示します。

設定値と戻り値

設定値または戻り値は、整数型 (Integer) の値です。タイムアウト エラーが発生するまで待機する秒数を表します。

ODBCTimeout プロパティの値が -1 に設定されている場合、タイムアウトの既定値は QueryDef を含んだ Connection オブジェクトまたは Database オブジェクトの QueryTimeout プロパティの現在の設定値になります。ODBCTimeout プロパティが 0 に設定されている場合、タイムアウト エラーは発生しません。

解説

Microsoft SQL Server などの ODBC データベースを使用している場合、ネットワーク トラフィックや ODBC サーバーの負荷が大きいことなどが原因で遅延が生じることがあります。この場合、いつまでも待機せずに、エラーが発生するまでの待機時間を指定することができます。

QueryDef オブジェクトの ODBCTimeout プロパティに値を設定すると、その QueryDef オブジェクトを含む Connection オブジェクトまたは Database オブジェクトの QueryTimeout プロパティで指定した値は無効になります。ただし、この設定値はその QueryDef オブジェクトに対してのみ有効です。

メモ ODBCDirect ワークスペースでは、ODBCTimeout プロパティに明示的な値を設定した後、QueryDef オブジェクトが有効な間に 1 度だけ既定値 (-1) に再設定することができます。それ以外の場合にはエラーが発生します。


ODBCTimeout プロパティと QueryTimeout プロパティの使用例 (DAO)

ODBCTimeout プロパティと QueryTimeout プロパティの使用例

この例では、ODBCTimeout プロパティと QueryTimeout プロパティを使用して、Database オブジェクトの QueryTimeout プロパティの設定が、その Database オブジェクトから作られた QueryDef オブジェクトの既定の ODBCTimout プロパティの設定にどのように反映されるかを示します。

Sub ODBCTimeoutX()

    Dim dbsCurrent As Database
    Dim qdfStores As QueryDef
    Dim rstStores As Recordset

    Set dbsCurrent = OpenDatabase("Northwind.mdb")

    ' Northwind データベースの
    ' 既定の QueryTimeout プロパティを変更します。
    Debug.Print "Default QueryTimeout of Database: " & _
        dbsCurrent.QueryTimeout
    dbsCurrent.QueryTimeout = 30
    Debug.Print "New QueryTimeout of Database: " & _
        dbsCurrent.QueryTimeout

    ' 新しい QueryDef オブジェクトを作成します。
    Set qdfStores = dbsCurrent.CreateQueryDef("Stores", _
        "SELECT * FROM stores")
    qdfStores.Connect = _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers"

    ' 既定の設定を新しい QueryDef オブジェクトの設定に変更します。
    Debug.Print "Default ODBCTimeout of QueryDef: " & _
        qdfStores.ODBCTimeout
    qdfStores.ODBCTimeout = 0
    Debug.Print "New ODBCTimeout of QueryDef: " & _
        qdfStores.ODBCTimeout

    ' クエリーを実行し、その結果を表示します。
    Set rstStores = qdfStores.OpenRecordset()

    Debug.Print "Contents of recordset:"
    With rstStores
        Do While Not .EOF
            Debug.Print , .Fields(0), .Fields(1)
            .MoveNext
        Loop
        .Close
    End With

    ' ここではデモとして新しい QueryDef オブジェクトを削除します。
    dbsCurrent.QueryDefs.Delete qdfStores.Name
    dbsCurrent.Close

End Sub


OrdinalPosition プロパティ (DAO)

OrdinalPosition プロパティ

Field オブジェクトが Fields コレクションで占める相対的な位置を設定または返します。Fields コレクションに追加されていないオブジェクトでは、読み取り/書き込みが可能です。

設定値と戻り値

設定値または戻り値は、フィールドの表示順序を示す整数型 (Integer) の値です。既定値は 0 です。

解説

次の表に示すように、OrdinalPosition プロパティの使い方は、Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。

通常、コレクションに追加するオブジェクトの並び順は、オブジェクトを追加する順序によって決まります。最初に追加したオブジェクトが最初の位置 (0) に、次に追加したオブジェクトは 2 番目の位置 (1) になります。最後に追加されたオブジェクトは、Count プロパティの設定で表されるコレクションのオブジェクトの数から 1 を引いた位置になります。

OrdinalPosition プロパティを使用すると、Field オブジェクトをコレクションに追加する順序とは異なる位置を新しいオブジェクトに指定できます。これにより、テーブル、クエリーおよびレコード セットをアプリケーションで使用する場合に、これらのフィールドの順序を指定することができます。たとえば、SELECT * クエリーでフィールドが返される順序は、OrdinalPosition プロパティの現在の設定値によって決まります。

OrdinalPosition プロパティに正の整数を設定することで、レコード セットに返されるフィールドの順序は、常に再設定することができます。

同一のコレクションで複数の Field オブジェクトが同じ OrdinalPosition プロパティの値を持つ場合は、アルファベット順に並べられます。たとえば、"Age" というフィールドに 4 が設定されているコレクションにおいて、"Weight" という 2 番目のフィールドに 4 を設定すると、"Weight" は "Age" の後に返されます。

フィールドの数から 1 を引いた値よりも大きい値を指定することもできます。この場合、最も大きい値を基準にして順序が決定されます。たとえば、フィールドの数が 5 で、そのうちの任意のフィールドの OrdinalPosition プロパティを 20 に設定したとします。ほかの 2 つのフィールドの OrdinalPosition プロパティにはそれぞれ 10 と 30 が設定されている場合、20 を設定したフィールドは 10 と 30 に設定したフィールドの間に返されます。

メモ TableDef オブジェクトの Fields コレクションが更新されていない場合でも、TableDef オブジェクトから開かれた Recordset オブジェクトのフィールドの順序は、TableDef オブジェクトの OrdinalPosition プロパティの情報を反映します。テーブル タイプの Recordset オブジェクトは元のテーブルと同じ OrdinalPosition データを持ちますが、ほかのタイプの Recordset オブジェクトは、新しい (0 で始まる) OrdinalPosition プロパティの情報を持ちます。この順序は、TableDef オブジェクトの OrdinalPosition プロパティの情報によって決まります。


OrdinalPosition プロパティの使用例 (DAO)

OrdinalPosition プロパティの使用例

次の例では、返される Recordset のフィールドの並び順を制御するために、Employees テーブルの TableDef オブジェクトの OrdinalPosition プロパティの値を変更します。すべてのフィールドの OrdinalPosition プロパティの値を 1 に設定すると、返される Recordset では、フィールドがアルファベット順に並べられます。Recordset の OrdinalPosition の値は、TableDef オブジェクトの値と一致せず、TableDef オブジェクトで行われる変更結果を単に反映していることに注意してください。

Sub OrdinalPositionX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim aintPosition() As Integer
    Dim astrFieldName() As String
    Dim intTemp As Integer
    Dim fldTemp As Field
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind.TableDefs("Employees")

    With tdfEmployees
        ' 元の OrdinalPosition データを表示し、格納します。
        Debug.Print _
            "Original OrdinalPosition data in TableDef."
        ReDim aintPosition(0 To .Fields.Count - 1) As Integer
        ReDim astrFieldName(0 To .Fields.Count - 1) As String
        For intTemp = 0 To .Fields.Count - 1
            aintPosition(intTemp) = _
                .Fields(intTemp).OrdinalPosition
            astrFieldName(intTemp) = .Fields(intTemp).Name
            Debug.Print , aintPosition(intTemp), _
                astrFieldName(intTemp)
        Next intTemp

        ' OrdinalPosition データを変更します。
        For Each fldTemp In .Fields
            fldTemp.OrdinalPosition = 1
        Next fldTemp

        ' 新しく Recordset を開き
        ' OrdinalPosition データが
        ' レコードの並び順にどのように作用しているかを示します。
        Debug.Print _
            "OrdinalPosition data from resulting Recordset."
        Set rstEmployees = dbsNorthwind.OpenRecordset( _
            "SELECT * FROM Employees")
        For Each fldTemp In rstEmployees.Fields
            Debug.Print , fldTemp.OrdinalPosition, fldTemp.Name
        Next fldTemp
        rstEmployees.Close

        ' ここではデモとして元の OrdinalPosition データを格納します。
        For intTemp = 0 To .Fields.Count - 1
            .Fields(astrFieldName(intTemp)).OrdinalPosition = _
                aintPosition(intTemp)
        Next intTemp

    End With

    dbsNorthwind.Close

End Sub


OriginalValue プロパティ (DAO)

OriginalValue プロパティ

最後のバッチ更新の開始時にデータベースに存在していた Field の値を返します。これは ODBCDirect ワークスペースでのみ使用することができます。

戻り値

戻り値は、バリアント式です。

解説

共有的バッチ更新を実行している間、1 番目のクライアントがデータを取得してから更新を実行するまでの間に 2 番目のクライアントが同じフィールドとレコードを修正すると、矛盾が起こります。OriginalValue プロパティには、最後のバッチ Update が開始された時点でのフィールドの値が保存されています。バッチ Update によってデータベースへの書き込みを行おうとしたときに、この OriginalValue プロパティの値とデータベース内の実際の値が異なっていると、矛盾が起こります。矛盾が起こった場合、データベース内の新しい値は VisibleValue プロパティを使用してアクセス可能にすることができます。


Owner プロパティ (DAO)

Owner プロパティ

オブジェクトの所有者を示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。Users コレクションの User オブジェクト名、または Groups コレクションの Group オブジェクト名のいずれかを示します。

解説

オブジェクトの所有者は、ほかのユーザーには許可されていないアクセス権を持っています。必要な権限を持っているユーザー アカウント (User オブジェクト) のユーザー、または必要な権限を持っているユーザー アカウントのグループ (Group オブジェクト) に属するユーザーはいつでも Owner プロパティの設定値を変更することができます。


Owner プロパティと SystemDB プロパティの使用例 (DAO/Microsoft Jet)

Owner プロパティと SystemDB プロパティの使用例

次の例では、Owner プロパティと SystemDB プロパティを使用して、異なる Document オブジェクトの所有者を表示します。

Sub OwnerX()

    ' Jet workgroup ファイルが利用できるかを確認します。
    DBEngine.SystemDB = "system.mdw"

    Dim dbsNorthwind As Database
    Dim ctrLoop As Container

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        Debug.Print "Document owners:"
        ' Containers コレクションを列挙し
        ' 各コンテナの Documents コレクションの
        ' 一番はじめの Document の所有者を表示します。
        For Each ctrLoop In .Containers
            With ctrLoop
                Debug.Print "    [" & .Documents(0).Name & _
                    "] in [" & .Name & _
                    "] container owned by [" & _
                    .Documents(0).Owner & "]"
            End With
        Next ctrLoop

        .Close
    End With

End Sub


PartialReplica プロパティ (DAO)

PartialReplica プロパティ

Relation オブジェクトに対してフル レプリカから部分レプリカを作成する場合、そのリレーションが考慮されるべきかどうかを示す値を設定または返します。これは Jet データベースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、同期をとっている間にリレーションが適用されます。

解説

PartialReplica プロパティを使用すると、2 つのテーブル間のリレーションシップに基づいて、フル レプリカから部分レプリカにデータをレプリケートすることができます。ReplicaFilter プロパティを設定するだけでは、部分レプリカに対してどんな種類のデータをレプリケートする必要があるのかを指定できない場合に、この PartialReplica プロパティを使用します。たとえば、[受注] テーブルと一対多リレーションシップが設定されている [顧客] テーブルを持つデータベースがあると仮定します。さらに、このデータベースですべての受注の中から、[東京] 区域の顧客からの受注のみをレプリケートする部分レプリカを作成する必要があるとします。この場合、"区域" フィールドは、[受注] テーブルではなく [顧客] テーブルにあるため、[受注] テーブルの ReplicaFilter プロパティに "区域 = '東京'" と設定することはできません。

[東京] 区域のすべての受注をレプリケートするには、レプリケーション中は [受注] テーブルと [顧客] テーブル間のリレーションが常にアクティブであることを示す必要があります。部分レプリカを一度作成してから、次の手順を実行すると、[東京] 区域のすべての受注を含む部分レプリカを作成できます。

  1. [顧客] テーブルの TableDef オブジェクトで、ReplicaFilter プロパティの値を "区域 = '東京'" に設定します。

  2. [受注] テーブルと [顧客] テーブル間のリレーションシップに対応する Relation オブジェクトで、PartialReplica プロパティの値を True に設定します。

  3. PopulatePartial メソッドを呼び出します。

注意 レプリカ フィルタやレプリカのリレーションを設定する場合、抽出条件を満たさない部分レプリカのレコードは、部分レプリカから削除されることに注意してください。ただし、フル レプリカからは削除されません。たとえば、部分レプリカの [顧客] テーブルの TableDef オブジェクトで、ReplicaFilter プロパティの値を "区域 = '東京'" に設定し、データベースをもう一度作成すると仮定します。これにより、東京の顧客に基づいたすべてのレコードが挿入または更新されます。次に、ReplicaFilter プロパティを "区域 = '名古屋'" に再設定し、データベースをもう一度作成すると、部分レプリカの東京区域に関するすべてのレコードが削除され、名古屋の顧客に基づいたすべてのレコードがフル レプリカから挿入されます。フル レプリカのレコードは削除されません。

ReplicaFilter プロパティまたは PartialReplica プロパティを設定する前に、これらのプロパティを設定する部分レプリカをフル レプリカと同期させることをお勧めします。これによって、部分レプリカのレコードが削除される場合でも、部分レプリカで現在行われている変更をフル レプリカに反映させることができます。


PartialReplica プロパティの使用例 (DAO/Microsoft Jet)

PartialReplica プロパティの使用例

次の例では、PartialReplica プロパティを使用して、カリフォルニアの顧客からの発注数を表す、すべてのレコードをレプリケートします。

Sub PartialReplicaX()

    ' この例では、dbsTemp は部分レプリカで
    ' テーブルとの間に適切なリレーションシップがすでに存在しているものと
    ' 仮定しています。

    Dim tdfOrders As TableDef
    Dim relCustOrd As Relation
    Dim dbsTemp As Database
    Dim relLoop As Relation

    Set dbsTemp = OpenDatabase("Northwind.mdb")
    Set tdfOrders = dbsTemp.TableDefs("Orders")

    ' "Customers → Orders" のリレーション オブジェクトを探します。
    For Each relLoop In dbsTemp.Relations
        If relLoop.Table = "Customers" And _
                relLoop.ForeignTable = "Orders" Then
            ' Relation オブジェクトの PartialReplica
            ' プロパティを True に設定します。
            relLoop.PartialReplica = True
            Exit For
        End If
    Next relLoop

End Sub

メモ 同じテーブル上にレプリカ フィルタとレプリカ リレーションを設定した場合、その 2 つは、論理 AND ではなく、論理 OR で動作します。つまり、上の例では、同期で交換されるレコードは、$1000 より大きい注文すべて、またはカリフォルニアからの注文すべてであり、カリフォルニアからの $1000 より大きい注文すべてではありません。


Password プロパティ (DAO)

Password プロパティ

ユーザー アカウントのパスワードを設定します。これは Jet ワークスペースでのみ使用することができます。

設定値

設定値は、文字列型 (String) の値です。半角 14 文字 (14 バイト) 以内で指定し、ASCII コード 0 (Null) 以外の任意の文字を使用することができます。このプロパティの設定値は、コレクションにまだ追加されていない新しいオブジェクトでは書き込みのみが可能です。既存のオブジェクトでは使用することができません。

解説

User オブジェクトを新しく作成する場合、PID プロパティと共に Password プロパティを設定します。

既存の User オブジェクトの Password プロパティの設定値を変更する場合、NewPassword メソッドを使用してください。パスワードの設定を解除するには、NewPassword メソッドの引数 newpassword に長さ 0 の文字列 ("") を指定してください。

パスワードでは大文字と小文字の区別があります。

メモ アクセス権を持っていない場合、ほかのユーザーのパスワードを変更することはできません。


PercentPosition プロパティ (DAO)

PercentPosition プロパティ

Recordset のレコードのパーセンテージに基づいた、Recordset オブジェクトのカレント レコードのおよその位置を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、0.0 ～ 100.00 までの単精度浮動小数点数型 (Single) の値です。

解説

Recordset オブジェクトのカレント レコードのおよその位置を参照または変更するには、PercentPosition プロパティの値を確認または設定します。ベース テーブルから直接開かれた、ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトでは、PercentPosition プロパティの値を設定または確認する前に、最後のレコードに移動して Recordset オブジェクトの情報を取得しておく必要があります。Recordset オブジェクトの情報を取得する前に PercentPosition プロパティを使用すると、レコードの移動量は、RecordCount プロパティで示されるアクセスされたレコード数によって決まります。最後のレコードに移動するには、MoveLast メソッドを使用します。

メモ Recordset オブジェクトの特定のレコードをカレント レコードにするには、PercentPosition プロパティではなく、Bookmark プロパティを使用するようにしてください。

PercentPosition プロパティに値を設定すると、その値に対応するおよその位置にあるレコードがカレント レコードになり、PercentPosition プロパティには新しいカレント レコードのおよその位置を示す値が再設定されます。たとえば、レコードが 5 つしかない Recordset オブジェクトで、PercentPosition プロパティを 77 に設定すると、PercentPosition プロパティが返す値は 77 ではなく、80 になります。

PercentPosition プロパティは、前方スクロール タイプの Recordset オブジェクトや、リモート データベースに対しパススルー クエリーを実行して開いた Recordset オブジェクト以外のすべての種類の Recordset オブジェクトで使用することができます。

PercentPosition プロパティを使用すると、フォーム上のスクロール バーやテキスト ボックスで、Recordset オブジェクトのカレント レコードの位置を示すことができます。


PercentPosition プロパティの使用例 (DAO)

PercentPosition プロパティの使用例

次の例では、PercentPosition プロパティを使用して、Recordset のはじめから見た、カレント レコードのポインタの相対的な位置を示します。

Sub PercentPositionX()

    Dim dbsNorthwind As Database
    Dim rstProducts As Recordset
    Dim strFind As String
    Dim strMessage As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' PercentPosition プロパティはダイナセット タイプまたは
    ' スナップショット タイプの Recordset オブジェクトでのみ作用します。
    Set rstProducts = dbsNorthwind.OpenRecordset( _
        "SELECT ProductName FROM Products " & _
        "ORDER BY ProductName", dbOpenSnapshot)

    With rstProducts
        ' Recordset を配置します。
        .MoveLast
        .MoveFirst

        Do While True
            ' カレント レコードを表示して
            ' ユーザーに入力を促します。
            strMessage = "Product: " & !ProductName & vbCr & _
                "The record pointer is " & _
                Format(.PercentPosition, "##0.0") & _
                "% from the " & vbCr & _
                "beginning of the Recordset." & vbCr & _
                "Please enter a character search string " & _
                "for a product name."
            strFind = Trim(InputBox(strMessage))
            If strFind = "" Then Exit Do

            ' 検索文字列に一致するレコードを検索します。
            .FindFirst "ProductName >= '" & strFind & "'"
            If .NoMatch Then .MoveLast
        Loop

        .Close
    End With

    dbsNorthwind.Close

End Sub


Permissions プロパティ (DAO)

Permissions プロパティ

Container オブジェクトまたは Document オブジェクトの UserName プロパティで指定したユーザーまたはグループの権限を設定する値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値で、権限を表す定数です。次の表に、さまざまな DAO オブジェクトの Permissions プロパティに有効な定数を示します。特に記述がない限り、すべての表に示されたすべての定数は Document オブジェクトで有効です。

次の表に、Tables コンテナおよび Databases コンテナ以外の Container オブジェクトで設定することができる値を示します。

定数 | 説明
dbSecNoAccess | オブジェクトにアクセスできません (Document オブジェクトでは無効です)。
dbSecFullAccess | オブジェクトに完全にアクセスできます。
dbSecDelete | オブジェクトを削除できます。
dbSecReadSec | そのオブジェクトのセキュリティに関連する情報を読み取ることができます。
dbSecWriteSec | アクセス権を変更できます。
dbSecWriteOwner | Owner プロパティの設定値を変更できます。

次の表に、Tables コンテナの設定値と戻り値を示します。

定数 | 説明
dbSecCreate | 新しい文書を作成できます (Document オブジェクトでは無効です)。
dbSecReadDef | 列とインデックスに関する情報を含むテーブルの定義の読み取りができます。
dbSecWriteDef | 列とインデックスに関する情報を含むテーブルの定義の修正または削除ができます。
dbSecRetrieveData | Document オブジェクトからデータを取得できます。
dbSecInsertData | レコードを追加できます。
dbSecReplaceData | レコードを修正できます。
dbSecDeleteData | レコードを削除できます。

次の表に、Databases コンテナの設定値と戻り値を示します。

定数 | 説明
dbSecDBAdmin | データベースをレプリケートしたり、データベースのパスワードを変更したりできます (Document オブジェクトでは無効です)。
dbSecDBCreate | 新しいデータベースを作成できます。ワークグループ情報ファイル (System.mdw) の Databases コンテナでのみ使用可。Document オブジェクトでは無効です。
dbSecDBExclusive | 排他モードでデータベースにアクセスできます。
dbSecDBOpen | データベースを開くことができます。

解説

このプロパティは、ユーザーが Container オブジェクトまたは Document オブジェクトに対して持つ読み取り/書き込みが可能な権限の種類を、設定または確認する場合に使用します。

Container オブジェクトの Inherit プロパティが、ユーザーまたはユーザーが属しているグループに設定されている場合、Document オブジェクトはその Container オブジェクトからユーザーに対する権限を継承します。Document オブジェクトの Permissions プロパティと UserName プロパティを設定すると、オブジェクトのアクセス制御の処理がさらに向上します。

ユーザーが自分の属するグループから継承した権限を含んでいる場合、その権限を設定または返すには AllPermissions プロパティを使用します。


PID プロパティ (DAO)

PID プロパティ

グループまたはユーザー アカウントのパーソナル ID (PID) を設定します。これは Jet ワークスペースでのみ使用することができます。

設定値

設定値は、4 ～ 20 文字 (4 ～ 20 バイト) の文字列型 (Stirng) の値です。このプロパティの設定値は、新しいオブジェクトがコレクションにまだ追加されていない場合は書き込みのみが可能で、既存のオブジェクトでは使用することができません。

解説

Group オブジェクトを新しく作成する場合、Name プロパティと共に PID プロパティを設定します。User オブジェクトを新しく作成する場合は、Name プロパティおよび Password プロパティと共に PID プロパティを設定します。


Prepare プロパティ (DAO)

Prepare プロパティ

クエリーを一時ストアド プロシージャとしてサーバー上に準備する方法について、クエリーの実行前に ODBC の SQLPrepare API 関数を使用して準備するか、またはクエリーの実行時に ODBC の SQLExecDirect API 関数を使用して準備するかを示す値を設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。次の表に示す定数のどちらかになります。

定数 | 説明
dbQPrepare | (既定値) ステートメントが準備されます。この場合は ODBC SQLPrepare API が呼び出されます。
dbQUnprepare | ステートメントは準備されません。この場合は ODBC SQLExecDirect API が呼び出されます。

解説

Prepare プロパティを使用すると、サーバーでクエリーから一時ストアド プロシージャを作成して実行したり、またはクエリーを直接実行させたりすることができます。既定では Prepare プロパティは dbQPrepare に設定されていますが、dbQUnprepare を設定することによりクエリーの準備を禁止することができます。この場合、クエリーは SQLExecDirect API を使用して実行されます。

ストアド プロシージャを作成すると 1 回目の操作の速度は遅くなりますが、2 回目以降のクエリー参照操作の速度は速くなります。ただし、ストアド プロシージャの形式では実行できないクエリーもあり、その場合は Prepare プロパティに dbQUnprepare を設定する必要があります。

Prepare プロパティに dbQPrepare を設定していても、Execute メソッドの引数 option に dbExecDirect を設定してクエリーを実行した場合は、このプロパティは無効になります。

メモ ODBC の SQLPrepare API は、DAO の SQL プロパティの設定と同時に呼び出されます。このため、dbQUnprepare 定数を使用してパフォーマンスを向上させる場合には、SQL プロパティを設定する前に Prepare プロパティを設定する必要があります。


Prepare プロパティの使用例 (DAO/ODBCDirect)

Prepare プロパティの使用例

この例では、Prepare プロパティを使用して、最初にサーバーに一時的なストアド プロシージャを作成せず、直接クエリーを実行するよう指定します。

Sub PrepareX()

    Dim wrkODBC As Workspace
    Dim conPubs As Connection
    Dim qdfTemp As QueryDef
    Dim rstTemp As Recordset

    ' ODBCDirect Workspace オブジェクトを作成し
    ' Connection オブジェクトを開きます。
    Set wrkODBC = CreateWorkspace("", _
        "admin", "", dbUseODBC)
    Set conPubs = wrkODBC.OpenConnection("Publishers", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    Set qdfTemp = conPubs.CreateQueryDef("")

    With qdfTemp
        ' このクエリーは一度しか実行しないので
        ' ODBC SQLExecDirect API 関数を指定します。
        ' SQL プロパティを設定する前にこのプロパティを設定しないと
        ' ODBC SQLPrepare API 関数が呼び出されることになり
        ' パフォーマンスの上昇は起こらなくなります。
        .Prepare = dbQUnprepare
        .SQL = "UPDATE roysched " & _
            "SET royalty = royalty * 2 " & _
            "WHERE title_id LIKE 'BU____' OR " & _
            "title_id LIKE 'PC____'"
        .Execute
    End With

    Debug.Print "Query results:"

    ' 変更されたレコードを含むレコード セットを開きます。
    Set rstTemp = conPubs.OpenRecordset( _
        "SELECT * FROM roysched " & _
        "WHERE title_id LIKE 'BU____' OR " & _
        "title_id LIKE 'PC____'")

    ' レコード セットを列挙します。
    With rstTemp
        Do While Not .EOF
            Debug.Print , !title_id, !lorange, _
                !hirange, !royalty
            .MoveNext
        Loop
        .Close
    End With

    conPubs.Close
    wrkODBC.Close

End Sub


Primary プロパティ (DAO)

Primary プロパティ

Index オブジェクトがテーブルの主キー インデックスを表すかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、Index オブジェクトは主キー インデックスを表します。

Primary プロパティは、まだコレクションに追加されていない新しい Index オブジェクトでは読み取り/書き込みが可能で、Indexes コレクションの既存の Index オブジェクトでは読み取り専用です。Index オブジェクトが TableDef オブジェクトに追加されていても、TableDef オブジェクトは TableDefs コレクションに追加されていない場合には、Index プロパティは読み取り/書き込みが可能になります。

解説

主キー インデックスは、テーブルのすべてのレコードをあらかじめ決められた順序で一意に識別するための、1 つまたは複数のフィールドから構成されます。この場合、インデックス フィールドは重複できないため、Index オブジェクトの Unique プロパティは True に設定されます。主キー インデックスが複数のフィールドから構成される場合、各フィールドでは値の重複が許されますが、インデックスが設定されたすべてのフィールドの値を組み合わせた結果はすべて一意である必要があります。主キー インデックスは、テーブルのキーから構成され、通常は主キーと同じフィールドに設定されます。

メモ 必ずしもテーブルにインデックスを作成する必要はありませんが、インデックスが設定されていない大きなテーブルでは、特定のレコードにアクセスする場合に時間がかかることがあります。Index オブジェクトの各 Field オブジェクトの Attributes プロパティによってレコードの順序が決まるため、そのインデックスへのアクセス方法も決まります。データベースに新しいテーブルを作成する場合は、1 つ以上のフィールドに各レコードを一意に識別するインデックスを作成してから、Index オブジェクトの Primary プロパティに True を設定することをお勧めします。

テーブルの主キーを設定すると、その主キーが自動的にテーブルの主キー インデックスに設定されます。


Primary プロパティの使用例 (DAO/Microsoft Jet)

Primary プロパティの使用例

次の例では、Primary プロパティを使用して、新しく TableDef オブジェクトのインデックスを、テーブルに対する主インデックスとして割り当てます。Primary プロパティに True を設定すると、Unique プロパティと Required プロパティにも同様に True が設定されるので注意してください。

Sub PrimaryX()

    Dim dbsNorthwind As Database
    Dim tdfNew As TableDef
    Dim idxNew As Index
    Dim idxLoop As Index
    Dim fldLoop As Field
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 新しく TableDef オブジェクトを作成して
    ' データベース Northwind の TableDefs コレクションに追加します。
    Set tdfNew = dbsNorthwind.CreateTableDef("NewTable")
    tdfNew.Fields.Append tdfNew.CreateField("NumField", _
        dbLong, 20)
    tdfNew.Fields.Append tdfNew.CreateField("TextField", _
        dbText, 20)
    dbsNorthwind.TableDefs.Append tdfNew

    With tdfNew
        ' 新しく Index オブジェクトを作成して
        ' 新しく作成した TableDef オブジェクトの
        ' Indexes コレクションに追加します。
        Set idxNew = .CreateIndex("NumIndex")
        idxNew.Fields.Append idxNew.CreateField("NumField")
        idxNew.Primary = True
        .Indexes.Append idxNew
        Set idxNew = .CreateIndex("TextIndex")
        idxNew.Fields.Append idxNew.CreateField("TextField")
        .Indexes.Append idxNew

        Debug.Print .Indexes.Count & " Indexes in " & _
            .Name & " TableDef"

        ' Indexes コレクションを列挙します。
        For Each idxLoop In .Indexes

            With idxLoop
                Debug.Print "    " & .Name

                ' 各 Index オブジェクトの
                ' Fields コレクションを列挙します。
                Debug.Print "        Fields"
                For Each fldLoop In .Fields
                    Debug.Print "            " & fldLoop.Name
                Next fldLoop

                ' 各 Index オブジェクトの
                ' Properties コレクションを列挙します。
                Debug.Print "        Properties"
                For Each prpLoop In .Properties
                    Debug.Print "            " & prpLoop.Name & _
                        " = " & IIf(prpLoop = "", "[empty]", _
                        prpLoop)
                Next prpLoop
            End With

        Next idxLoop

    End With

    dbsNorthwind.TableDefs.Delete tdfNew.Name
    dbsNorthwind.Close

End Sub


QueryTimeout プロパティ (DAO)

QueryTimeout プロパティ

ODBC データ ソースでクエリーを実行する場合、タイムアウト エラーが発生するまで待機する秒数を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、整数型 (Integer) の値で、タイムアウト エラーが発生するまで待機する秒数を表します。既定値は 60 秒です。

解説

Microsoft SQL Server などの ODBC データベースを使用している場合、ネットワーク トラフィックや ODBC サーバーの負荷が大きいことなどが原因で、遅延が生じることがあります。このような場合、いつまでも待機せずに、エラーが発生するまで待機する秒数を指定することができます。

Connection オブジェクトまたは Database オブジェクトと共に QueryTimeout プロパティを使用する場合、QueryTimeout プロパティは、そのデータベースと関連するすべてのクエリーに対する値を指定します。特定の QueryDef オブジェクトの ODBCTimeout プロパティを設定することにより、特定のクエリーに対しこの値を無効にできます。

Jet ワークスペースでは、レジストリ パス \HKEY_LOCAL_MACHINE\SOFTWARE\Jet\3.5\ に新しい "ODBC" キーを作成し、そのキーに QueryTimeout パラメータを作成して適切な値を設定すると、既定値を無効にできます。


RecordCount プロパティ (DAO)

RecordCount プロパティ

Recordset オブジェクトでアクセスされたレコード数、またはテーブル タイプの Recordset オブジェクトか TableDef オブジェクトのレコード総数を返します。

戻り値

戻り値は、長整数型 (Long) の値です。

解説

RecordCount プロパティを使用すると、Recordset オブジェクトや TableDef オブジェクトでアクセスされたレコード数を調べることができます。ダイナセット タイプ、スナップショット タイプ、または前方スクロール タイプの Recordset オブジェクトのレコード数は、すべてのレコードがアクセスされるまでは RecordCount プロパティを調べてもわかりません。すべてのレコードがアクセスされると、RecordCount プロパティは、Recordset オブジェクトや TableDef オブジェクトの削除されていないレコードの総数を示します。強制的に最後のレコードにアクセスするには、Recordset オブジェクトに対して MoveLast メソッドを使用します。また、SQL の Count 関数を使用すると、クエリーが返すレコードのおよその数を調べることができます。

メモ MoveLast メソッドを使用して Recordset オブジェクトを読み込むと、パフォーマンスが低下します。Recordset オブジェクトを開いてすぐに正確な RecordCount プロパティを取得する必要がない限り、別のコードによって Recordset オブジェクトを読み込んでから RecordCount プロパティを確認するようにしてください。

アプリケーションでダイナセット タイプの Recordset オブジェクトのレコードが削除されると、RecordCount プロパティの値は減少します。ただし、ほかのユーザーによって削除されたレコードは、そのレコードがカレント レコードになるまで RecordCount プロパティの値には反映されません。RecordCount プロパティの設定値に影響を与えるトランザクションを実行し、続いてそのトランザクションをロールバックした場合、RecordCount プロパティの値は存在する実際のレコード数を反映しなくなります。

スナップショット タイプまたは前方スクロール タイプの Recordset オブジェクトの RecordCount プロパティには、元のテーブルに対して行われた変更は反映されません。

レコードが含まれていない Recordset オブジェクトまたは TableDef オブジェクトの RecordCount プロパティは 0 に設定されます。

リンク テーブルにある TableDef オブジェクトでは、RecordCount プロパティは常に -1 に設定されます。

RecordCount オブジェクトに対して Requery メソッドを適用すると、クエリーを再実行した場合と同じように RecordCount プロパティが再設定されます。


RecordCount プロパティの使用例 (DAO)

RecordCount プロパティの使用例

次の例では、異なるタイプの Recordset オブジェクトの配置前と配置後の RecordCount プロパティの値を説明します。

Sub RecordCountX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' テーブル タイプの Recordset オブジェクトを開いて
        ' RecordCount プロパティを表示します。
        Set rstEmployees = .OpenRecordset("Employees")
        Debug.Print _
            "Table-type recordset from Employees table"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount
        rstEmployees.Close

        ' ダイナセット タイプの Recordset オブジェクトを開いて
        ' 配置する前の RecordCount プロパティを表示します。
        Set rstEmployees = .OpenRecordset("Employees", _
            dbOpenDynaset)
        Debug.Print "Dynaset-type recordset " & _
            "from Employees table before MoveLast"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount

        ' Recordset を配置した後の
        ' RecordCount プロパティを示します。
        rstEmployees.MoveLast
        Debug.Print "Dynaset-type recordset " & _
            "from Employees table after MoveLast"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount
        rstEmployees.Close

        ' スナップショット タイプの Recordset オブジェクトを開いて
        ' 配置する前の RecordCount プロパティを表示します。
        Set rstEmployees = .OpenRecordset("Employees", _
            dbOpenSnapshot)
        Debug.Print "Snapshot-type recordset " & _
            "from Employees table before MoveLast"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount

        ' Recordset を配置した後の
        ' RecordCount プロパティを表示します。
        rstEmployees.MoveLast
        Debug.Print "Snapshot-type recordset " & _
            "from Employees table after MoveLast"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount
        rstEmployees.Close

        ' 前方スクロール タイプの Recordset オブジェクトを開いて
        ' 配置する前の RecordCount プロパティを表示します。
        Set rstEmployees = .OpenRecordset("Employees", _
            dbOpenForwardOnly)
        Debug.Print "Forward-only-type recordset " & _
            "from Employees table before MoveLast"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount

        ' MoveNext メソッドを呼び出した後に
        ' RecordCount プロパティを表示します。
        rstEmployees.MoveNext
        Debug.Print "Forward-only-type recordset " & _
            "from Employees table after MoveNext"
        Debug.Print "    RecordCount = " & _
            rstEmployees.RecordCount
        rstEmployees.Close

        .Close
    End With

End Sub


RecordsAffected プロパティ (DAO)

RecordsAffected プロパティ

最後に呼び出された Execute メソッドの影響を受けたレコード数を返します。

戻り値

戻り値は、長整数型 (Long) の値です。値の範囲は、0 から、Database オブジェクトや QueryDef オブジェクトに対して最後に呼び出された Execute メソッドによって影響を受けたレコード数までになります。

解説

Execute メソッドを使用して、QueryDef オブジェクトからアクション クエリーを実行する場合、RecordsAffected プロパティには、削除、更新、または挿入されたレコード数が含まれます。

ODBCDirect ワークスペースで RecordsAffected オブジェクトを使用する場合、SQL DROP TABLE アクション クエリーから有効な値を取得することはできません。


RecordsAffected プロパティの使用例 (DAO)

RecordsAffected プロパティの使用例

次の例では、Database オブジェクトと QueryDef オブジェクトから実行された、アクション クエリーを持つ RecordsAffected プロパティを使用します。このプロシージャを実行するには、RecordsAffectedOutput 関数が必要です。

Sub RecordsAffectedX()

    Dim dbsNorthwind As Database
    Dim qdfTemp As QueryDef
    Dim strSQLChange As String
    Dim strSQLRestore As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' Employees テーブルの内容に関するレポートを出力します。
        Debug.Print _
            "Number of records in Employees table: " & _
            .TableDefs!Employees.RecordCount
        RecordsAffectedOutput dbsNorthwind

        ' アクション クエリーを定義し、実行します。
        strSQLChange = "UPDATE Employees " & _
            "SET Country = 'United States' " & _
            "WHERE Country = 'USA'"
        .Execute strSQLChange

        ' Employees テーブルの内容に関するレポートを出力します。
        Debug.Print _
            "RecordsAffected after executing query " & _
            "from QueryDef: " & qdfTemp.RecordsAffected
        RecordsAffectedOutput dbsNorthwind

        ' 別のアクション クエリーを定義し、実行します。
        strSQLRestore = "UPDATE Employees " & _
            "SET Country = 'USA' " & _
            "WHERE Country = 'United States'"
        Set qdfTemp = .CreateQueryDef("", strSQLRestore)
        qdfTemp.Execute

        ' Employees テーブルの内容に関するレポートを出力します。
        Debug.Print _
            "RecordsAffected after executing query " & _
            "RecordsAffected: " & qdfTemp.RecordsAffected
        RecordsAffectedOutput dbsNorthwind

        .Close

    End With

End Sub

Function RecordsAffectedOutput(dbsNorthwind As Database)

    Dim rstEmployees As Recordset

    ' Employees テーブルから Recordset を開きます。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        ' Recordset を列挙します。
        .MoveFirst
        Do While Not .EOF
            Debug.Print "    " & !LastName & ", " & !Country
            .MoveNext
        Loop
        .Close
    End With

End Function


RecordStatus プロパティ (DAO)

RecordStatus プロパティ

バッチ更新の一部として更新が行われたカレント レコードの更新状態を示す値を設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。次の表に示す定数のいずれかになります。

定数 | 説明
dbRecordUnmodified | (既定値) レコードが修正されていないか、または正常に更新されました。
dbRecordModified | レコードは修正されましたが、データベース内ではまだ更新されていません。
dbRecordNew | AddNew メソッドによりレコードが挿入されましたが、データベースにはまだ挿入されていません。
dbRecordDeleted | レコードは削除されましたが、データベースにはまだ残っています。
dbRecordDBDeleted | レコードは、ローカルでも、データベースからも削除されました。

解説

RecordStatus プロパティの値は、カレント レコードが次回の共有的バッチ更新に含まれるかどうかを示し、含まれる場合にはその含まれ方を示します。

ユーザーがレコードを変更すると、そのレコードに対する RecordStatus プロパティの値は自動的に dbRecordModified に設定されます。同様に、レコードが追加されたり削除されたりした場合には、それぞれ対応する定数が RecordStatus プロパティに反映されます。各ユーザーがバッチ モードで Update メソッドを使用すると、DAO はレコードの RecordStatus プロパティに基づいて適切な操作が行われるように、リモート サーバーにレコードの処理を一任します。


RecordStatus プロパティと DefaultCursorDriver プロパティの使用例 (DAO/ODBCDirect)

RecordStatus プロパティと DefaultCursorDriver プロパティの使用例

次の例では、RecordStatus および DefaultCursorDriver を使用して、バッチ更新中にローカル Recordset の変更がどのように記録されるかを表示します。このプロシージャを実行するには、RecordStatusOutput 関数が必要です。

Sub RecordStatusX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim rstTemp As Recordset

    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    ' バッチ更新をするには DefaultCursorDriver を
    ' 次のように設定する必要があります。
    wrkMain.DefaultCursorDriver = dbUseClientBatchCursor

    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    ' バッチ更新をするにはロック引数を次のようにする必要があります。
    Set rstTemp = conMain.OpenRecordset( _
        "SELECT * FROM authors", dbOpenDynaset, 0, _
        dbOptimisticBatch)

    With rstTemp
        .MoveFirst
        Debug.Print "Original record: " & !au_lname
        Debug.Print , RecordStatusOutput2(.RecordStatus)

        .Edit
        !au_lname = "Bowen"
        .Update
        Debug.Print "Edited record: " & !au_lname
        Debug.Print , RecordStatusOutput2(.RecordStatus)

        .AddNew
        !au_lname = "NewName"
        .Update
        Debug.Print "New record: " & !au_lname
        Debug.Print , RecordStatusOutput2(.RecordStatus)

        .Delete
        Debug.Print "Deleted record: " & !au_lname
        Debug.Print , RecordStatusOutput2(.RecordStatus)

        ' サーバー上のデータを更新せずに
        ' ローカルのレコード セットを閉じます。
        .Close
    End With

    conMain.Close
    wrkMain.Close

End Sub

Function RecordStatusOutput(lngTemp As Long) As String

    Dim strTemp As String

    strTemp = ""

    ' RecordStatus の値に基づいて、出力文字列を構成します。
    If lngTemp = dbRecordUnmodified Then _
        strTemp = "[dbRecordUnmodified]"
    If lngTemp = dbRecordModified Then _
        strTemp = "[dbRecordModified]"
    If lngTemp = dbRecordNew Then _
        strTemp = "[dbRecordNew]"
    If lngTemp = dbRecordDeleted Then _
        strTemp = "[dbRecordDeleted]"
    If lngTemp = dbRecordDBDeleted Then _
        strTemp = "[dbRecordDBDeleted]"

    RecordStatusOutput = strTemp

End Function


Replicable プロパティ (DAO)

Replicable プロパティ

データベースまたはデータベースのオブジェクトが、レプリケート可能かどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

メモ Database、TableDef、または QueryDef の各オブジェクトの Replicable プロパティを設定または取得するには、CreateProperty メソッドを使用して Replicable プロパティを作成し、オブジェクトの Properties コレクションに追加しておく必要があります。

設定値と戻り値

設定値または戻り値は、テキスト型 (Text) の値です。

Database オブジェクトで Replicable プロパティを "T" に設定すると、データベースはレプリケート可能になります。一度このプロパティに "T" を設定すると変更はできなくなり、"F" (または、"T" 以外の値) を設定しようとするとエラーが発生します。

データベースのオブジェクトで Replicable プロパティを "T" に設定すると、レプリカ セット内のすべてのレプリカのオブジェクト (およびそれ以降のオブジェクトの変更) がレプリケートされます。このプロパティは Access のオブジェクトのプロパティ シートでも設定することができます。

メモ Jet データベース エンジン 3.5 は、ブール型 (Boolean) の ReplicableBool プロパティもサポートしています。ReplicableBool プロパティは、ブール型 (Boolean) の値をとること以外では Replicable プロパティと同じ機能を持っています。ReplicableBool を True に設定すると、オブジェクトはレプリケート可能になります。

解説

データベースに Replicable プロパティを設定する前に、データベースのバックアップ用のコピーを作成してください。Replicable プロパティの設定に失敗した場合は、レプリケートが部分的に行われたデータベースを削除し、バックアップから新しいコピーを作成して、もう一度実行してください。

Database オブジェクトでこのプロパティを設定する場合、Jet データベース エンジンによってデータベースのオブジェクトに、フィールド、テーブル、およびプロパティが追加されます。Jet データベース エンジンは、オブジェクトの同期をとるためにこれらのフィールド、テーブルおよびプロパティを使用します。たとえば、すべての既存のテーブルには、どのレコードが変更されたかを識別するための 3 つのフィールドが新しく追加されます。これらのフィールドやほかのオブジェクトが追加されることにより、データベースのサイズが大きくなります。

Access などのホスト アプリケーションで定義されたフォーム、レポート、マクロ、およびモジュールでは、Replicable プロパティは、ホストのユーザー インターフェースを使用してホスト定義のオブジェクトに設定します。Replicable プロパティを一度設定すると、ホスト オブジェクトを表す Document オブジェクトの Properties コレクションに Replicable プロパティが含められます。

Replicable プロパティが、既にオブジェクトのプロパティ シートの Replicated チェック ボックスを使ってオブジェクトに設定されている場合は、コードを使用して Replicable プロパティを設定することはできません。

レプリカでテーブル、クエリー、フォーム、レポート、マクロまたはモジュールを新しく作成する場合、オブジェクトをローカルにしてそのレプリカにのみ格納します。ほかのレプリカのユーザーがそのオブジェクトを使用する場合には、ローカルからレプリケート可能に変更してください。オブジェクトをデザイン マスターで作成またはインポートして、その後 Replicable プロパティを "T" に設定してください。

Replicable プロパティを設定するオブジェクトは、既にこのプロパティをほかのオブジェクトから継承している場合があります。ただし、ほかのオブジェクトによって設定された値は、レプリケート可能に設定するオブジェクトの動作には影響しません。それぞれのオブジェクトで明示的にプロパティを設定する必要があります。


Replicable プロパティの使用例 (DAO/Microsoft Jet)

Replicable プロパティの使用例

これらの例では、データベースとデータベースのオブジェクトでの Replicable プロパティを使用して 2 つの状況を示しています。

次の例では、Northwind.mdb データベースをレプリケート可能なデータベースに変換します。このコードを実行する前に、Northwind データベースのバックアップのコピーを作成し、現在のパスを使用しているコンピュータ上の Northwind のパスに変更することをお勧めします。

Sub MakeDesignMasterX()

    Dim dbsNorthwind As Database
    Dim prpNew As Property

    ' 排他的アクセス モードでデータベースを開きます。
    Set dbsNorthwind = OpenDatabase("Northwind.mdb", _
        True)

    With dbsNorthwind

        ' Replicable プロパティが存在しない場合には、作成します。
        ' 存在する場合には、エラー処理をオフにします。
        On Error Resume Next
        Set prpNew = .CreateProperty("Replicable", _
            dbText, "T")
        .Properties.Append prpNew

        ' データベースの Replicable プロパティを True に設定します。
        .Properties("Replicable") = "T"

        .Close

    End With

End Sub

次の例では、新しく TableDef を作成し、レプリケート可能にします。このプロシージャを動作させるには、データベースはレプリケート可能である必要があります。

Sub CreateReplLocalTableX()

    Dim dbsNorthwind As Database
    Dim tdfNew As TableDef
    Dim fldNew As Field
    Dim prpNew As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' "Taxes" の名前で、新しい TableDef を作成します。
    Set tdfNew = dbsNorthwind.CreateTableDef("Taxes")
    ' "Grade" の名前でテキスト型フィールドを定義します。
    Set fldNew = tdfNew.CreateField("Grade", dbText, 3)
    ' 新しいフィールドを TableDef に追加します。
    tdfNew.Fields.Append fldNew

    ' 新しい TableDef をデータベースに追加します。
    dbsNorthwind.TableDefs.Append tdfNew

    ' 新しい TableDef オブジェクトに対して
    ' 新しい Replicable プロパティを作成します。
    Set prpNew = tdfNew.CreateProperty("Replicable", _
        dbText, "T")
    ' 新しい TableDef オブジェクトに対して
    ' Replicable プロパティを追加します。
    tdfNew.Properties.Append prpNew
    dbsNorthwind.Close

End Sub

プロパティが存在しない場合は、作成して、テーブルの オブジェクトで 以下のコードでは、指定した TableDef オブジェクトで Replicable プロパティを "T" に設定します。プロパティが存在しない場合は、作成して、テーブルの Properties コレクションに追加してから、"T" の値を設定します。

Sub SetReplicable(tdfTemp As TableDef)

    On Error GoTo ErrHandler

    tdfTemp.Properties("Replicable") = "T"

    On Error GoTo 0

    Exit Sub

ErrHandler:

    Dim prpNew As Property

    If Err.Number = 3270 Then
        Set prpNew = tdfTemp.CreateProperty("Replicable", _
            dbText, "T")
        tdfTemp.Properties.Append prpNew
    Else
        MsgBox "Error " & Err & ": " & Error
    End If

End Sub


ReplicaFilter プロパティ (DAO)

ReplicaFilter プロパティ

部分レプリカの TableDef オブジェクトに、どのレコードのサブセットがフル レプリカからレプリケートされたかを示す値を設定または返します。これは Jet データベースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) またはブール型 (Boolean) の値です。次の表に、どのレコードのサブセットがレプリケートされるかを示します。

値 | 説明
文字列 | 抽出条件です。部分レプリカのテーブルにあるレコードは、フル レプリカからレプリケートされるためにこの条件を満たす必要があります。
True | すべてのレコードをレプリケートします。
False | (既定値) レコードをレプリケートしません。

解説

ReplicaFilter プロパティは、SQL ステートメントの WHERE を持たない WHERE 句に似ていますが、抽出条件には、サブクエリー、Count などの集計関数、またはユーザー定義の関数などを指定することはできません。

フル レプリカと部分レプリカ間でのみ同期をとることができます。2 つの部分レプリカ間のデータの同期をとることはできません。また、部分レプリカを使用すると、レプリケートされるレコードを制限することはできますが、どのフィールドがレプリケートされるかを指示することはできません。

通常は、異なるレコード セットをレプリケートするには、レプリカ フィルタを再設定します。たとえば、販売員が一時的にほかの販売員の区域を引き継いだ場合、データベースのアプリケーションでは 2 つの区域のデータを一時的にレプリケートし、その後以前のフィルタに戻すことができます。このような場合、アプリケーションは ReplicaFilter プロパティの値を再設定して、部分レプリカをもう一度作成します。

アプリケーションがレプリカ フィルタを変更する場合には、次の手順に従ってください。

  1. Synchronize メソッドを使用して、フル レプリカと、フィルタを変更しようとしている部分レプリカとの同期をとります。

  2. ReplicaFilter プロパティを使用して、レプリカ フィルタを変更します。

  3. PopulatePartial メソッドを使用して、部分レプリカからすべてのレコードを削除し、新しいレプリカ フィルタの抽出条件を満たしているすべてのレコードをフル レプリカから移動します。

フィルタを削除するには、ReplicaFilter プロパティの値を False に設定します。すべてのフィルタを削除してから PopulatePartial メソッドを呼び出すと、部分レプリカでレプリケートされたテーブルにはレコードは表示されなくなります。

メモ レプリカ フィルタの変更後、PopulatePartial プロパティの呼び出しを行わずに Synchronize メソッドを呼び出すと、トラップ可能なエラーが発生します。


ReplicaFilter プロパティの使用例 (DAO/Microsoft Jet)

ReplicaFilter プロパティの使用例

次の例では、ReplicaFilter プロパティを使用して、カリフォルニア地域から顧客レコードのみをレプリケートします。

Sub ReplicaFilterX()

    ' この例では、現在開いているデータベースが
    ' レプリカであると仮定します。
    Dim tdfCustomers As TableDef
    Dim strFilter As String
    Dim dbsTemp As Database

    Set dbsTemp = OpenDatabase("Northwind.mdb")
    Set tdfCustomers = dbsTemp.TableDefs("Customers")

    ' レプリカ フィルタを設定する前に
    ' フル レプリカで同期をとります。
    dbsTemp.Synchronize "C:\SALES\FY96.MDB"

    strFilter = "Region = 'CA'"
    tdfCustomers.ReplicaFilter = strFilter
    dbsTemp.PopulatePartial "C:\SALES\FY96.MDB"

    ' レプリカ フィルタを削除します (例示目的にのみ)
    tdfCustomers.ReplicaFilter = False
    ' データベースを再配置します。
    dbsTemp.PopulatePartial "C:\SALES\DATA96.MDB"

End Sub


ReplicaID プロパティ (DAO)

ReplicaID プロパティ

データベースのレプリカを一意に識別する 16 バイトの値を返します。これは Jet ワークスペースでのみ使用することができます。

戻り値

戻り値は、GUID 型 (GUID) の値です。レプリカまたはデザイン マスターを一意に識別します。

解説

Jet データベース エンジンは、新しいレプリカを作成すると自動的にこの値を作成します。

各レプリカおよびデザイン マスターの ReplicaID プロパティは、MSysReplicas システム テーブルに格納されます。


ReplicaID プロパティの使用例 (DAO/Microsoft Jet)

ReplicaID プロパティの使用例

次の例では、データベース Northwind.mdb のデザイン マスターからレプリカを作成し、Jet データベース エンジンで自動的に作成されるレプリカのレプリカ ID を返します。データベース Northwind mdb. のデザイン マスターをまだ作成していない場合には、Replicable プロパティを参照するか、コードのデータベース名を既存のデザイン マスターに変更してください。

Sub MakeReplicaReplicaIDX()

    Dim dbsNorthwind As Database
    Dim prpReplicaID As Property
    Dim dbsReplica As Database

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 新しいレプリカを作成します。
    dbsNorthwind.MakeReplica "Nwreplica2.mdb", _
        "second replica"
    dbsNorthwind.Close

    ' 新しいレプリカを開いて、ReplicaID を読み取ります。
    Set dbsReplica = OpenDatabase("Nwreplica2.mdb")

    Debug.Print dbsReplica.ReplicaID
    dbsReplica.Close

End Sub


Required プロパティ (DAO)

Required プロパティ

Field オブジェクトで Null 値以外の値を要求するかどうか、または Index オブジェクトのすべてのフィールドが値を持つ必要があるかどうかを示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、フィールドで Null 値を使用することができません。

コレクションにまだ追加されていないオブジェクトでは、このプロパティは読み取り/書き込みが可能です。Recordset オブジェクトや TableDef オブジェクトの Indexes コレクションに追加されているオブジェクトの場合、このプロパティは読み取り専用です。

解説

次の表に示すように、Required プロパティの使い方は、Fields コレクションがどのオブジェクトに含まれているかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。

Field オブジェクトでは、AllowZeroLength、ValidateOnSet、または ValidationRule の各プロパティと共に Required プロパティを使用すると、Field オブジェクトの Value プロパティに有効な値のみが設定されるように制限できます。Required プロパティが False に設定されている場合、そのフィールドには、Null 値および AllowZeroLength プロパティと ValidationRule プロパティで指定した条件を満たす値を入力できます。

メモ Index オブジェクトまたは Field オブジェクトの両方でこのプロパティを設定できる場合は、Field オブジェクトに対して設定してください。Field オブジェクトの Required プロパティの設定値は、Index オブジェクトの Required プロパティの設定値よりも先に確認されます。


Required プロパティの使用例 (DAO)

Required プロパティの使用例

次の例では、Required プロパティを使用して、新しいレコードを追加するために必要な、3 つの異なるテーブルのフィールドに含まれるデータに関してレポートします。このプロシージャを実行するには、RequiredOutput プロシージャが必要です。

Sub RequiredX()

    Dim dbsNorthwind As Database
    Dim tdfloop As TableDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' 3 つの異なる TableDef オブジェクトの
        ' Fields コレクション内で必要なフィールドを表示します。
        RequiredOutput .TableDefs("Categories")
        RequiredOutput .TableDefs("Customers")
        RequiredOutput .TableDefs("Employees")
        .Close
    End With

End Sub

Sub RequiredOutput(tdfTemp As TableDef)

    Dim fldLoop As Field

    ' 指定の TableDef オブジェクトの Fields コレクションを列挙し
    ' Required プロパティを示します。
    Debug.Print "Fields in " & tdfTemp.Name & ":"
    For Each fldLoop In tdfTemp.Fields
        Debug.Print , fldLoop.Name & ", Required = " & _
            fldLoop.Required
    Next fldLoop

End Sub


Restartable プロパティ (DAO)

Restartable プロパティ

Recordset オブジェクトに Requery メソッドを適用できるかどうかを示す値を返します。Requery メソッドは、Recordset オブジェクトの元のクエリーを再実行します。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、Recordset オブジェクトに Requery メソッドを適用できます。テーブル タイプの Recordset オブジェクトでは常に False が返されます。

解説

Recordset オブジェクトに対して Requery メソッドを適用する場合、その前に Restartable プロパティの設定値を調べます。そのオブジェクトの Restartable プロパティが False に設定されている場合にクエリーを再実行するには、元の QueryDef オブジェクトに対して OpenRecordset メソッドを呼び出します。


Restartable プロパティの使用例 (DAO)

Restartable プロパティの使用例

次の例では、異なる Recordset オブジェクトの Restartable プロパティについて説明します。

Sub RestartableX()

    Dim dbsNorthwind As Database
    Dim rstTemp As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' テーブル タイプの Recordset オブジェクトを開いて
        ' 設定されている Restartable プロパティを出力します。
        Set rstTemp = .OpenRecordset("Employees", dbOpenTable)
        Debug.Print _
            "Table-type recordset from Employees table"
        Debug.Print "    Restartable = " & rstTemp.Restartable
        rstTemp.Close

        ' SQL ステートメントから Recordset を開いて
        ' 設定されている Restartable プロパティを出力します。
        Set rstTemp = _
            .OpenRecordset("SELECT * FROM Employees")
        Debug.Print "Recordset based on SQL statement"
        Debug.Print "    Restartable = " & rstTemp.Restartable
        rstTemp.Close

        ' 永続的な QueryDef オブジェクトから
        ' Recordset を開いて
        ' 設定されている Restartable プロパティを出力します。
        Set rstTemp = .OpenRecordset("Current Product List")
        Debug.Print _
            "Recordset based on permanent QueryDef (" & _
            rstTemp.Name & ")"
        Debug.Print "    Restartable = " & rstTemp.Restartable
        rstTemp.Close

        .Close
    End With

End Sub


ReturnsRecords プロパティ (DAO)

ReturnsRecords プロパティ

外部データベースに対する SQL パススルー クエリーがレコードを返すかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、パススルー クエリーはレコードを返します。既定値は True です。

解説

SQL パススルー クエリーには、外部データベースのレコードを返さないものがあります。たとえば、SQL の SELECT ステートメントはレコードを返しますが、SQL の UPDATE ステートメントは、レコードを返さずに更新します。ReturnsRecords プロパティの値が True の場合、クエリーはレコードを返し、False の場合、クエリーはレコードを返しません。

メモ ReturnsRecords プロパティを設定する場合、先に Connect プロパティを設定しておく必要があります。


Size プロパティ (DAO)

Size プロパティ

Field オブジェクトの最大サイズを示す値をバイト単位で設定または返します。

設定値と戻り値

設定値または戻り値は、Field オブジェクトの最大サイズを示す定数です。Fields コレクションにまだ追加されていないオブジェクトの場合、このプロパティは読み取り/書き込みが可能です。設定値は、Field オブジェクトの Type プロパティの設定値によって異なります。設定値の詳細については、「解説」を参照してください。

解説

文字データからなるメモ型 (Memo) フィールド以外のフィールドの Size プロパティは、フィールドに保持できる最大の文字数を示します。数値フィールドの Size プロパティは、保存に必要なバイト数を示します。

次の表に示すように、Size プロパティの使い方は、Field オブジェクトが追加される Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り専用です。

テキスト型 (Text) 以外の Field オブジェクトを作成する場合、Type プロパティの設定値により自動的に Size プロパティの設定値が決まるため、明示的に Size プロパティを設定する必要はありません。ただし、テキスト型 (Text) の Field オブジェクトでは、Size プロパティに最大テキスト サイズ (Jet データベースでは 255 バイト) までの整数を指定できます。サイズの設定を省略した場合は、データベースでの最大許容サイズに設定されます。

ロング バイナリ型 (Long Binary) およびメモ型 (Memo) の Field オブジェクトの Size プロパティは、常に 0 に設定されます。特定のレコードのデータのサイズを調べるには、Field オブジェクトの FieldSize プロパティを使用します。ロング バイナリ型 (Long Binary) およびメモ型 (Memo) フィールドの最大サイズは、システム リソースやデータベースでの最大許容サイズにのみ制限されます。


Size プロパティの使用例 (DAO)

Size プロパティの使用例

次の例では、Employees テーブルにある Field オブジェクト名とサイズを列挙して、Size プロパティを説明します。

Sub SizeX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim fldNew As Field
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind.TableDefs!Employees

    With tdfEmployees

        ' 新しく Field オブジェクトを作成して
        ' Employees テーブルに追加します。
        Set fldNew = .CreateField("FaxPhone")
        fldNew.Type = dbText
        fldNew.Size = 20
        .Fields.Append fldNew

        Debug.Print "TableDef: " & .Name
        Debug.Print "    Field.Name - Field.Type - Field.Size"

        ' Fields コレクションを列挙して
        ' そのフィールド名、タイプ、サイズを出力します。
        For Each fldLoop In .Fields
            Debug.Print "        " & fldLoop.Name & " - " & _
                fldLoop.Type & " - " & fldLoop.Size
        Next fldLoop

        ' ここではデモとして新しいフィールドを削除します。
        .Fields.Delete fldNew.Name

    End With

    dbsNorthwind.Close

End Sub


Sort プロパティ (DAO)

Sort プロパティ

Recordset オブジェクトのレコードの並べ替え順序を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、SQL ステートメントの ORDER BY 句から予約語 ORDER BY を除いた文字列型 (String) の値です。

解説

Sort プロパティは、ダイナセット タイプおよびスナップショット タイプの Recordset オブジェクトで使用することができます。

オブジェクトに対してこのプロパティを設定すると、そのオブジェクトから次に Recordset オブジェクトが作成される場合に並べ替えが行われます。Sort プロパティの設定値は、QueryDef オブジェクトで指定した並べ替え順序よりも優先します。

既定の並べ替え順序は、昇順 (A ～ Z 、あ ～ ん、または 0 ～ 100) です。

Sort プロパティは、テーブル タイプおよび前方スクロール タイプの Recordset オブジェクトには適用できません。テーブル タイプの Recordset オブジェクトの並べ替えを行うには、Index プロパティを使用します。

メモ 通常は、並べ替え条件を指定した SQL ステートメントを使用して新しい Recordset オブジェクトを開いたほうが、並べ替えが速く行われます。


Sort プロパティの使用例 (DAO/Microsoft Jet)

Sort プロパティの使用例

次の例では、Sort プロパティの値を変更し、新しい Recordset を作成して、Sort プロパティを説明します。このプロシージャを実行するには、SortOutput 関数が必要です。

Sub SortX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim rstSortEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)

    With rstEmployees
        SortOutput "Original Recordset:", rstEmployees
        .Sort = "LastName, FirstName"
        ' Sort プロパティとレコードの並び順に関する
        ' レポートを出力します。
        SortOutput _
            "Recordset after changing Sort property:", _
            rstEmployees
        ' カレントの Recordset から新しく Recordset を開きます。
        Set rstSortEmployees = .OpenRecordset
        ' Sort プロパティとレコードの並び順に関する
        ' レポートを出力します。
        SortOutput "New Recordset:", rstSortEmployees
        rstSortEmployees.Close
        .Close
    End With

    dbsNorthwind.Close

End Sub

Function SortOutput(strTemp As String, _
    rstTemp As Recordset)

    With rstTemp
        Debug.Print strTemp
        Debug.Print "    Sort = " & _
            IIf(.Sort <> "", .Sort, "[Empty]")
        .MoveFirst

        ' Recordset を列挙します。
        Do While Not .EOF
            Debug.Print "        " & !LastName & _
                ", " & !FirstName
            .MoveNext
        Loop

    End With

End Function

メモ 選択するデータがわかっている場合は、SQL ステートメントを使用して Recordset を作成するとより効率的です。次の例では、先の例と同様に、Recordset を 1 つだけ作成して、結果を取得する方法を示します。

Sub SortX2()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' 並び順を指定する SQL ステートメントから
    ' Recordset を開きます。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("SELECT * " & _
        "FROM Employees ORDER BY LastName, FirstName", _
        dbOpenDynaset)

    dbsNorthwind.Close

End Sub


Source プロパティ (DAO)

Source プロパティ

エラーが発生したオブジェクトまたはアプリケーション名を返します。

戻り値

戻り値は、エラーが発生したオブジェクトまたはアプリケーションを示す文字列型 (String) の値です。

解説

通常は、この文字列式はオブジェクトのクラス名か、またはプログラム内部の ID になります。Source プロパティを使用すれば、別のアプリケーションのオブジェクトでエラーが発生して、自分のコードで処理ができない場合、ユーザーに情報を提供することができます。

たとえば、Excel を使用していて、Excel で「0 による除算」エラーが発生した場合、Error オブジェクトの Error.Number プロパティにはそのエラーに対応する Excel のエラー コードが設定され、Source プロパティには Excel.Application が設定されます。Excel から呼び出されたほかのオブジェクトでエラーが発生した場合でも、Excel によってそのエラーは遮られ、Error.Number プロパティには Excel のエラー コードが設定されます。ただし、Source プロパティなどのほかのプロパティには、エラーの発生したオブジェクトによって設定される値が格納されます。Source プロパティには、常にエラーの発生源となったオブジェクト名が設定されます。

このようなエラーに関する情報をすべて使用することによって、エラーを適切に処理するコードを作成できます。エラー ハンドラでエラーの処理に失敗した場合は、Error オブジェクトの情報を使用してエラーの内容をユーザーに知らせることができます。たとえば、Source プロパティなどの Error オブジェクトのプロパティを使用して、エラーの発生源であるオブジェクトやエラー内容などをユーザーに知らせることができます。

メモ ほかのオブジェクトへのアクセス中に発生したエラーを処理する場合、On Error GoTo よりも On Error Resume Next の構文を使用した方がよい場合があります。オブジェクトとデータのやり取りを行うたびに Error オブジェクトのプロパティを調べれば、エラー発生時にコードからアクセスしていたオブジェクトを特定できる可能性が高くなります。たとえば、Error.Number プロパティにエラー コードを設定したオブジェクトを調べたり、エラーの発生源となったオブジェクト (Error.Source プロパティで示されるオブジェクト) を特定したりできます。


SourceField、SourceTable プロパティ (DAO)

SourceField、SourceTable プロパティ

  • SourceField プロパティ - Field オブジェクトのデータ ソースのフィールド名を示す値を返します。

  • SourceTable プロパティ - Field オブジェクトのデータ ソースのテーブル名を示す値を返します。

戻り値

戻り値は、データ ソースのフィールド名やテーブル名を示す文字列型 (String) の値です。

解説

次の表に示すように、SourceField プロパティおよび SourceTable プロパティの使い方は、Field オブジェクトが追加される Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り専用です。

これらのプロパティは、Field オブジェクトに関連付けられたデータ ソースのフィールド名およびテーブル名を示します。たとえば、クエリーのフィールドに、データ ソースのテーブルのフィールド名と関連のない名前が付けられている場合でも、これらのプロパティを使用することでそのフィールドのデータ ソースのテーブル名やフィールド名を調べることができます。

メモ SourceTable プロパティは、テーブル タイプの Recordset オブジェクトに含まれる Fields コレクションに含まれる Field オブジェクトで使用した場合、有効なテーブル名を返しません。


SourceField、SourceTable プロパティの使用例 (DAO)

SourceField、SourceTable プロパティの使用例

次の例では、2 つのテーブルのフィールドで構成されている Recordset を開いて、SourceField プロパティと SourceTable プロパティを説明します。

Sub SourceFieldX()

    Dim dbsNorthwind As Database
    Dim rstProductCategory As Recordset
    Dim fldLoop As Field
    Dim strSQL As String

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' 2 つの異なるテーブルのフィールドを使用する
    ' SQL ステートメントから Recordset を開きます。
    strSQL = "SELECT ProductID AS ProdID, " & _
        "ProductName AS ProdName, " & _
        "Categories.CategoryID AS CatID, " & _
        "CategoryName AS CatName " & _
        "FROM Categories INNER JOIN Products ON " & _
        "Categories.CategoryID = Products.CategoryID " & _
        "ORDER BY ProductName"
    Set rstProductCategory = _
        dbsNorthwind.OpenRecordset(strSQL)

    Debug.Print "Field - SourceTable - SourceField"
    ' Recordset の Fields コレクションを列挙して
    ' フィールド名、元のテーブル、元の名前を出力します。
    For Each fldLoop In rstProductCategory.Fields
        Debug.Print "    " & fldLoop.Name & " - " & _
            fldLoop.SourceTable & " - " & fldLoop.SourceField
    Next fldLoop

    rstProductCategory.Close
    dbsNorthwind.Close

End Sub


SourceTableName プロパティ (DAO)

SourceTableName プロパティ

リンク テーブルやベース テーブル名を示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、テーブル名を示す文字列型 (String) の値です。ベース テーブルの場合、このプロパティの設定値は、長さ 0 の文字列 ("") になります。ベース テーブルでは、このプロパティは読み取り専用です。リンク テーブル、またはコレクションにまだ追加されていないオブジェクトの場合は、このプロパティは読み取り/書き込みが可能です。


Connect プロパティと SourceTableName プロパティの使用例 (DAO)

Connect プロパティと SourceTableName プロパティの使用例

次の例では、Connect および SourceTableName プロパティを使用して、さまざまな外部テーブルを Jet データベースにリンクします。このプロシージャを実行するには、ConnectOutput プロシージャが必要です。

Sub ConnectX()

    Dim dbsTemp As Database
    Dim strMenu As String
    Dim strInput As String

    ' テーブルをリンクする Jet データベース エンジンを
    ' 開きます。
    Set dbsTemp = OpenDatabase("DB1.mdb")

    ' メニューの文字列を組み立てます。
    strMenu = "Enter number for data source:" & vbCr
    strMenu = strMenu & _
        "   1. Microsoft Jet database" & vbCr
    strMenu = strMenu & _
        "   2. dBASE table" & vbCr
    strMenu = strMenu & _
        "   3. Paradox table" & vbCr
    strMenu = strMenu & _
        "   M. (see choices 5-9)"

    ' ユーザーからの入力を受け付けます。
    strInput = InputBox(strMenu)

    If UCase(strInput) = "M" Then

        ' メニューの文字列を組み立てます。
        strMenu = "Enter number for data source:" & vbCr
        strMenu = strMenu & _
            "   4. Microsoft Excel spreadsheet" & vbCr
        strMenu = strMenu & _
            "   5. Lotus spreadsheet" & vbCr
        strMenu = strMenu & _
            "   6. Comma-delimited text (CSV)" & vbCr
        strMenu = strMenu & _
            "   7. HTML table" & vbCr
        strMenu = strMenu & _
            "   8. Microsoft Exchange folder"

        ' ユーザーからの入力を受け付けます。
        strInput = InputBox(strMenu)

    End If

    ' ConnectOutput プロシージャを呼び出します。
    ' 3 番目の引数は接続文字列として
    ' 4 番目の引数は SourceTableName として
    ' 使用されます。
    Select Case Val(strInput)
        Case 1
            ConnectOutput dbsTemp, _
                "JetTable", _
                ";DATABASE=C:\My Documents\Northwind.mdb", _
                "Employees"

        Case 2
            ConnectOutput dbsTemp, _
                "dBASETable", _
                "dBase IV;DATABASE=C:\dBASE\Samples", _
                "Accounts"
        Case 3
            ConnectOutput dbsTemp, _
                "ParadoxTable", _
                "Paradox 3.X;DATABASE=C:\Paradox\Samples", _
                "Accounts"
        Case 4
            ConnectOutput dbsTemp, _
                "ExcelTable", _
                "Excel 5.0;" & _
                    "DATABASE=C:\Excel\Samples\Q1Sales.xls", _
                "JanuarySales$"
        Case 5
            ConnectOutput dbsTemp, _
                "LotusTable", _
                "Lotus WK3;" & _
                    "DATABASE=C:\Lotus\Samples\Sales.wk3", _
                "THIRDQTR:"
        Case 6
            ConnectOutput dbsTemp, _
                "CSVTable", _
                "Text;DATABASE=C:\Samples", _
                "Sample.txt"
        Case 7
            ConnectOutput dbsTemp, _
                "HTMLTable", _
                "HTML Import;DATABASE=http://" & _
                    "www.server1.com/samples/page1.html", _
                "Q1SalesData"
        Case 8
            ConnectOutput dbsTemp, _
                "ExchangeTable", _
                "Exchange 4.0;MAPILEVEL=" & _
                    "Mailbox - Michelle Wortman (Exchange)" & _
                    "|People\Important;", _
                "Jerry Wheeler"
    End Select

    dbsTemp.Close

End Sub

Sub ConnectOutput(dbsTemp As Database, _
    strTable As String, strConnect As String, _
    strSourceTable As String)

    Dim tdfLinked As TableDef
    Dim rstLinked As Recordset
    Dim intTemp As Integer

    ' Connect プロパティと SourceTableName プロパティを
    ' 渡された引数に基づいて設定し、
    ' 新しい Tabledef を作成して Tabledefs コレクションに
    ' 追加します。
    Set tdfLinked = dbsTemp.CreateTableDef(strTable)

    tdfLinked.Connect = strConnect
    tdfLinked.SourceTableName = strSourceTable
    dbsTemp.TableDefs.Append tdfLinked

    Set rstLinked = dbsTemp.OpenRecordset(strTable)

    Debug.Print "Data from linked table:"

    ' リンクしたテーブルの最初の 3 つのレコードを表示します。
    intTemp = 1
    With rstLinked
        Do While Not .EOF And intTemp <= 3
            Debug.Print , .Fields(0), .Fields(1)
            intTemp = intTemp + 1
            .MoveNext
        Loop
        If Not .EOF Then Debug.Print , "[additional records]"
        .Close
    End With

    ' ここではデモとしてリンクしたテーブルを削除します。
    dbsTemp.TableDefs.Delete strTable

End Sub


SQL プロパティ (DAO)

SQL プロパティ

QueryDef オブジェクトが実行するクエリーを定義する SQL ステートメントを設定または返します。

設定値と戻り値

設定値または戻り値は、SQL ステートメントからなる文字列型 (String) の値です。

解説

SQL プロパティには、クエリーを実行する際のレコードの選択、グループ化、および並べ替えの方法を示す SQL ステートメントを指定します。このクエリーを使用して、Recordset オブジェクトに追加するレコードを選択できます。また、アクション クエリーを使用して、レコードを返さずにデータを変更することもできます。

クエリーで使用する SQL 構文は、クエリー エンジンの SQL 文法に従う必要があります。SQL 文法はワークスペースの種類によって異なります。Jet ワークスペースでは Jet SQL 文法を使用してください。ただし、SQL パススルー クエリーを作成する場合はサーバーの文法を使用してください。ODBCDirect ワークスペースではサーバーの SQL 文法を使用してください。

メモ DAO のクエリーは ODBCDirect を使用してさまざまな種類のデータベース サーバーに送ることができますが、それらのサーバーが認識する SQL 文法はそれぞれ微妙に異なります。この理由から、Jet SQL 用の状況依存ヘルプは提供されていませんが、Jet SQL のオンライン ヘルプについては [ヘルプ] メニューから利用できます。Jet 接続型クライアント/サーバー アプリケーションの中で ODBCDirect 接続やパススルー クエリーを使用する場合は、使用するデータベース サーバーの SQL 文法について、必ず対応するリファレンス マニュアルを参照してください。

SQL ステートメントにクエリーのパラメータが含まれている場合は、クエリーの実行前にそれらのパラメータを設定しておく必要があります。パラメータを再設定しないと、クエリーを実行するたびに同じパラメータが適用されます。

ODBCDirect ワークスペースでは、SQL プロパティを使用してサーバー上で準備されたステートメントを実行することもできます。たとえば、SQL プロパティに次の文字列を設定すると、パラメータを 1 つ持つ "GetData" という名前の準備されたステートメントが、Microsoft SQL Server のバックエンドで実行されます。

"{call GetData (?)}"

Jet ワークスペースでは、Jet 接続型 ODBC データ ソースに対して SQL のパススルーの操作を行う場合に、QueryDef を使用すると便利です。QueryDef オブジェクトの Connect プロパティに ODBC データ ソースを設定することにより、外部サーバーに渡すクエリーの中で、Jet データベース エンジンで定義されていない SQL ステートメントを指定できます。たとえば、Microsoft SQL Server や Sybase SQL Server などのデータベースで使用する TRANSACT SQL ステートメントを指定できます。このステートメントは Jet データベース エンジンでは処理されません。

メモ 整数値以外の文字を連結した文字列を SQL プロパティに設定する場合、システム パラメータで米国式 10 進文字以外のカンマなどの文字を指定していると (たとえば、strSQL = "PRICE > " & lngPrice で lngPrice = 125,50 というような場合)、Jet データベースで QueryDef オブジェクトを実行しようとしたときに、エラーが発生します。これは、文字列の連結の際に、数値はシステムの既定の 10 進文字を使用して文字列に変換されますが、Jet SQL は米国式の 10 進文字しか認識しないためです。


SQL プロパティの使用例 (DAO)

SQL プロパティの使用例

次の例では、一時的な QueryDef オブジェクトの SQL プロパティを設定、変更し、その結果を比較して、SQL プロパティを説明します。このプロシージャを実行するには、SQLOutput 関数が必要です。

Sub SQLX()

    Dim dbsNorthwind As Database
    Dim qdfTemp As QueryDef
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set qdfTemp = dbsNorthwind.CreateQueryDef("")

    ' 一時的な QueryDef オブジェクトを使用して Recordset を開き
    ' レポートを出力します。
    SQLOutput "SELECT * FROM Employees " & _
        "WHERE Country = 'USA' " & _
        "ORDER BY LastName", qdfTemp

    ' 一時的な QueryDef オブジェクトを使用して Recordset を開き
    ' レポートを出力します
    SQLOutput "SELECT * FROM Employees " & _
        "WHERE Country = 'UK' " & _
        "ORDER BY LastName", qdfTemp

    dbsNorthwind.Close

End Sub

Function SQLOutput(strSQL As String, qdfTemp As QueryDef)

    Dim rstEmployees As Recordset

    ' 一時的な QueryDef オブジェクトの SQL プロパティを設定して
    ' Recordset を開きます。
    qdfTemp.SQL = strSQL
    Set rstEmployees = qdfTemp.OpenRecordset

    Debug.Print strSQL

    With rstEmployees
        ' Recordset を列挙します。
        Do While Not .EOF
            Debug.Print "    " & !FirstName & " " & _
                !LastName & ", " & !Country
            .MoveNext
        Loop
        .Close
    End With

End Function


StillExecuting プロパティ (DAO)

StillExecuting プロパティ

dbRunAsync 定数を指定して呼び出されたメソッドなどの非同期操作の実行が完了しているかどうかを示す値を返します。これは ODBCDirect ワークスペースでのみ使用することができます。

戻り値

戻り値は、ブール型 (Boolean) の値です。クエリーがまだ実行中であれば True になり、クエリーの実行が完了していれば False になります。

解説

StillExecuting プロパティは、直前に呼び出された Execute、MoveLast、OpenConnection、OpenRecordset などの dbRunAsync 定数を指定して実行される非同期のメソッドが完了しているかどうかを確認するために使用します。StillExecuting プロパティが True の間は、返されるオブジェクトにはアクセスできません。

次の表に、特定のオブジェクトに対して StillExecuting プロパティを使用した場合に評価されるメソッドを示します。

StillExecuting が使用された場合 | 評価される非同期メソッド
Connection オブジェクト | Execute または OpenConnection
QueryDef オブジェクト | Execute
Recordset オブジェクト | MoveLast または OpenRecordset

Connection オブジェクトまたは Recordset オブジェクトで StillExecuting が False を返した場合、OpenConnection または OpenRecordset を呼び出し、関連する Connection オブジェクトまたは Recordset オブジェクトを取得してそれを参照することができます。StillExecuting が True である間は、このプロパティを読み取ること以外にオブジェクトを参照することはできません。NextRecordset メソッドを使用して Recordset オブジェクトの処理を完了する場合は、それ以降の結果セットを取得する間、StillExecuting は True に再設定されます。

進行中の処理を終了するには、Cancel メソッドを使用します。


StillExecuting プロパティと Cancel メソッドの使用例 (DAO/ODBCDirect)

StillExecuting プロパティと Cancel メソッドの使用例

次の例では、StillExecuting プロパティおよび Cancel メソッドを使用して、非同期で Connection オブジェクトを開きます。

Sub CancelConnectionX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim sngTime As Single

    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    ' 接続を非同期で開きます。
    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt + dbRunAsync, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    sngTime = Timer

    ' 5 秒待ちます。
    Do While Timer - sngTime < 5
    Loop

    ' 接続がまだ終わっていないようなら
    ' まだ待つかどうかをユーザーに尋ねます。
    ' もう待たない場合は、接続をキャンセルして
    ' プロシージャを終了します。
    Do While conMain.StillExecuting

        If MsgBox("No connection yet--keep waiting?", _
                vbYesNo) = vbNo Then
            conMain.Cancel
            MsgBox "Connection cancelled!"
            wrkMain.Close
            Exit Sub
        End If

    Loop

    With conMain
        ' ここで Connection オブジェクト conMain を使用します。
        .Close
    End With

    wrkMain.Close

End Sub

次の例は、StillExecuting プロパティおよび Cancel メソッドを使用して、非同期で QueryDef オブジェクトを実行します。

Sub CancelQueryDefX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim qdfTemp As QueryDef
    Dim sngTime As Single

    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    Set qdfTemp = conMain.CreateQueryDef("")

    With qdfTemp
        .SQL = "UPDATE roysched " & _
            "SET royalty = royalty * 2 " & _
            "WHERE title_id LIKE 'BU____' OR " & _
            "title_id LIKE 'PC____'"

        ' 非同期でクエリーを実行します。
        .Execute dbRunAsync

        sngTime = Timer

        ' 5 秒待ちます。
        Do While Timer - sngTime < 5
        Loop

        ' クエリーがまだ終わっていないようなら
        ' まだ待つかどうかをユーザーに尋ねます。
        ' もう待たない場合は、クエリーをキャンセルして
        ' プロシージャを終了します。
        Do While .StillExecuting

            If MsgBox( _
                    "Query still running--keep waiting?", _
                    vbYesNo) = vbNo Then
                .Cancel
                MsgBox "Query cancelled!"
                Exit Do
            End If

        Loop

    End With

    conMain.Close
    wrkMain.Close

End Sub

次の例は、StillExecuting プロパティおよび Cancel メソッドを使用して、非同期で Recordset オブジェクトの最後に移動します。

Sub CancelRecordsetX()

    Dim wrkMain As Workspace
    Dim conMain As Connection
    Dim rstTemp As Recordset
    Dim sngTime As Single

    Set wrkMain = CreateWorkspace("ODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conMain = wrkMain.OpenConnection("Publishers", _
        dbDriverNoPrompt, False, _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
    Set rstTemp = conMain.OpenRecordset( _
        "SELECT * FROM roysched", dbOpenDynaset)

    With rstTemp

        ' 非同期で MoveLast メソッドを呼び出します。
        .MoveLast dbRunAsync

        sngTime = Timer

        ' 5 秒待ちます。
        Do While Timer - sngTime < 5
        Loop

        ' MoveLast がまだ終わっていないようなら
        ' まだ待つかどうかをユーザーに尋ねます。
        ' もう待たない場合は、MoveLast をキャンセルして
        ' プロシージャを終了します。
        Do While .StillExecuting

            If MsgBox( _
                    "Not at last record yet--keep waiting?", _
                    vbYesNo) = vbNo Then
                .Cancel
                MsgBox "MoveLast cancelled!"
                conMain.Close
                wrkMain.Close
                Exit Sub
            End If

        Loop

        ' ここでレコード セットを使用します。

        .Close

    End With

    conMain.Close
    wrkMain.Close

End Sub


SystemDB プロパティ (DAO)

SystemDB プロパティ

ワークグループの情報ファイルの、現在の位置へのパスを設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、文字列型 (String) の値です。ワークグループ情報ファイルに対するフル パスを示します。

解説

Jet データベース エンジンを使用してワークグループを定義したり、ワークグループのユーザーに、データベースの各オブジェクトに対して異なるアクセス権を設定したりすることができます。通常は、ワークグループは "system.mdw" という名前のワークグループ情報ファイルで定義されます。ユーザーがデータベースの保護されているオブジェクトにアクセスするには、DAO がこのワークグループ情報ファイルの保存場所を認識している必要があります。DAO に対しワークグループ情報ファイルの保存場所を示すには、Windows レジストリで指定するか、または SystemDB プロパティを設定します。セットアップ時には、パス指定のない "system.mdw" が既定の設定となります。

このオプションを有効にするには、アプリケーションが DBEngine オブジェクトを初期化する前に、つまり、ほかの DAO オブジェクトのインスタンスを作成する前に、SystemDB プロパティを設定する必要があります。SystemDB プロパティの設定値の適用範囲はそのアプリケーションに制限されるため、適用範囲を変更するにはそのアプリケーションを再起動する必要があります。


Table プロパティ (DAO)

Table プロパティ

Relation オブジェクトの主テーブル名を示します。この名前は、TableDef または QueryDef オブジェクトの Name プロパティの設定値と同じである必要があります。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、評価結果が TableDefs コレクションのテーブル名、または QueryDefs コレクションのクエリー名となる文字列型 (String) の値です。コレクションにまだ追加されていない新しい Relation オブジェクトの場合、Table プロパティの設定値は読み取り/書き込みが可能です。Relations コレクションの既存の Relation オブジェクトの場合は読み取り専用です。

解説

Table プロパティは ForeignTable プロパティと共に使用し、2 つのテーブルやクエリーのフィールド間のリレーションシップを表す Relation オブジェクトを定義します。Table プロパティには、主テーブルの TableDef オブジェクトまたは QueryDef オブジェクトの Name プロパティの値を設定します。また、ForeignTable プロパティには、参照先のオブジェクトである外部 TableDef オブジェクトまたは外部 QueryDef オブジェクトの Name プロパティの値を設定します。Attributes プロパティは、2 つのオブジェクト間のリレーションシップの種類を決めます。

たとえば、有効な部品コードの一覧が "部品コード" というフィールド名で [部品] テーブルに保存されている場合、[受注アイテム] テーブルとの間に一対多リレーションシップを設定すると、[部品] テーブルに存在しない部品コードは [受注アイテム] テーブルに入力できません。入力した部品コードが [部品] テーブルに存在せず、Relation オブジェクトの Attributes プロパティを dbRelationDontEnforce に設定していない場合、トラップ可能なエラーが発生します。

この場合、[部品] テーブルが外部キー側のテーブルになります。したがって Relation オブジェクトの Table プロパティには "部品" が設定され、Relation オブジェクトの ForeignTable プロパティには "受注アイテム" が設定されます。Relation オブジェクトの Fields コレクションの Field オブジェクトの Name プロパティと ForeignTable プロパティには、共に "部品コード" が設定されます。

次の図に、上で説明したリレーションシップを示します。


Transactions プロパティ (DAO)

Transactions プロパティ

オブジェクトがトランザクションをサポートしているかどうかを示す値を返します。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、オブジェクトがトランザクションをサポートしています。

解説

ODBCDirect ワークスペースでは、Connection オブジェクトおよび Database オブジェクトで Transactions プロパティを利用することができ、使用している ODBC ドライバがトランザクションをサポートしているかどうかを示します。

また、Jet ワークスペースでは、ダイナセット タイプまたはテーブル タイプの Recordset オブジェクトで Transactions プロパティを使用できます。スナップショット タイプおよび前方スクロール タイプの Recordset オブジェクトの場合、常に False を返します。

ダイナセット タイプまたはテーブル タイプの Recordset オブジェクトが Jet データベース エンジンのテーブルに基づいて作成されていれば、Transactions プロパティは True になり、トランザクションを使用できます。ただし、Jet データベース以外のデータベース エンジンではトランザクションがサポートされていないものがあります。たとえば、Paradox テーブルに基づいて作成されたダイナセット タイプの Recordset オブジェクトでは、トランザクションは使用できません。

Recordset オブジェクトの Workspace オブジェクトに対して BeginTrans メソッドを使用する場合、あらかじめ Transactions プロパティの設定値を調べて、トランザクションがサポートされていることを確認してください。トランザクションをサポートしていないオブジェクトに対して BeginTrans や CommitTrans、Rollback などの各メソッドを使用しても、何も実行されません。


Transactions プロパティの使用例 (DAO)

Transactions プロパティの使用例

次の例では、Jet ワークスペースおよび ODBCDirect ワークスペースの Transactions プロパティを説明します。

Sub TransactionsX()

    Dim wrkJet As Workspace
    Dim wrkODBC As Workspace
    Dim dbsNorthwind As Database
    Dim conPubs As Connection
    Dim rstTemp As Recordset

    ' Jet と ODBCDirect ワークスペース
    ' Jet データベース、および ODBCDirect 接続を開きます。
    Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
    Set wrkODBC = CreateWorkspace("", "admin", "", dbUseODBC)
    Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb")
    Set conPubs = wrkODBC.OpenConnection("", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' 2 つの異なるタイプの Recordset オブジェクトを開いて
    ' 各オブジェクトの Transactions プロパティを表示します。

    Debug.Print "Opening Microsoft Jet table-type " & _
        "recordset..."
    Set rstTemp = dbsNorthwind.OpenRecordset( _
        "Employees", dbOpenTable)
    Debug.Print "    Transactions = " & rstTemp.Transactions

    Debug.Print "Opening forward-only-type " & _
        "recordset where the source is an SQL statement..."
    Set rstTemp = dbsNorthwind.OpenRecordset( _
        "SELECT * FROM Employees", dbOpenForwardOnly)
    Debug.Print "    Transactions = " & rstTemp.Transactions

    ' ODBCDirect ワークスペースの Connection オブジェクトの
    ' Transaction プロパティを表示します。
    Debug.Print "Testing Transaction property of " & _
        "an ODBC connection..."
    Debug.Print "    Transactions = " & conPubs.Transactions

    rstTemp.Close
    dbsNorthwind.Close
    conPubs.Close
    wrkJet.Close
    wrkODBC.Close

End Sub


Type プロパティ (DAO)

Type プロパティ

オブジェクトの操作の種類やデータ型を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、操作の種類やデータ型を示す定数です。Field オブジェクトまたは Property オブジェクトの場合、このプロパティは、オブジェクトがコレクションまたは別のオブジェクトに追加されるまでは、読み取り/書き込みが可能です。追加された後は、読み取り専用になります。QueryDef、Recordset、Workspace の各オブジェクトの場合、このプロパティは読み取り専用です。Parameter オブジェクトの場合、Jet ワークスペースではこのプロパティは読み取り専用ですが、ODBCDirect ワークスペースでは読み取り/書き込みが可能です。

次の表に、Field、Parameter、Property の各オブジェクトの場合の設定値および戻り値を示します。

定数 | 説明
dbBigInt | Big Integer 型 (Big Integer)
dbBinary | バイナリ型 (Binary)
dbBoolean | ブール型 (Boolean)
dbByte | バイト型 (Byte)
dbChar | CHAR 型 (Char)
dbCurrency | 通貨型 (Currency)
dbDate | 日付/時刻型 (Date/Time)
dbDecimal | 10 進型 (Decimal)
dbDouble | 倍精度浮動小数点数型 (Double)
dbFloat | 浮動小数点数型 (Float)
dbGUID | GUID 型 (GUID)
dbInteger | 整数型 (Integer)
dbLong | 長整数型 (Long)
dbLongBinary | ロング バイナリ型 (LongBinary) - OLE オブジェクト型 (OLE Object)
dbMemo | メモ型 (Memo)
dbNumeric | Numeric 型 (Numeric)
dbSingle | 単精度浮動小数点数型 (Single)
dbText | テキスト型 (Text)
dbTime | 時刻型 (Time)
dbTimeStamp | タイムスタンプ型 (TimeStamp)
dbVarBinary | 可変長バイナリ型 (VarBinary)

次の表に、QueryDef オブジェクトの場合の設定値および戻り値を示します。

定数 | クエリーの種類
dbQAction | アクション クエリー
dbQAppend | 追加クエリー
dbQCompound | 複合クエリー
dbQCrosstab | クロス集計クエリー
dbQDDL | データ定義クエリー
dbQDelete | 削除クエリー
dbQMakeTable | テーブル作成クエリー
dbQProcedure | 遂行クエリー (ODBCDirect ワークスペースでのみ使用可)
dbQSelect | 選択クエリー
dbQSetOperation | ユニオン クエリー
dbQSPTBulk | レコードを返さないクエリー (dbQSQLPassThrough と共に使用、Jet ワークスペースでのみ使用可)
dbQSQLPassThrough | パススルー クエリー (Jet ワークスペースでのみ使用可)
dbQUpdate | 更新クエリー

メモ Jet ワークスペースで SQL パススルー クエリーを作成する場合、Type プロパティに明示的に dbQSQLPassThrough を設定する必要はありません。QueryDef オブジェクトを作成して Connect プロパティを設定すると、Jet データベース エンジンが自動的に dbQSQLPassThrough を設定します。

次の表に、Recordset オブジェクトの場合の設定値および戻り値を示します。

定数 | レコード セットの種類
dbOpenTable | テーブル タイプ (Jet ワークスペースでのみ使用可)
dbOpenDynamic | 動的タイプ (ODBCDirect ワークスペースでのみ使用可)
dbOpenDynaset | ダイナセット タイプ
dbOpenSnapshot | スナップショット タイプ
dbOpenForwardOnly | 前方スクロール タイプ

次の表に、Workspace オブジェクトの場合の設定値および戻り値を示します。

定数 | ワークスペースの種類
dbUseJet | Workspace は、Jet データベース エンジンに接続されています。
dbUseODBC | Workspace は、ODBC データ ソースに接続されています。

解説

Index、QueryDef、Recordset、TableDef の各オブジェクトに Field オブジェクト、Parameter オブジェクト、または Property オブジェクトを新しく追加する場合、元のデータベースがそれらの新しいオブジェクトのデータ型をサポートしていなければエラーが発生します。


Type プロパティの使用例 (DAO)

Type プロパティの使用例

次の例では、4 つの異なる Recordset オブジェクトに対応している Type プロパティの定数名を返して、Type プロパティを説明します。このプロシージャを実行するには、RecordsetType 関数が必要です。

Sub TypeX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 既定値は dbOpenTable です。
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")
    Debug.Print _
        "Table-type recordset (Employees table): " & _
        RecordsetType(rstEmployees.Type)
    rstEmployees.Close

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenDynaset)
    Debug.Print _
        "Dynaset-type recordset (Employees table): " & _
        RecordsetType(rstEmployees.Type)
    rstEmployees.Close

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenSnapshot)
    Debug.Print _
        "Snapshot-type recordset (Employees table): " & _
        RecordsetType(rstEmployees.Type)
    rstEmployees.Close

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees", _
        dbOpenForwardOnly)
    Debug.Print _
        "Forward-only-type recordset (Employees table): " & _
        RecordsetType(rstEmployees.Type)
    rstEmployees.Close

    dbsNorthwind.Close

End Sub

Function RecordsetType(intType As Integer) As String

    Select Case intType
        Case dbOpenTable
            RecordsetType = "dbOpenTable"
        Case dbOpenDynaset
            RecordsetType = "dbOpenDynaset"
        Case dbOpenSnapshot
            RecordsetType = "dbOpenSnapshot"
        Case dbOpenForwardOnly
            RecordsetType = "dbOpenForwardOnly"
    End Select

End Function

次の例では、Employees テーブル内のすべての Field オブジェクトの Type プロパティに対応している定数名を返して、Type プロパティを説明します。このプロシージャを実行するには、FieldType 関数が必要です。

Sub TypeX2()

    Dim dbsNorthwind As Database
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    Debug.Print "Fields in Employees TableDef:"
    Debug.Print "    Type - Name"

    ' Employees テーブルの Fields コレクションを列挙します。
    For Each fldLoop In _
        dbsNorthwind.TableDefs!Employees.Fields
        Debug.Print "        " & FieldType(fldLoop.Type) & _
            " - " & fldLoop.Name
    Next fldLoop

    dbsNorthwind.Close

End Sub

Function FieldType(intType As Integer) As String

    Select Case intType
        Case dbBoolean
            FieldType = "dbBoolean"
        Case dbByte
            FieldType = "dbByte"
        Case dbInteger
            FieldType = "dbInteger"
        Case dbLong
            FieldType = "dbLong"
        Case dbCurrency
            FieldType = "dbCurrency"
        Case dbSingle
            FieldType = "dbSingle"
        Case dbDouble
            FieldType = "dbDouble"
        Case dbDate
            FieldType = "dbDate"
        Case dbText
            FieldType = "dbText"
        Case dbLongBinary
            FieldType = "dbLongBinary"
        Case dbMemo
            FieldType = "dbMemo"
        Case dbGUID
            FieldType = "dbGUID"
    End Select

End Function

次の例では、データベース Northwind のすべての QueryDef オブジェクトの Type プロパティに対応している定数名を返して、Type プロパティを説明します。このプロシージャを実行するには、QueryDefType 関数が必要です。

Sub TypeX3()

    Dim dbsNorthwind As Database
    Dim qdfLoop As QueryDef

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    Debug.Print "QueryDefs in Northwind Database:"
    Debug.Print "    Type - Name"

    ' データベース Northwind の QueryDefs コレクションを列挙します。
    For Each qdfLoop In dbsNorthwind.QueryDefs
        Debug.Print "        " & _
            QueryDefType(qdfLoop.Type) & " - " & qdfLoop.Name
    Next qdfLoop

    dbsNorthwind.Close

End Sub

Function QueryDefType(intType As Integer) As String

    Select Case intType
        Case dbQSelect
            QueryDefType = "dbQSelect"
        Case dbQAction
            QueryDefType = "dbQAction"
        Case dbQCrosstab
            QueryDefType = "dbQCrosstab"
        Case dbQDelete
            QueryDefType = "dbQDelete"
        Case dbQUpdate
            QueryDefType = "dbQUpdate"
        Case dbQAppend
            QueryDefType = "dbQAppend"
        Case dbQMakeTable
            QueryDefType = "dbQMakeTable"
        Case dbQDDL
            QueryDefType = "dbQDDL"
        Case dbQSQLPassThrough
            QueryDefType = "dbQSQLPassThrough"
        Case dbQSetOperation
            QueryDefType = "dbQSetOperation"
        Case dbQSPTBulk
            QueryDefType = "dbQSPTBulk"
    End Select

End Function


Unique プロパティ (DAO)

Unique プロパティ

Index オブジェクトがテーブルの一意なキー インデックスを表すかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、Index オブジェクトは一意なインデックスを表します。Index オブジェクトの場合、オブジェクトがコレクションに追加されるまでは、このプロパティは読み取り/書き込みが可能です。追加された後は、読み取り専用になります。

解説

一意なインデックスは、テーブルのすべてのレコードをあらかじめ決められた一意な順序で論理的に配置するための、1 つまたは複数のフィールドから構成されます。一意なインデックスが 1 つのフィールドから構成される場合、そのフィールドの値はテーブル全体で一意である必要があります。インデックスが複数のフィールドから構成される場合、各フィールドでは値の重複が許されますが、インデックスが設定されたすべてのフィールドの値を組み合わせた結果はすべて一意である必要があります。

Index オブジェクトの Unique プロパティと Primary プロパティがどちらも True に設定されている場合、そのインデックスは一意なインデックスになるとともに主インデックスになり、テーブルのすべてのレコードをあらかじめ決められた論理的な順序で一意に識別します。Primary プロパティが False に設定されている場合には、そのインデックスは二次インデックスになります。二次インデックスは、キーおよび非キーのどちらの場合でも、あらかじめ決められた順序でレコードを論理的に配置しますが、そのテーブルのレコードの識別子にはなりません。

メモ

  • テーブルにインデックスを作成することは必ずしも必要ではありませんが、テーブルのサイズが大きい場合にインデックスが設定されていないと、特定のレコードにアクセスする場合に時間がかかることがあります。

  • インデックスのないテーブルから取得したレコードは、不特定の順序で返されます。

  • Index オブジェクトの各 Field オブジェクトの Attributes プロパティによって、レコードの順序が決まり、その結果、インデックスを使用するためのアクセス方法が決まります。

  • 一意なインデックスを使用すると、レコードの検索を最適化できます。

  • インデックスを使用してもベース テーブルの物理的な順序には影響しません。インデックスは、特定のインデックスが選択された場合、または Jet データベース エンジンが Recordset オブジェクトを作成した場合に、テーブル タイプの Recordset オブジェクトがレコードにアクセスする方法にのみ影響を与えます。


Unique プロパティの使用例 (DAO/Microsoft Jet)

Unique プロパティの使用例

次の例では、新しい Index オブジェクトの Unique プロパティに True を設定し、Employees テーブルの Indexes コレクションにその Index オブジェクトを追加します。続いて、TableDef の Indexes コレクションと各 Index オブジェクトの Properties コレクションを列挙します。新しい Index には、TableDef で特定の国、名前、氏名を持つ 1 つのレコードのみを設定できます。

Sub UniqueX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim idxNew As Index
    Dim idxLoop As Index
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind!Employees

    With tdfEmployees
        ' 新しく Index オブジェクトを作成して
        ' Employees テーブルの Indexes コレクションに追加します。
        Set idxNew = .CreateIndex("NewIndex")

        With idxNew
            .Fields.Append .CreateField("Country")
            .Fields.Append .CreateField("LastName")
            .Fields.Append .CreateField("FirstName")
            .Unique = True
        End With

        .Indexes.Append idxNew
        .Indexes.Refresh

        Debug.Print .Indexes.Count & " Indexes in " & _
            .Name & " TableDef"

        ' Employees テーブルの Indexes コレクションを列挙します。
        For Each idxLoop In .Indexes
            Debug.Print "    " & idxLoop.Name

            ' 各 Index オブジェクトの Properties コレクションを列挙します。
            For Each prpLoop In idxLoop.Properties
                Debug.Print "        " & prpLoop.Name & _
                    " = " & IIf(prpLoop = "", "[empty]", prpLoop)
            Next prpLoop

        Next idxLoop

        ' ここではデモとして新しい Index オブジェクトを削除します。
        .Indexes.Delete idxNew.Name
    End With

    dbsNorthwind.Close

End Sub


Updatable プロパティ (DAO)

Updatable プロパティ

DAO オブジェクトを変更できるかどうかを示す値を返します。

戻り値

戻り値は、ブール型 (Boolean) の値です。True の場合、オブジェクトの変更や更新が可能です。スナップショット タイプおよび前方スクロール タイプの Recordset オブジェクトでは、常に False に設定されます。

解説

各オブジェクトについて、Updatable プロパティの設定値が True の場合、次の表のように変更できます。

オブジェクト | 可能な変更の種類
Connection オブジェクト | 接続しているデータベースに含まれるデータの変更が可能です。
Database オブジェクト | オブジェクトの変更が可能です。
QueryDef オブジェクト | クエリー定義の変更が可能です。
Recordset オブジェクト | レコードの更新が可能です。
TableDef オブジェクト | テーブル定義の変更が可能です。

新しく作成した TableDef オブジェクトの Updatable プロパティは、常に True に設定されます。また、リンク テーブルにある TableDef オブジェクトの Updatable プロパティの設定値は常に False に設定されます。新しく作成した TableDef オブジェクトは、現在のユーザーが書き込み権限を持っているデータベースにのみ追加できます。

多くのオブジェクトには、変更不可能なフィールドが含まれる場合があります。たとえば、一部のフィールドしか変更できないようなダイナセット タイプの Recordset オブジェクトを作成することができます。このような変更不可能なフィールドには、固定フィールドや、カウンタ型のデータを含むフィールドがあります。また、更新可能なテーブルと更新不可能なテーブルを結合するクエリーによって作成されたダイナセットのフィールドも、変更不可能になります。

オブジェクトに含まれるフィールドがすべて読み取り専用であれば、Updatable プロパティは False に設定されます。1 つでも更新可能なフィールドがあれば、このプロパティは True に設定されます。この場合でも、更新可能なフィールド以外のフィールドは編集できません。読み取り専用のフィールドに新しい値を代入しようとすると、トラップ可能なエラーが発生します。

クエリー定義が更新可能な場合は、そのクエリーを実行した結果作成される Recordset オブジェクトが変更不可能になる場合でも、QueryDef オブジェクトの Updatable プロパティは True に設定されます。

更新可能なオブジェクトであっても、読み取り専用のフィールドが含まれている場合があります。このため、レコードを編集する際は、あらかじめ Recordset オブジェクトの Fields コレクションの各フィールドの DataUpdatable プロパティの設定値を確認してください。


Updatable プロパティの使用例 (DAO)

Updatable プロパティの使用例

次の例では、Database、4 種類の Recordset、TableDef、および QueryDef についての Updatable プロパティを説明します。

Sub UpdatableX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        Debug.Print .Name
        Debug.Print "    Updatable = " & .Updatable

        ' 既定値は dbOpenTable です。
        Set rstEmployees = .OpenRecordset("Employees")
        Debug.Print _
            "Table-type recordset from Employees table"
        Debug.Print "    Updatable = " & _
            rstEmployees.Updatable
        rstEmployees.Close

        Set rstEmployees = .OpenRecordset("Employees", _
            dbOpenDynaset)
        Debug.Print _
            "Dynaset-type recordset from Employees table"
        Debug.Print "    Updatable = " & _
            rstEmployees.Updatable
        rstEmployees.Close

        Set rstEmployees = .OpenRecordset("Employees", _
            dbOpenSnapshot)
        Debug.Print _
            "Snapshot-type recordset from Employees table"
        Debug.Print "    Updatable = " & _
            rstEmployees.Updatable
        rstEmployees.Close

        Set rstEmployees = .OpenRecordset("Employees", _
            dbOpenForwardOnly)
        Debug.Print _
            "Forward-only-type recordset from Employees table"
        Debug.Print "    Updatable = " & _
            rstEmployees.Updatable
        rstEmployees.Close

        Debug.Print "'" & .TableDefs(0).Name & "' TableDef"
        Debug.Print "    Updatable = " & _
            .TableDefs(0).Updatable

        Debug.Print "'" & .QueryDefs(0).Name & "' QueryDef"
        Debug.Print "    Updatable = " & _
            .QueryDefs(0).Updatable

        .Close
    End With

End Sub


UpdateOptions プロパティ (DAO)

UpdateOptions プロパティ

バッチ更新処理中における各レコードに対する WHERE 句の生成方法を示し、バッチ更新で UPDATE ステートメントを使用するか、または DELETE の直後に INSERT ステートメントを使用するかを示す値を設定または返します。これは ODBCDirect ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、長整数型 (Long) の値です。次の表に示す定数のいずれかになります。

定数 | 説明
dbCriteriaKey | (既定値) WHERE 句で 1 つ以上のキー列のみを使用します。
dbCriteriaModValues | WHERE 句で 1 つ以上のキー列と更新されたすべての列を使用します。
dbCriteriaAllCols | WHERE 句で 1 つ以上のキー列とすべての列を使用します。
dbCriteriaTimeStamp | 時刻型 (Time) の列が使用できればそれらの列のみを使用します。結果セットに時刻型 (Time) の列が存在しない場合は、実行時エラーとなります。
dbCriteriaDeleteInsert | 修正された各行に対して、DELETE ステートメントと INSERT ステートメントの組み合わせを使用します。
dbCriteriaUpdate | (既定値) 修正された各行に対して、UPDATE ステートメントを使用します。

解説

バッチ モードで Update メソッドが実行されると、DAO とクライアント バッチ カーソル ライブラリは一連の SQL UPDATE ステートメントを生成し、必要な変更を行います。そして、更新を行うごとに RecordStatus プロパティによって "変更" としてマークされたレコードを分離するために SQL の WHERE 句が 1 つ生成されます。リモート サーバーの中にはトリガなどの方法によって参照整合性を保つものがあるため、更新対象のフィールドの変更の影響を受けるもののみに限定することがしばしば重要になります。これを行うには、UpdateOptions プロパティに dbCriteriaKey、dbCriteriaModValues、dbCriteriaAllCols、または dbCriteriaTimeStamp のいずれかの定数を設定します。この方法により、トリガ コードのみが実行され、その結果更新操作がより速く実行されて、発生するエラーの数も減ることになります。

dbCriteriaDeleteInsert または dbCriteriaUpdate のどちらかの定数を組み合わせて指定することもできます。これにより、バッチ処理後の修正済みレコードをサーバーに送り返すときに、1 組の SQL DELETE ステートメントと INSERT ステートメントを使用するか、または UPDATE ステートメントを使用するかを 1 回の更新ごとに指定することができます。dbCriteriaDeleteInsert 定数を使用する場合は、レコードを更新するために 2 つの別々の操作を正しく行うことが必要になります。特に、リモート システムが DELETE、INSERT、および UPDATE のトリガを実装しているような場合、UpdateOptions プロパティの値を正しく設定することによってパフォーマンスが向上することがあります。

定数の指定を省略した場合には、dbCriteriaUpdate と dbCriteriaKey が使用されます。

レコードを新しく追加すると必ず INSERT ステートメントが生成され、レコードを削除すると必ず DELETE ステートメントが生成されます。そのため、UpdateOptions プロパティの設定は、カーソル ライブラリによる修正済みレコードの更新方法についてのみ有効です。


UserName プロパティ (DAO)

UserName プロパティ

ユーザーやユーザーのグループ、または Workspace オブジェクトの作成者を示す値を設定または返します。

設定値と戻り値

設定値または戻り値は、評価結果がユーザー名となる文字列型 (String) の値です。Jet ワークスペースでは、この値は Users コレクションの User オブジェクト、または Groups コレクションの Group オブジェクトを表します。Jet データベース エンジンの Container オブジェクトおよび Document オブジェクトの場合、このプロパティの設定値は読み取り/書き込みが可能です。また、すべての Workspace オブジェクトについて、このプロパティは読み取り専用です。

解説

UserName プロパティは、オブジェクトの種類に応じて次に示す内容を表します。

  • Workspace オブジェクトの作成者を表します。

  • Container オブジェクトまたは Document オブジェクトのアクセス権限に関する操作を行う場合、ユーザーまたはユーザー グループを表します。これは Jet ワークスペースでのみ使用することができます。

特定のユーザーまたはユーザー グループの権限を取得または設定するには、まず対象となるユーザー名またはグループ名を UserName プロパティに設定します。次に、ユーザーまたはユーザー グループに与えられた権限を調べる場合は Permissions プロパティの設定値を確認し、権限を変更する場合は Permissions プロパティに権限を設定します。

Workspace オブジェクトでは、UserName プロパティの設定値は Workspace オブジェクトの作成者を表します。Workspace オブジェクトの作成者を設定するには、オブジェクトを Workspaces コレクションに追加する前に、UserName プロパティを設定します。


UserName プロパティの使用例 (DAO)

UserName プロパティの使用例

次の例では、UserName プロパティを使用して、オブジェクトの特定のユーザーの権限を変更し、ユーザーが新しいデータを同じオブジェクトに追加することができるかを確認します。

Sub UserNameX()

    ' Jet ワークグループ情報ファイルが使用できるかを
    ' 確認します。
    DBEngine.SystemDB = "system.mdw"

    Dim dbsNorthwind As Database
    Dim docTemp As Document

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    Set docTemp = _
        dbsNorthwind.Containers("Tables").Documents(0)

    ' Tables コンテナの一番はじめの Document オブジェクトの
    ' NewUser の権限を変更します。
    With docTemp
        .UserName = "NewUser"
        .Permissions = dbSecRetrieveData
        If (.Permissions And dbSecInsertData) = _
                dbSecInsertData Then
            Debug.Print .UserName & " can insert data."
        Else
            Debug.Print .UserName & " can't insert data."
        End If
    End With

    dbsNorthwind.Close

End Sub


V1xNullBehavior プロパティ (DAO)

V1xNullBehavior プロパティ

テキスト型 (Text) またはメモ型 (Memo) のフィールドを埋めるためにコード内に記述されている長さ 0 の文字列 ("") を Null 値に変換するかどうかを示します。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。True の場合、長さ 0 の文字列 ("") を Null 値に変換します。

解説

このプロパティは、Jet データベース エンジン 1.x 形式から Jet データベース エンジン 2.0 形式または 3.0 形式に変換されたデータベースに対して適用されます。

メモ 1.x 形式のデータベースを 2.0 形式または 3.x 形式のデータベースに変換すると、このプロパティが自動的に作成されます。また、2.0 形式のデータベースを 3.x 形式のデータベースに変換する場合、このプロパティの設定値は保持されます。

このプロパティの設定値を変更した場合は、新しい設定値を有効にするために、必ずデータベースをいったん閉じてからもう一度開いてください。

このプロパティが自動的に作成された場合は、むだな処理が行われないように、テキスト型 (Text) フィールドやメモ型 (Memo) フィールドが長さ 0 の文字列 ("") ではなく Null 値に設定されるようにコードを修正し、V1xNullBehavior プロパティを Properties コレクションから削除してください。


V1xNullBehavior プロパティの使用例 (DAO/Microsoft Jet)

V1xNullBehavior プロパティの使用例

次の例では、Jet 1.1 データベース ファイルを Jet 3.0 データベース ファイルに変換します。ファイルの変換中に、V1xNullBehavior プロパティが作成され、新しくデータベースの Properties コレクションに追加されます。両方のデータベース ファイルの Properties コレクションは列挙され、ファイルの変更を示します。最後に、V1xNullBehavior プロパティは削除されます。これは、空の文字列ではなく、空のテキスト型 (Text) とメモ型 (Memo) のフィールドに、Null 値を格納するように、すべてのアプリケーションが変更されることを仮定しています。

メモ "Nwind11.mdb" と呼ばれる Jet Version 1.1 のファイルが用意できない場合、このプロシージャは動作しません。

Sub V1xNullBehaviorX()

    Dim dbsNorthwind As Database
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Nwind11.mdb")

    With dbsNorthwind
        Debug.Print .Name & ", version " & .Version
        ' データベース Northwind の Properties コレクションを列挙します。
        For Each prpLoop In .Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop

        .Close
    End With

    DBEngine.CompactDatabase "Nwind11.mdb", _
        "Nwind30.mdb", , dbVersion30

    Set dbsNorthwind = OpenDatabase("Nwind30.mdb")

    With dbsNorthwind
        Debug.Print .Name & ", version " & .Version

        ' 最適化したデータベースの
        ' Properties コレクションを列挙します。
        ' V1xNullBehavior プロパティは
        ' dbsNorthWind.V1XNullBehavior のように
        ' 明示的に参照することはできませんが、ループの中や
        ' Properties ("V1xNullBehavior") のような
        ' 文字列による参照によってアクセスすることができます。
        For Each prpLoop In .Properties
            On Error Resume Next
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop
            On Error GoTo 0
        Next prpLoop

        .Properties.Delete "V1xNullBehavior"
        .Close
    End With

End Sub


ValidateOnSet プロパティ (DAO)

ValidateOnSet プロパティ

Field オブジェクトの Value プロパティを設定する場合に、直ちにそのオブジェクトの値の入力検査を行うかどうかを示す値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、ブール型 (Boolean) の値です。次に示す値のどちらかになります。

設定値 | 内容
True | Field オブジェクトの Value プロパティに値を設定する場合に、Field オブジェクトの ValidationRule プロパティの設定で指定している入力規則が適用されます。
False | (既定値) レコードの更新時に入力検査が行われます。

ValidateOnSet プロパティは、Recordset オブジェクトの Field オブジェクトのみが、読み取り/書き込みが可能なプロパティとしてサポートしています。

解説

ValidateOnSet プロパティを True に設定しておけば、ユーザーがレコードを入力する際にメモ型 (Memo) のデータを入力する可能性がある場合に便利です。入力規則に反するフィールドがほかにあるためにデータが無効になってしまう場合には、Update メソッドの呼び出しの時点でデータの入力検査を行っても意味がなく、冗長なメモ型 (Memo) のデータをデータベースに書き込む時間が結局むだになってしまうことになります。


ValidateOnSet プロパティの使用例 (DAO/Microsoft Jet)

ValidateOnSet プロパティの使用例

次の例では、ValidateOnSet プロパティを使用して、データのエントリの間に行われるエラーのトラップの方法を説明します。このプロシージャを実行するには、ValidateData 関数が必要です。

Sub ValidateOnSetX()

    Dim dbsNorthwind As Database
    Dim fldDays As Field
    Dim rstEmployees As Recordset

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    ' 新しく Field オブジェクトを作成して
    ' Employees テーブルの Fields コレクションに追加します。
    Set fldDays = _
        dbsNorthwind.TableDefs!Employees.CreateField( _
        "DaysOfVacation", dbInteger, 2)
    fldDays.ValidationRule = "BETWEEN 1 AND 20"
    fldDays.ValidationText = _
        "Number must be between 1 and 20!"
    dbsNorthwind.TableDefs!Employees.Fields.Append fldDays

    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees

        Do While True
            ' 新しくレコードを追加します。
            .AddNew

            ' 3 つのフィールドに対して、ユーザーからの入力を取得します。
            ' これら 3 つのフィールドの中で入力規則
            ' に違反したものがないかを確認します。
            If ValidateData(!FirstName, _
                "Enter first name.") = False Then Exit Do
            If ValidateData(!LastName, _
                "Enter last name.") = False Then Exit Do
            If ValidateData(!DaysOfVacation, _
                "Enter days of vacation.") = False Then Exit Do

            .Update
            .Bookmark = .LastModified
            Debug.Print !FirstName & " " & !LastName & _
                " - " & "DaysOfVacation = " & !DaysOfVacation

            ' ここではデモとして新しいレコードを削除します。
            Exit Do
        Loop

        ' 入力規則のどれかに違反している場合は
        ' Addnew メソッドをキャンセルします。
        If .EditMode <> dbEditNone Then .CancelUpdate
        .Close
    End With

    ' ここではデモとして新しいフィールドを削除します。
    dbsNorthwind.TableDefs!Employees.Fields.Delete _
        fldDays.Name
    dbsNorthwind.Close

End Sub

Function ValidateData(fldTemp As Field, _
    strMessage As String) As Boolean

    Dim strInput As String
    Dim errLoop As Error

    ValidateData = True
    ' ValidateOnSet が読み取り/書き込みが可能に設定されているのは
    ' Recordset の Field オブジェクトのみです。
    fldTemp.ValidateOnSet = True

    Do While True
        strInput = InputBox(strMessage)
        If strInput = "" Then Exit Do
        ' Field の値を設定している場合に、エラーをトラップします。
        On Error GoTo Err_Data
        If fldTemp.Type = dbInteger Then
            fldTemp = Val(strInput)
        Else
            fldTemp = strInput
        End If
        On Error GoTo 0
        If Not IsNull(fldTemp) Then Exit Do
    Loop

    If strInput = "" Then ValidateData = False

    Exit Function

Err_Data:

    If DBEngine.Errors.Count > 0 Then
        ' Errors コレクションを列挙します。最新の Error オブジェクトの
        ' Description プロパティは、関連したフィールドの
        ' ValidationText プロパティの値に設定されます。
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & _
                vbCr & errLoop.Description
        Next errLoop
    End If

    Resume Next

End Function


ValidationRule プロパティ (DAO)

ValidationRule プロパティ

フィールドのデータが変更されたりテーブルに追加されたりする場合、それらのデータの入力検査に必要な値を設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、SQL の WHERE 句による比較ステートメントから予約語 WHERE を除いた部分を示す文字列型 (String) の値です。Fields コレクションに追加されていないオブジェクトの場合、このプロパティは読み取り/書き込みが可能です。このプロパティの読み取り/書き込みの詳細については、「解説」を参照してください。

解説

ValidationRule プロパティは、フィールドに含まれるデータが有効なものであるかどうかを決めます。データが無効なものであれば、トラップ可能な実行時エラーが発生します。この場合に返されるエラー メッセージは、ValidationText プロパティにテキストを指定していればそのテキストになり、指定していなければ ValidationRule プロパティに指定した式のテキストになります。

Field オブジェクトの場合、次の表に示すように、ValidationRule プロパティの使い方は、Field オブジェクトが追加される Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。

Recordset オブジェクトの場合、ValidationRule プロパティは読み取り専用です。TableDef オブジェクトの場合は、次の表に示すように、ValidationRule プロパティの使い方は、TableDef オブジェクトの状態によって異なります。

TableDef | 使い方
ベース テーブル | 読み取り/書き込みが可能です。
リンク テーブル | 読み取り専用です。

入力検査は、Jet データベース エンジンを使用しているデータベースでのみサポートされています。

Field オブジェクトの ValidationRule プロパティで指定する文字列式では、その Field オブジェクトのみ参照できます。また、式の中にユーザー定義の関数や SQL 集計関数、またはクエリーを指定することはできません。ValidateOnSet プロパティが True に設定されている Field オブジェクトの ValidationRule プロパティを設定するには、フィールド名を暗黙のオペランドとして式の解析が正常に行われることと、その式が必ず True に評価されることが必要です。ValidateOnSet プロパティの設定値が False の場合、ValidationRule プロパティの設定値は無視されます。

Recordset オブジェクトまたは TableDef オブジェクトの ValidationRule プロパティでは、そのオブジェクトのフィールドを複数参照できます。それ以外の制限については、Field オブジェクトに関してこのトピックで既に説明した制限事項が適用されます。

テーブル タイプの Recordset オブジェクトの場合、ValidationRule プロパティには、その Recordset オブジェクトを作成する際に使用した TableDef オブジェクトの ValidationRule プロパティの値が設定されます。

リンク テーブルに基づいた TableDef オブジェクトの場合、ValidationRule プロパティには、元のベース テーブルの ValidationRule プロパティの値が設定されます。元のベース テーブルが入力検査をサポートしていない場合には、ValidationRule プロパティの値は長さ 0 の文字列 ("") になります。

メモ 整数値以外の文字を連結した文字列を ValidationRule プロパティに設定する場合、システム パラメータで米国式 10 進文字以外のカンマなどの文字を指定していると (たとえば、strSQL = "PRICE > " & lngPrice で lngPrice = 125,50 というような場合)、コードの中でデータの入力検査を実行しようとしたときに、エラーが発生します。これは、文字列の連結の際に、数値はシステムの既定の 10 進文字を使用して文字列に変換されますが、Jet SQL は米国式の 10 進文字しか認識しないためです。


ValidationRule、ValidationText プロパティの使用例 (DAO/Microsoft Jet)

ValidationRule、ValidationText プロパティの使用例

次の例では、特定の TableDef オブジェクトに新しく Field オブジェクトを作成します。そして、渡されたデータに基づいて ValidationRule と ValidationText プロパティを設定します。また、この例では、実際のデータのエントリの間の ValidationRule と ValidationText プロパティの使い方を示しています。このプロシージャを実行するには、SetValidation 関数が必要です。

Sub ValidationRuleX()

    Dim dbsNorthwind As Database
    Dim fldDays As Field
    Dim rstEmployees As Recordset
    Dim strMessage As String
    Dim strDays As String
    Dim errLoop As Error

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    ' 指定したプロパティの設定で
    ' Employees テーブルの TableDef オブジェクトに
    ' 新しくフィールドを作成します。
    Set fldDays = _
        SetValidation(dbsNorthwind.TableDefs!Employees, _
        "DaysOfVacation", dbInteger, 2, "BETWEEN 1 AND 20", _
        "Number must be between 1 and 20!")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees

        ' Recordset を列挙します。
        ' ユーザーから提示されたフィールドを使用して
        ' 新しくフィールドにデータを設定します。
        Do While Not .EOF
            .Edit
            strMessage = "Enter days of vacation for " & _
                !FirstName & " " & !LastName & vbCr & _
                "[" & !DaysOfVacation.ValidationRule & "]"

            Do While True
                ' ユーザーからの入力を取得します。
                strDays = InputBox(strMessage)
                If strDays = "" Then
                    .CancelUpdate
                    Exit Do
                End If
                !DaysOfVacation = Val(strDays)

                ' ValidateOnSet の既定値は False であるため
                'バッファ内のデータは、更新が行われている間
                ' ValidationRule に違反していないか確認されます。
                On Error GoTo Err_Rule
                .Update
                On Error GoTo 0

                ' Update メソッドの処理が成功した場合に
                ' データ変更の結果を出力します。
                If .EditMode = dbEditNone Then
                    Debug.Print !FirstName & " " & !LastName & _
                        " - " & "DaysOfVacation = " & _
                        !DaysOfVacation
                    Exit Do
                End If

            Loop

            If strDays = "" Then Exit Do
            .MoveNext
        Loop

        .Close
    End With

    ' ここではデモとして新しいフィールドを削除します。
    dbsNorthwind.TableDefs!Employees.Fields.Delete _
        fldDays.Name
    dbsNorthwind.Close

    Exit Sub

Err_Rule:

    If DBEngine.Errors.Count > 0 Then
        ' Errors コレクションを列挙します。
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & _
                errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
    End If

    Resume Next

End Sub

Function SetValidation(tdfTemp As TableDef, _
    strFieldName As String, intType As Integer, _
    intLength As Integer, strRule As String, _
    strText As String) As Field

    ' 新しく Field オブジェクトを作成して
    ' 指定の TableDef オブジェクトの Fields コレクションに追加します。
    Set SetValidation = tdfTemp.CreateField(strFieldName, _
        intType, intLength)

    SetValidation.ValidationRule = strRule
    SetValidation.ValidationText = strText
    tdfTemp.Fields.Append SetValidation

End Function


ValidationText プロパティ (DAO)

ValidationText プロパティ

Field オブジェクトの値が、ValidationRule プロパティで指定した入力規則に反する場合に表示するメッセージのテキストを設定または返します。これは Jet ワークスペースでのみ使用することができます。

設定値と戻り値

設定値または戻り値は、フィールドに入力された値が無効である場合に表示されるテキストを指定する文字列型 (String) の値です。コレクションに追加されていないオブジェクトの場合、このプロパティは読み取り/書き込みが可能です。Recordset オブジェクトの場合、このプロパティは読み取り専用です。TableDef オブジェクトの場合、リンク テーブルではこのプロパティは読み取り専用で、ベース テーブルでは読み取り/書き込みが可能です。

解説

Field オブジェクトの場合、ValidationText プロパティの使い方は、次の表に示すように、Field オブジェクトが追加される Fields コレクションがどのオブジェクトに含まれるかによって異なります。

オブジェクト | 使い方
Index オブジェクト | サポートされていません。
QueryDef オブジェクト | 読み取り専用です。
Recordset オブジェクト | 読み取り専用です。
Relation オブジェクト | サポートされていません。
TableDef オブジェクト | 読み取り/書き込みが可能です。


Value プロパティ (DAO)

Value プロパティ

オブジェクトの値を設定または返します。

設定値と戻り値

設定値または戻り値は、評価結果がオブジェクトの Type プロパティで指定しているデータ型に対応する値となるバリアント型 (Variant) の値です。

解説

通常は、Value プロパティは、Recordset オブジェクトのデータを取得または変更するために使用します。

Value プロパティは、Field、Parameter、および Property の各オブジェクトの既定のプロパティです。したがって、これらのオブジェクトの値は Value プロパティを指定しなくても、直接それらを参照して設定または返すことができます。

たとえば、TableDef オブジェクトの Fields コレクションに含まれる Field オブジェクトの Value プロパティなどのように、不適切な条件のもとで Value プロパティを設定または返そうとすると、トラップ可能なエラーが発生します。

メモ

  • ODBCDirect ワークスペースでは、カレント レコードを更新しないかぎり、Recordset フィールドの Value プロパティの値の取得や設定は 1 回しか行えません。たとえば、Value プロパティを確認してから設定するには、まずプロパティを取得し、次に Move 0 というメソッドを実行してカレント レコードを更新してから、新しい値を設定します。

  • Microsoft SQL Server データベースから小数値を参照する場合、Jet ワークスペースを使用すると指数表記法で表記されますが、ODBCDirect ワークスペースを使用すると通常の小数値として表示されます。


Value プロパティの使用例 (DAO)

Value プロパティの使用例

次の例では、Field と Property オブジェクトが設定されている Value プロパティを説明します。

Sub ValueX()

    Dim dbsNorthwind As Database
    Dim rstEmployees As Recordset
    Dim fldLoop As Field
    Dim prpLoop As Property

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstEmployees = _
        dbsNorthwind.OpenRecordset("Employees")

    With rstEmployees
        Debug.Print "Field values in rstEmployees"
        ' Employees テーブルの Fields コレクションを列挙します。
        For Each fldLoop In .Fields
            Debug.Print "    " & fldLoop.Name & " = ";
            Select Case fldLoop.Type
                Case dbLongBinary
                    Debug.Print "[LongBinary]"
                Case dbMemo
                    Debug.Print "[Memo]"
                Case Else
                    ' Value プロパティは
                    ' Field オブジェクトの既定のプロパティなので
                    ' ここのキーワードは省略可能です。
                    Debug.Print fldLoop.Value
            End Select
        Next fldLoop

        Debug.Print "Field values in rstEmployees"
        ' Recordset の Properties コレクションを列挙します。
        For Each prpLoop In .Properties
            On Error Resume Next
            ' Value プロパティは
            ' Property オブジェクトの既定のプロパティなので
            ' ここのキーワードは省略可能です。
            If prpLoop <> "" Then Debug.Print "    " & _
                prpLoop.Name & " = " & prpLoop.Value
            On Error GoTo 0
        Next prpLoop

        .Close
    End With

    dbsNorthwind.Close

End Sub


Version プロパティ (DAO)

Version プロパティ

  • Jet ワークスペース - DBEngine オブジェクトの場合、現在使用している DAO のバージョンを返します。Database オブジェクトの場合は、.mdb ファイルを作成した Jet のバージョンを返します。

  • ODBCDirect ワークスペース - DBEngine オブジェクトの場合、現在使用している DAO のバージョンを返します。Database オブジェクトの場合は、現在使用している ODBC ドライバのバージョンを返します。

戻り値

戻り値は、評価結果が次に示す形式のバージョン番号となる文字列型 (String) の値です。

  • Jet ワークスペース - "major.minor" の形式でバージョン番号を表します。たとえば、"3.0" のような形式で表されます。この製品のバージョン番号は、バージョン番号 (3)、ピリオド、およびリリース番号 (0) で構成されています。

  • ODBCDirect ワークスペース - "major.minor" の形式で DAO のバージョン番号を表します。または、"major.minor.build" の形式で ODBC ドライバのバージョン番号を表します。たとえば、"3.5" という DBEngine.Version プロパティの値は、DAO Version 3.5 を表します。また、"2.50.1032" という Database オブジェクトの Version プロパティの値は、DAO の現在のインスタンスが ODBC Version 2.5、build 1032 に接続していることを示します。

解説

Jet ワークスペースでは、Database オブジェクトの Version プロパティは Jet データベース エンジンのバージョンに対応していますが、データベース エンジンが組み込まれている Microsoft 製品のバージョンと必ずしも一致しているわけではありません。たとえば、Visual Basic 3.0 で作成された Database オブジェクトの Version プロパティは、3.0 ではなく 1.1 になります。

次の表に、Microsoft の各種製品に組み込まれているデータベース エンジンのバージョンを示します。

Jet データベース エンジン Version (リリース年) | Access | Visual Basic | Excel | Visual C++
1.0 (1992) | 1.0 | － | － | －
1.1 (1993) | 1.1 | 3.0 | － | －
2.0 (1994) | 2.0 | N/A | － | －
2.5 (1995) | N/A | 4.0 (16 ビット) | － | －
3.0 (1995) | ’95 (7.0) | 4.0 (32 ビット) | ’95 (7.0) | 4.x
3.5 (1997) | ’97 (8.0) | 5.0 | ’97 (8.0) | 5.0


Version プロパティの使用例 (DAO)

Version プロパティの使用例

次の例では、Version プロパティを使用して、メモリ上の Jet データベース エンジン、Jet データベース、ODBC 接続についてレポートします。

Sub VersionX()

    Dim wrkJet As Workspace
    Dim dbsNorthwind As Database
    Dim wrkODBC As Workspace
    Dim conPubs As Connection

    ' Jet Database オブジェクトを開きます。
    Set wrkJet = CreateWorkspace("NewJetWorkspace", _
        "admin", "", dbUseJet)
    Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb")

    ' ODBCDirect Workspace オブジェクトを作成し
    ' Connection オブジェクトを開きます。
    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set conPubs = wrkODBC.OpenConnection("Connection1", , , _
        "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")

    ' Version プロパティに対して、3 つの異なる使い方を示します。
    Debug.Print "Version of DBEngine (Microsoft Jet " & _
        "in memory) = " & DBEngine.Version
    Debug.Print "Version of the Microsoft Jet engine " & _
        "with which " & dbsNorthwind.Name & _
        " was created = " & dbsNorthwind.Version
    Debug.Print "Version of ODBCDirect connection " & _
        "(using Database property) = " & _
        conPubs.Database.Version

    dbsNorthwind.Close
    conPubs.Close
    wrkJet.Close
    wrkODBC.Close

End Sub


VisibleValue プロパティ (DAO)

VisibleValue プロパティ

現在データベース内にあり、バッチ更新時に競合が発生した時点で決まる OriginalValue プロパティよりも新しい値を返します。これは ODBCDirect ワークスペースでのみ使用することができます。

戻り値

戻り値は、バリアント式です。

解説

このプロパティには、現在サーバー上のデータベース内にあるフィールドの値が保存されます。共有的バッチ更新を行っている間、1 番目のクライアントがデータを取得してから更新を実行するまでの間に 2 番目のクライアントが同じフィールドとレコードを修正すると、矛盾が起こります。矛盾が起こった場合、2 番目のクライアントが設定した値は VisibleValue プロパティを使用してアクセス可能にすることができます。


アクション クエリー <DAO 定義>

アクション クエリー

データのコピーと変更を行うクエリーです。アクション クエリーには、追加クエリー、削除クエリー、テーブル作成クエリー、および更新クエリーがあります。削除クエリーと更新クエリーは既存のデータを変更し、追加クエリーとテーブル作成クエリーは既存のデータをコピーします。これに対して、選択クエリーはデータ レコードを返します。SQL パススルー クエリーがアクション クエリーとなる場合もあります。


集計関数 <DAO 定義>

集計関数

Sum (合計)、Count (カウント)、Avg (平均)、Var (分散) などの関数で、集計値の計算に使用されます。式やプログラムの記述で、ここに示した 4 つの SQL 集計関数や定義域集計関数を使用することで、さまざまな統計値を取得できます。


エイリアス <DAO 定義>

エイリアス

Visual Basic では、Visual Basic のキーワード、パブリック変数、定数など、Visual Basic と競合を避ける名前です。または、Visual Basic の名前付け規則に反する名前を避けるために、外部プロシージャに付ける別の名前のことです。

SQL では、SELECT ステートメントで AS 句を使用してフィールドや式に付ける別の名前のことです。


ANSI 文字セット <DAO 定義>

ANSI 文字セット

Windows で採用されている 8 ビットの文字セットです。ANSI 文字セットでは、キーボードを使用して最大 256 文字 (0 ～ 255) を表すことができます。ASCII 文字セットは、ANSI 文字セットのサブセットです。


追加クエリー <DAO 定義>

追加クエリー

アクション クエリーの 1 つで、既存のテーブルまたはクエリーの末尾に新しいレコードを追加します。追加クエリーはレコード (行) を返しません。


引数 <DAO 定義>

引数

アクション、プロシージャ、またはメソッドに対して追加情報を提供する定数、変数、または式のことです。引数を式の中でオペランドとして使用することで、動作に必要な追加情報を提供することができます。


配列 <DAO 定義>

配列

共通する名前やデータ型を持つ有限数の要素からなる変数です。配列の各要素は一意なインデックス値により識別されます。配列内の要素の 1 つを変更してもほかの要素には影響はありません。


ASCII 文字セット <DAO 定義>

ASCII 文字セット

ASCII (American Standard Code for Information Interchange) の 7 ビットの文字セットです。U.S. 標準キーボード上の文字および記号を表現するために広く使用されています。ASCII 文字セットは、ANSI 文字セットの最初の 128 文字 (0 ～ 127) と同じです。


アスタリスク <DAO 定義>

アスタリスク

SQL の LIKE 式で、任意の文字列を表すワイルドカードとして使用する文字 (*) です。たとえば、LIKE "*town*" という式は、文字列 "town" を含み、その前後に 0 個以上の文字のあるレコードを返します。

アスタリスクは、クエリーを作成したり、SQL ステートメントを入力したりする場合に、元になる現在のテーブルやクエリーにあるすべてのフィールドを含めるためにも使用します。たとえば、SELECT * FROM MyTable と指定すると、MyTable テーブル内のすべてのフィールド (列) が返されます。


非同期クエリー <DAO 同期>

非同期クエリー

結果が保留中であっても直ちに結果を戻す SQL クエリーです。これにより、アプリケーションはクエリーが保留中であっても別の処理を続けることができます。


オートナンバー型 (AutoNumber) フィールド<DAO 定義>

オートナンバー型 (AutoNumber) フィールド

フィールド データ型の 1 つで、テーブルにレコードを追加すると自動的に一意な数値を格納します。オートナンバー型フィールドは常に長整数型 (Long) を使用します。また、オートナンバー型フィールドで作成された数値は変更できません。"カウンタ フィールド" とも呼ばれます。


ベース テーブル <DAO 定義>

ベース テーブル

Jet データベース エンジンのテーブルです。テーブルとは、リレーショナル データベースの構造を定義し、レコードやフィールドにデータを格納するオブジェクトのことです。ベース テーブルの構造は、DAO オブジェクトやデータ定義 SQL ステートメントを使用して操作できます。また、ベース テーブルのデータは、Recordset オブジェクトやアクション クエリーを使用して変更できます。


バッチ更新 <DAO 定義>

バッチ更新

クライアントのカーソル モデルの 1 つです。クライアントはほかのカーソルと連動するものの、サーバー上でロック状態を保持したり行ごとに更新処理を実行することはせず、ローカル バッファに保存されている多数の行を更新してから、バッチ更新処理を実行します。このカーソル モデルでは、クライアントはサーバーへの接続をいったんドロップしてから、同じサーバーまたは異なるサーバーとの接続を再確立することもできます。

DAO オブジェクト 3.5 でバッチ更新を使用するには、ODBCDirect ワークスペースを使用する必要があります。Connection を開く場合に DefaultCursorDriver プロパティを dbUseClientBatchCursor に設定し、OpenRecordset メソッドの 引数 locktype を dbOptimisticBatch に設定して、Recordset を開く必要があります。


Big Integer 型 (Big Integer) <DAO 定義>

Big Integer 型 (Big Integer)

データ型の 1 つで、有効桁数が 19 (符号付き) または 20 (符号なし) で、小数部桁数が 0 (符号付きでは -263 ≦ n ≦ 263-1、符号なしでは 0 ≦ n ≦ 264-1) の符号付き数値を格納します。


バイナリ型 (Binary) <DAO 定義>

バイナリ型 (Binary)

固定長のバイナリ データを格納するデータ型です。最大長は 255 バイトです。


ブックマーク <DAO 定義>

ブックマーク

Recordset オブジェクトのプロパティの 1 つです。カレント レコードを識別するバイナリ文字列が格納されます。Bookmark プロパティの値を文字列変数に代入してから別のレコードに移動した場合、その文字列変数の値を Bookmark プロパティに再設定して、元のレコードを再びカレント レコードにすることができます。


ブール式 <DAO 定義>

ブール式

評価結果が True または False のどちらかになる式です。


ブール型 (Boolean) <DAO 定義>

ブール型 (Boolean)

True/False または yes/no の値を表すデータ型です。通常、Boolean 値は Jet データベース エンジンのビット フィールドに保存されます。ただし、データベースによってはブール型 (Boolean) を直接サポートしていないものもあります。


バイト型 (Byte) <DAO 定義>

バイト型 (Byte)

基本的なデータ型の 1 つで、0 ～ 255 までの比較的小さな正の整数を格納するために使用します。


デカルト積 <DAO 定義>

デカルト積

リレーションシップが設定されている 2 つのテーブルを結合した場合に得られる結果のことです。一方のテーブルの各行と他方のテーブルの各行との間で可能なすべての順序付き組み合わせの集合になります。

一般に、デカルト積は、FROM 句で複数のテーブルを参照している SQL SELECT ステートメントを、テーブルの結合方法を指定する WHERE 句や JOIN 句を含めずに実行することにより得られます。


連鎖 <DAO 定義>

連鎖

ある動作によって別の動作が引き起こされることです。たとえば、複数のテーブル間で連鎖更新を行うリレーションシップが設定されている場合、主テーブルで主キーを更新すると、それによって外部キー側のテーブルでも自動的に (連鎖的に) 更新が行われます。


連鎖削除 <DAO 定義>

連鎖削除

主テーブルからレコードが削除された場合に、リレーションシップの外部キー側のテーブルにある関連レコードも自動的に削除されるようにすることです。これは、テーブル間での参照整合性が設定されているリレーションシップにおいて行われます。、外部キー側のテーブルが複数のこともあります。

たとえば、[得意先] テーブル (主テーブル) と [受注] テーブル (外部キー側のテーブル) との間にリレーションシップが確立されていて、これに連鎖削除オプションが設定されている場合、[得意先] テーブルでレコードを削除すると、外部キー側の [受注] テーブルからも、その得意先に関連付けられているすべての受注データが削除されます。


連鎖更新 <DAO 定義>

連鎖更新

主テーブルでレコードの主キーが変更された場合に、リレーションシップの外部キー側のテーブルにある関連レコードも自動的に更新されるようにすることです。これは、テーブル間での参照整合性が設定されているリレーションシップにおいて行われます。外部キー側のテーブルが複数のこともあります。

たとえば、[得意先] テーブル (主テーブル) と [受注] テーブル (外部キー側のテーブル) との間にリレーションシップが確立されていて、これに連鎖更新オプションが設定されている場合、[得意先] テーブルでレコードの主キーを変更すると、外部キー側の [受注] テーブルでも、その得意先に関連付けられているすべての受注データが変更されます。


大文字と小文字を区別する <DAO 定義>

大文字と小文字を区別する

大文字と小文字を区別して扱います。大文字と小文字を区別する検索では、大文字と小文字の区別も含めて、指定したテキストと完全に一致するテキストのみが検索されます。たとえば、"ZeroLengthStr" と "zerolengthstr" は別のものとして扱われます。Jet データベースの操作では、大文字と小文字は区別されません。そのほかのデータベース管理システムの中には、大文字と小文字が区別されるものもあります。


CHAR 型 (Char) <DAO 定義>

CHAR 型 (Char)

固定長の文字列を格納するデータ型です。長さは Size プロパティで設定します。


クラス <DAO 定義>

クラス

オブジェクトの形式の定義です。クラスは、オブジェクトのインスタンスが実行時に作成される場合にテンプレートとして機能します。クラスでは、オブジェクトのプロパティ、およびオブジェクトの動作を制御するメソッドも定義します。


クライアント バッチ カーソル ライブラリ <DAO 定義>

クライアント バッチ カーソル ライブラリ

クライアント側カーソルのサポート機能を ODBCDirect データベース アプリケーションに提供するためのライブラリです。このライブラリでは 4 種類すべてのカーソル (キーセット、静的、動的、前方スクロール) がサポートされており、これによって接続の解除や最適バッチ更新処理などをはじめとする多数の機能が実現されます。


クラスタ化インデックス <DAO 定義>

クラスタ化インデックス

行の物理的順序がそのインデックス順と同じであるインデックスです。


コレクション <DAO 定義>

コレクション

関連するオブジェクトのセットを含んでいるオブジェクトです。コレクション内でのオブジェクトの位置は、そのコレクションの変更時に変わる可能性があります。したがって、コレクション内での各オブジェクトの位置は、確定されたものではありません。


矛盾 <DAO 定義>

矛盾

バッチ更新を行っている間に生じる競合です。

クライアントがサーバーからデータを読み取って、そのデータをバッチ更新で修正しようとした場合、ほかのクライアントが元のサーバーのデータを既に変更していると矛盾が生じます。この状況では、最初のクライアントは、サーバー上に実際にデータが存在していることを知らずに、サーバーのデータを修正しようとしています。


列 <DAO 定義>

列

フィールドをグリッド表示によって視覚的に表現したものです。列は、行 (レコード) の 1 つのフィールドのデータ型やサイズなどの属性を定義するものです。すべての列が集まることによって、データベースの行 (レコード) が定義されます。それぞれの列には、テーブル全体を通じて同じ型と目的を持つデータが格納されます。したがって、列の定義が行ごとに変わることはありません。


コミット <DAO 定義>

コミット

確定していないトランザクションの結果を承認することです。トランザクション処理を行う場合、DAO オブジェクトを使用してトランザクションを開始すると、それ以降トランザクションで行われた変更は、トランザクションをコミット (承認) するまでデータベースに書き込まれません。


複合クエリー <DAO 定義>

複合クエリー

1 つ以上のアクション クエリー (データをコピーまたは変更するクエリー) と 1 つ以上の選択クエリー (データを変更せずに Recordset を返すクエリー) からなるクエリーです。DAO では、QueryDef オブジェクトの SQL プロパティの中で複数の SQL 文をセミコロンで区切って指定することにより、複合クエリーを作成します。


接続文字列 <DAO 定義>

接続文字列

外部データベースのデータ ソースを定義する文字列です。通常、接続文字列は、QueryDef、TableDef、Connection、または Database の各オブジェクトの Connect プロパティに代入するか、または OpenDatabase メソッドの引数として指定します。


一貫性 <DAO 定義>

一貫性

複数のテーブルを元にした Recordset オブジェクトが、データの一貫性が保たれる更新のみを実行できる状態にあることです。たとえば、複数のテーブルを一対多リレーションシップで結合して作成した Recordset オブジェクトでは、その一貫性のために、一側のテーブルに存在しない値を多側のキーに設定することはできません。


定数 <DAO 定義>

定数

プログラムの実行中に値が変化する変数に対して、実行中も一定の値を保持している名前付きのアイテムです。ホスト アプリケーションは、それぞれ専用の定数を定義することができます。また、ユーザーが Const ステートメントを使用して別の定数を定義することもあります。定数は、プログラム コード中の任意の場所で実際の値の代わりに使用することができます。定数は、リテラル文字列やリテラル数値、または別の定数になることがあります。あるいは、それらを算術演算子や論理演算子 (Is ステートメントと累乗を除く) を使用して組み合わせたものになることもあります。定数の例を次に示します。

Const strdb = "c:\Program Files\Microsoft Office\Access\Samples\Northwind.mdb"


制約 <DAO 定義>

制約

ユーザーがフィールドに入力することのできる値を制限することです。


コピー バッファ <DAO 定義>

コピー バッファ

Jet データベース エンジンが、編集のために開いているレコードの内容を一時的に格納するために確保する領域です。Edit メソッドを使用すると、カレント レコードの内容がコピー バッファにコピーされます。AddNew メソッドを使用すると、新しいレコードを格納するためにコピー バッファがクリアされ、既定値が設定されます。Update メソッドを使用すると、コピー バッファのデータがデータベースに保存され、カレント レコードが置き換わるか、または新しいレコードが挿入されます。カレント レコードを指すポインタを再設定または移動するステートメントを実行すると、コピー バッファの内容は破棄されます。たとえば、MoveNext メソッドを使用したり、テーブルの Index プロパティを変更したりすると、コピー バッファの内容は破棄されます。


オートナンバー型 (AutoNumber) <DAO 定義>

オートナンバー型 (AutoNumber)

フィールド データ型の 1 つで、テーブルにレコードを追加すると自動的に一意な数値を格納します。オートナンバー型フィールドは常に長整数型 (Long) を使用し、その Attributes プロパティは dbAutoIncrement に設定されています。オートナンバー型フィールドで作成された数値は変更できません。"カウンタ型" とも呼ばれます。

メモ レプリケート データベースのレプリケート テーブルの場合、オートナンバー型フィールドの値は 1 つずつ増えるのではなく、-2,000,000,000 ～ 2,000,000,000 の範囲の乱数値が順次割り当てられます。


抽出条件 <DAO 定義>

抽出条件

クエリーやフィルタを作成する場合に、特定のレコードのセットを表示するために使用する制限条件です。たとえば、「= "Denmark"」 (Denmark と同じ意味)、「> 30000」などです。


クロス集計クエリー <DAO 定義>

クロス集計クエリー

クエリーの 1 つで、レコードの総数、平均、個数などの集計値を算出し、その結果を 2 種類の情報にグループ化します。一方のデータはグリッドの左側 (行の見出し) で上から下にグループ化され、もう一方のデータは表の先頭 (列の見出し) で左から右にグループ化されます。たとえば、Access のサンプル データベースである Northwind データベースで、クエリーにより表示される [商品別四半期売上高] は、クロス集計クエリーです。


制御文字 <DAO 定義>

制御文字

CTRL または ESC キーで始まるキーの組み合わせです。


通貨型 (Currency) <DAO 定義>

通貨型 (Currency)

データ型の 1 つで、金額や固定小数点演算など、正確さを重視する計算を行う場合に使用します。整数部で最大 15 桁、小数部で 4 桁までの数値を扱うことができます。通貨型 (Currency) ではすべての数値で必ず離散値が使用されるため、集計値を算出する場合にバイナリによる丸めは起こりません。


カレント データベース <DAO 定義>

カレント データベース

Database オブジェクトで、CurrentDB ( ) 関数により返されます。DBEngine.Workspaces(0).Databases(0) で参照すると、一番最初に開いたデータベースが返されます。カレント データベースの概念は Access でのみ有効です。


カレント インデックス <DAO 定義>

カレント インデックス

インデックスが定義されたテーブル タイプの Recordset オブジェクトにおいて、Index プロパティによって一番最後に設定されたインデックスのことをいいます。カレント インデックスは、テーブル タイプの Recordset オブジェクトでのレコードの並び順を決めるもので、Seek メソッドでレコードの位置を調べる場合にも使用されます。Recordset オブジェクトは複数のインデックスを持つことができますが、一度に使用できるインデックスは常に 1 つのみです。ただし、TableDef オブジェクトの場合は複数のインデックスを定義することが可能です。Jet データベース エンジンでは、複数のインデックスを使用してクエリーを評価することがあります。


カレント レコード <DAO 定義>

カレント レコード

データの参照や変更ができる Recordset オブジェクトのレコードです。レコード セットのカレント レコードの位置を変更するには、Move 系メソッドを使用します。指定した抽出条件に基づいてカレント レコードの位置を変更するには、Find 系メソッド (ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクトの場合) または Seek メソッド (テーブル タイプの Recordset オブジェクトの場合) を使用します。

Recordset オブジェクトの中でカレント レコードにできるのは、常に 1 つのレコードのみです。ただし、Recordset オブジェクトにカレント レコードが存在しないこともあります。たとえば、ダイナセット タイプの Recordset オブジェクトのレコードを削除した直後や、Recordset オブジェクトにレコードが 1 つもない場合、カレント レコードは未定義となります。この場合、カレント レコードを参照しようとすると、トラップ可能なエラーとなります。


カレント トランザクション <DAO 定義>

カレント トランザクション

一番最後に BeginTrans メソッドを使用してから Rollback メソッドまたは CommitTrans メソッドを使用するまでの間に Recordset オブジェクトに対して行ったすべての変更のことです。


DAO (データ アクセス オブジェクト) <DAO 定義>

DAO (データ アクセス オブジェクト)

データベース オブジェクトへのアクセスと操作を行うためのプログラミング インターフェイスです。


DAO オブジェクト <DAO 定義>

DAO オブジェクト

DAO (データ アクセス オブジェクト) ライブラリにより定義されているオブジェクトです。DAO オブジェクトには、Database、TableDef、Recordset、QueryDef などがあります。これらは、データを整理または操作するテーブルやクエリーなどのオブジェクトをコードの中で表現する場合に使用できます。


データベース エンジン <DAO 定義>

データベース エンジン

データベース システムの一部として、ユーザー データベースおよびシステム データベースに対してデータの取得や保存を行うプログラムです。


DDL (データ定義言語) <DAO 定義>

DDL (データ定義言語)

データベースの属性 (特にテーブル、フィールド、インデックス、保存方法など) を記述するための言語です。


データ定義クエリー <DAO 定義>

データ定義クエリー

SQL クエリーの 1 つで、テーブルの作成、変更、削除、またはデータベースのインデックスの作成や削除を行います。


データのパイプライン処理 <DAO 定義>

データのパイプライン処理

バッチ最適化更新処理を使用した処理方法です。ローカル カーソル内にサーバー データをキャッシュしてからサーバー接続を閉じ、同じ情報スキーマによる別のサーバーへの新しい接続を開いてからそのサーバー上にデータを格納します。


データ ソース <DAO 定義>

データ ソース

名前の付いた ODBC (オープン データベース コネクティビティ) リソースのことです。ODBC ドライバが ODBC データベースにアクセスする場合に必要となる格納場所やドライバの種類などのパラメータを指定します。データベースの情報源はすべてデータ ソースといえます。


データ型 <DAO 定義>

データ型

保持できるデータの種類を決める、変数の属性です。データ型には、Big Integer 型 (Big Integer)、バイナリ型 (Binary)、バイト型 (Byte)、ブール型 (Boolean)、CHAR 型 (Char)、通貨型 (Currency)、日付型 (Date)、10 進型 (Decimal)、倍精度浮動小数点数型 (Double)、浮動小数点数型 (Float)、GUID 型 (GUID)、整数型 (Integer)、長整数型 (Long)、ロング バイナリ型 (Long Binary) - OLE オブジェクト型 (OLE Object)、メモ型 (Memo)、Numeric 型 (Numeric)、単精度浮動小数点数型 (Single)、文字列型 (String)、テキスト型 (Text)、時刻型 (Time)、タイムスタンプ型 (TimeStamp)、可変長バイナリ型 (VarBinary)、バリアント型 (Variant) (既定)、ユーザー定義型 (Type ステートメントを使用して作成)、およびオブジェクト データ型 (ホスト定義のオブジェクト型および DAO オブジェクト型を含む) があります。


日付リテラル <DAO 定義>

日付リテラル

前後に数値記号 (#) が付けられた、有効な書式に基づく文字の並びのことです。有効な書式としては、コードに適用されるロケール設定で指定する日付書式や、国際日付書式があります。

たとえば、アプリケーションに適用されるロケール設定が [English-U.S.] である場合、#12/31/92# という文字列は、1992 年 12 月 31 日を表す日付リテラルになります。日付リテラルは、国別言語間で移植性を高める場合に使用してください。


日付/時刻型 (Date/Time) <DAO 定義>

日付/時刻型 (Date/Time)

日付と時刻は、内部的には実数値の整数部と小数部に分けて格納されます。

整数部は、1899 年 12 月 30 日 ～ 9999 年 12 月 30 日までの日付を表します。1899 年 12 月 30 日以前の日付は、負の数値で表します。

小数部は、0:00:00 ～ 23:59:59 の時刻を表します。正午は .5 で表します。


10 進型 (Decimal) <DAO 定義>

10 進型 (Decimal)

データ型の 1 つで、有効桁数を p、小数部桁数を s とした場合に、1 ≦ p ≦ 15、かつ 0 ≦ s ≦ p の条件を満たす符号付き数値を格納します。


既定のワークスペース <DAO 定義>

既定のワークスペース

アプリケーションから初めて DAO オブジェクトを参照した場合に、DAO によって自動的に作成される Workspace オブジェクトです。この Workspace は、DBEngine.Workspaces(0)、または単に Workspaces(0) と記述することにより参照できます。


削除クエリー <DAO 定義>

削除クエリー

アクション クエリーの 1 つで、指定した抽出条件と一致する行セットを削除します。削除クエリーは行を返しません。


デザイン時 <DAO 定義>

デザイン時

開発環境でアプリケーションを構築している場合のことで、コントロールを追加したりコントロールやフォームのプロパティを設定している場合などをいいます。これに対して、ユーザーと同じようにアプリケーションと対話している場合を "実行時" と呼びます。


デスティネーション フィールド <DAO 定義>

デスティネーション フィールド

クエリーの結果が格納されるクエリー内のフィールドです。


直接同期 <DAO 定義>

直接同期

同期処理の中で、2 つのレプリカを同時に開くことができる場合に行われる同期です。


DLL (ダイナミックリンク ライブラリ) <DAO 定義>

DLL (ダイナミックリンク ライブラリ)

実行時にプロシージャから呼び出されて読み込まれ、アプリケーションにリンクされるルーチンのセットのことです。


倍精度浮動小数点数型 (Double) <DAO 定義>

倍精度浮動小数点数型 (Double)

基本的なデータ型の 1 つで、IEEE 書式による倍精度浮動小数点数値を格納するために使用します。倍精度浮動小数点数型 (Double) の変数は 64 ビット (8 バイト) の数値として格納され、その範囲は、-1.79769313486232E+308 ～ -4.94065645841247E-324 の負数、4.94065645841247E-324 ～ 1.797693134862325E+308 の正数、および 0 です。


動的カーソル <DAO 定義>

動的カーソル

動的な行のセットで、元の 1 つまたは複数のデータベース テーブルに対して行の追加、変更、削除をする場合に使用することができます。動的カーソルには、データベース内にある 1 つまたは複数のテーブルの列を含めることができます。メンバーシップは固定されません。


ダイナセット <DAO 定義>

ダイナセット

Recordset オブジェクトの 1 つで、有効なデータベース データを指すポインタの動的なセットを返します。ダイナセット タイプは、テーブル タイプまたはスナップショット タイプの Recordset オブジェクトと同様に、レコード (行) とフィールド (列) の形でデータを返します。ダイナセット タイプの Recordset オブジェクトは、テーブル タイプの Recordset オブジェクトと異なり、複数のテーブルを結合するクエリーの結果として生成されることがあります。ダイナセット タイプの Recordset オブジェクトのレコードは、Recordset オブジェクトの Updatable プロパティが True であり、変更する Field オブジェクトが更新可能であり、さらにカレント レコードのあるデータ ページがロックされていない場合にのみ、更新可能です。データ ページは、Update メソッドを使用する場合 (LockEdits プロパティが False の場合)、または Edit メソッドを使用する場合 (LockEdits プロパティが True の場合) にロックされます。


等結合 <DAO 定義>

等結合

結合の 1 つで、2 つのテーブルの結合フィールドの値が互いに等しい場合のみ、レコードを結合して Recordset オブジェクトに追加します。


排他的 <DAO 定義>

排他的

ネットワーク上で共有しているデータベースのデータを保護するアクセス方法です。排他モードでデータベースを開いている場合、ほかのユーザーはそのデータベースを開くことができません。


式 <DAO 定義>

式

値は演算子、定数、リテラル値、関数、フィールド名、コントロール名、およびプロパティ名を組み合わせたもので、評価結果が 1 つの値になるものです。式は、多数のプロパティやアクションの引数を指定したり、クエリーの抽出条件や演算フィールドを定義するために使用します。


外部データベース <DAO 定義>

外部データベース

リモート サーバー上に常駐する Microsoft SQL Server などの ODBC データベース、または Paradox、dBASE、Excel、Access、Lotus 1-2-3、HTML、および Text などの外部のデータベースです。


外部テーブル <DAO 定義>

外部テーブル

開いている Jet データベース以外のデータベースにあるテーブルです。外部テーブルは、別の Jet データベースのファイルである場合と、別のリレーショナル データベース内のテーブルになる場合があります。


フィールド <DAO 定義>

フィールド

"列" ともいい、データベースのテーブルに格納されている情報の分類のことです。氏名など特定の項目の情報を格納するデータベース テーブルの要素です。


フィールド プロパティ <DAO 定義>

フィールド プロパティ

フィールドの属性のことで、フィールドに格納できるデータの種類を定義します。Size、Type などがあります。


フィルタ <DAO 定義>

フィルタ

レコードのサブセットを作成するためにレコードに適用する一連の抽出条件のことです。


浮動小数点数型 (Float) <DAO 定義>

浮動小数点数型 (Float)

データ型の 1 つで、仮数の有効桁数がおよそ 15 桁までの符号付き概数値 (0、または 10-308 ～ 10+308 までの絶対値) を格納します。


外部キー <DAO 定義>

外部キー

1 つ以上の主キーを参照する、別のテーブルにある 1 つ以上のフィールドです。外部キーはテーブル間の相関関係を示すものであり、外部キーと主キーのフィールドのデータは必ず一致している必要があります。たとえば、有効な部品番号のリストは、それらの部品番号を参照する目録テーブルへの外部キーを含みます。外部キーは、データベースの参照整合性を確立するために使用されます。


外部キー側のテーブル <DAO 定義>

外部キー側のテーブル

データベースで別のテーブルへの外部キーを提供するテーブルです。通常、外部キー側のテーブルは参照整合性を確立または強制するために使用され、一対多リレーションシップでは "多" 側のテーブルになります。たとえば、[得意先] テーブルに対する [受注] テーブルなどが外部キー側のテーブルになります。


フォーム <DAO 定義>

フォーム

ウィンドウやダイアログ ボックスの別称です。フォームは、コントロールのコンテナとして機能します。また、MDI (マルチ ドキュメント インターフェイス) フォームは、子フォームや一部のコントロールのコンテナとして機能します。


前方スクロール タイプのカーソル <DAO 定義>

前方スクロール タイプのカーソル

指定したレコード数で現在の位置から前方向のみか、または最新のレコードのみに移動することができる結果セットです。現在の位置は、結果セットの最初、または前のレコードには戻ることはできません。カーソルを開く場合に、メンバーシップや順序、および値が固定される結果セットで、ほかのユーザーが行の更新、削除、挿入を行っても、カーソルをいったん閉じて再び開かないかぎり、その結果は反映されません。


前方スクロール <DAO 定義>

前方スクロール

Recordset オブジェクトの末尾 (EOF) に向かって移動することです。


前方スクロール タイプの Recordset オブジェクト <DAO 定義>

前方スクロール タイプの Recordset オブジェクト

Recordset オブジェクトの 1 つで、レコード検索が先頭から末尾方向にのみ可能です。カレント レコードの位置を先頭のレコードに戻すことはできません。前方スクロール タイプのレコード セットを使用すると、リモート データベース処理のオーバーヘッドを抑えることができます。たとえば、リンク リモート テーブルを使用して独自のレポートを作成する場合などに、前方スクロール タイプの Recordset オブジェクトを使用すると、一方向の検索のみでデータをすばやく処理することができます。


FTP <DAO 定義>

FTP

File Transfer Protocol (ファイル転送プロトコル) の略です。このプロトコルによって、ユーザーはファイルをインターネット経由でほかの場所に転送できるようになります。FTP サーバー上のファイルの URL は ftp:// で始まります。


Function プロシージャ <DAO 定義>

Function プロシージャ

Visual Basic プログラムの中で特定の処理を行い、値を返すプロシージャです。Function プロシージャは Function ステートメントで始まり、End Function ステートメントで終わります。


グループ <DAO 定義>

グループ

Workgroup オブジェクトに属するユーザー アカウントのコレクションです。グループ名とパーソナル ID (PID) により識別されます。グループに割り当てられた権限は、そのグループに属するすべてのユーザーに適用されます。


GUID 型 (GUID) <DAO 定義>

GUID 型 (GUID)

GUID (Globally Unique Identifier/Universally Unique Identifier)。リモート プロシージャ コールで使用する一意な識別文字列のことです。すべてのインターフェイスおよびオブジェクト クラスは、識別子として GUID を使用します。GUID は 128 ビットの値です。たとえば、12345678-1234-1234-1234-123456789ABC は、構文的に正しい GUID の例です。クライアントとサーバーをバインドするためには、クライアントの GUID とサーバーの GUID とが一致する必要があります。オブジェクトのベンダーは、独占して使用できる GUID のセット (256 個の GUID で 1 セット) の割り当てを、必要なだけ Microsoft に求めることができます。また、ネットワーク カードを使用している場合は、UUIDGEN.EXE というツールを実行することにより、時刻、日付、およびネットワーク カードの一意な番号を元に 1 セット (256 個) の GUID を取得することができます。


HTTP <DAO 定義>

HTTP

HyperText Transfer Protocol (ハイパーテキスト転送プロトコル) の略です。World Wide Web 経由で情報を配送する場合に使用されるインターネット プロトコルです。このプロトコルによって、ユーザーはクライアント プログラムで URL を入力したりハイパーリンクをクリックした場合に、文字や画像、音声などのデジタル情報を Web サーバーから取得することができます。Web サーバー上にあるファイルの URL は http:// で始まります。


ハイパーリンク型 <DAO 定義>

ハイパーリンク型

ハイパーリンクを格納するフィールドで使用されるフィールド データ型です。ハイパーリンク フィールドには、テキスト、テキストの組み合わせ、およびテキストとして保存されハイパーリンク アドレスとして使用される数値などが格納されます。ハイパーリンク アドレスは最大 3 つまでの要素からなり、各要素には 2,048 文字までの文字を指定できます。ハイパーリンク アドレスは、次の構文を使用します。

displaytext#address#subaddress


矛盾 <DAO 定義>

矛盾

複数のテーブルを元に作成された Recordset オブジェクトが、すべてのフィールド (列) を更新できる状態にあることをいいます。たとえば、Customers テーブルと Orders テーブルを一対多リレーションシップで結合して作成した Recordset オブジェクトでは、参照整合性によって更新が無効にならないかぎり、"Orders" テーブルの CustomerID フィールドの値を、"Customers" テーブルの CustomerID フィールドと異なる値に更新することができるため、結果として整合性が維持できなくなります。この状態を矛盾といいます。


インデックス <DAO 定義>

インデックス

1 つまたは複数のテーブル データ フィールド (列) の動的なクロスリファレンスです。インデックスを使用すると、テーブルから特定のレコードをすばやく取得することができます。レコードが追加、変更、または削除されると、データベース管理システムはその変更内容が反映されるようにインデックスを自動的に更新します。

テーブル タイプの Recordset オブジェクトでは、カレント インデックスにより、Recordset オブジェクトに返されるデータ レコードの並び順が決まります。1 つのテーブルに複数のインデックスを定義することができます。

DAO の Index オブジェクトは、TableDef オブジェクトのインデックスを表します。


間接同期 <DAO 定義>

間接同期

同期の 1 種で、あるシンクロナイザが変更情報をドロップボックス フォルダに置き、別のシンクロナイザがそれを検出して管理しているレプリカに適用する場合に行われます。


内部結合 <DAO 定義>

内部結合

結合の 1 つで、レコードを結合して Recordset オブジェクトに追加します。たとえば、等結合は内部結合の 1 つであり、結合するフィールドの値が等しい場合にレコードを結合します。


組み込み可能な ISAM <DAO 定義>

組み込み可能な ISAM

dBASE、Excel、Paradox などの外部データベースへのアクセスを可能にするために指定するドライバです。ISAM は、"Indexed Sequential Access Method" の略です。Jet データベース エンジンは、アプリケーションから ISAM ドライバが参照された場合に、それらの ISAM ドライバを組み込み (読み込み) ます。これらのドライバの格納場所は Windows レジストリに保持されます。


インスタンス <DAO 定義>

インスタンス

同じクラスを共有するオブジェクトのセットに属する個々のオブジェクトです。たとえば、Form クラスのインスタンスはすべて同じコードを共有し、Form クラスで定義されているコントロールと共に読み込まれます。実行時には、個々のインスタンスのコントロールのプロパティに、それぞれ別の値を設定することができます。


整数型 (Integer) <DAO 定義>

整数型 (Integer)

基本的なデータ型の 1 つで、整数値を格納するために使用します。整数型 (Integer) の変数は 16 ビット (2 バイト) の数値として格納され、その範囲は -32,768 ～ 32,767 です。


インターネット <DAO 定義>

インターネット

数千の小規模コンピュータ ネットワークと、数百万台もの商用、教育用、政府用、個人用のコンピュータからなる、世界規模のネットワークのことです。インターネットは、仮想の図書館や商店、オフィス、ギャラリーなどが集まった電子都市といえます。


イントラネット <DAO 定義>

イントラネット

HTTP や FTP などのプロトコルをはじめとするインターネットの技術を使用している組織内部で構成されるネットワークのことです。イントラネットでは、オブジェクトや文書、Web ページなどの情報をハイパーリンクを使用して操作することができます。


組み込み定数 <DAO 定義>

組み込み定数

アプリケーションにより提供される定数です。たとえば、DAO (データ アクセス オブジェクト) の定数は DAO ライブラリの中に列挙されていて、オブジェクト ブラウザを使用して参照できます。


Jet 接続型 ODBC データ ソース <DAO 定義>

Jet 接続型 ODBC データ ソース

DAO (データ アクセス オブジェクト) と Jet データベース エンジンを使用してアクセスする ODBC データ ソースです。


結合 <DAO 定義>

結合

データベースの操作で、複数のテーブルからレコードの一部または全部を抽出して結び付けることです。等結合、外部結合、自己結合などがあります。通常、結合とは、あるテーブルのフィールドと、ほかのテーブルの同じデータ型のフィールドとを関連付けることを意味します。結合を作成するには、SQL ステートメントを使用します。

2 つのテーブル間のリレーションシップを定義する場合は、主テーブルのフィールドと外部キー側のテーブルのフィールドを指定して結合を作成します。クエリーにテーブルを追加する場合は、そのクエリーを定義する SQL ステートメントの中で、適切なフィールド間の結合を作成する必要があります。


キーセット カーソル <DAO 定義>

キーセット カーソル

行のセットで、元になる 1 つまたは複数のデータベース テーブルに対して行の追加、変更、削除をする場合に使用することができます。キーセット内部では自由に移動ができます。キーセット カーソルには、データベース内にある 1 つまたは複数のテーブルの列を含めることができます。メンバーシップは固定されます。


左結合 <DAO 定義>

左結合

左外部結合では、2 つのテーブルのうちの 2 つ目 (右側) のテーブルのレコードに一致する値がない場合でも、1 つ目 (左側) のテーブルのすべてのレコードがレコード セットに追加されます。


左外部結合 <DAO 定義>

左外部結合

外部結合の 1 つで、クエリーの SQL ステートメントで LEFT JOIN 操作の左側に指定されたテーブルのすべてのレコードが、右側のテーブルの結合されたフィールドに同じ値がない場合でも、Recordset オブジェクトに追加されます。右側のテーブルのレコードは、一致する値が結合フィールドにある場合にのみ、左側のテーブルのレコードと結び付けられます。左側のレコードに一致する値がない場合は、Null 値の行が右側に結合されます。


リンク テーブル <DAO 定義>

リンク テーブル

Jet データベースにリンクされた別のデータベース内のテーブルのことです。リンク テーブルのデータは外部データベースに保存されたままの状態で使用され、ほかのアプリケーションから操作することができます。以前は "アタッチ テーブル" と呼ばれていました。


ロック状態 <DAO 定義>

ロック状態

データ ページ、Recordset オブジェクト、または Database オブジェクトが、現在データを入力しているユーザー以外のすべてのユーザーに対して、読み取り専用になっている状態のことです。


ロング バイナリ型 (Long Binary) <DAO 定義>

ロング バイナリ型 (Long Binary)

最大 1.2GB までのデータを格納できるフィールド型です。ロング バイナリ フィールドにはあらゆるバイナリ データを格納できます。Access では "OLE オブジェクト型 (OLE Object)" とも呼ばれています。


長整数型 (Long) <DAO 定義>

長整数型 (Long)

基本的なデータ型の 1 つで、長整数値を格納するために使用します。長整数型 (Long) の変数は 32 ビット (4 バイト) の数値として格納され、その範囲は -2,147,483,648 ～ 2,147,483,647 です。


テーブル作成クエリー <DAO 定義>

テーブル作成クエリー

アクション クエリーの 1 つで、既存のクエリーの Recordset オブジェクトから新しいテーブルを作成します。


"多側のみ" のテーブル <DAO 定義>

"多側のみ" のテーブル

クエリーで結合の "一" 側として使用されることのないテーブルです。


メモ型 (Memo) <DAO 定義>

メモ型 (Memo)

フィールド データ型の 1 つです。メモ型フィールドには最大 1.2GB までのデータを格納できます。


メッセージ <DAO 定義>

メッセージ

アプリケーション間で受け渡しされる情報です。


メソッド <DAO 定義>

メソッド

関数のように特定のオブジェクトを操作するプロシージャです。


Jet データベース <DAO 定義>

Jet データベース

Jet データベース エンジンにより作成されたデータベースです。Jet データベースのファイルの拡張子は .mdb です。


Jet ワークスペース <DAO 定義>

Jet ワークスペース

Jet データベース エンジンを使用してデータ ソースにアクセスするワークスペースです。使用できるデータ ソースは、Jet データベース ファイル (.mdb)、Paradox データベースなどの ODBC データベース、ISAM データベースです。


フィールドのデータ型 <DAO 定義>

フィールドのデータ型

Field のデータ型の一覧を次の表に示します。

DAO フィールド データ型 | 定数
Big Integer 型 (Big Integer) | dbBigInt
バイナリ型 (Binary) | dbBinary
ブール型 (Boolean) | dbBoolean
バイト型 (Byte) | dbByte
CHAR 型 (Char) | dbChar
通貨型 (Currency) | dbCurrency
日付/時刻型 (Date/Time) | dbDate
10 進型 (Decimal) | dbDecimal
倍精度浮動小数点数型 (Double) | dbDouble
浮動小数点数型 (Float) | dbFloat
GUID 型 (GUID) | dbGUID
整数型 (Integer) | dbInteger
長整数型 (Long) | dbLong
ロング バイナリ型 (Long Binary) - OLE オブジェクト型 (OLE Object) | dbLongBinary
メモ型 (Memo) | dbMemo
Numeric 型 (Numeric) | dbNumeric
単精度浮動小数点数型 (Single) | dbSingle
テキスト型 (Text) | dbText
時刻型 (Time) | dbTime
タイムスタンプ型 (TimeStamp) | dbTimeStamp
可変長バイナリ型 (VarBinary) | dbVarBinary


Microsoft Jet データベース エンジン <DAO 定義>

Microsoft Jet データベース エンジン

ユーザー データベースおよびシステム データベースに対してデータの取得や保存を行うデータベース管理システムです。Jet データベース エンジンは、Access や Visual Basic などのほかのデータ アクセス システムで使用されるデータを管理する部分と考えることができます。


マルチユーザー データベース <DAO 定義>

マルチユーザー データベース

複数のユーザーが同じデータ セットに同時にアクセスしてデータを変更できるデータベースのことです。ここでいう "ユーザー" は、同じアプリケーションの別のインスタンスである場合と、同じデータにアクセスするシステム上の別のアプリケーションのインスタンスである場合があります。


正規化 <DAO 定義>

正規化

効率的なテーブル デザインの設計によって、リレーショナル データベースでの情報の重複を最小限に抑えることです。


Null <DAO 定義>

Null

存在しないデータ、または不明のデータを示す値です。Null 値は、格納する情報が不明なフィールドに対して、または式やクエリーの中で設定したりできます。Visual Basic では、Null キーワードが Null 値を表します。また、主キーの設定されたフィールドなど、一部のフィールドでは Null 値を格納できないものもあります。


Null フィールド <DAO 定義>

Null フィールド

文字や値のないフィールドです。Null フィールドは長さ 0 の文字列 ("") や 0 の値を持つフィールドとは異なります。フィールドの内容が不明な場合に Null 値が設定されます。たとえば、[プロジェクト] テーブルの "完了日" フィールドに、そのプロジェクトが完了するまで Null 値を格納しておきます。


Numeric 型 (Numeric) <DAO 定義>

Numeric 型 (Numeric)

データ型の 1 つで、有効桁数を p、小数部桁数を s とした場合に、1 ≦ p ≦ 15、かつ 0 ≦ s ≦ p の条件を満たす符号付き数値を格納します。


数式 <DAO 定義>

数式

評価結果が数値となる式です。評価結果が数値となる変数、定数、関数、および演算子の任意の組み合わせを数式として使用できます。


オブジェクト ブラウザ <DAO 定義>

オブジェクト ブラウザ

オブジェクト ライブラリの内容を参照するためのダイアログ ボックスです。提供されているオブジェクトに関する情報を取得できます。


オブジェクト式 <DAO 定義>

オブジェクト式

特定のオブジェクトを表す式です。オブジェクト式にはオブジェクトのコンテナを含めることができます。たとえば、アプリケーションに Application オブジェクトがあり、その中に Document オブジェクトがあり、さらにその中に Text オブジェクトがある場合、次の式はすべて有効なオブジェクト式になります。

Application.Document.Text
Application.Text
Document.Text
Text


オブジェクト ライブラリ <DAO 定義>

オブジェクト ライブラリ

1 つまたは複数のタイプ ライブラリ リソースを持つダイナミックリンク ライブラリ (DLL) で、通常は .olb という拡張子を持ちます。オブジェクト ライブラリの内容をオブジェクト ブラウザを使用して調べると、提供されているオブジェクトに関する情報を取得できます。


オブジェクト変数 <DAO 定義>

オブジェクト変数

オブジェクトへの参照を含む変数です。


ODBC (オープン データベース コネクティビィティ) <DAO 定義>

ODBC (オープン データベース コネクティビィティ)

標準プロトコルで、さまざまな外部データベースのサーバーやファイルへの接続を可能にします。Jet データベース エンジンが使用する ODBC ドライバにより、Microsoft SQL Server などのほかの外部データベースにアクセスできます。

ODBC アプリケーション プログラミング インターフェイス (API) を使用すれば、Jet データベース エンジンを使用せずに ODBC ドライバとその接続先データベースにアクセスできます。


ODBC データ ソース <DAO 定義>

ODBC データ ソース

データのソースとして使用されるデータベース、またはデータベース サーバーです。ODBC データ ソースを参照するには、そのデータ ソース名 (DSN) を使用します。データ ソースの作成は、Windows のコントロール パネル、または RegisterDatabase メソッドを使用して行います。


ODBCDirect <DAO 定義>

ODBCDirect

Jet データベース エンジンを経由せず DAO の機能を使用して、ODBC データ ソースに直接アクセスできるようにするための技術です。


ODBCDirect データ ソース <DAO 定義>

ODBCDirect データ ソース

Jet データベース エンジンを経由しないで DAO ODBCDirect の機能を使用してアクセスするデータ ソースです。


ODBCDirect ワークスペース <DAO 定義>

ODBCDirect ワークスペース

Jet データベース エンジンを使用せずに、ODBCDirect を使用して ODBC データ ソースに直接アクセスするワークスペースです。


ODBC ドライバ <DAO 定義>

ODBC ドライバ

特定の ODBC データ ソースとほかのクライアント アプリケーションを接続するために使用されるダイナミックリンク ライブラリ (DLL) です。


ODBC ドライバ マネージャ <DAO 定義>

ODBC ドライバ マネージャ

ODBC で使用できるデータ ソースとそれらのデータ ソースにアクセスするために使用するドライバとの接続を管理するアプリケーションです。


OLE <DAO 定義>

OLE

Microsoft のオブジェクト技術で、既存のさまざまなアプリケーションのコンポーネントを含むアプリケーションの作成を可能にします。


ActiveX オブジェクト <DAO 定義>

ActiveX オブジェクト

オブジェクトの 1 つで、オートメーション インターフェイスを通じてほかのアプリケーションやプログラミング ツールから自由に使用することができます。たとえば、Word や Excel の内部で、Access を使用して ActiveX オブジェクトを作成し、それを操作することができます。オートメーションは以前は OLE オートメーションと呼ばれていました。


OLE オブジェクト型 (OLE Object) <DAO 定義>

OLE オブジェクト型 (OLE Object)

フィールド データ型の 1 つで、ほかのアプリケーションで作成したオブジェクトを Jet データベース エンジンにリンクしたり埋め込んだりする場合に使用します。たとえば、OLE オブジェクト フィールドを使用して図のコレクションを格納することができます。


一対多リレーションシップ <DAO 定義>

一対多リレーションシップ

次の条件を満たす 2 つのテーブル間の関係 (リレーションシップ) をいいます。

  • 主テーブルのすべてのレコードについて、その主キーの値が、リレーション テーブルの対応する 1 つまたは複数のフィールドの値と一致する。一致する値はリレーション テーブルの複数のテーブルに含まれる。

  • リレーション テーブルのすべてのレコードについて、その主キーの値が、主テーブルの対応する 1 つまたは複数のフィールドの値と一致する。一致する場合、その値は主テーブルの唯一のレコードに含まれる。


一対一リレーションシップ <DAO 定義>

一対一リレーションシップ

次の条件を満たす 2 つのテーブル間の関係 (リレーションシップ) をいいます。

  • 主テーブルのすべてのレコードについて、その主キーの値が、リレーション テーブルの対応する 1 つまたは複数のフィールドの値と一致する。一致する値はリレーション テーブルの唯一のレコードに含まれる。

  • リレーション テーブルのすべてのレコードについて、その主キーの値が、主テーブルの対応する 1 つのフィールドの値と一致する。一致する場合、その値は主テーブルのレコードに含まれる。


共有的 <DAO 定義>

共有的

データ ページのロック状態の 1 つで、編集中のレコードを含むいくつかのレコードが格納されている状態のことです。共有的ロック状態では、Update メソッドにより更新が行われている間はほかのユーザーがレコードにアクセスすることはできませんが、Edit メソッドから Update メソッドまでの間はほかのユーザーもアクセスすることができます。共有的ロック状態は、ODBC データベースにアクセスしているとき、および Recordset オブジェクトの LockEdits プロパティが False に設定されている場合に適用されます。


外部結合 <DAO 定義>

外部結合

結合の 1 種です。1 つ目のテーブルの各レコードと一致する値が 2 つ目のテーブルの結合フィールドにない場合でも、1 つ目のテーブルのすべてのレコードが Recordset オブジェクトに追加されます。2 つ目のテーブルのレコードは、一致する値が結合フィールドにある場合のみ、1 つ目のテーブルのフィールドと結び付けられます。一致する値がない場合は、Null レコードが結合されます。


ページ <DAO 定義>

ページ

レコード データが格納されるデータベース内の領域です。レコードのサイズによっては、1 ページに複数のレコードが格納される場合もあります。Jet データベース (.mdb) の 1 ページのサイズは 2,048 バイト (2KB) です。


パラメータ <DAO 定義>

パラメータ

クエリーの結果を操作することができる値を持つ要素です。たとえば、社員に関するデータを返すクエリーを作成する場合に、社員名をパラメータとして指定します。このような QueryDef オブジェクトを作成すると、クエリーを実行するときに、特定の社員の名前をパラメータに設定することによって、その社員に関するデータを取得することができます。


パラメータ クエリー <DAO 定義>

パラメータ クエリー

クエリーの 1 つで、実行前に具体的な抽出条件の値を指定する必要があります。厳密には、パラメータ クエリーは独立した種類のクエリーではなく、クエリーを柔軟に使用するための拡張機能です。


パーズ <DAO 定義>

パーズ

ステートメントや式の各部分を識別し、それらが言語規則に従った正しいものであるかどうかを確認することです。


部分レプリカ <DAO 定義>

部分レプリカ

フル レプリカの中にあるレコードのサブセットのみからなるデータベースです。部分レプリカを使用すると、フル レプリカのレコードのうちどのサブセットをデータベースに保持するのかを定義するフィルタやリレーションシップを設定または識別できます。


パススルー クエリー <DAO 定義>

パススルー クエリー

SQL クエリーの 1 つで、Microsoft SQL Server などの SQL データベース サーバーにコマンドを直接送信する場合に使用します。パススルー クエリーでは、サーバー上のテーブルにリンクするのではなく、テーブルを直接操作します。パススルー クエリーは、SQL サーバーのみが認識できる SQL 文法で記述された、SQL クエリーやシステム固有のコマンドを実行する場合に使用します。

パススルー クエリーには、レコードを返すものと返さないものがあります。ただし、レコードを返す場合は、必ずスナップショットとして返します。


権限 <DAO 定義>

権限

データベースのデータやオブジェクトに対するユーザーのアクセス権の種類を指定する属性のことです。たとえば、テーブルやクエリーに対するデータ読み取りの権限がユーザーに与えられている場合、ユーザーはそのデータの表示や取得はできますが、編集はできません。


持続的なオブジェクト <DAO 定義>

持続的なオブジェクト

データベースのテーブルや QueryDef オブジェクトのように、データベースの中に保存されるオブジェクトです。ダイナセット タイプおよびスナップショット タイプの Recordset オブジェクトは、必要に応じてメモリ内に作成されるものなので、持続的なオブジェクトではありません。


排他的 <DAO 定義>

排他的

データ ページのロック状態の 1 つです。編集中のレコードを含むいくつかのレコードが格納されています。排他的ロック状態では、Edit メソッドを使用した時点でほかのユーザーはレコードにアクセスできなくなり、Update メソッドが実行されるまでアクセスできない状態が続きます。排他的ロック状態は、Recordset オブジェクトの LockEdits が True に設定されている場合に適用されます。


パーソナル ID (PID) <DAO 定義>

パーソナル ID (PID)

Jet データベース エンジンが Workgroup オブジェクト内のユーザーやグループを識別するために、アカウント名と共に使用する 4 ～ 20 バイトの文字列です。アルファベットは大文字と小文字が区別されます。新しいユーザーやグループを作成する場合は、この PID とアカウント名を入力します。


主キー <DAO 定義>

主キー

テーブル内の各レコードを一意に識別するための値を持つ、1 つ以上のフィールドです。リレーションシップでは、あるテーブルから別のテーブルにある特定のレコードを参照する場合にも主キーを使用できます。主キーは別のテーブルから参照される場合には、外部キーにもなります。主キーはテーブル内で 1 つのみ設定できます。たとえば、[社員] テーブルの場合、"社員コード" フィールドを主キーに使用することができます。


主テーブル <DAO 定義>

主テーブル

外部キー側のテーブルとの一対多リレーションシップにおける、2 つのリレーション テーブルの "一" 側のテーブルです。通常、主テーブルは参照整合性を確立または強制するために使用されます。


遂行クエリー <DAO 定義>

遂行クエリー

ストアド プロシージャを実行する SQL ステートメントです。


プロパティ <DAO 定義>

プロパティ

オブジェクトの名前付きの属性です。プロパティは、サイズ、色、表示位置のようなオブジェクトの特性や、使用可能/不可能のようなオブジェクトの状態を定義します。


擬似インデックス <DAO 定義>

擬似インデックス

テーブル内で 1 つまたは複数のデータ フィールド (列) の動的なクロスリファレンスです。一意なインデックスがない ODBC テーブル (サーバー テーブル) の編集を可能にします。疑似インデックスは、サーバー テーブルに実際に存在するインデックスではなく、テーブルの更新をサポートするために Jet データベース エンジンが使用するクロスリファレンスです。一意なインデックスを持っている ODBC テーブルは更新することができるため、疑似インデックスは一意なインデックスがない場合にのみ必要になります。ODBC テーブルに既に一意なインデックスがある場合や、テーブルを更新しない場合には、疑似インデックスは必要ありません。ただし、読み取り専用として定義されているテーブルは一意なインデックスを持つことができません。以前のバージョンでは、疑似インデックスは "インデックス定義" と呼ばれていました。


クエリー <DAO 定義>

クエリー

データベースに送信される書式化された命令です。クエリーは、指定のレコード セットを返したり、レコード セットに対して特定のアクションを実行したりします。たとえば、次の SQL クエリー ステートメントを実行すると、レコードが返されます。

SELECT [会社名] FROM 出版社 WHERE 都道府県 = '東京都'

作成および実行できるクエリーには、選択クエリー、アクション クエリー、クロス集計クエリー、パラメータ クエリー、SQL クエリーがあります。


読み取り専用 <DAO 定義>

読み取り専用

データへのアクセス権の種類の 1 つです。情報の取得はできますが、変更はできません。


レコード <DAO 定義>

レコード

人物、場所、出来事などの特定の項目に関連するデータの集まりです。テーブルのデータは、データベースの中のレコード (行) に格納されます。各レコードは関連するフィールド (列) の集合からなり、各フィールドはそれぞれ格納するデータの属性を 1 つ定義します。レコードはフィールドと組み合わされて、データベース内で取得可能な情報の構成単位として機能します。


参照整合性 <DAO 定義>

参照整合性

レコードを追加、変更、または削除した場合に、テーブル間のリレーションシップを確立して維持するための規則です。参照整合性を有効にすると、主キーに対応しないレコードの結合テーブルへの追加、結合テーブルのレコードが孤立化するような主テーブルでの値の変更、および、対応するレコードが存在する場合の主テーブルからのレコードの削除ができなくなります。

リレーションシップに対して dbRelationDeleteCascade や dbRelationUpdateCascade オプションをオンにした場合は、レコードの変更や削除が可能になりますが、参照整合性を保つために対応するレコードも変更または削除されます。


リレーションシップ <DAO 定義>

リレーションシップ

2 つのテーブルに共通するフィールド (列) の関連付けです。リレーションシップの種類には、一対一、多対多、一対多などがあります。


再クエリー <DAO 定義>

再クエリー

クエリーを再実行することです。再クエリーによって、レコードへの変更を反映したり、新しく追加されたレコードを取得したり、あるいは削除されたレコードを取り除くことができます。


予約語 <DAO 定義>

予約語

Jet データベース エンジンの SQL 言語などの言語の一部として定義されている語です。予約語には、ステートメント、定義済み関数、データ型、メソッド、演算子、オブジェクトなどの名前があります。たとえば、SELECT、UPDATE、BETWEEN、SET、INSERT などは予約語です。変数名やオブジェクト名に予約語を使用することはできません。


右結合 <DAO 定義>

右結合

右外部結合では、2 つのテーブルのうちの 1 つ目 (左側) のテーブルのレコードに対応する値がない場合でも、2 つ目 (右側) のテーブルのすべてのレコードがレコード セットに追加されます。

たとえば、[部署] テーブル (左側) と [社員] テーブル (右側) がある場合に、どの部署にも所属しない社員も含めた全社員を選択するには、RIGHT JOIN 操作を使用します。反対に、社員が配属されていない部署も含めたすべての部署を選択するには、LEFT JOIN 操作を使用します。


右外部結合 <DAO 定義>

右外部結合

外部結合の 1 つです。クエリーの SQL ステートメントで、RIGHT JOIN 操作の右側のテーブルの各レコードに対応する値が左側のテーブルの結合フィールドにない場合でも、右側のテーブルのすべてのレコードが Recordset オブジェクトに追加されます。左側のテーブルのレコードは、対応する値が結合フィールドにある場合にのみ、右側のテーブルのレコードと結び付けられます。


行 <DAO 定義>

行

データを保持する関連フィールド (列) の集まりです。Jet データベース エンジンでは、行とレコードを同じ意味で使用しています。テーブルは、0 個以上のデータの行で構成されます。


実行時エラー <DAO 定義>

実行時エラー

コードの実行中に発生するエラーです。実行時エラーは、ステートメントが不正な操作を実行しようとした場合に発生します。


実行時 <DAO 定義>

実行時

コードが実行されている場合をいいます。実行時には、ユーザーとしてコードと対話する形になります。


適用範囲 (スコープ) <DAO 定義>

適用範囲 (スコープ)

変数やプロシージャの持つ属性の 1 つです。変数やプロシージャを認識できるモジュールとプロシージャの範囲を定義します。適用範囲には、パブリック、モジュール、およびプロシージャの 3 つのレベルがあります。Public で宣言された変数にはどのモジュールからもアクセスすることができます。一方、モジュールの中で宣言された変数は、そのモジュールの内部でのみアクセスできます。また、Sub プロシージャや Function プロシージャの中で宣言された変数は、それらのプロシージャの内部でのみアクセスできます。


セキュリティ ワークグループ <DAO 定義>

セキュリティ ワークグループ

Jet データベースの Workgroup オブジェクトです。ユーザー アカウントやユーザー グループごとにデータベース オブジェクトへのアクセスを制限します。セキュリティが設定されたデータベースにログインするには、ユーザー名とパスワードが必要です。


セキュリティ <DAO 定義>

セキュリティ

指定したユーザーやユーザー グループに対して、データベースのデータやオブジェクトへのアクセス権を設定または制限する機能です。


選択クエリー <DAO 定義>

選択クエリー

クエリーの 1 つで、テーブルに保存されているデータに対して照会を行い、データを変更せずに Recordset オブジェクトを返します。Recordset オブジェクトにデータを取得すると、元になるテーブルのデータを参照または変更することができます。アクション クエリーの場合は、データの変更はできますが、データ レコードは返されません。


自己結合 <DAO 定義>

自己結合

結合の 1 つです。同じ値が結合フィールドにある場合、テーブルのレコードが同じテーブルのほかのレコードと結合されます。自己結合は、等結合または外部結合になります。たとえば、上司とその部下の一覧を表示するクエリーなど、階層化されたデータの照会を行う場合に自己結合を使用します。


サーバー <DAO 定義>

サーバー

クライアント アプリケーションとのデータの共有を目的として設計されたデータベース管理システムです。多くの場合、サーバーとクライアントはネットワークを経由して接続されます。通常、データベース サーバーはデータを集中管理しており、リモート クライアントのアプリケーションはそれらのデータを取得したり、操作することができます。


サーバー側カーソル <DAO 定義>

サーバー側カーソル

クライアント コンピュータ上にあるカーソルに対して、サーバー上に常駐するカーソルをいいます。クライアント側カーソルがワークステーションにカーソルをコピーしている間、サーバー側カーソルではカーソルを維持するためにデータベース サーバーのリソースが使用されます。


セッション <DAO 定義>

セッション

Jet データベース エンジンによって実行される一連の操作の開始から終了までの範囲です。1 つのセッションは、ユーザーのログインで始まり、ログオフで終わります。1 セッション中に実行されるすべての操作は 1 つのトランザクションの適用範囲 (スコープ) となり、ログインするユーザー名とパスワードによって決まる権限の制限を受けます。セッションは、DAO オブジェクトにより Workspace オブジェクトとして実装されています。


Short 型 (Short) <DAO 定義>

Short 型 (Short)

Jet データベース エンジンの基本的なデータ型の 1 つです。Visual Basic for Applications で定義される 整数型 (Integer) に相当します。Short 型の変数は 16 ビット (2 バイト) の数値として格納され、その範囲は -32,768 ～ 32,767 です。


単精度浮動小数点数型 (Single) <DAO 定義>

単精度浮動小数点数型 (Single)

基本的なデータ型の 1 つです。IEEE 書式による単精度浮動小数点数値を格納するために使用します。単精度浮動小数点数型 (Single) の変数は 32 ビット (4 バイト) の数値として格納され、その範囲は、-3.402823E+38 ～ -1.401298E-45 の負数、1.401298E-45 ～ 3.402823E+38 の正数、および 0 です。


スナップショット <DAO 定義>

スナップショット

レコード セットの静的なコピーで、データベースから取得されメモリ上にコピーされます。Jet データベース エンジンに接続しているデータ ソースから抽出されたスナップショットは更新できません。スナップショット タイプの Recordset オブジェクトは、ベース テーブル、クエリー、または別の Recordset オブジェクトから作成できます。SQL パススルー クエリーでは必ずスナップショットが返されます。


並べ替え順序 <DAO 定義>

並べ替え順序

データをアルファベット順または数字順に並べ替える場合に適用する規則です。昇順または降順のどちらかになります。


SQL クエリー <DAO 定義>

SQL クエリー

SQL ステートメントを記述することによってのみ作成できるクエリーです。サブクエリー、パススルー クエリー、ユニオン クエリー、およびデータ定義クエリーは、SQL クエリーです。


SQL ステートメント <DAO 定義>

SQL ステートメント

SELECT、UPDATE、DELETE などの SQL (Structured Query Language) のコマンドを定義する式です。WHERE、ORDER BY などの句が含まれることもあります。通常、SQL 文字列と SQL ステートメントは、クエリー、Recordset オブジェクト、および集合関数で使用されますが、データベースの構造の作成や変更にも使用できます。


標準偏差 <DAO 定義>

標準偏差

確率関数が、どのような状態で平均値の辺りに集約されているかを表すパラメータです。平均値からの偏差を 2 乗して得られる積率の平方根と同じ値です。個々の値が平均値からどれだけ離れているかを示すことで、一連の値の性質を表します。


名前付け規則 <DAO 定義>

名前付け規則

DAO オブジェクトに名前を付ける場合の規則です。オブジェクト名は最長 64 バイトで、文字、数字、スペース、および特殊記号が使用できます。ただし、ドット (.)、感嘆符 (!)、バッククォート (`)、角かっこ ([ ]) は使用できません。また、名前の先頭をスペースや制御文字 (ASCII コードの 0 ～ 31) にすることはできません。


静的カーソル <DAO 定義>

静的カーソル

通常、カーソルを開く場合に、メンバーシップや順序、および値が固定される結果セットです。ほかのユーザーが行の更新、削除、挿入を行っても、カーソルをいったん閉じて再び開かないかぎり、その結果は反映されません。


文字列比較 <DAO 定義>

文字列比較

比較演算子を使用して 2 つの文字列の大小を比べることです。モジュールの宣言セクションに Option Compare Text を記述すると、1 バイトの英字の比較については大文字と小文字が区別されないようになります。Option Compare Binary を記述すると、大文字と小文字が完全に区別されるようになります。Option Compare Database を記述すると、文字列比較の方法はカレント データベースの設定に従うようになります。


文字列型 (String) <DAO 定義>

文字列型 (String)

基本的なデータ型の 1 つで、文字データを格納するために使用します。文字列型 (String) の変数は固定長または可変長のどちらかになり、1 バイトに 1 文字ずつ格納されます。固定長文字列の場合は、その文字列の長さを宣言し、約 64KB (216) までの文字列を扱うことができます。可変長文字列の場合は、最大で 20 億 (231) 文字 (Windows 3.1 以前では約 64KB (216) の文字列) を扱うことができます。ただし、格納時に多少のオーバーヘッドがあるため、実際に格納できる長さはそれよりも少し短くなります。


文字列式 <DAO 定義>

文字列式

評価結果が文字の並びとなる式です。文字列式には、文字列を返す関数、文字列リテラル、文字列定数、文字列変数、バリアント型 (Variant) 文字列、および文字列 Variant (VarType 8) を返す関数が含まれます。


Structured Query Language (SQL) <DAO 定義>

Structured Query Language (SQL)

データの抽出や更新など、リレーショナル データベースを管理するための言語です。SQL を使用すると、検索、並べ替え、抽出の操作により、データベースから特定のデータを取得することができます。

SQL の SELECT ステートメントは、テーブル名、クエリー名、またはフィールド名が指定できる箇所で使用できます。たとえば、OpenRecordset メソッドでテーブル名を指定する代わりに SQL ステートメントを記述できます。


サブクエリー <DAO 定義>

サブクエリー

SELECT、SELECT...INTO、INSERT...INTO、DELETE、または UPDATE ステートメントやほかのサブクエリーの中でネストされた SELECT ステートメントです。


構文エラー <DAO 定義>

構文エラー

Visual Basic が認識できないコード行を入力した場合に発生するエラーです。

メモ 個々のキーワードの構文規則については、そのヘルプ トピックの構文セクションに定義されています。開発環境の中からキーワードに関するヘルプを呼び出すには、そのキーワードを選択し、F1 キーを押します。


システム オブジェクト <DAO 定義>

システム オブジェクト

MSysIndexes テーブルなど、Jet データベース エンジンにより定義されているデータベース オブジェクトです。


テーブル <DAO 定義>

テーブル

リレーショナル データベースにおけるデータ格納の基本単位です。テーブルは、レコード (行) とフィールド (列) の形式でデータを格納し、通常は社員や品目など、ある特定の分類情報を扱います。ベース テーブルとも呼ばれます。

テーブル タイプの Recordset オブジェクトは、データベース内のベース テーブルを論理的に表現したものです。


TEMP <DAO 定義>

TEMP

環境変数で、システムの起動時に AUTOEXEC.BAT ファイルにより設定されます。通常、TEMP はハード ディスク上の領域の一部を指し、Windows、または Jet データベース エンジンなどのプログラムは、システムのシャットダウン後に必要としない情報をこの領域に格納します。たとえば、AUTOEXEC.BAT ファイルで次の行を記述すると、環境変数 TEMP に D:\TEMPAREA ディレクトリが設定されます。

SET TEMP=D:\TempArea


テンポラリ ディスク <DAO 定義>

テンポラリ ディスク

オペレーティング システムの環境変数 TEMP によって指定したディスクまたはディレクトリです。Jet データベース エンジンは、テンポラリ ファイルと結果セットをテンポラリ ディスクに格納します。テンポラリ ドライブとも呼ばれます。環境変数 TEMP には RAM ディスクを指定することもできますが、あまりお勧めできません。


テキスト型 (Text) <DAO 定義>

テキスト型 (Text)

フィールド データ型の 1 つで、テキスト フィールドには最大 255 バイトまでの文字列を格納できます。ただし、Field オブジェクトの Size プロパティにこの最大値より小さい値が設定されている場合は、その設定値の示すバイト数までしか格納できません。テキスト フィールドの Size プロパティの値が 0 に設定されている場合は、テキスト フィールドに 255 バイトまでの文字列まで格納できます。


時刻型 (Time) <DAO 定義>

時刻型 (Time)

時刻値を格納するデータ型です。値はデータ ソースのクロックの設定によって代わります。


タイムスタンプ型 (TimeStamp) <DAO 定義>

タイムスタンプ型 (TimeStamp)

TimeStamp を格納するデータ型です。値はデータ ソースのクロックの設定によって代わります。


トランザクション <DAO 定義>

トランザクション

データベースのデータおよび構造に対してなされる一連の変更です。トランザクションは BeginTrans ステートメントで始まり、CommitTrans ステートメントによってコミットされます。BeginTrans ステートメント以降の変更をすべて元に戻すには Rollback ステートメントを使用します。

トランザクションの使用は任意であり、最大 5 レベルまでネストすることができます。トランザクションを使用すると、データ変更操作の処理速度が向上し、変更を元に戻す操作も簡単になります。

トランザクションは、参照されたデータベース オブジェクトの Workspace に対してグローバルに適用されます。


ユニオン クエリー <DAO 定義>

ユニオン クエリー

SQL クエリー (選択クエリー) の 1 つです。指定したすべてのレコードを複数のテーブルから抽出し、重複するレコードを削除して、残りのレコードを元にスナップショット タイプの Recordset オブジェクトを作成します。重複するレコードも含める場合は、キーワード ALL を指定します。

たとえば、[得意先] テーブルと [仕入先] テーブルに対してユニオン クエリーを使用すると、[得意先] テーブルにも登録されている仕入先の一覧をスナップショット タイプの Recordset オブジェクトに取得することができます。


非管理レプリカ <DAO 定義>

非管理レプリカ

シンクロナイザによって管理されていないレプリカです。非管理レプリカは [同期] ウィンドウの中で特別なアイコンとして表示されます。非管理レプリカから同期スケジュールを設定することはできませんが、別のシンクロナイザや DAO コードを介して同期をとることは可能です。


更新 <DAO 定義>

更新

データの変更内容をレコードに保存することです。レコードが保存されるまでの間、変更内容はコピー バッファと呼ばれる一時的なレコードに格納されます。SQL ステートメントで UPDATE 句を使用すると、データベース テーブルの 1 つ以上のレコード (行) のデータ値を変更できます。


更新クエリー <DAO 定義>

更新クエリー

アクション クエリーの 1 つです。指定した抽出条件に従ってレコードのセットを変更できます。更新クエリーはレコードを返しません。


ユーザー アカウント <DAO 定義>

ユーザー アカウント

ユーザー名とパーソナル ID (PID) により識別されるアカウントです。ユーザー アカウントは、Jet データベース エンジンの Workgroup オブジェクトのデータベース オブジェクトへのアクセスを管理するために使われます。


入力検査 <DAO 定義>

入力検査

入力したデータが特定の条件や制限に合っているかどうかを確認する処理のことです。


入力規則プロパティ <DAO 定義>

入力規則プロパティ

プロパティの 1 つで、テーブルのフィールドやレコードに条件を設定するために使用します。入力規則プロパティには、ValidationRule、Required、および AllowZeroLength があります。


入力規則 <DAO 定義>

入力規則

1 つまたは複数のフィールドに入力する値の条件や制限を決める規則です。Field オブジェクトや TableDef オブジェクトに設定できます。入力規則は、入力検査を必要とするフィールドのあるレコードを更新する時点でチェックされます。入力規則に反するデータを入力すると、トラップ可能なエラーとなります。


可変長バイナリ型 (VarBinary) <DAO 定義>

可変長バイナリ型 (VarBinary)

可変長のバイナリ データを格納するデータ型です。最大長は 255 バイトです。


変数 <DAO 定義>

変数

名前の付けられた、データの格納領域です。変数に格納されているデータは、プログラムの実行中に変更することができます。各変数は、その適用範囲内でほかの変数と重複しない識別子を持ちます。データ型を指定することもでき、指定しなくてもかまいません。

変数名に関する規則を次に示します。

  • 先頭は英字でなければなりません。

  • ピリオドや型宣言文字を中に含めることはできません。

  • 適用範囲内でほかの変数と重複する名前を持つことはできません。

  • 最大 256 バイトです。


分散 <DAO 定義>

分散

標準偏差の平方のことです。グループ内の値がそれらの平均値からどの程度離れているかを示す値です。


バリアント型 (Variant) <DAO 定義>

バリアント型 (Variant)

基本的なデータ型の 1 つです。数値、文字列、日付データ、または Empty や Null などの特殊な値を格納するために使用します。バリアント型に格納されるデータの扱いは、VarType 関数により定義されます。データ型が明示的に宣言されなかった変数は、すべてバリアント型 (Variant) になります。


バリアント式 <DAO 定義>

バリアント式

評価結果が、数値、文字列、日付データ、または Empty や Null などの特殊な値になる式です。


ワイルドカード文字 <DAO 定義>

ワイルドカード文字

ワイルドカードとして使用できる文字は、アスタリスク (*)、疑問符 (?)、シャープ記号 (#)、感嘆符 (!)、ハイフン (-)、および角かっこ ([ ]) です。これらのワイルドカードをクエリーまたは式の中で使用すると、指定したパターンに一致するレコードやファイル名などのアイテムのすべてを表すことができます。また、SQL ステートメントを使用するときに、ワイルドカード文字と通常の文字を組み合わせて指定すると、検索の対象をさらに限定することができます。

記号 | 使用例 |  | 説明
* | 「wh*」と指定すると、"what"、"white"、"why" などが検索されます。 「*at」と指定すると、"cat"、"bat"、"what" などが検索されます。 |  | 任意の数の任意の文字を表します。文字列中のどの部分にも指定できます。
? | 「b?ll」と指定すると、"ball"、"bell"、"bill"などが検索されます。 |  | 任意の 1 文字を表します。
# | 「1#3」と指定すると、"103"、"113"、"123" などが検索されます。 |  | 数値を表す任意の 1 文字を表します。
[ ] | 「b[ae]ll」と指定すると、"ball" と "bell" は検索されますが、"bill"、"bull" などは検索されません。 |  | 角かっこ内のいずれか 1 文字を表します。
! | 「b[!ae]ll」と指定すると、"bill" や "bull" は検索されますが、"ball" と "bell" は検索されません。 |  | 角かっこに指定した文字以外の任意の 1 文字を表します。
- | 「b[a-c]d」と指定すると、"bad"、"bbd"、"bcd" が検索されますが、"bed" などは検索されません。 | 角かっこに指定した範囲のいずれか 1 文字を表します。

メモ アスタリスク (*)、疑問符 (?)、シャープ記号 (#)、開き角かっこ ([) のワイルドカード文字そのものを検索するには、その文字を角かっこで囲んで指定します。


ワークグループ <DAO 定義>

ワークグループ

マルチ ユーザー環境のユーザーのグループで、データおよび同じワークグループ情報ファイル (標準では System.mdw) を共有します。


ワークグループ管理者 <DAO 定義>

ワークグループ管理者

Jet データベース エンジンの Workgroup オブジェクトの Admins グループのメンバです。ワークグループ管理者は、自分の Workgroup オブジェクトの中に作成されたすべてのデータベース オブジェクトに対して、常にすべての権限を持っています。


長さ 0 の文字列 <DAO 定義>

長さ 0 の文字列

文字を 1 つも含まない文字列 ("") です。Len 関数の引数に長さ 0 の文字列を指定すると、0 が返されます。


DAO の旧式の機能

Access Version 1.x および 2.0、および Visual Basic Version 3.0 は、前のバージョンの DAO を使用していました。これらのバージョンで使用された、オブジェクト、メソッド、プロパティ、およびステートメントのうちの、いくつかは "旧式" とされましたが、既存のユーザー プログラムとの上位互換性を保つため、サポートされています。

次の表は、旧式の DAO メソッド、プロパティ、オブジェクト、ステートメントの一覧です。これらは、より強力で、柔軟で、使いやすいものに置き換えられました。表では、旧式の機能のそれぞれに対応する新しい機能が示されています。

旧式の機能 | 新しい機能
すべての CreateDynaset メソッド | OpenRecordset メソッド
すべての CreateSnapshot メソッド | OpenRecordset メソッド
すべての ListFields メソッド | Fields コレクション
すべての ListIndexes メソッド | Indexes コレクション
CompactDatabase ステートメント | DBEngine.CompactDatabase メソッド
CreateDatabase ステートメント | DBEngine.CreateDatabase メソッド
DBEngine.FreeLocks メソッド | DBEngine.Idle メソッド
DBEngine.SetDefaultWorkspace メソッド | DBEngine.DefaultUser プロパティ、および DBEngine.Password プロパティ
DBEngine.SetDataAccessOption メソッド | DBEngine.IniPath プロパティ
Database.BeginTrans メソッド | Workspace.BeginTrans メソッド
Database.CommitTrans メソッド | Workspace.CommitTrans メソッド
Database.Rollback メソッド | Workspace.Rollback メソッド
Database.DeleteQuerydef メソッド | Delete メソッド
Database.ExecuteSQL メソッド | Execute メソッド
Database.ListTables メソッド | Tabledefs コレクション
Database.OpenQuerydef メソッド | Querydefs コレクション
Database.OpenTable メソッド | OpenRecordset メソッド
FieldSize メソッド | FieldSize プロパティ
Index.Fields プロパティ | Index.Fields コレクション
OpenDatabase ステートメント | DBEngine.OpenDatabase メソッド
Querydef.ListParameters メソッド | Parameters コレクション
Snapshot オブジェクト | Recordset オブジェクト
Dynaset オブジェクト | Recordset オブジェクト
Table オブジェクト | Recordset オブジェクト


Append、Delete メソッドの使用例 (DAO)

Append、Delete メソッドの使用例

次の例では、Append メソッドまたは Delete メソッドのどちらかを使用して、TableDef の Fields コレクションを修正します。このプロシージャを実行するには、AppendDeleteField 関数が必要です。

Sub AppendX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind.TableDefs!Employees

    ' 新しく 3 つのフィールドを追加します。
    AppendDeleteField tdfEmployees, "APPEND", _
        "E-mail", dbText, 50
    AppendDeleteField tdfEmployees, "APPEND", _
        "Http", dbText, 80
    AppendDeleteField tdfEmployees, "APPEND", _
        "Quota", dbInteger, 5

    Debug.Print "Fields after Append"
    Debug.Print , "Type", "Size", "Name"

    ' Fields コレクションを列挙して
    '新しいフィールドを表示します。
    For Each fldLoop In tdfEmployees.Fields
        Debug.Print , fldLoop.Type, fldLoop.Size, fldLoop.Name
    Next fldLoop

    ' 新しく追加されたフィールドを削除します。
    AppendDeleteField tdfEmployees, "DELETE", "E-mail"
    AppendDeleteField tdfEmployees, "DELETE", "Http"
    AppendDeleteField tdfEmployees, "DELETE", "Quota"

    Debug.Print "Fields after Delete"
    Debug.Print , "Type", "Size", "Name"

    ' Fields コレクションを列挙して
    ' 新しいフィールドが削除されたことを示します。
    For Each fldLoop In tdfEmployees.Fields
        Debug.Print , fldLoop.Type, fldLoop.Size, fldLoop.Name
    Next fldLoop

    dbsNorthwind.Close

End Sub

Sub AppendDeleteField(tdfTemp As TableDef, _
    strCommand As String, strName As String, _
    Optional varType, Optional varSize)

    With tdfTemp

        ' はじめに TableDef オブジェクトが
        ' 更新可能かどうかを調べます。
        ' 更新可能でない場合は
        ' 呼び出しているプロシージャに制御を返します。
        If .Updatable = False Then
            MsgBox "TableDef not Updatable! " & _
                "Unable to complete task."
            Exit Sub
        End If

        ' 渡されたデータに従って
        ' 指定した TableDef オブジェクトの Fields コレクションに
        ' フィールドの追加や削除を行います。
        If strCommand = "APPEND" Then
            .Fields.Append .CreateField(strName, _
                varType, varSize)
        Else
            If strCommand = "DELETE" Then .Fields.Delete _
                strName
        End If

    End With

End Sub


Move メソッドの使用例 (DAO)

Move メソッドの使用例

次の例では、Move メソッドを使用して、ユーザーの入力に基づいてレコード ポインタを配置します。

Sub MoveX()

    Dim dbsNorthwind As Database
    Dim rstSuppliers As Recordset
    Dim varBookmark As Variant
    Dim strCommand As String
    Dim lngMove As Long

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstSuppliers = _
        dbsNorthwind.OpenRecordset("SELECT CompanyName, " & _
        "City, Country FROM Suppliers ORDER BY CompanyName", _
        dbOpenDynaset)

    With rstSuppliers
        ' レコード セットを配置します。
        .MoveLast
        .MoveFirst

        Do While True
            ' カレント レコードと移動するレコード数に関する
            ' 情報を表示します。
            strCommand = InputBox( _
                "Record " & (.AbsolutePosition + 1) & " of " & _
                .RecordCount & vbCr & "Company: " & _
                !CompanyName & vbCr & "Location: " & !City & _
                ", " & !Country & vbCr & vbCr & _
                "Enter number of records to Move " & _
                "(positive or negative).")

            If strCommand = "" Then Exit Do

            ' Move メソッドがうまくいかない場合に備えて
            ' ブックマークを格納します。
            varBookmark = .Bookmark

            ' Move メソッドのパラメータのデータ型は
            ' 長整数型 (Long) である必要があります。
            lngMove = CLng(strCommand)
            .Move lngMove

            ' BOF や EOF の場合をトラップします。
            If .BOF Then
                MsgBox "Too far backward! " & _
                    "Returning to current record."
                .Bookmark = varBookmark
            End If
            If .EOF Then
                MsgBox "Too far forward! " & _
                    "Returning to current record."
                .Bookmark = varBookmark
            End If
        Loop
        .Close
    End With

    dbsNorthwind.Close

End Sub


Refresh メソッドの使用例 (DAO)

Refresh メソッドの使用例

次の例では、Refresh メソッドを使用して、OrdinalPosition データへの変更に基づいて Categories テーブルの Fields コレクションを更新します。Refresh メソッドが使用された後でのみ、コレクションの Fields の並び順は変化します。

Sub RefreshX()

    Dim dbsNorthwind As Database
    Dim tdfEmployees As TableDef
    Dim aintPosition() As Integer
    Dim astrFieldName() As String
    Dim intTemp As Integer
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set tdfEmployees = dbsNorthwind.TableDefs("Categories")

    With tdfEmployees
        ' 元の OrdinalPosition データを表示し
        ' 配列に格納します。
        Debug.Print _
            "Original OrdinalPosition data in TableDef."
        ReDim aintPosition(0 To .Fields.Count - 1) As Integer
        ReDim astrFieldName(0 To .Fields.Count - 1) As String
        For intTemp = 0 To .Fields.Count - 1
            aintPosition(intTemp) = _
                .Fields(intTemp).OrdinalPosition
            astrFieldName(intTemp) = .Fields(intTemp).Name
            Debug.Print , aintPosition(intTemp), _
                astrFieldName(intTemp)
        Next intTemp

        ' OrdinalPosition データを変更します。
        For Each fldLoop In .Fields
            fldLoop.OrdinalPosition = _
                100 - fldLoop.OrdinalPosition
        Next fldLoop
        Set fldLoop = Nothing

        ' 新しいデータを出力します。
        Debug.Print "New OrdinalPosition data before Refresh."
        For Each fldLoop In .Fields
            Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name
        Next fldLoop

        .Fields.Refresh

        ' 新しいデータを出力して
        ' フィールドの並び順がどのように変更されたかを示します。
        Debug.Print "New OrdinalPosition data after Refresh."
        For Each fldLoop In .Fields
            Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name
        Next fldLoop

        ' 元の OrdinalPosition データを格納します。
        For intTemp = 0 To .Fields.Count - 1
            .Fields(astrFieldName(intTemp)).OrdinalPosition = _
                aintPosition(intTemp)
        Next intTemp
    End With

    dbsNorthwind.Close

End Sub


ダイナセット タイプの Recordset オブジェクト (DAO)

ダイナセット タイプの Recordset オブジェクト

ダイナセット タイプの Recordset オブジェクトは動的なレコード セットであり、データベースの 1 つまたは複数のテーブルおよびクエリーのフィールドを含むことができ、かつデータを更新することができます。ODBCDirect データベースでは、ダイナセット タイプの Recordset オジェクトは ODBC キーセット カーソルに対応しています。

解説

ダイナセット タイプの Recordset オブジェクトは、Recordset オブジェクトの種類の 1 つであり、元のデータベース テーブルのデータを操作することができます。

ダイナセット タイプの Recordset オブジェクトは、スナップショット タイプの Recordset オブジェクトと異なり、実際のデータの代わりに各レコードに対する主キーのみを格納しています。このため、スナップショット タイプの Recordset オブジェクトでは、元のデータの変更と共に更新は行われませんが、ダイナセット タイプの Recordset オブジェクトでは更新が行われます。テーブル タイプの Recordset オブジェクトと同様、ダイナセット タイプの Recordset オブジェクトは、編集や表示のためにすべてのレコードを取得することができます。

ダイナセット タイプの Recordset オブジェクトを作成するには、開いているデータベース、別のダイナセット タイプまたはスナップショット タイプの Recordset オブジェクト、QueryDef オブジェクト、または TableDef オブジェクトのいずれかに OpenRecordset メソッドを使用します。それ以外の Recordset オブジェクトおよび TableDef オブジェクトでは、Jet ワークスペース内でのみ Recordset オブジェクトを開くことができます。

ダイナセット タイプの Recordset オブジェクトを要求して、Jet データベース エンジンがレコードに対する読み取り/書き込み権限を得られなかった場合、Jet データベース エンジンは読み取り専用のダイナセット タイプの Recordset オブジェクトを作成することがあります。

データが更新されると、ベース テーブルはこれらの変更を反映します。このため、カレント レコードの位置を移動すると、アプリケーションで最新のデータが利用できます。マルチユーザー データベースでは、複数のユーザーが同じレコードを参照しているダイナセット タイプの Recordset オブジェクトを開くことができます。ダイナセット タイプの Recordset オブジェクトは動的なものなので、あるユーザーがレコードを変更した場合、ほかのユーザーは即座に変更されたデータにアクセスすることになります。ただし、あるユーザーがレコードを追加しても、ほかのユーザーには、Recordset オブジェクトに対して Requery メソッドを使用するまで追加されたレコードは表示されません。あるユーザーがレコードを削除すると、ほかのユーザーにはそのレコードにアクセスしようとした場合に削除されたことが知らされます。

レコードは、AddNew メソッドおよび Update メソッドを使用して追加した場合にのみ、ダイナセット タイプの Recordset オブジェクトの一部となります。たとえば、INSERT INTO SQL ステートメントを含むアクション クエリーを使用してレコードを追加した場合、このレコードは Requery メソッドを使用するか、または OpenRecord メソッドで Recordset オブジェクトを再び作成するまで、ダイナセット タイプの Recordset オブジェクトには格納されません。

Jet データベース エンジンではデータの整合性を維持するため、ダイナセット タイプまたはテーブル タイプの Recordset オブジェクトで Edit 操作と Update 操作を行う間は、レコードがロック状態になります。Edit 操作中は排他的ロック状態になり、Update 操作中は共有的ロック状態になります。これにより、同時に 1 つのレコードを更新できるユーザーは 1 人に限定されます。レコードをロックする場合に Jet データベース エンジンは、レコードの格納されている 2KB のページ全体をロックします。

また、ODBC 以外のテーブルでも共有的ロックおよび排他的ロックが使用できます。ODBC を使用して Jet ワークスペースから外部テーブルにアクセスする場合は、常に共有的ロックを使用する必要があります。LockEdits プロパティと OpenRecord メソッドのパラメータ lockedits を使用すると、編集中にロックの状態を調べることができます。

ダイナセット タイプの Recordset オブジェクトですべてのフィールドを更新できるわけではありません。個々のフィールドが更新可能かどうかは、Field オブジェクトの DataUpdatable プロパティの設定を調べて確認してください。

次の場合は、ダイナセット タイプの Recordset オブジェクトを更新できません。

  • ODBC や Paradox のテーブルに一意なインデックスが存在しない場合

  • データ ページがほかのユーザーによってロックされている場合

  • レコードを最後に読み込んでから、そのレコードに変更が加えられている場合

  • ユーザーが権限を持っていない場合

  • 1 つまたは複数のテーブルまたはフィールドが読み取り専用に設定されている場合

  • データベースが読み取り専用で開かれている場合

  • Recordset オブジェクトが複数のテーブルに基づいて JOIN ステートメントなしで作成されているか、またはクエリーが複雑すぎる場合

ダイナセット タイプの Recordset オブジェクトまたは Recordset データは、必ずしも指定した並び順にはなりません。データを並べ替える必要がある場合は、ORDER BY 句を指定した SQL ステートメントを使用して、Recordset オブジェクトを作成します。WHERE 句を使用して、特定のレコードを抽出し Recordset オブジェクトに追加することもできます。通常、このように SQL ステートメントを使用してレコードのサブセットの抽出と並べ替えを行う方が、Filter プロパティや Sort プロパティを使用したり、各レコードごとに条件に合うかを調べるよりも、データへのアクセスが速くなります。


ダイナセット タイプの Recordset オブジェクトの使用例 (DAO)

ダイナセット タイプの Recordset オブジェクトの使用例

次の例では、ダイナセット タイプの Recordset オブジェクトを開き、更新可能なフィールドの範囲を示します。

Sub dbOpenDynasetX()

    Dim dbsNorthwind As Database
    Dim rstInvoices As Recordset
    Dim fldLoop As Field

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstInvoices = _
        dbsNorthwind.OpenRecordset("Invoices", dbOpenDynaset)

    With rstInvoices
        Debug.Print "Dynaset-type recordset: " & .Name

        If .Updatable Then
            Debug.Print "    Updatable fields:"

            ' ダイナセット タイプの Recordset オブジェクトの
            ' Fields コレクションを列挙し
            ' 更新可能なフィールドのみを出力します。
            For Each fldLoop In .Fields
                If fldLoop.DataUpdatable Then
                    Debug.Print "        " & fldLoop.Name
                End If
            Next fldLoop

        End If

        .Close
    End With

    dbsNorthwind.Close

End Sub


Bookmark、Bookmarkable プロパティの使用例 (DAO)

Bookmark、Bookmarkable プロパティの使用例

次の例では、Bookmark と Bookmarkable プロパティを使用して、ユーザーが Recordset のレコードに目印をつけ、後で目印の位置に戻ることができるようにします。

Sub BookmarkX()

    Dim dbsNorthwind As Database
    Dim rstCategories As Recordset
    Dim strMessage As String
    Dim intCommand As Integer
    Dim varBookmark As Variant

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstCategories = _
        dbsNorthwind.OpenRecordset("Categories", _
        dbOpenSnapshot)

    With rstCategories

        If .Bookmarkable = False Then
            Debug.Print "Recordset is not Bookmarkable!"
        Else
            ' Recordset を配置します。
            .MoveLast
            .MoveFirst

            Do While True
                ' カレント レコードの情報を表示して
                ' ユーザーからの入力を取得します。
                strMessage = "Category: " & !CategoryName & _
                    " (record " & (.AbsolutePosition + 1) & _
                    "/" & .RecordCount & ")" & vbCr & _
                    "Enter command:" & vbCr & _
                    "[1 - next / 2 - previous /" & vbCr & _
                    "3 - set bookmark /" & vbCr & _
                    "4 - go to bookmark]"
                intCommand = Val(InputBox(strMessage))

                Select Case intCommand
                    ' 前方または後方に移動して
                    ' BOF または EOF ではトラップします。
                    Case 1
                        .MoveNext
                        If .EOF Then .MoveLast
                    Case 2
                        .MovePrevious
                        If .BOF Then .MoveFirst

                    ' カレント レコードのブックマークを格納します。
                    Case 3
                        varBookmark = .Bookmark

                    ' 格納されたブックマークで指定したレコードに進みます。
                    Case 4
                        If IsEmpty(varBookmark) Then
                            MsgBox "No Bookmark set!"
                        Else
                            .Bookmark = varBookmark
                        End If

                    Case Else
                        Exit Do
                End Select

            Loop

        End If

        .Close
    End With

    dbsNorthwind.Close

End Sub


Foreign プロパティの使用例 (DAO/Microsoft Jet)

Foreign プロパティの使用例

次の例では、Foreign プロパティを使用して、TableDef オブジェクトにある Index オブジェクトの外部キー インデックスの識別方法を示してします。Relation オブジェクトが作成されると、外部キーを持つインデックスが Jet データベース エンジンで作成されます。外部キー インデックスの既定の名前は、主テーブル名に外部キー側のテーブル名を加えたものになります。このプロシージャを実行するには、ForeignOutput 関数が必要です。

Sub ForeignX()

    Dim dbsNorthwind As Database

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")

    With dbsNorthwind
        ' TableDef オブジェクトと QueryDef オブジェクトの
        ' 2 つのオブジェクトから
        ' 外部キー インデックスに関するレポートを出力します。
        ForeignOutput .TableDefs!Products
        ForeignOutput .TableDefs!Orders
        ForeignOutput .TableDefs![Order Details]

        .Close
    End With

End Sub

Function ForeignOutput(tdfTemp As TableDef)

    Dim idxLoop As Index

    With tdfTemp
        Debug.Print .Name & " TableDef"
        ' 指定した TableDef オブジェクトの Indexes コレクションを列挙します。
        For Each idxLoop In .Indexes
            Debug.Print "    " & idxLoop.Name
            Debug.Print "        Foreign = " & idxLoop.Foreign
        Next idxLoop
    End With

End Function


Inherit プロパティの使用例 (DAO/Microsoft Jet)

Inherit プロパティの使用例

次の例では、Tables コンテナの Inherit プロパティに True を設定します。続いて作成される Tables コンテナの Document オブジェクトが、Tables コンテナと同じセキュリティ設定を持つようにします。

Sub InheritX()

    Dim dbsNorthwind As Database
    Dim conTables As Container

    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set conTables = dbsNorthwind.Containers("Tables")

    ' Tables コンテナの Inherit プロパティを True に設定し
    ' また、Tables コンテナの権限を設定することで
    ' このコンテナにあるすべての新しい Document オブジェクトが
    ' 同じ権限を持つことを確認します。
    conTables.Inherit = True
    conTables.Permissions = dbSecWriteSec

    dbsNorthwind.Close

End Sub


動的タイプの Recordset オブジェクトの概要 (DAO)

動的タイプの Recordset オブジェクトの概要

動的タイプの Recordset オブジェクトには、次のコレクション、メソッド、およびプロパティがあります。動的タイプの Recordset オブジェクトおよびそのメソッドとプロパティは、ODBCDirect ワークスペースでのみ使用することができます。

コレクション

Fields (既定)
Properties

メソッド

AddNew
Cancel
CancelUpdate
Close
Delete
Edit
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset
Requery
Update

プロパティ

次の表では、各プロパティの設定は、読み取り/書き込みが可能か、読み取り専用か、または常に False かどうかを示しています。

読み取り専用

読み取り/書き込みが可能

プロパティ | 制限
AbsolutePosition |
BatchCollisionCount |
BatchCollisions |
BatchSize |
BOF |
Bookmark |
Bookmarkable |
CacheSize |
Connection |
EditMode |
EOF |
LastModified |
LockEdits |
Name |
PercentPosition |
RecordCount |
RecordStatus |
Restartable |
StillExecuting |
Type |
Updatable |
UpdateOptions |


ベース コンピュータ <DAO 定義>

ベース コンピュータ

スター トポロジで使用されるコンピュータです。レプリカはハブ サーバーからコピーされ、ベース コンピュータ上に配置されます。このレプリカを使用して、さらに別のコンピュータのレプリカを作成することができます。

参照 ｢ハブ サーバー｣、｢スター トポロジ｣


競合テーブル <DAO 定義>

競合テーブル

2 つのレプリカの間で同期の競合が起きた場合に生成されるテーブルです。競合テーブルは、拒否された変更内容を持つレプリカの中にのみ表示されます。


データベース レプリケーション <DAO 定義>

データベース レプリケーション

あるデータベースの複数のコピー (レプリカ) の間で同期をとるために、データベースを再生成する処理のことです。あるレプリカのレプリケート可能なテーブルのデータに対する変更は、レプリカ セットのほかのレプリカに送られて適用されます。また、デザイン マスターに対するデータベースのデザイン変更は、レプリカ セットのすべてのレプリカに送られて適用されます。


既定同期パートナ <DAO 定義>

既定同期パートナ

レプリカ セットのレプリカに対して自動的に同期をとるために使用されるシンクロナイザのことです。レプリカが作成されると、作成元のレプリカを管理しているシンクロナイザが新しいレプリカの既定同期パートナになります。


標準同期スケジュール <DAO 定義>

標準同期スケジュール

スケジュール定義のためにシンクロナイザが使用するテンプレートです。新しい管理レプリカの同期スケジュールが決まっていない場合に、管理レプリカとその既定同期パートナーとの間でスケジュールを定義するために使用されます。スケジュールが定義されれば、スケジュールを変更できるようになります。


デザイン マスター <DAO 定義>

デザイン マスター

システム テーブル、システム フィールド、およびレプリケーション プロパティが追加されているデータベースです。デザイン マスターは、レプリカ セットの最初のレプリカになります。データベース構造の変更はデザイン マスターに対してのみ行うことができます。同じレプリカ セットのレプリカはどれでもデザイン マスターにすることができますが、各レプリカ セットに存在できるデザイン マスターは 1 つのみです。


ドロップボックス フォルダ <DAO 定義>

ドロップボックス フォルダ

シンクロナイザがデザインやデータの変更情報を残したり、取り出したりすることができる共有ネットワーク上の場所のことです。


GUID (Globally Unique Identifier) <DAO 定義>

GUID (Globally Unique Identifier)

レプリケーションで一意な識別子を作成するために使用される 16 バイトのフィールドです。GUID は、レプリカやレプリカ セット、テーブル、レコード、およびほかのオブジェクトを識別するために広く使用されます。

メモ Access では、GUID をレプリケーション ID と呼びます。


ハブ サーバー <DAO 定義>

ハブ サーバー

スター トポロジで使用されるコンピュータです。このコンピュータに常駐するレプリカは、ほかのレプリカの同期パートナとして使用することができます。

参照 「ベース コンピュータ」、「サテライト コンピュータ」、「スター トポロジ」


ローカル オブジェクト <DAO 定義>

ローカル オブジェクト

レプリカで作成され、そのレプリカに残るテーブル、クエリー、フォーム、レポート、マクロ、またはモジュールのことです。これらのオブジェクトやオブジェクトに対する変更は、レプリカ セットのほかのメンバには影響しません。


管理レプリカ <DAO 定義>

管理レプリカ

シンクロナイザが割り当てられたレプリカです。シンクロナイザは、レプリカ セットのほかのレプリカと、変更されたデータの送受信を行います。

メモ シンクロナイザをレプリカに割り当てなくても、アプリケーションのプログラム コード、またはほかのシンクロナイザを使用することにより同期をとることは可能です。ただし、レプリカにシンクロナイザを割り当てないと、そのレプリカを使用して同期スケジュールを設定することはできません。


オブジェクトのレプリケーション <DAO 定義>

オブジェクトのレプリケーション

同じオブジェクト (テーブル、クエリー、レポート、フォーム、マクロ、またはモジュール) の複数のコピーの間で同期をとるためにオブジェクトを更新する処理のことです。デザイン マスターでオブジェクトのデザインを変更すると、その変更はレプリカ セットのすべてのレプリカに送られて適用されます。


オンデマンド同期 <DAO 定義>

オンデマンド同期

ユーザーの明示的な要求により、2 つのレプリカ間でデータ交換を行うことです。


レプリカ <DAO 定義>

レプリカ

データベース、またはその中のテーブルやクエリー、フォーム、レポート、マクロ、あるいはモジュールのコピーのことです。レプリカはレプリカ セットのメンバであり、セットのほかのレプリカと同期をとることができます。あるレプリカでレプリケートされたテーブルのデータを変更すると、その変更はレプリカ セットのほかのメンバに送られて適用されます。

メモ デザイン マスターもレプリカです。


レプリケート データベース <DAO 定義>

レプリケート データベース

データベース内におけるデータ変更に関する情報とレプリケート オブジェクトのデザインを記録するためにテーブル、フィールド、およびプロパティが追加されたデータベースのことです。


レプリケート オブジェクト <DAO 定義>

レプリケート オブジェクト

レプリカ セットのすべてのレプリカにあるテーブル、クエリー、フォーム、レポート、マクロ、またはモジュールのことです。これらのレプリケートされたオブジェクトはデザイン マスターでのみ変更でき、それらの変更は同期処理中にレプリカ セットのほかのレプリカに反映されます。


レプリカ セット <DAO 定義>

レプリカ セット

レプリカの集合のことで、同じデータベース デザインと一意なレプリカ セット識別子を共有しています。同期はレプリカ セット メンバの間で行われます。


レプリカ セット メンバ <DAO 定義>

レプリカ セット メンバ

レプリカ セットに属するレプリカです。レプリカ セットのメンバは同じデータベース デザインを共有し、ほかのメンバと同期をとることができます。


レプリケート <DAO 定義>

レプリケート

レプリカ (データベースなどのコピー) を生成することです。


レプリケーション <DAO 定義>

レプリケーション

レプリカを個別の位置に作成してそれらの同期をとる処理のことです。レプリケーション処理ではシステム フィールド、システム テーブル、およびレプリケーション プロパティがデータベースに追加され、それによってデータベースのデータやデザインの変更がレプリカ セットのすべてのメンバに送られて適用されるようになります。


Microsoft レプリケーション マネージャ <DAO 定義>

Microsoft レプリケーション マネージャ

レプリカ セットのレプリカの位置や同期スケジュール、レプリカどうしのリレーションシップを管理するためのグラフィカル ユーザー インターフェイスを持つアプリケーションです。レプリケーション マネージャがレプリケーションを管理するシンクロナイザの設定を管理し、シンクロナイザは実際の同期処理を実行します。レプリケーション マネージャは、Microsoft Office 97 Developer Edition の一部です。


保存期間 <DAO 定義>

保存期間

レプリカのレプリケーションに関するシステム情報の一部をシステムが保持する日数のことです。レプリカが同期がとられる前に保存期間を超えた場合、同期は失敗します。


サテライト コンピュータ <DAO 定義>

サテライト コンピュータ

スター トポロジにおいて、レプリカが常駐しているコンピュータです。このレプリカはベース コンピュータからコピーされ、既定ではハブ サーバー上のレプリカと同期がとられます。

参照 「ベース コンピュータ」、「ハブ サーバー」、「スター トポロジ」


スケジュール <DAO 定義>

スケジュール

シンクロナイザがレプリカ間での同期処理を開始する時刻を定めたものです。同期スケジュールで同期をとる場合の最小間隔は 15 分です。2 つのシンクロナイザで異なるスケジュールを設定できます。


スケジュール同期 <DAO 定義>

スケジュール同期

あらかじめ設定された時刻に 2 つのレプリカ間でデータ交換を行うことです。


共有ネットワーク フォルダ <DAO 定義>

共有ネットワーク フォルダ

参照 「ドロップボックス フォルダ」


スター トポロジ <DAO 定義>

スター トポロジ

ネットワーク コンピュータの構成マップの一種です。レプリケーション処理の場合には、ハブ サーバー、ベース コンピュータ、およびそのほかのサテライト コンピュータに配布されたレプリカ セットのメンバのことです。トポロジは、同期のスケジュールを決定する重要な要素です。

参照 「ベース コンピュータ」、「ハブ サーバー」、「サテライト コンピュータ」


同期の競合 <DAO 定義>

同期の競合

ユーザーが 2 つのレプリカの同じレコードを変更した状態をいいます。更新されたレコードのいずれかが選択され、選択されなかったレコードは、選択されたレコードのデータに更新されます。選択されなかった更新レコードは、そのレプリカの競合テーブルに置かれます。


同期エラー <DAO 定義>

同期エラー

同期中に発生する問題で、レコードに対する変更が行われなくなります。同期エラーは競合よりも深刻な問題なのでできるだけ早く解決する必要があります。


同期 <DAO 定義>

同期

更新されたすべてのレコードやオブジェクトを交換することによって 2 つのレプリカを更新する処理のことです。2 つのレプリカ間でのデータ交換は単方向または双方向で行われます。また、シンクロナイザによって処理することもできます。


レプリカ セットのトポロジ <DAO 定義>

レプリカ セットのトポロジ

レプリカ間で変更情報が伝わる場合の順序のことです。これによって、あるレプリカでの変更がほかのレプリカに反映されるまでの速さが決まるので、トポロジは重要な要素です。


シンクロナイザ <DAO 定義>

シンクロナイザ

レプリカへの変更を監視し、レプリカ間での実際のデータ交換を処理するプログラムです。シンクロナイザはバックグラウンドで動作し、タスクバーに表示されます。レプリカ セットに対応するシンクロナイザは、レプリケーション マネージャの [同期] ウィンドウで見ることができます。

メモ 以前のバージョンのレプリケーション マネージャでは、シンクロナイザはトランスポータと呼ばれていました。


[同期] ウィンドウ <DAO 定義>

[同期] ウィンドウ

レプリケーション マネージャでシンクロナイザが表示される領域です。この中でシンクロナイザを移動したり、表示の拡大や縮小をして表示するシンクロナイザの数を変更することができます。また、2 つのシンクロナイザの間の線をクリックしてそれらの同期スケジュールを編集することもできます。[同期] ウィンドウのそれぞれのアイコンの意味を調べるには、[表示] メニューの [凡例] をクリックします。