次の方法で共有


CRecordset::Open

テーブルを取得するか、レコードセットを表すクエリを実行すると、レコードセットを開きます。

virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

パラメーター

  • nOpenType
    AFX_DB_USE_DEFAULT_TYPE、既定値をそのまま使用するか、または enum OpenTypeの次の値の 1 つを使用する:

    • 双方向のスクロールのCRecordset::dynaset A のレコードセット。レコードのメンバーシップおよび手順を決定できないレコードセットを開くが、他のユーザーによるデータ値の変更は一目でとフェッチ操作に従います。ダイナセットは、キーセット ドリブンのレコードセットです。

    • 双方向のスクロールのCRecordset::snapshot A の静的なレコードセット。レコードセットを開くとレコードのメンバーシップおよび手順を決定されます。; データ値は、レコードがフェッチするときに決定されます。他のユーザーが行った変更がレコードセットが閉じてから再度開くまで表示されません。

    • 双方向のスクロールのCRecordset::dynamic A のレコードセット。他のユーザーが行ったメンバーシップの変更は、順序付け、データ値一目でフェッチ操作に従います。多くの ODBC ドライバーがこのレコードセットの型をサポートしないことに注意してください。

    • 前方スクロール専用のCRecordset::forwardOnly A の読み取り専用レコードセット。

      CRecordsetの場合、既定値は CRecordset::snapshotです。既定では、異なる既定値を持つ Visual C++ ウィザードが CRecordset ODBC と DAO の両方 CDaoRecordsetと対話できるようにします。

    これらのレコードセットの型の詳細については、" " レコードセット (ODBC)を参照してください。関連情報については、「 Windows SDKブロックとスクロール可能なカーソル」を使用して" "を参照してください。

    Caution メモ注意

    要求された型がサポートされていない場合、フレームワークは例外をスローします。

  • lpszSQL
    次のいずれかを含む文字列のポインター:

    • null のポインター。

    • テーブル名

    • SQL の select の SQL ステートメント (省略可 WHEREORDER BY の句と)。

    • 定義済みクエリ (ストアド プロシージャ) の名前を指定する call のステートメント。左中かっこと call のキーワード間の空白を挿入することに注意してください。

    この文字列に関する詳細については、"解説"で ClassWizard ロールのテーブルと説明を参照してください。

    [!メモ]

    は、結果セットの列の順序はオーバーライド RFX の順序 DoFieldExchange かまたは DoBulkFieldExchange の関数の Bulk RFX 関数に一致する必要があります。

  • dwOptions
    値の組み合わせを指定できることを示します。これらの一部は相互に排他的です。既定値は none です。

    • CRecordset::none 設定するオプションはありません。このパラメーター値は、他のすべての値と同時には指定できません。既定では、レコードセットは [編集][削除] で更新できます。AddNewに新しいレコードを追加できるようにします。Updatability は、データ ソースによって異なります nOpenType、またはオプションで指定します。バルク追加の最適化は使用できません。バルク行フェッチが実装されていません。削除したレコードがレコードセットの移動中にとばされません。ブックマークは使用できません。自動ダーティなフィールドのチェックが実行されます。

    • CRecordset::appendOnly は、レコードセットの [編集][削除] はできません。割り当て AddNew だけです。このオプションは CRecordset::readOnlyと同時には指定できません。

    • CRecordset::readOnly が読み取り専用としてレコードセット。このオプションは CRecordset::appendOnlyと同時には指定できません。

    • 大量のレコードを同時に追加CRecordset::optimizeBulkAdd の 使用を最適化する準備した SQL ステートメント。レコードセットを更新するために ODBC API 関数 SQLSetPos を使用しない場合にのみ適用されます。最初の更新でマークされているフィールドが変更されているかを判定します。このオプションは CRecordset::useMultiRowFetchと同時には指定できません。

    • 複数の行が単一のフェッチ操作で取得するためのフェッチCRecordset::useMultiRowFetch のバルク行。これによって、パフォーマンスが向上するようにデザインされている高度な機能です; ただし、バルク レコード フィールド エクスチェンジは ClassWizard によってサポートされていません。このオプションは CRecordset::optimizeBulkAddと同時には指定できません。CRecordset::useMultiRowFetchを指定することに注意してください CRecordset::noDirtyFieldCheck が自動的に選択されます (ダブル バッファリングは使用できません) ; 前方スクロール専用レコードセットで、選択 CRecordset::useExtendedFetch が自動的に有効になります。バルク行フェッチに関する詳細については、" " レコードセット: フェッチ サイズのレコードを (ODBC)を参照してください。

    • レコードセット内を移動するときにCRecordset::skipDeletedRecords のスキップすべての削除されたレコード。これは、特定の相対フェッチのパフォーマンスが低下します。このオプションは、前方スクロール専用レコードセットでは無効です。0、および CRecordset::skipDeletedRecords オプションの設定セットを呼び出すと、nRows のパラメーターの [移動][移動] はアサートします。削除された行がレコードセットから削除されることを CRecordset::skipDeletedRecordsドライバーのパッキングに似た、つまりことに注意してください。ただし、ドライバーがレコードを詰めれば、削除するレコードのみをスキップします; これは、レコードセットが開いている間、他のユーザーが削除したレコードをバイパスされません。CRecordset::skipDeletedRecords は、他のユーザーが削除した行をスキップします。

    • CRecordset::useBookmarks 5 年 1 月の使用はレコードセットでサポートされている場合、ブックマーク。ブックマークの後のデータの取得は、データの移動のパフォーマンスが向上します。前方スクロール専用レコードセットとなります。詳細については、" " レコードセット: ブックマークと絶対位置 (ODBC)を参照してください。

    • CRecordset::noDirtyFieldCheck は、ダーティ フィールドのチェックをオフにします (ダブル バッファリング)。これはパフォーマンスを向上します; ただし、SetFieldDirtySetFieldNull のメンバー関数を呼び出して、ダーティとして手動でフィールドを付ける必要があります。クラス CRecordset のダブル バッファリングをクラス CDaoRecordsetのダブル バッファリングに似ていることに注意してください。ただし、CRecordsetで、個々のフィールドのダブル バッファリングを有効にできません; すべてのフィールドのコントロールを有効またはすべてのフィールドに対して無効にします。選択 CRecordset::useMultiRowFetchを指定することに注意してください CRecordset::noDirtyFieldCheck が自動的に挿入; ただし、SetFieldDirtySetFieldNull は、バルク行フェッチを実装しているレコードセットで使用できません。

    • CRecordset::executeDirect は準備した SQL ステートメントを使用しません。パフォーマンスを向上させるには、[再クエリ] のメンバー関数が呼び出されていない場合は、このオプションを指定します。

    • SQLFetchの代わりにCRecordset::useExtendedFetch の実装 SQLExtendedFetch。これは、前方スクロール専用レコードセットにバルク行フェッチを実装するために設計されています。前方スクロール専用レコードセットで選択 CRecordset::useMultiRowFetch を指定すると、CRecordset::useExtendedFetch が自動的に有効になります。

    • CRecordset::userAllocMultiRowBuffers は、ユーザー データの記憶領域のバッファーを割り当てます。独自のストレージを割り当てる場合は CRecordset::useMultiRowFetch とともにこのオプションを使用してください; それ以外の場合、フレームワークは自動的に必要なストレージを割り当てます。詳細については、" " レコードセット: フェッチ サイズのレコードを (ODBC)を参照してください。CRecordset::useMultiRowFetch を指定せずに CRecordset::userAllocMultiRowBuffers を指定することになります。アサーション エラーが表示されます。

