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 を使用すると、GetFieldValue は SQL データ型から C のデータ型へ、以下の表に基づいて強制的に変換します。 それ以外の場合は、データ型を直接指定するか、互換データ型を選択できます。たとえば、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: Data Types」で、「SQL Data Types」と「C Data Types」を参照してください。
nIndex
0 から始まる、フィールドのインデックス。strValue
フィールドのデータ型に関係なく、テキストに変換されたフィールドの値を保存する CString オブジェクトへの参照。
解説
フィールドは名前またはインデックスで参照できます。 フィールドの値は、CDBVariant オブジェクトまたは CString オブジェクトのいずれかに保存されます。
バルク行フェッチを実装した場合、現在のレコードは、常に行セットの先頭レコードに位置付けられます。 指定された行セット内のレコードで GetFieldValue を使用するには、最初に SetRowsetCursorPosition メンバー関数を呼び出して行セット内の適切な行にカーソルを移動する必要があります。 次にその行に対して GetFieldValue を呼び出します。 バルク行フェッチを実装するには、Open メンバー関数でパラメーター dwOptions に CRecordset::useMultiRowFetch オプションを指定します。
デザイン時に静的に連結する代わりに、GetFieldValue を使用して、実行時に動的にフィールドをフェッチできます。 たとえば、レコードセット オブジェクトを CRecordset から直接作成した場合、GetFieldValue を使用してフィールド データを取得する必要があります。RFX (レコード フィールド エクスチェンジ)、または Bulk RFX (バルク レコード フィールド エクスチェンジ) は実装されていません。
注意
CRecordset から派生せずにレコードセット オブジェクトを宣言すると、ODBC カーソル ライブラリは読み込まれません。 カーソル ライブラリを読み込むには、少なくとも 1 列連結する必要があります。CRecordset を直接使用すると、列が一切連結されません。 カーソル ライブラリを読み込むかどうかは、メンバー関数 CDatabase::OpenEx と CDatabase::Open で制御します。
GetFieldValue は ODBC API 関数 SQLGetData を呼び出します。 ドライバーがフィールド値の実際の長さとして値 SQL_NO_TOTAL を出力すると、GetFieldValue が例外をスローします。 SQLGetData については、Windows SDK を参照してください。
例外
このメソッドは、CDBException* 型の例外と CMemoryException* 型の例外をスローできます。
使用例
次のサンプル コードでは、CRecordset. から直接宣言したレコードセット オブジェクトに対して GetFieldValue を呼び出しています。
// 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) 内のレコードをフェッチ。
必要条件
**ヘッダー:**afxdb.h
参照
参照
CRecordset::DoBulkFieldExchange
CRecordset::SetRowsetCursorPosition