次の方法で共有


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::OpenExCDatabase::Open のコントロール。

GetFieldValueSQLGetDataは、ODBC API 関数を呼び出します。使用しているドライバーがフィールド値の実際の長さの値を出力します SQL_NO_TOTALGetFieldValue は例外をスローします。SQLGetDataに関する詳細については、Windows SDKを参照してください。

例外

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

使用例

次のサンプル コードでは GetFieldValueCRecordsetから直接宣言されたレコードセット オブジェクトの呼び出しの例です。

// 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とは異なり、CRecordsetSetFieldValue のメンバー関数がありません。CRecordsetからオブジェクトを直接作成する場合は、効果的な読み取り専用です。

バルク行フェッチに関する詳細については、" " レコードセット: フェッチ サイズのレコードを (ODBC)を参照してください。

必要条件

Header: afxdb.h

参照

関連項目

CRecordset クラス

階層図

CRecordset::DoFieldExchange

CRecordset::DoBulkFieldExchange

CRecordset::GetODBCFieldCount

CRecordset::GetODBCFieldInfo

CRecordset::SetRowsetCursorPosition