戻り値

CRecordset のオブジェクトが正常に開いた場合、; 呼び出された場合は (0) CDatabase::Open は 0 を返します。

解説

レコードセットによって定義されるクエリを実行するには、このメンバー関数を呼び出す必要があります。**[開く]**を呼び出す前に、レコードセット オブジェクトを構築する必要があります。

データ ソースへの接続はこのレコードセットの **[開く]**またはを呼び出す前に、レコードセットを構築するときによって異なります。データ ソースに接続されていないレコードセットのコンストラクターに CDatabase のオブジェクトを渡した場合、このメンバー関数は、データベース オブジェクトを開こうとしたときに GetDefaultConnect を使用します。レコードセットのコンストラクターにを渡すと null データベース オブジェクトを接続する、コンストラクターは、の CDatabase のオブジェクト、および [開く] 操作を構築します。これらのさまざまな条件下のレコードセットと接続を閉じる方法の詳細については、[閉じる]を参照してください。

[!メモ]

CRecordset のオブジェクトを使用してデータ ソースへのアクセスは常に共有されます。CDaoRecordset のクラスとは異なり、排他アクセスを持つデータ ソースを開くために CRecordset のオブジェクトを使用できません。

**[開く]**を呼び出すと、クエリの select 通常、SQL のステートメントは、次の表に示す条件に基づいてレコードを選択します。

