CDaoDatabase クラス

データ アクセス オブジェクト (DAO) を使用した Access データベースへの接続を表します。

Note

データ アクセス オブジェクト (DAO) は、Office 2013 でサポートされています。 DAO 3.6 は最終バージョンであり、廃止されています。

構文

class CDaoDatabase : public CObject

メンバー

パブリック コンストラクター

名前 説明
CDaoDatabase::CDaoDatabase CDaoDatabase オブジェクトを構築します。 Openを呼び出して、オブジェクトをデータベースに接続します。

パブリック メソッド

名前 説明
CDaoDatabase::CanTransact データベースがトランザクションをサポートしている場合は、0 以外の値を返します。
CDaoDatabase::CanUpdate CDaoDatabase オブジェクトが更新可能な場合は 0 以外の値を返します (読み取り専用ではありません)。
CDaoDatabase::Close データベース接続を閉じます。
CDaoDatabase::Create 基になる DAO データベース オブジェクトを作成し、 CDaoDatabase オブジェクトを初期化します。
CDaoDatabase::CreateRelation データベース内のテーブル間の新しいリレーションシップを定義します。
CDaoDatabase::DeleteQueryDef データベースの QueryDefs コレクションに保存されている querydef オブジェクトを削除します。
CDaoDatabase::D eleteRelation データベース内のテーブル間の既存のリレーションシップを削除します。
CDaoDatabase::DeleteTableDef データベース内のテーブルの定義を削除します。 これにより、実際のテーブルとそのすべてのデータが削除されます。
CDaoDatabase::Execute アクション クエリを実行します。 結果を返すクエリの Execute を呼び出すと、例外がスローされます。
CDaoDatabase::GetConnect CDaoDatabase オブジェクトをデータベースに接続するために使用する接続文字列を返します。 ODBC に使用されます。
CDaoDatabase::GetName 現在使用中のデータベースの名前を返します。
CDaoDatabase::GetQueryDefCount データベースに対して定義されているクエリの数を返します。
CDaoDatabase::GetQueryDefInfo データベースで定義されている指定されたクエリに関する情報を返します。
CDaoDatabase::GetQueryTimeout データベース クエリ操作がタイムアウトした秒数を返します。以降のすべての開く操作、新しい操作、更新操作、編集操作、および ODBC データ ソースに対するその他の操作 ( Execute 呼び出しなど) に影響します。
CDaoDatabase::GetRecordsAffected 最後の更新、編集、追加操作、または Executeの呼び出しによって影響を受けたレコードの数を返します。
CDaoDatabase::GetRelationCount データベース内のテーブル間で定義されているリレーションの数を返します。
CDaoDatabase::GetRelationInfo データベース内のテーブル間で定義された指定されたリレーションシップに関する情報を返します。
CDaoDatabase::GetTableDefCount データベースで定義されているテーブルの数を返します。
CDaoDatabase::GetTableDefInfo データベース内の指定したテーブルに関する情報を返します。
CDaoDatabase::GetVersion データベースに関連付けられているデータベース エンジンのバージョンを返します。
CDaoDatabase::IsOpen CDaoDatabase オブジェクトが現在データベースに接続されている場合は、0 以外の値を返します。
CDaoDatabase::Open データベースへの接続を確立します。
CDaoDatabase::SetQueryTimeout データベース クエリ操作 (ODBC データ ソースのみ) がタイムアウトしてからの秒数を設定します。それ以降のすべての開く操作、新規追加操作、更新操作、および削除操作に影響します。

パブリック データ メンバー

名前 説明
CDaoDatabase::m_pDAODatabase 基になる DAO データベース オブジェクトへのポインター。
CDaoDatabase::m_pWorkspace データベースを格納し、そのトランザクション領域を定義する CDaoWorkspace オブジェクトへのポインター。

解説

サポートされているデータベース形式については、 GetName メンバー関数を参照してください。 CDaoWorkspace オブジェクトによって表される特定の "ワークスペース" で一度に1つ以上のCDaoDatabaseオブジェクトをアクティブにすることができます。 ワークスペースは、データベース コレクションと呼ばれる、開いているデータベース オブジェクトのコレクションを保持します。

使用方法

レコードセット オブジェクトを作成するときに、データベース オブジェクトを暗黙的に作成できます。 ただし、データベース オブジェクトを明示的に作成することもできます。 CDaoDatabaseで既存のデータベースを明示的に使用するには、次のいずれかの操作を行います。

  • CDaoDatabaseオブジェクトを構築し、開いている CDaoWorkspace オブジェクトへのポインターを渡します。

  • または、ワークスペースを指定せずに CDaoDatabase オブジェクトを構築します (MFC は一時ワークスペース オブジェクトを作成します)。

新しい Microsoft Jet を作成するには (.MDB) データベースで、 CDaoDatabase オブジェクトを構築し、その Create メンバー関数を呼び出します。 CreateOpenを呼び出さないでください。

既存のデータベースを開くには、 CDaoDatabase オブジェクトを構築し、その Open メンバー関数を呼び出します。

