次の方法で共有


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::OpenExCDatabase::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 クラス

階層図

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition

その他の技術情報

CRecordset のメンバー