CRecordset::Open
仮想BOOLオープン (UINTした nOpenType==NULL、DWORDdwOptions=なしAFX_DB_USE_DEFAULT_TYPE、LPCTSTRlpszSQL);
スロー ( CDBException、 CMemoryException );
戻り値
CRecordsetオブジェクトが正常に開かれた(と呼ばれる場合) cdatabase::openは 0 を返す場合それ以外の場合は 0。
パラメーター
した nOpenType
AFX_DB_USE_DEFAULT_TYPE既定値を受け入れるまたはenumOpenTypeから次の値のいずれかを使用します。 :
-
Crecordset::dynaset特価;双方向のスクロール、レコード セット。メンバーシップと、レコードの順序は、レコード セットを開くと、データ値に他のユーザーによって加えられた変更は、フェッチ操作の後表示されますが決定されます。ダイナセットはキーセット ドリブン レコード セットとしても知られています。(&N)。
-
CRecordset::snapshot特価;双方向のスクロール、静的レコード セット。レコード セットを開いたとき、会員と、レコードの順序が決定されます;レコードがフェッチされると、データ値が決定されます。レコード セットを閉じ、再び開くまで他のユーザーによる変更が表示されません。(&N)。
-
CRecordset::dynamic特価;双方向のスクロール、レコード セット。メンバーシップ、順序、データ値に他のユーザーによって加えられた変更は、次のフェッチ操作が表示されます。多くの ODBC ドライバーはこのタイプのレコード セットをサポートして(&N)。
-
CRecordset::forwardOnly特価;前方スクロール専用レコード セット(&N)。
CRecordsetのため、既定値はCRecordset::snapshotです。既定値機構両方 ODBC CRecordsetと DAO CDaoRecordset、それぞれ異なる既定値を持つを操作する Visual C のウィザードをできます。
これらのレコード セットの種類の詳細については、参照してください レコード セット (ODBC)でVisual の C++ プログラマのガイド。関連情報については、記事「ブロックとスクロール可能なカーソルの使用」、『 ODBC SDK programmer's Referenceを参照してください。
注意特価;要求された型がサポートされていない場合は、フレームワークが例外をスローします。(&N)。
lpszSQL
次のいずれかを含む文字列へのポインター:
dwOptions
以下に示す値の組み合わせを指定することができますビットマスク。これらのいくつかは相互に排他的です。既定値はnoneです。
-
CRecordset::none特価;オプションは設定されません。このパラメーターの値は、他のすべての値を相互に排他的です。既定では、レコード セットを編集または削除で更新することができ、 AddNewの新しいレコードを追加することができます。更新可能性は、データ ソースとして指定した nOpenTypeオプションによって異なります。バルク追加の最適化は利用できません。バルク行フェッチは実装されません。削除されたレコードは、レコード セットの移動中にスキップされません。ブックマークは利用できません。自動ダーティ フィールド チェックを実装します。(&N)。
-
CRecordset::appendOnly特価;編集または削除をレコード セットにはできません。AddNewをのみ許可します。このオプションはCRecordset::readOnlyと相互に排他的です。(&N)。
-
CRecordset::readOnly特価;読み取り専用としてレコード セットを開きます。このオプションはCRecordset::appendOnlyと相互に排他的です。(&N)。
-
CRecordset::optimizeBulkAdd特価;準備された SQL ステートメントを使用して、一度に多くのレコードの追加を最適化します。ODBC API 関数のSQLSetPosレコード セットを更新する使用していない場合に適用されます。最初の更新は、フィールドがダーティとしてマークされますを決定します。このオプションはCRecordset::useMultiRowFetchと相互に排他的です。(&N)。
-
CRecordset::useMultiRowFetch特価;バルク行を 1 回のフェッチ操作で取得する複数の行をフェッチを実装します。これは、高度な機能のパフォーマンスを向上させるように設計されている;ただし、バルク レコード フィールド エクス チェンジは、ClassWizard ではサポートされていません。このオプションは、 CRecordset::optimizeBulkAddと相互に排他的です。CRecordset::useMultiRowFetchを指定する場合は、[オプションCRecordset::noDirtyFieldCheck自動的にオンになってすることに注意してください (ダブル バッファリングはご利用いただけません);前方参照だけのレコード セットでは、オプションCRecordset::useExtendedFetch自動的に点灯します。バルク行フェッチの詳細については、資料を参照してください レコード セット: レコードのフェッチ一括 (ODBC)でVisual の C++ プログラマのガイド(&N)。
-
CRecordset::skipDeletedRecords特価;削除されたすべてのレコードは、レコード セット内を移動するときをスキップします。これは、特定の相対フェッチでパフォーマンスが低下します。このオプションは、前方参照だけのレコード セットで無効です。CRecordset::skipDeletedRecordsでは、梱包ドライバー削除された行がレコード セットから削除されるということによく似ています。レコードをドライバーをパックする場合は、ただし、[は、削除するレコードだけがスキップされます;レコード セットが開いている間に他のユーザーによって削除されたレコードはスキップされます。CRecordset::skipDeletedRecords他のユーザーによって削除された行をスキップします(&N)。
-
CRecordset::useBookmarks特価;ブックマークはレコード セットには、サポートされている場合に使用できます。ブックマーク データ検索が遅いが、パフォーマンス データのナビゲーションを向上させます。前方参照だけのレコード セットが無効です。詳細については、参照してください レコード セット: ブックマークと絶対位置 (ODBC)でVisual の C++ プログラマのガイド(&N)。
-
CRecordset::noDirtyFieldCheck特価;(ダブル バッファ) を確認自動ダーティ フィールドをオンにします。これはパフォーマンスを改善する;ただし、手動でSetFieldDirtyとSetFieldNullメンバー関数を呼び出すことによってダーティとしてフィールドをマークする必要があります。CRecordsetクラスCDaoRecordsetでダブル バッファリングに類似しているクラスでは、ダブル バッファリングに注意してください。ただし、 CRecordsetでは、個別のフィールドに対するダブル バッファリング有効にすることはできません;すべてのフィールドを有効にするか、すべてのフィールドを無効にします。ダブル バッファリングの詳細については、DAO の資料を参照して DAO レコード フィールド エクス チェンジ: レコードのダブル バッファリング Visual の C++ プログラマのガイド。オプションCRecordset::useMultiRowFetchを指定する場合は、[ CRecordset::noDirtyFieldCheck自動的にオンになってすることに注意してください。ただし、 SetFieldDirtyとSetFieldNullバルク行フェッチを実装するレコード セットを使用することはできません。(&N)。
-
CRecordset::executeDirect特価;準備された SQL ステートメントを使用しないでください。場合は、クエリを再実行メンバー関数を呼び出さないでするパフォーマンス向上のため、このオプションを指定します。(&N)。
-
CRecordset::useExtendedFetch特価;SQLExtendedFetch SQLFetchのではなくを実装します。これは、バルク行フェッチ前方参照だけのレコード セットに実装するため設計されています。順方向専用のレコード セットのオプションCRecordset::useMultiRowFetchを指定する場合は、[ CRecordset::useExtendedFetch自動的にオンに(&N)。
-
CRecordset::userAllocMultiRowBuffers特価;ユーザー ストレージ バッファーのデータを割り当てます。あなた自身のストレージを割り当てる場合このオプションを使用するCRecordset::useMultiRowFetchと組み合わせて;それ以外の場合、フレームワークは自動的に必要な記憶域を割り当てます。詳細については、参照してください レコード セット: レコードのフェッチ一括 (ODBC)でVisual の C++ プログラマのガイド。CRecordset::useMultiRowFetchを指定せずにCRecordset::userAllocMultiRowBuffersを指定するアサーション エラーになることに注意してください。(&N)。
解説
レコード セットで定義されたクエリを実行するにはこのメンバー関数を呼び出す必要があります。Openを呼び出す前に、レコード セット オブジェクトを構築する必要があります。
このレコード セットのソースへの接続、データ レコード セットオープンを呼び出す前に構成方法に依存します。データ ソースに接続されていないレコード セット コンス トラクターにCDatabaseオブジェクトを渡す場合は、このメンバー関数GetDefaultConnectを使用して、データベース オブジェクトを開くしようとします。レコード セット コンス トラクターにNULLを渡す場合は、コンス トラクターはCDatabaseオブジェクトを構築し、データベース オブジェクトを接続しようとして開く。レコード セットと、これらのさまざまな状況下で接続を閉じるの詳細についてを閉じるを参照してください。
注特価;CRecordsetオブジェクトを通してデータ ソースへのアクセスは、常に共有されます。CDaoRecordsetクラスとは異なり、 CRecordsetオブジェクトのデータ ソースを排他アクセスで開くに使用することはできません。(&N)。
Openを呼び出すと、クエリは、通常、SQL選択ステートメントは、次の表の条件に基づいてレコードを選択します。
| LpszSQL パラメーターの値 |
選択されたレコードによって決まります |
例 |
| NULL |
GetDefaultSQLによって返される文字列。 |
|
| SQL テーブル名 |
DoFieldExchangeまたはDoBulkFieldExchangeテーブル リストのすべての列。 |
「顧客」
|
| 定義済みクエリ (ストアド プロシージャ) 名 |
クエリを返すに定義されている列。 |
」{呼び出し OverDueAccts}"
|
| 選択列の一覧からテーブル リスト |
指定されたテーブルの指定した列。 |
[CustId] CustName の顧客からの選択]
|
!警告特価;SQL 文字列に余分な空白を挿入しないでください注意してください。たとえば、かっこと呼び出しキーワード間にスペースを挿入する場合、MFC は SQL 文字列をテーブル名として誤って解釈し、スローされた例外の結果をSELECTステートメントに組み込みます。定義済みクエリが出力パラメーターを使用する場合、同様に、中かっこの間にスペースを挿入しないでください、'?' 記号。最後に、空白、かっこの前に、 CALLステートメントまたは選択キーワードの選択ステートメントの前に挿入する必要がありますないです。(&N)。
通常の手順は、 NULLをオープンに渡すことです。この例では、オープン GetDefaultSQLをが呼び出されます。CRecordsetの派生クラスを使用している場合は、 GetDefualtSQL ClassWizard で指定したテーブル名を提供します。LpszSQLパラメーターにその他の情報を代わりに指定することができます。
何があなたを渡す、オープン最終 SQL 文字列 (文字列を渡すlpszSQL文字列に追加 SQLは ORDER BY句があります)、クエリを構築し、クエリを実行します。Openを呼び出した後にgetsql 関数を呼び出すことによって作成された文字列を調べることができます。レコード セットが SQL ステートメントを構築し、レコードを選択する方法の詳細については、記事 レコード セット: レコード選択のしくみ (ODBC)でVisual の C++ プログラマのガイド。
レコード セット クラスのフィールド データ メンバーは、選択したデータの列にバインドされています。すべてのレコードが返された場合は、最初のレコードが現在のレコードになります。
フィルターや並べ替えなど、レコード セットのオプションを設定する場合これらは、レコード セット オブジェクトを構築した後、 Openを呼び出す前に指定します。レコード セットが既に開かれていた後レコード セット内のレコードを更新する場合は、再クエリを呼び出す。
その他の例を含む詳細についてを参照してください レコード セット (ODBC)、 レコード セット: レコード選択のしくみ (ODBC)、および レコード セット: 作成と破棄 (ODBC) Visual の C++ プログラマのガイドの。
例
別のフォーム、 Openの呼び出しのコード例を次に示しますを表示します。
・ rs は、CRecordset または//CRecordset の派生オブジェクト//既定の SQL ステートメントを使用してオープンの rs・ ブックマークを実装・ オフ//自動ダーティ フィールド チェックrs。開く (CRecordset::snapshot、NULL、特価;CRecordset::useBookmarks |CRecordset::noDirtyFieldCheck);//完全な SELECT ステートメントを渡す//とダイナセットとして開くrs。開く (crecordset::dynaset、_T (」select L_Name お客様から「));//すべての既定値を受け入れるrs。開く)(&N)
CRecordset の概要|nbsp;クラス メンバー |階層図(&N)
参照特価;CRecordset::CRecordset、 CRecordset::Close、 CRecordset::GetDefaultSQL、 CRecordset::GetSQL、 CRecordset::m_strFilter、 CRecordset::m_strSort、 :requery(&N)