これらの手法のいずれかを実行すると、DAO データベース オブジェクトがワークスペースの Databases コレクションに追加され、データへの接続が開きます。 次に、接続されたデータベースで動作する CDaoRecordsetCDaoTableDef、または CDaoQueryDef オブジェクトを構築するときに、これらのオブジェクトのコンストラクターを CDaoDatabase オブジェクトへのポインターとして渡します。 接続の使用が完了したら、 Close メンバー関数を呼び出し、 CDaoDatabase オブジェクトを破棄します。 Close は、まだ閉じていないレコードセットを閉じます。

トランザクション

データベース トランザクション処理はワークスペース レベルで提供されます。クラス CDaoWorkspaceBeginTransCommitTrans、および Rollback メンバー関数を参照してください。

ODBC 接続

Open Database Base Connectivity (ODBC) データ ソースを操作するには、外部テーブルを Microsoft Jet (.MDB) データベースにアタッチすることをお勧めします。

コレクション

各データベースは、tabledef、querydef、recordset、Relation オブジェクトの独自のコレクションを保持します。 クラス CDaoDatabase は、これらのオブジェクトを操作するためのメンバー関数を提供します。

Note

オブジェクトは、MFC データベース オブジェクトではなく DAO に格納されます。 MFC では、tabledef、querydef、およびレコードセット オブジェクトのクラスが提供されますが、リレーション オブジェクトのクラスは提供されません。

継承階層

CObject

CDaoDatabase

要件

ヘッダー: afxdao.h

CDaoDatabase::CanTransact

このメンバー関数を呼び出して、データベースがトランザクションを許可するかどうかを判断します。

BOOL CanTransact();

戻り値

データベースがトランザクションをサポートしている場合は 0 以外。それ以外の場合は 0。

解説

トランザクションは、データベースのワークスペースで管理されます。

CDaoDatabase::CanUpdate

このメンバー関数を呼び出して、 CDaoDatabase オブジェクトが更新を許可するかどうかを判断します。

BOOL CanUpdate();

戻り値

CDaoDatabase オブジェクトで更新が許可されている場合は 0 以外の場合は 0。それ以外の場合は、bReadOnly で TRUE を渡したことを示しますCDaoDatabase オブジェクトを開いたとき、またはデータベース自体が読み取り専用であることを示します。 Open メンバー関数を参照してください。

解説

データベースの更新可能性の詳細については、DAO ヘルプの「更新可能なプロパティ」を参照してください。

CDaoDatabase::CDaoDatabase

CDaoDatabase オブジェクトを構築します。

CDaoDatabase(CDaoWorkspace* pWorkspace = NULL);

パラメーター

pWorkspace
新しいデータベース オブジェクトを格納する CDaoWorkspace オブジェクトへのポインター。 既定値の NULL を受け入れると、コンストラクターによって、既定の DAO ワークスペースを使用する一時的な CDaoWorkspace オブジェクトが作成されます。 m_pWorkspace データ メンバーを使用して、ワークスペース オブジェクトへのポインターを取得できます。

解説

オブジェクトを作成した後、新しい Microsoft Jet (.MDB) データベースで、オブジェクトの Create メンバー関数を呼び出します。 代わりに、既存のデータベースを開いている場合は、オブジェクトの Open メンバー関数を呼び出します。

オブジェクトを終了したら、その Close メンバー関数を呼び出し、 CDaoDatabase オブジェクトを破棄する必要があります。

ドキュメント クラスに CDaoDatabase オブジェクトを埋め込むのが便利な場合があります。

Note

既存のCDaoDatabase オブジェクトへのポインターを渡さずに CDaoRecordset オブジェクトを開くと、CDaoDatabase オブジェクトも暗黙的に作成されます。 このデータベース オブジェクトは、レコードセット オブジェクトを閉じると閉じられます。

CDaoDatabase::Close

このメンバー関数を呼び出してデータベースから切断し、データベースに関連付けられている開いているレコードセット、tabledef、および querydef を閉じます。

virtual void Close();

解説

このメンバー関数を呼び出す前に、これらのオブジェクトを自分で閉じておくことをお勧めします。 CDaoDatabase オブジェクトを閉じると、関連付けられている workspace 内の Databases コレクションから削除されます。 CloseCDaoDatabaseオブジェクトを破棄しないため、同じデータベースまたは別のデータベースを開いてオブジェクトを再利用できます。

注意事項

データベースを閉じる前に Update メンバー関数 (保留中の編集がある場合) と、開いているすべてのレコードセット オブジェクトに対して Close メンバー関数を呼び出します。 スタック上の CDaoRecordset または CDaoDatabase オブジェクトを宣言する関数を終了すると、データベースは閉じられ、保存されていない変更はすべて失われ、保留中のすべてのトランザクションがロールバックされ、データに対する保留中の編集はすべて失われます。

注意事項

レコードセット オブジェクトが開いている間にデータベース オブジェクトを閉じようとした場合、または特定のワークスペースに属するデータベース オブジェクトが開いている間にワークスペース オブジェクトを閉じようとすると、それらのレコードセット オブジェクトは閉じられ、保留中の更新または編集はすべてロールバックされます。 ワークスペース オブジェクトを開いている間にワークスペース オブジェクトを閉じようとすると、その特定のワークスペース オブジェクトに属するすべてのデータベース オブジェクトが閉じられ、閉じられていないレコードセット オブジェクトが閉じられる可能性があります。 データベース オブジェクトを閉じない場合、MFC はデバッグ ビルドでアサーション エラーを報告します。