lpszSQL パラメーターの値

選択されたレコードが決定されます。

NULL

The string GetDefaultSQLで返しました。

 

SQL テーブル名

DoFieldExchange または DoBulkFieldExchangeテーブルの一覧のすべての列。

"Customer"

定義済みクエリ (ストアド プロシージャ) の名前

列が返されるようにクエリ定義されます。

"{call OverDueAccts}"

select の列の一覧 FROM テーブルの一覧

指定したテーブルの指定した列。

"SELECT CustId, CustName FROM

Customer"

Caution メモ注意

、SQL 文字列の追加の空白を挿入することに注意してください。たとえば、左中かっこと call のキーワード間の空白を挿入、MFC はテーブル名として SQL 文字列を作成し、この例外が発生する select のステートメントに組み込まれています。同様に、定義済みクエリが出力パラメーターを使用する場合は、挿入の中かっこの間の空白を「"に置き換えられます。シンボル。最後に、call のステートメントの中かっこまたは select のステートメントの select のキーワードの前に空白を挿入する必要があります。

通常の手順では [開く]null を渡すことです; この場合、[開く] の呼び出し GetDefaultSQLCRecordset の派生クラスを使用すると、GetDefualtSQL は、ClassWizard で指定したテーブルの名前を示します。lpszSQL のパラメーターではなく情報を指定できます。

渡すとは関係なく、[開く] 構成体は、クエリの最終的な SQL 文字列 (SQL 文字列は WHERE がある場合は、lpszSQL に追加される ORDER BY の句で渡された文字列にしたり、)、クエリを実行します。GetSQL を呼び出して **[開く]**を呼び出した後に構築された文字列を確認できます。詳細については、レコードセットの動作に関する SQL ステートメントの構築、レコードを選択するか レコードセット: レコードセットがレコードを選択する (ODBC) を、" "を参照してください。

クラスのレコードセットのフィールド データ メンバーは選択されたデータの列にバインドされます。レコードが返されると、先頭のレコードが現在のレコードになります。

レコードセットの選択を、フィルターまたは並べ替えなど) を設定する場合は、レコードセット オブジェクトの構築後、**[開く]**を呼び出す前にこれらを指定します。レコードセットが既に開いた後のレコードセットのレコードを更新するには、[再クエリ]を呼び出します。

詳細については、追加の例を示して、" " レコードセット (ODBC)レコードセット: レコードセットがレコードを選択する (ODBC) をレコードセット: 作成と破棄 (ODBC) をを参照してください。

例外

このメソッドは、型 CDBException* と **CMemoryException***の例外をスローできます。

使用例

[開く] の呼び出しを次のコード例の異なる形式。

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

必要条件

Header: afxdb.h

参照

関連項目

CRecordset クラス

階層図

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery