CRecordset::GetFieldValue
現在のレコードのフィールド データを取得する。
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CStringA& strValue
);
void GetFieldValue(
short nIndex,
CStringW& strValue
);
パラメーター
lpszName
フィールドの名前。varValue
フィールドの値を格納 CDBVariant のオブジェクトへの参照。nFieldType
フィールドの ODBC の C データ型。 既定値を使用して、DEFAULT_FIELD_TYPEの次の表に基づいて SQL データ型から C データ型を確認した GetFieldValue。 それ以外のデータ型を直接指定するか、互換性のあるデータ型を選択できます; たとえば、SQL_C_CHARにデータ型を格納できます。C のデータ型
SQL データ型
SQL_C_BIT
SQL_BIT
SQL_C_UTINYINT
SQL_TINYINT
SQL_C_SSHORT
SQL_SMALLINT
SQL_C_SLONG
SQL_INTEGER
SQL_C_FLOAT
SQL_REAL
SQL_C_DOUBLE
SQL_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP
SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR
SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY
SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY
ODBC データ型の詳細については、Windows SDKの" Appendix D のトピック「SQL データ型と「C」型」の" "を参照してください。
nIndex
フィールドのインデックス。strValue
フィールドの値を格納 CString のオブジェクトへの参照は、フィールドのデータ型に関係なく、テキストに変換されます。
解説
名前またはインデックスでフィールドを参照することができます。 CDBVariant のオブジェクトまたは CString のオブジェクトのフィールド値を格納できます。
バルク行フェッチを実装している現在のレコードは行セットの最初のレコードで常にに設定されます。 特定の行セット内のレコードの GetFieldValue を使用するには、その行セット内の目的の行の最初の呼び出し時 SetRowsetCursorPosition のメンバー関数ポインターを移動します。 その後、その行の呼び出し GetFieldValue。 バルク行フェッチを実装するには [開く] のメンバー関数で dwOptions のパラメーターの CRecordset::useMultiRowFetch のオプションを指定します。
静的動的に結合、デザイン時ではなく実行時にフィールドをフェッチするに GetFieldValue を使用できます。 たとえば、CRecordsetからレコードセット オブジェクトを直接宣言し、フィールドのデータを取得するためにを使用する必要があります GetFieldValue ; レコード フィールド エクスチェンジ (RFX)、またはバルク レコード フィールド エクスチェンジ (Bulk RFX) は、実行されません。
注意
CRecordsetから派生させず、レコードセット オブジェクトを宣言している場合は、ODBC カーソル ライブラリを読み込まないにします。カーソル ライブラリは、レコードセットに 1 文字以上のバインド列が必要です; ただし、CRecordset を直接使用すると、列にもバインドされません。カーソル ライブラリを読み込むかどうかをメンバー関数 CDatabase::OpenEx と CDatabase::Open のコントロール。
GetFieldValue な SQLGetDataは、ODBC API 関数を呼び出します。 使用しているドライバーがフィールド値の実際の長さの値を出力します SQL_NO_TOTAL、GetFieldValue は例外をスローします。 SQLGetDataに関する詳細については、Windows SDKを参照してください。
例外
このメソッドは、型 CDBException* と **CMemoryException***の例外をスローできます。
使用例
次のサンプル コードでは GetFieldValue に CRecordsetから直接宣言されたレコードセット オブジェクトの呼び出しの例です。
// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);
// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while(!rs.IsEOF())
{
for(short index = 0; index < nFields; index++)
{
rs.GetFieldValue(index, varValue);
// do something with varValue
}
rs.MoveNext();
}
rs.Close();
db.Close();
注意
DAO クラス CDaoRecordsetとは異なり、CRecordset に SetFieldValue のメンバー関数がありません。CRecordsetからオブジェクトを直接作成する場合は、効果的な読み取り専用です。
バルク行フェッチに関する詳細については、" " レコードセット: フェッチ サイズのレコードを (ODBC)を参照してください。
必要条件
Header: afxdb.h