データベース オブジェクトが関数のスコープ外で定義されていて、関数を閉じずに終了した場合、データベース オブジェクトは明示的に閉じられるか、定義されているモジュールがスコープ外になるまで開いたままになります。

CDaoDatabase::Create

新しい Microsoft Jet を作成するには (.MDB) データベースでは、 CDaoDatabase オブジェクトを構築した後、このメンバー関数を呼び出します。

virtual void Create(
    LPCTSTR lpszName,
    LPCTSTR lpszLocale = dbLangGeneral,
    int dwOptions = 0);

パラメーター

lpszName
作成するデータベース ファイルの名前を表す文字列式。 完全なパスとファイル名 ("C:\\MYDB" など) を指定できます。MDB"。 名前を指定する必要があります。 ファイル名拡張子を指定しない場合は、MDB が追加されます。 ネットワークで UNC (Uniform Naming Convention) がサポートされている場合は、"\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB" などのネットワーク パスを指定することもできます。 Microsoft Jet のみ (.MDB) データベース ファイルは、このメンバー関数を使用して作成できます。 (文字列リテラルでは、"\" が C++ エスケープ文字であるため、二重円記号が必要です)。

lpszLocale
データベースを作成するための照合順序を指定するために使用される文字列式。 既定値は dbLangGeneral です。 次のいずれかの値になります。

  • dbLangGeneral 英語、ドイツ語、フランス語、ポルトガル語、イタリア語、現代スペイン語

  • dbLangArabic アラビア語

  • dbLangCyrillic ロシア語

  • dbLangCzech チェコ語

  • dbLangDutch オランダ語

  • dbLangGreek ギリシャ語

  • dbLangHebrew ヘブライ語

  • dbLangHungarian ハンガリー語

  • dbLangIcelandic アイスランド語

  • dbLangNordic ノルディック言語 (Microsoft Jet データベース エンジン バージョン 1.0 のみ)

  • dbLangNorwdan ノルウェー語とデンマーク語

  • dbLangPolish ポーランド語

  • dbLangSpanish スペイン語 (繁体字)

  • dbLangSwedfin スウェーデン語とフィンランド語

  • dbLangTurkish トルコ語

dwOptions
1 つ以上のオプションを示す整数。 次のいずれかの値になります。

  • dbEncrypt 暗号化されたデータベースを作成します。

  • dbVersion10 Microsoft Jet データベース バージョン 1.0 でデータベースを作成します。

  • dbVersion11 Microsoft Jet データベース バージョン 1.1 でデータベースを作成します。

  • dbVersion20 Microsoft Jet データベース バージョン 2.0 でデータベースを作成します。

  • dbVersion30 Microsoft Jet データベース バージョン 3.0 でデータベースを作成します。

暗号化定数を省略すると、暗号化されていないデータベースが作成されます。 指定できるバージョン定数は 1 つだけです。 バージョン定数を省略すると、Microsoft Jet データベース バージョン 3.0 を使用するデータベースが作成されます。

注意事項

データベースが暗号化されていない場合は、ユーザー/パスワード セキュリティを実装している場合でも、データベースを構成するバイナリ ディスク ファイルを直接読み取る可能性があります。

解説

Create は、データベース ファイルと基になる DAO データベース オブジェクトを作成し、C++ オブジェクトを初期化します。 オブジェクトは、関連付けられているワークスペースの Databases コレクションに追加されます。 データベース オブジェクトが開いている状態です。Create後にOpen*を呼び出さないでください。

Note

Createでは、Microsoft Jet (.MDB) データベース。 ISAM データベースまたは ODBC データベースを作成することはできません。

CDaoDatabase::CreateRelation

このメンバー関数を呼び出して、データベースのプライマリ テーブル内の 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
リレーションシップの種類に関する情報を含む長い値。 この値を使用して、参照整合性などを適用できます。 ビットごとの OR 演算子 (|) を使用して、次のいずれかの値を組み合わせることができます (組み合わせが理にかなっている限り)。

  • dbRelationUnique リレーションシップは 1 対 1 です。

  • dbRelationDontEnforce リレーションシップは適用されません (参照整合性はありません)。

  • dbRelationInherited リレーションシップは、2 つのアタッチされたテーブルを含む非カレント データベースに存在します。

  • dbRelationUpdateCascade 更新プログラムは連鎖します (カスケードの詳細については、「解説」を参照してください)。

  • dbRelationDeleteCascade 削除は連鎖します。

lpszField
プライマリ テーブル内のフィールドの名前を含む null で終わる文字列へのポインター ( lpszTable によって名前が付けられます)。

lpszForeignField
外部テーブル内のフィールドの名前を含む null で終わる文字列へのポインター ( lpszForeignTable によって名前が付けられます)。

relinfo
作成するリレーションに関する情報を含む CDaoRelationInfo オブジェクトへの参照。

解説

リレーションシップには、外部データベースからのクエリまたはアタッチされたテーブルを含めることはできません。

リレーションシップが 2 つのテーブルのそれぞれに 1 つのフィールドを含む場合は、関数の最初のバージョンを使用します。 リレーションシップに複数のフィールドが含まれている場合は、2 番目のバージョンを使用します。 リレーションシップ内のフィールドの最大数は 14 です。

