CDaoDatabase::CreateRelation
更新 : 2007 年 11 月
データベースの主テーブルの 1 つ以上のフィールドと、外部キー テーブル (データベース内の別のテーブル) の 1 つ以上のフィールドとの間に関係を確立します。
void CreateRelation(
LPCTSTR lpszName,
LPCTSTR lpszTable,
LPCTSTR lpszForeignTable,
long lAttributes,
LPCTSTR lpszField,
LPCTSTR lpszForeignField
);
void CreateRelation(
CDaoRelationInfo& relinfo
);
パラメータ
lpszName
リレーションシップ オブジェクトの一意名。名前は、英字で始まり、最大 40 文字まで指定できます。名前には、数字とアンダースコアを含めることはできますが、区切り記号やスペースを含めることはできません。lpszTable
リレーションシップの主テーブル名。テーブルが存在しないと、MFC は CDaoException 型の例外をスローします。lpszForeignTable
リレーションシップの外部キー テーブル名。テーブルが存在しないと、MFC は CDaoException 型の例外をスローします。lAttributes
リレーションシップ型についての情報を持つ long 値。特に、関係に参照整合性を適用するために、この値を使用できます。ビットごとの OR 演算子 (|) を使って、次の値を (組み合わせが矛盾しない限り) 組み合わせることができます。dbRelationUnique リレーションシップは一対一です。
dbRelationDontEnforce リレーションシップは強制されません (参照整合性はありません)。
dbRelationInherited リレーションシップは 2 つのアタッチ テーブルを保持する非現在のデータベースに存在します。
dbRelationUpdateCascade 更新は連鎖されます (連鎖については、「解説」を参照してください)。
dbRelationDeleteCascade 削除が連鎖的に行われます。
lpszField
(lpszTable で指定された) 主テーブルのフィールド名を持つ null で終わる文字列へのポインタ。lpszForeignField
(lpszForeignTable で指定された) 外部キー テーブルのフィールド名を持つ null で終わる文字列へのポインタ。relinfo
作成するリレーションシップに関する情報を持つ CDaoRelationInfo オブジェクトへの参照。
解説
リレーションシップは、クエリや、外部データベースからのアタッチ テーブルには適用されません。
リレーションシップが 2 つのテーブルのそれぞれの 1 つのフィールドを必要とするときは、この関数の最初の形式を使います。リレーションシップが複数のフィールドを必要とするときは、2 番目の形式を使います。リレーションシップ内の最大フィールド数は 14 です。
この動作は、基になる DAO リレーションシップ オブジェクトを作成します。MFC リレーションシップ オブジェクトをカプセル化したものは、CDaoDatabase クラス内部に保持されるため、このリレーションシップ オブジェクトは、MFC の細部の実装になります。MFC にはリレーションシップのクラスは用意されていません。
リレーションシップ オブジェクトの属性を設定して、連鎖操作をアクティブにすると、関係付けられた主キー テーブルが変更されたときに、データベース エンジンが、自動的に 1 つ以上のほかのテーブルのレコードを更新、または削除します。
たとえば、顧客テーブルと発注テーブルの間に、連鎖削除のリレーションシップを確立しているとします。顧客テーブルからレコードを削除すると、発注テーブルのその顧客に関連するレコードも削除されます。また、発注テーブルとほかのテーブル間に連鎖削除のリレーションシップが設定されている場合、顧客テーブルからレコードが削除されると、これらのテーブルのレコードも削除されます。
関連情報については、DAO ヘルプの「CreateRelation Method」を参照してください。
必要条件
ヘッダー : afxdao.h