GetFieldメソッド

機能

カレントレコードのフィールドの値を取得します。

形式1:ユーザ確保領域へコピーする場合

インデクス番号指定

void GetField(UINT32 dwIndex,INT16 * psData)  throw DBSQLCA
void GetField(UINT32 dwIndex,INT32 * plData)  throw DBSQLCA
void GetField(UINT32 dwIndex,UINT16* pswData) throw DBSQLCA
void GetField(UINT32 dwIndex,UINT32* pdwData) throw DBSQLCA
void GetField(UINT32 dwIndex,SINGLE* psfData) throw DBSQLCA
void GetField(UINT32 dwIndex,DOUBLE* pdfData) throw DBSQLCA
void GetField(UINT32 dwIndex,DBR_DATETIME* pdtData)
                                              throw DBSQLCA
void GetField(UINT32 ui32Index,DBRArrayDataConstPtr*
                                    cparData) throw DBSQLCA

フィールド名指定

void GetField(LPCTSTR lpctFieldName,INT16 * psData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,INT32 * plData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,UINT16* pswData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,UINT32* pdwData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,SINGLE* psfData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,DOUBLE* pdfData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,DBR_DATETIME* pdtData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,DBRArrayDataConstPtr*
                                    cparData) throw DBSQLCA

形式2:DABrokerが用意した領域を参照する場合

インデクス番号指定

void GetField(UINT32 dwIndex,LPTSTR* lptData) throw DBSQLCA
void GetField(UINT32 dwIndex,DBR_BINARY* pblobData)
                                              throw DBSQLCA

フィールド名指定

void GetField(LPCTSTR lpctFieldName,LPTSTR* lptData)
                                              throw DBSQLCA
void GetField(LPCTSTR lpctFieldName,DBR_BINARY* pblobData)
                                              throw DBSQLCA

形式3:ユーザ確保領域へコピーする場合

インデクス番号指定

UINT32 GetField(UINT32 dwIndex,LPTSTR lptData,
                               UINT32 dwSize) throw DBSQLCA
UINT32 GetField(UINT32 dwIndex,DBR_BINARY* pblobData,
                               UINT32 dwSize) throw DBSQLCA

フィールド名指定

UINT32 GetField(LPCTSTR lpctFieldName,LPTSTR lptData,
                               UINT32 dwSize) throw DBSQLCA
UINT32 GetField(LPCTSTR lpctFieldName,DBR_BINARY* pblobData,
                               UINT32 dwSize) throw DBSQLCA

引数

dwIndex, ui32Index

1から始まるフィールドの番号を指定します。指定するフィールドの番号は,SQL文中での出現順に割り当てられます。

lpctFieldName

フィールド名を指定します。

なお,SELECT文でフィールド演算や,COUNTなどの関数を使用した場合,フィールド名はデータベースによって決められます。このような場合にフィールド名を調べるためには,GetFieldNameメソッドを呼び出します。取得するフィールド名は,重複することもあります。このため,SELECT文でJOINを指定したときなどに,フィールド名が重複している可能性がある場合や,SELECT文でのフィールド演算などでフィールド名が不定の場合は,フィールドの番号を使用してください。

*xxData(形式1,3の第2引数)

データをコピーする領域のポインタを指定します。

*xxData(形式2の第2引数)

ポインタ変数を指定します。

dwSize

コピー先の領域サイズをバイト数で指定します。

戻り値

データ型:UINT32

コピーした文字列の長さが返ります。フィールドの値を指定された型にキャストして取得します(形式3の場合)。

機能詳細

形式1の処理

フィールド値を,引数に指定されたポインタが指す領域にコピーします。

形式2の処理

DABrokerが確保した領域にフィールド値をコピーし,その先頭アドレスをポインタ変数に設定します。このため,LPTSTR又はDBR_BINARYの変数の確保だけで,フィールド値をコピーする領域を確保する必要はありません。

形式3の処理

データ変換について

データベースのデータ型とGetFieldの引数に指定したデータ型とが異なる場合は,値の変換できるものについては引数で指定したデータ型に変換して返します。

文字列から数値データ型への変換に失敗した場合は0を返します。データ型の変換規則については,「7.1 クラスライブラリで扱うデータ型と変換規則」のGetField,GetParamメソッドでのデータ型変換規則を参照してください。

NULL値の扱い

NULLであるフィールドに対してGetFieldメソッドを呼び出すと,戻される値は意味のない値(0,空文字列,要素がすべて0,空文字列からなる構造体,又は不定値)となります。

このため,NULLが格納されている可能性のあるフィールドでは,IsFieldNullメソッドを呼び出して,NULL値かどうかを確認してください。

DBR_BINARY型で値を取得した場合

各メンバの値は次のようになります。

TYPE_BLOB_FILEについて

SetResultSetTypeメソッドで,TYPE_BLOB_FILEを指定した場合,BLOB型のフィールドに対するGetFieldメソッドの引数にはファイル名称が返ります。この場合,GetFieldメソッドの引数の型には,文字列と同じLPTSTRを使います。

繰り返し列の扱い

引数cparDataに繰り返し列のコピー先であるDBArrayDataオブジェクトへのポインタを指定します。DBRArrayDataオブジェクトは参照専用で生成されるため,更新する場合は更に更新用のオブジェクトを生成する必要があります。

SQL/Kの場合

データが設定されていない列を検索しても,GetFieldメソッドを実行すると,VOS K/FSのファイル定義で定義されたデータを返します。ファイル定義の詳細は,マニュアル「ファイル運用」を参照してください。

発生する例外

DBSQLCA(RetCode)

DB_ERROR_NOT_ENOUGH_MEMORY
メモリ容量が不足しています。
DB_ERROR_RESULTSET_NOT_EXIST
非同期実行時に,検索結果がまだ取得できていません。
DB_ERROR_NOT_FOUND
引数dwIndexの範囲が不正です。
DB_ERROR_CANNOT_BE_NULL
引数lpctFieldName,又は引数xxDataにNULLを指定しています。
DB_ERROR_DATA_TRUNCATED
取得した値を指定した型に変換できません。
DB_DRV_ERROR_INVALID_ARGUMENT
引数に指定したフィールド名は不正です。
DB_ERROR_CONVERT_ARRAY_TO_SCALAR
引数cparDataで繰り返し列以外のフィールド値を取得しました,又は引数cparData以外の引数で繰り返し列の値を取得しようとしました。