このアクションにより、基になる DAO リレーション オブジェクトが作成されますが、MFC のリレーション オブジェクトのカプセル化はクラス CDaoDatabase内に含まれているため、これは MFC 実装の詳細です。 MFC では、リレーションのクラスは提供されません。

連鎖操作をアクティブ化するようにリレーション オブジェクトの属性を設定すると、関連する主キー テーブルに変更が加えられたときに、データベース エンジンは 1 つ以上の他のテーブルのレコードを自動的に更新または削除します。

たとえば、Customers テーブルと Orders テーブルの間に連鎖削除リレーションシップを確立するとします。 Customers テーブルからレコードを削除すると、その顧客に関連する Orders テーブルのレコードも削除されます。 さらに、Orders テーブルと他のテーブルの間に連鎖削除リレーションシップを確立すると、Customers テーブルからレコードを削除すると、それらのテーブルのレコードが自動的に削除されます。

関連情報については、DAO ヘルプの「CreateRelation メソッド」を参照してください。

CDaoDatabase::DeleteQueryDef

このメンバー関数を呼び出して、指定した querydef (保存されたクエリ) を CDaoDatabase オブジェクトの QueryDefs コレクションから削除します。

void DeleteQueryDef(LPCTSTR lpszName);

パラメーター

lpszName
削除する保存済みクエリの名前。

解説

その後、そのクエリはデータベースで定義されなくなります。

querydef オブジェクトの作成の詳細については、クラス CDaoQueryDef を参照してください。 querydef オブジェクトは、CDaoQueryDef オブジェクトを構築し、データベース オブジェクトへのポインターを渡すと、特定のCDaoDatabase オブジェクトに関連付けられます。

CDaoDatabase::D eleteRelation

データベース オブジェクトの Relations コレクションから既存のリレーションを削除するには、このメンバー関数を呼び出します。

void DeleteRelation(LPCTSTR lpszName);

パラメーター

lpszName
削除するリレーションシップの名前。

解説

その後、リレーションシップは存在しなくなります。

関連情報については、DAO ヘルプの「Delete メソッド」のトピックを参照してください。

CDaoDatabase::DeleteTableDef

指定したテーブルとそのすべてのデータを CDaoDatabase オブジェクトの TableDefs コレクションから削除するには、このメンバー関数を呼び出します。

void DeleteTableDef(LPCTSTR lpszName);

パラメーター

lpszName
削除する tabledef の名前。

解説

その後、そのテーブルはデータベースで定義されなくなります。

Note

システム テーブルを削除しないように注意してください。

tabledef オブジェクトの作成の詳細については、クラス CDaoTableDef を参照してください。 tabledef オブジェクトは、CDaoTableDef オブジェクトを構築し、データベース オブジェクトへのポインターを渡すと、特定のCDaoDatabase オブジェクトに関連付けられます。

関連情報については、DAO ヘルプの「Delete メソッド」のトピックを参照してください。

CDaoDatabase::Execute

このメンバー関数を呼び出して、アクション クエリを実行するか、データベースに対して SQL ステートメントを実行します。

void Execute(
    LPCTSTR lpszSQL,
    int nOptions = dbFailOnError);

パラメーター

lpszSQL
実行する有効な SQL コマンドを含む null で終わる文字列へのポインター。

nOptions
クエリの整合性に関連するオプションを指定する整数。 ビットごとの OR 演算子 (|) を使用して、組み合わせが理にかなっている場合は、次の定数のいずれかを組み合わせることができます。 たとえば、 dbInconsistentdbConsistentと組み合わせません。

  • dbDenyWrite 他のユーザーへの書き込みアクセス許可を拒否します。

  • dbInconsistent (既定値)一貫性のない更新。

  • dbConsistent 一貫性のある更新。

  • dbSQLPassThrough SQL パススルー。 処理のために SQL ステートメントを ODBC データ ソースに渡します。

  • dbFailOnError エラーが発生した場合は、更新プログラムをロールバックします。

  • dbSeeChanges 編集中のデータを別のユーザーが変更している場合は、実行時エラーを生成します。

Note

dbInconsistentdbConsistentの両方が含まれている場合、またはどちらも含まれていない場合、結果は既定値になります。 これらの定数の説明については、DAO ヘルプの「メソッドの実行」のトピックを参照してください。

解説

Execute は、結果を返さないアクション クエリまたは SQL パススルー クエリに対してのみ機能します。 レコードを返す選択クエリでは機能しません。

アクション クエリの定義と情報については、DAO ヘルプの「アクション クエリ」および「メソッドの実行」に関するトピックを参照してください。

ヒント

構文的に正しい SQL ステートメントと適切なアクセス許可が与えられた場合、 Execute メンバー関数は、1 つの行を変更または削除できなくても失敗しません。 したがって、Execute メンバー関数を使用して更新クエリまたは削除クエリを実行する場合は、常に dbFailOnError オプションを使用します。 このオプションにより、MFC は CDaoException 型の例外をスローし、影響を受けるレコードのいずれかがロックされていて、更新または削除できない場合に成功したすべての変更をロールバックします。 GetRecordsAffectedを呼び出して、影響を受けたレコードの数を確認できることに注意してください。

データベース オブジェクトの GetRecordsAffected メンバー関数を呼び出して、最新の Execute 呼び出しの影響を受けるレコードの数を確認します。 たとえば、 GetRecordsAffected は、アクション クエリの実行時に削除、更新、または挿入されたレコードの数に関する情報を返します。 連鎖更新または削除が有効な場合、返される数は関連テーブルの変更を反映しません。

Execute はレコードセットを返しません。 レコードを選択するクエリで Execute を使用すると、MFC は CDaoException型の例外をスローします。 (CDatabase::ExecuteSQLに似たExecuteSQLメンバー関数はありません。

CDaoDatabase::GetConnect

このメンバー関数を呼び出して、CDaoDatabase オブジェクトを ODBC または ISAM データベースに接続するために使用する接続文字列を取得します。

CString GetConnect();

戻り値

ODBC データ ソースで Open が正常に呼び出された場合の接続文字列。それ以外の場合は空の文字列。 Microsoft Jet の場合 (.MDB) データベースでは、文字列は常に空です。ただし、Execute メンバー関数で使用するdbSQLPassThrough オプションで使用するか、レコードセットを開くときに使用する場合を除きます。

解説

この文字列は、パススルー クエリで使用されるオープン データベースまたはデータベースのソースに関する情報を提供します。 接続文字列は、データベース型指定子と、セミコロンで区切られた 0 個以上のパラメーターで構成されます。

Note

MFC DAO クラスを使用して ODBC 経由でデータ ソースに接続することは、アタッチされたテーブルを介して接続するよりも効率的ではありません。

Note

接続文字列は、必要に応じて ODBC および特定の ISAM ドライバーに追加情報を渡すために使用されます。 それはのために使用されていません.MDB データベース。 Microsoft Jet データベース ベース テーブルの場合、上記の戻り値の説明に従って SQL パススルー クエリに使用する場合を除き、接続文字列は空の文字列 ("") です。

接続文字列の作成方法については、Open メンバー関数を参照してください。 Open呼び出しで接続文字列が設定されたら、後でその設定を使用して、データベースの種類、パス、ユーザー ID、パスワード、または ODBC データ ソースを確認できます。

CDaoDatabase::GetName

このメンバー関数を呼び出して、現在開いているデータベースの名前 (既存のデータベース ファイルの名前または登録済みの ODBC データ ソースの名前) を取得します。

CString GetName();

戻り値

成功した場合のデータベースの完全なパスとファイル名。それ以外の場合は、空の CString

解説

ネットワークが UNC (Uniform Naming Convention) をサポートしている場合は、ネットワーク パス ("\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB" など) を指定することもできます。MDB"。 (文字列リテラルでは、"\" が C++ エスケープ文字であるため、二重円記号が必要です)。

たとえば、見出しにこの名前を表示できます。 名前の取得中にエラーが発生した場合、MFC は型 CDaoException の例外をスローします。

Note

外部データベースへのアクセス時のパフォーマンスを向上させるために、外部データベース テーブルを Microsoft Jet データベース (.MDB) は、データ ソースに直接接続するのではなく、

データベースの種類は、パスが指すファイルまたはディレクトリによって次のように示されます。

Pathname の参照先.. データベースの種類
.MDB ファイル Microsoft Jet データベース (Microsoft Access)
を含むディレクトリ。DBF ファイル dBASE データベース
ファイルを含むディレクトリ.XLS Microsoft Excel データベース
を含むディレクトリ。PDX ファイル Paradox データベース
適切に書式設定されたテキスト データベース ファイルを含むディレクトリ テキスト形式データベース

SQL Server や Oracle などの ODBC データベースの場合、データベースの接続文字列は、ODBC によって登録されているデータ ソース名 (DSN) を識別します。

CDaoDatabase::GetQueryDefCount

このメンバー関数を呼び出して、データベースの QueryDefs コレクションで定義されているクエリの数を取得します。

short GetQueryDefCount();

戻り値

データベースで定義されているクエリの数。

解説

GetQueryDefCount は、QueryDefs コレクション内のすべての querydef をループする必要がある場合に便利です。 コレクション内の特定のクエリに関する情報を取得するには、「 GetQueryDefInfoを参照してください。

CDaoDatabase::GetQueryDefInfo

このメンバー関数を呼び出して、データベースで定義されているクエリに関するさまざまな種類の情報を取得します。

void GetQueryDefInfo(
    int nIndex,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetQueryDefInfo(
    LPCTSTR lpszName,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

パラメーター

nIndex
データベースの QueryDefs コレクション内の定義済みクエリのインデックス。インデックスによる検索用です。

querydefinfo
要求された情報を返す CDaoQueryDefInfo オブジェクトへの参照。

dwInfoOptions
取得するレコードセットに関する情報を指定するオプション。 使用可能なオプションと、関数がレコードセットについて返す原因を次に示します。

  • AFX_DAO_PRIMARY_INFO (既定) の名前、種類

  • AFX_DAO_SECONDARY_INFOプライマリ情報に加えて、作成日、最終更新日、レコードを返す、更新可能

  • AFX_DAO_ALL_INFOプライマリとセカンダリの情報に加えて、SQL、Connect、ODBCTimeout

lpszName
名前で検索するために、データベースで定義されているクエリの名前を含む文字列。

解説

2 つのバージョンの関数が用意されているため、データベースの QueryDefs コレクション内のインデックスまたはクエリの名前でクエリを選択できます。

querydefinfo で返される情報の説明については、CDaoQueryDefInfo 構造体を参照してください。 この構造体には、 dwInfoOptions の説明に記載されている情報の項目に対応するメンバーがあります。 1 レベルの情報を要求すると、以前のレベルの情報も取得されます。

CDaoDatabase::GetQueryTimeout

このメンバー関数を呼び出して、接続されているデータベースに対する後続の操作がタイムアウトになるまでの現在の秒数を取得します。

short GetQueryTimeout();

戻り値

タイムアウト値を秒単位で含む短い整数。

解説

ネットワーク アクセスの問題、過剰なクエリ処理時間などが原因で、操作がタイムアウトする可能性があります。 設定が有効になっている間は、この CDaoDatabase オブジェクトに関連付けられているレコードセットに対して、開いているすべての操作、新規追加、更新、および削除操作に影響します。 現在のタイムアウト設定を変更するには、 SetQueryTimeout を呼び出します。 開いた後にレコードセットのクエリ タイムアウト値を変更しても、レコードセットの値は変更されません。 たとえば、後続の Move 操作では、新しい値は使用されません。 既定値は、データベース エンジンの初期化時に最初に設定されます。

クエリ タイムアウトの既定値は、Windows レジストリから取得されます。 レジストリ設定がない場合、既定値は 60 秒です。 すべてのデータベースでクエリ タイムアウト値を設定できるわけではありません。 クエリのタイムアウト値を 0 に設定した場合、タイムアウトは発生しません。とデータベースとの通信が応答しなくなる可能性があります。 この動作は、開発中に役立つ場合があります。 呼び出しが失敗した場合、MFC は型 CDaoException の例外をスローします。

関連情報については、DAO ヘルプのトピック「QueryTimeout プロパティ」を参照してください。

CDaoDatabase::GetRecordsAffected

このメンバー関数を呼び出して、 Execute メンバー関数の最新の呼び出しの影響を受けるレコードの数を確認します。

long GetRecordsAffected();

戻り値

影響を受けるレコードの数を含む長整数。

解説

返される値には、 Executeを使用して実行されたアクション クエリによって削除、更新、または挿入されたレコードの数が含まれます。 連鎖更新または削除が有効な場合、返される数は関連テーブルの変更を反映しません。

関連情報については、DAO ヘルプの「RecordsAffected プロパティ」を参照してください。

CDaoDatabase::GetRelationCount

このメンバー関数を呼び出して、データベース内のテーブル間で定義されているリレーションの数を取得します。

short GetRelationCount();

戻り値

データベース内のテーブル間で定義されているリレーションの数。

解説

GetRelationCount は、データベースの Relations コレクションで定義されているすべてのリレーションをループする必要がある場合に便利です。 コレクション内の特定のリレーションシップに関する情報を取得するには、「 GetRelationInfoを参照してください。

リレーションシップの概念を説明するには、Suppliers テーブルと Products テーブルを検討してください。このテーブルには一対多リレーションシップがある可能性があります。 この関係では、1 つのサプライヤーが複数の製品を供給できます。 その他のリレーションシップは、一対一と多対多です。

CDaoDatabase::GetRelationInfo

このメンバー関数を呼び出して、データベースの Relations コレクション内の指定されたリレーションに関する情報を取得します。

void GetRelationInfo(
    int nIndex,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetRelationInfo(
    LPCTSTR lpszName,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

パラメーター

nIndex
データベースの Relations コレクション内の Relation オブジェクトのインデックス。インデックスによる参照用です。

relinfo
要求された情報を返す CDaoRelationInfo オブジェクトへの参照。

dwInfoOptions
取得するリレーションに関する情報を指定するオプション。 使用可能なオプションと、関数がリレーションについて返す原因を次に示します。

  • AFX_DAO_PRIMARY_INFO (既定) 名、テーブル、外部テーブル

  • AFX_DAO_SECONDARY_INFO属性、フィールド情報

フィールド情報は、リレーションシップに関係するプライマリ テーブルのフィールドを含む CDaoRelationFieldInfo オブジェクトです。

lpszName
名前で検索するための、リレーション オブジェクトの名前を含む文字列。

解説

この関数の 2 つのバージョンは、インデックスまたは名前によってアクセスを提供します。 relinfo で返される情報の詳細については、CDaoRelationInfo 構造体を参照してください。 この構造体には、 dwInfoOptions の説明に記載されている情報の項目に対応するメンバーがあります。 1 つのレベルで情報を要求すると、以前のレベルでも情報が取得されます。

Note

連鎖操作 (dbRelationUpdateCascades または dbRelationDeleteCascades) をアクティブ化するようにリレーション オブジェクトの属性を設定すると、関連する主キー テーブルに変更が加えられたときに、Microsoft Jet データベース エンジンによって 1 つ以上の他のテーブルのレコードが自動的に更新または削除されます。 たとえば、Customers テーブルと Orders テーブルの間に連鎖削除リレーションシップを確立するとします。 Customers テーブルからレコードを削除すると、その顧客に関連する Orders テーブルのレコードも削除されます。 さらに、Orders テーブルと他のテーブルの間に連鎖削除リレーションシップを確立すると、Customers テーブルからレコードを削除すると、それらのテーブルのレコードが自動的に削除されます。

CDaoDatabase::GetTableDefCount

このメンバー関数を呼び出して、データベースで定義されているテーブルの数を取得します。

short GetTableDefCount();

戻り値

データベースで定義されている tabledef の数。

解説

GetTableDefCount は、データベースの TableDefs コレクション内のすべての tabledef をループする必要がある場合に便利です。 コレクション内の特定のテーブルに関する情報を取得するには、「 GetTableDefInfoを参照してください。

CDaoDatabase::GetTableDefInfo

このメンバー関数を呼び出して、データベースで定義されているテーブルに関するさまざまな種類の情報を取得します。

void GetTableDefInfo(
    int nIndex,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetTableDefInfo(
    LPCTSTR lpszName,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

パラメーター

nIndex
データベースの TableDefs コレクション内の tabledef オブジェクトのインデックス。インデックスによる参照用です。

tabledefinfo
要求された情報を返す CDaoTableDefInfo オブジェクトへの参照。

dwInfoOptions
取得するテーブルに関する情報を指定するオプション。 使用可能なオプションと、関数がリレーションについて返す原因を次に示します。

  • AFX_DAO_PRIMARY_INFO (既定) 名、更新可能、属性

  • AFX_DAO_SECONDARY_INFOプライマリ情報に加えて、作成日、最終更新日、ソース テーブル名、接続

  • AFX_DAO_ALL_INFOプライマリとセカンダリの情報に加えて、検証規則、検証テキスト、レコード数

lpszName
名前による参照用の tabledef オブジェクトの名前。

解説

2 つのバージョンの関数が用意されているため、データベースの TableDefs コレクション内のインデックスまたはテーブルの名前でテーブルを選択できます。

tabledefinfo で返される情報の説明については、CDaoTableDefInfo 構造体を参照してください。 この構造体には、 dwInfoOptions の説明に記載されている情報の項目に対応するメンバーがあります。 1 つのレベルで情報を要求すると、以前のレベルの情報も取得されます。

Note

AFX_DAO_ALL_INFO オプションは、取得に時間がかかる可能性がある情報を提供します。 この場合、多くのレコードがある場合、テーブル内のレコードのカウントに非常に時間がかかる可能性があります。

CDaoDatabase::GetVersion

このメンバー関数を呼び出して、Microsoft Jet データベース ファイルのバージョンを確認します。

CString GetVersion();

戻り値

オブジェクトに関連付けられているデータベース ファイルのバージョンを示す CString

解説

返される値は、"major.minor" という形式のバージョン番号を表します。たとえば、"3.0" などです。 製品バージョン番号 (3.0 など) は、バージョン番号 (3)、期間、リリース番号 (0) で構成されます。 現在までのバージョンは 1.0、1.1、2.0、3.0 です。

関連情報については、DAO ヘルプの「Version プロパティ」を参照してください。

CDaoDatabase::IsOpen

このメンバー関数を呼び出して、 CDaoDatabase オブジェクトがデータベースで現在開いているかどうかを判断します。

BOOL IsOpen() const;

戻り値

CDaoDatabase オブジェクトが現在開いている場合は 0 以外、それ以外の場合は 0。

解説

CDaoDatabase::m_pDAODatabase

CDaoDatabase オブジェクトの基になる DAO データベース オブジェクトの OLE インターフェイスへのポインターを格納します。

解説

DAO インターフェイスに直接アクセスする必要がある場合は、このポインターを使用します。

DAO を直接呼び出す方法については、 テクニカル ノート 54 を参照してください。

CDaoDatabase::m_pWorkspace

データベース オブジェクトを含む CDaoWorkspace オブジェクトへのポインターを格納します。

解説

ワークスペースに直接アクセスする必要がある場合は、このポインターを使用します。 たとえば、ワークスペースの Databases コレクション内の他のデータベース オブジェクトへのポインターを取得します。

CDaoDatabase::Open

既存のデータベースを表す新しく構築された CDaoDatabase オブジェクトを初期化するには、このメンバー関数を呼び出す必要があります。

virtual void Open(
    LPCTSTR lpszName,
    BOOL bExclusive = FALSE,
    BOOL bReadOnly = FALSE,
    LPCTSTR lpszConnect = _T(""));

パラメーター

lpszName
既存の Microsoft Jet (.MDB) データベース ファイル。 ファイル名に拡張子が付いている場合は必須です。 ネットワークが UNC (Uniform Naming Convention) をサポートしている場合は、"\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB" などのネットワーク パスを指定することもできます。MDB"。 (文字列リテラルでは、"\" が C++ エスケープ文字であるため、二重円記号が必要です)。

lpszNameを使用する場合は、いくつかの考慮事項が適用されます。 次の場合:

  • 別のユーザーによる排他アクセス用に既に開かれているデータベースを参照します。MFC は、 CDaoException 型の例外をスローします。 データベースが使用できないことをユーザーに知らせるために、その例外をトラップします。

  • 空の文字列 ("") で、 lpszConnect は "ODBC;" です。ユーザーがデータベースを選択できるように、登録されているすべての ODBC データ ソース名を一覧表示するダイアログ ボックスが表示されます。 ODBC データ ソースへの直接接続は避ける必要があります。代わりに添付テーブルを使用してください。

  • それ以外の場合は、既存のデータベースまたは有効な ODBC データ ソース名を参照しないため、MFC は CDaoException型の例外をスローします。

Note

DAO エラー コードの詳細については、DAOERR を参照してください。H ファイル。 関連情報については、DAO ヘルプのトピック「トラップ可能なデータ アクセス エラー」を参照してください。

bExclusive
データベースを排他 (非共有) アクセス用に開く場合は TRUE、共有アクセス用にデータベースを開く場合は FALSE のブール値。 この引数を省略すると、共有アクセス用にデータベースが開かれます。

bReadOnly
読み取り専用アクセス用にデータベースを開く場合は TRUE、読み取り/書き込みアクセス用にデータベースを開く場合は FALSE のブール値。 この引数を省略すると、読み取り/書き込みアクセス用にデータベースが開かれます。 依存するすべてのレコードセットは、この属性を継承します。

lpszConnect
データベースを開くときに使用する文字列式。 この文字列は、ODBC 接続引数を構成します。 ソース文字列を指定するには、排他引数と読み取り専用引数を指定する必要があります。 データベースが Microsoft Jet データベースの場合 (.MDB)、この文字列は空 ("") です。 既定値の構文 (_T("")) は、Unicode およびアプリケーションの ANSI ビルドの移植性を提供します。

解説

Open は、データベースを基になる DAO オブジェクトに関連付けます。 データベース オブジェクトを使用して、初期化されるまで、レコードセット、テーブル定義、または querydef オブジェクトを作成することはできません。 Open は、関連付けられたワークスペースの Databases コレクションにデータベース オブジェクトを追加します。

次のようにパラメーターを使用します。

  • Microsoft Jet を開く場合 (.MDB) データベースで、 lpszName パラメーターを使用し、 lpszConnect パラメーターに空の文字列を渡すか、"; という形式のパスワード文字列を渡します。データベースがパスワードで保護されている場合は PWD=password" (.MDB データベースのみ)。

  • ODBC データ ソースを開く場合は、有効な ODBC 接続文字列を lpszConnect で渡し、lpszName に空の文字列を渡します。

関連情報については、DAO ヘルプのトピック「OpenDatabase メソッド」を参照してください。

Note

ISAM データベースや ODBC データ ソースなど、外部データベースにアクセスするときのパフォーマンスを向上させるには、外部データベース テーブルを Microsoft Jet エンジン データベース (.MDB) は、データ ソースに直接接続するのではなく、

たとえば、DBMS ホストが使用できない場合は、接続試行がタイムアウトになる可能性があります。 接続の試行が失敗した場合、 Open は型 CDaoException の例外をスローします。

残りの解説は、ODBC データベースにのみ適用されます。

データベースが ODBC データベースであり、 Open 呼び出しのパラメーターに接続に必要な情報が含まれていない場合、ODBC ドライバーはダイアログ ボックスを開いてユーザーから必要な情報を取得します。 Openを呼び出すと、接続文字列 lpszConnect はプライベートに格納され、GetConnect メンバー関数を呼び出すことによって使用できます。

必要に応じて、Openを呼び出してユーザーから情報 (パスワードなど) を取得する前に、独自のダイアログ ボックスを開き、その情報をOpenに渡す接続文字列に追加できます。 または、渡す接続文字列 (Windows レジストリなど) を保存して、アプリケーションが次に CDaoDatabase オブジェクトに対してOpenを呼び出す際に再利用できるようにすることもできます。

接続文字列を使用して、複数レベルのログイン権限 (それぞれ異なるCDaoDatabase オブジェクトに対して) や、他のデータベース固有の情報を伝達することもできます。

CDaoDatabase::SetQueryTimeout

接続されたデータベースに対する後続の操作がタイムアウトするまでの既定の秒数をオーバーライドするには、このメンバー関数を呼び出します。

void SetQueryTimeout(short nSeconds);

パラメーター

nSeconds
クエリの試行がタイムアウトするまでに許可する秒数。

解説

ネットワーク アクセスの問題、過剰なクエリ処理時間などが原因で、操作がタイムアウトになる場合があります。 クエリ タイムアウト値を変更する場合は、レコードセットを開く前、またはレコードセットの AddNewUpdate、または Delete メンバー関数を呼び出す前に、SetQueryTimeoutを呼び出します。 この設定は、このCDaoDatabase オブジェクトに関連付けられているすべてのレコードセットに対して、それ以降のすべてのオープンAddNewUpdate、およびDelete呼び出しに影響します。 開いた後にレコードセットのクエリ タイムアウト値を変更しても、レコードセットの値は変更されません。 たとえば、後続の Move 操作では、新しい値は使用されません。

クエリ タイムアウトの既定値は 60 秒です。 すべてのデータベースでクエリ タイムアウト値を設定できるわけではありません。 クエリのタイムアウト値を 0 に設定した場合、タイムアウトは発生しません。データベースとの通信が応答を停止する可能性があります。 この動作は、開発中に役立つ場合があります。

関連情報については、DAO ヘルプのトピック「QueryTimeout プロパティ」を参照してください。

関連項目

CObject クラス
階層図
CDaoWorkspace クラス
CDaoRecordset クラス
CDaoTableDef クラス
CDaoQueryDef クラス
CDatabase クラス
CDaoException クラス