SetDataメソッド

機能

指定された番号の要素に,値を設定します。

形式

virtual void SetData(INT32 i32Index, INT32 i32Data) throw DBSQLCA
virtual void SetData(INT32 i32Index, INT16 i16Data) throw DBSQLCA
virtual void SetData(INT32 i32Index, SINGLE sfData) throw DBSQLCA
virtual void SetData(INT32 i32Index, DOUBLE dfData) throw DBSQLCA
virtual void SetData(INT32 i32Index, LPCTSTR lpctData)
                                                   throw DBSQLCA
virtual void SetData(INT32 i32Index, const DBR_DATETIME&
                                           dtData) throw DBSQLCA
virtual void SetData(INT32 i32Index, const DBR_BINARY & binData)
                                                   throw DBSQLCA

引数

i32Index

データを設定する要素番号を,1からフィールドの要素数以下の値で指定します。

xxData

設定する値を指定します。この引数に指定できるデータ型については,機能詳細の「第2引数に指定できるデータの型」を参照してください。

戻り値

なし

機能詳細

ArrayDataオブジェクトに,要素の値を設定します。値を設定しなかった要素は,欠損値の扱いになります。

第2引数に指定できるデータの型

第2引数に指定できるデータの型は,DBRArrayDataオブジェクトの生成時にDBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドで指定した型によって異なります。CreateArrayDataメソッドの引数ごとに指定できるデータ型を表6-2,6-3に示します。

なお,コピーして作成した更新用のDBRArrayDataオブジェクトへ指定できるデータ型は,コピー元のデータ型に依存します。

表6-2 CreateArrayDataメソッドの引数ごとに指定できるデータ型(1)

CreateArrayDataの引数引数の型
INT16INT32SINGLEDOUBLE
COL_TYPE_INT16
COL_TYPE_INT32
COL_TYPE_SINGLE
COL_TYPE_DOUBLE
COL_TYPE_NUMERIC××××
COL_TYPE_CHAR××××
COL_TYPE_VARCHAR××××
COL_TYPE_DATE××××
COL_TYPE_TIME××××
COL_TYPE_INTERVAL_YEAR××××
COL_TYPE_INTERVAL_HOUR××××

表6-3 CreateArrayDataメソッドの引数ごとに指定できるデータ型(2)

CreateArrayDataの引数引数の型
LPCTSTRDBR_DATETIMEDBR_BINARY
COL_TYPE_INT16×××
COL_TYPE_INT32×××
COL_TYPE_SINGLE×××
COL_TYPE_DOUBLE×××
COL_TYPE_NUMERIC××
COL_TYPE_CHAR×
COL_TYPE_VARCHAR×
COL_TYPE_DATE××
COL_TYPE_TIME××
COL_TYPE_INTERVAL_YEAR××
COL_TYPE_INTERVAL_HOUR××
(凡例)
◎:そのまま値を取得・設定します。
○:DABroker for C++でDBMSの要求するデータ形式に変換して取得・設定します。
△:値をキャスト(cast)して取得・設定します。
×:例外 DB_ERROR_INVALID_ARGUMENTをスローします。
注※
引数で渡された値が,DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドの第2引数で指定した最大長に満たない場合,残りの領域はスペース(バイト数は,DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドの第3引数に依存)で埋められます。

DBR_DATETIME型を指定する場合の注意

DBR_DATETIME型の各メンバ変数に対して,以下の制限に反した値を指定した場合,DB_ERROR_TOO_LARGE_DATAのエラーをスローします。値の正当性はチェックしないため,例えば,Hourに対して50を設定してもエラーにはなりません。

DBR_DATETIME型の指定可能な値
Year < 10000, Month < 100, Day < 100, Hour < 100, Minute < 100, Second < 100
設定するデータ型ごとに参照するメンバ変数を以下に示します。そのほかのメンバ変数の値は無視します。
  • COL_TYPE_DATE:Year, Month, Day
  • COL_TYPE_TIME:Hour, Minute, Second
  • COL_TYPE_INTERVAL_YEAR:Year, Month, Day, Sign
  • COL_TYPE_INTERVAL_HOUR:Hour, Minute, Second, Sign

DECIMAL型を指定する場合の注意

DECIMAL型の値を設定する場合,ユーザが指定した文字列が以下の条件に当てはまる場合は,DB_DRV_ERROR_DATA_CONVERTのエラーをスローします。

(例)DECIMAL(10,3)の場合
"1234567.891" 正常
"11234567.891" エラー(整数部の桁数が大きい)
"001234567.890" 正常(整数部,小数部ともに端の0は無視する)
"0001234567.89123" 正常(小数部下2桁切り捨て,トレースに警告メッセージ出力)

発生する例外

DBSQLCA(RetCode)

DB_DRV_ERROR_DATA_CONVERT
DECIMAL型の値を設定するときに,指定した文字列が正しくありません。
DB_ERROR_CANNOT_ACCESS_WHILE_EXECUTED
パラメタを設定したDBPreparedStatementオブジェクトでExecuteUpdateメソッドを呼び出す前に,SetDataメソッドが呼び出されています。
DB_ERROR_INVALID_ARGUMENT
メソッドの引数に誤りがあります。
DB_ERROR_ARGUMENT_OUT_OF_RANGE
指定できない範囲の値が指定されています。
DB_ERROR_TOO_LARGE_DATA
指定したデータの値は大きすぎます。
引数lpctData,又はbinDataのLengthメンバで指定した長さが,DBRArrayDataFactoryオブジェクトのCreateArrayDataメソッドの第2引数で指定した値より大きな値です。
DB_ERROR_NO_DATA_AREA
Createメソッドでデータ領域を生成する前に,このメソッドを呼び出しています。
DB_ERROR_CANNOT_BE_NULL
LPCTSTR型の引数,又はDBR_BINARY型のDataメンバ変数でNULLを設定しました。