SetResultSetTypeメソッド
機能
DBResultSetオブジェクトの生成オプションを指定します。
DBResultSetオブジェクトを生成するときに,参照専用,又は更新可能のどちらで生成するか選択します。検索レコードに対するロック方法を指定します。
検索時にバッファを幾つ使うかも指定できます。
また,BLOB型データを扱う場合,その取得方法についても指定します。
形式
void SetResultSetType (UINT16 swType = TYPE_EXCLUSIVE|BUFFER_TYPE_SINGLE,
DBR_BLOB_TYPE nBLOBType = TYPE_BLOB_MEMORY,
LPCTSTR lpctBLOBFileName = NULL)
throw DBSQLCA
引数
swType
次の三つの値を指定します。
- 検索したレコードに対するロック方法
- 検索時に使用するバッファ数
- VARCHARデータをDBR_BINARY型で取得した場合のLengthメンバ,RealLengthメンバの意味
指定する値は,上記三つの値の論理和になります。
このメソッドを実行しなかった場合の動作は,TYPE_EXCLUSIVE | BUFFER_TYPE_SINGLE | VARCHAR_LENGTH_DEFを指定した場合と同じになります。
- 検索したレコードに対するロック方法
- 次に示すTYPE_EXCLUSIVE,TYPE_EXCLUSIVE2,TYPE_NONE,TYPE_WAIT,TYPE_NOWAIT,TYPE_SHAREDのどれかの値で,検索したレコードに対するロック方法を指定します。
- TYPE_EXCLUSIVE又はTYPE_EXCLUSIVE2
DBResultSetオブジェクトからレコードの追加,更新,削除をする場合は,このオプションを指定します。検索したレコードに排他ロックが掛かり,他のトランザクションからの参照・更新を制限できます。実際に排他ロックが掛かるのは,GetResultSetメソッドを実行した時点からです。
このオプションで生成したDBResultSetオブジェクトでは,一度に複数のレコードを読み込めないため,SetMaxRowsで指定したレコード数は無視されます。また,検索条件に一致する次のレコードをアクセスするには,Nextメソッドを使用します。TYPE_EXCLUSIVE,又はTYPE_EXCLUSIVE2で生成したオブジェクトの場合,カーソル制御のメソッドとしてはNextメソッドだけが指定できます。Nextメソッドについては,「5.7 DBResultSetクラスの詳細」を参照してください。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。なお,HiRDB以外のDBMSではTYPE_EXCLUSIVEとTYPE_EXCLUSIVE2で同じオプション文字列へ変換されて実行されます。
- ORACLE:FOR UPDATE
- SQL Anywhere,Adaptive Server Anywhere:オプション文字列は付加しません。
- HiRDB
TYPE_EXCLUSIVE:FOR UPDATE
TYPE_EXCLUSIVE2:WITH EXCLUSIVE LOCK FOR UPDATE
- XDM/RD:WITH EXCLUSIVE LOCK FOR UPDATE
- SQL Server:UPDLOCK
- SQL/K:FOR UPDATE
詳細については,マニュアル「SQL/K」を参照してください。
- XDM/SD:LOCK SU
- TYPE_NONE
参照専用のDBResultSetオブジェクトを生成します。検索するレコードに対して,参照ロックを掛けます。
このオプションで生成したDBResultSetオブジェクトでは,複数レコードを読み込めます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- ORACLE:付加しません。
- SQL Anywhere,Adaptive Server Anywhere:付加しません。
- HiRDB:付加しません。
- XDM/RD:付加しません。
- SQL Server:付加しません。
- SQL/K:付加しません。
- XDM/SD:付加しません(SDEXCLUSIVE値が仮定されます)。
SDEXCLUSIVE値の詳細については,マニュアル「Database Connection Server」のコントロール空間起動制御文を参照してください。
- TYPE_WAIT(HiRDB,XDM/RD,SQL Server,SQL/K,XDM/SDの場合に有効です)
参照専用のDBResultSetオブジェクトを生成します。
検索したレコードに対して参照ロックを掛けますが,見終わった行から排他制御を解除します。このため,DABroker for C++では,ResultSetにレコードをすべて読み込んだ時点,つまり,GetResultSetメソッド,又はPageNextメソッドが完了した時点で,ロックが解除されています。
このオプションで生成したDBResultSetオブジェクトでは,複数レコードを読み込めます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- HiRDB:WITHOUT LOCK WAIT
- XDM/RD:WITHOUT LOCK WAIT
- SQL Server:HOLDLOCK
- SQL/K:付加しません。
- XDM/SD:LOCK SR
- TYPE_NOWAIT(HiRDB,XDM/RD,SQL Server,SQL/K,XDM/SDの場合に有効です)
参照専用のDBResultSetオブジェクトを生成します。該当するレコードをほかのトランザクションが更新中だったり,TYPE_EXCLUSIVEで検索している場合でも読み込めます。排他制御を全くしません。
このオプションで生成したDBResultSetオブジェクトでは,複数レコードを読み込めます。
なお,この引数の値は,実行時にSQL文のオプション文字列に変換されて実行されます。DBMS別に,どのオプション文字列へ変換されて実行されるのかを次に示します。
- HiRDB:WITHOUT LOCK NOWAIT
- XDM/RD:WITHOUT LOCK NOWAIT
- SQL Server:NOLOCK
- SQL/K:付加しません。
- XDM/SD:LOCK NR
- TYPE_SHARED(HiRDB,XDM/RD,SQL/K,XDM/SDの場合だけ有効です)
検索するレコードに共有ロックを掛けます。共有ロックの掛かったレコードは,ほかのトランザクションから参照できますが,更新はできません。
- HiRDB:WITH SHARE LOCK
- XDM/RD:WITH SHARE LOCK
- SQL/K:付加しません。
- XDM/SD:LOCK SR
- 検索時に使用するバッファ数
- 次に示すBUFFER_TYPE_SINGLE,又はBUFFER_TYPE_DOUBLEのどちらかの値で,検索時に使用するバッファ数を指定します。指定を省略した場合は,BUFFER_TYPE_SINGLEが仮定されます。なお,バッファの利用方法については,「3.3.3 検索性能の向上策」を参照してください。
- BUFFER_TYPE_SINGLE
検索結果を保持するバッファを一つだけ使います。
- BUFFER_TYPE_DOUBLE
検索結果を保持するバッファを二つ使います。
- VARCHARデータをDBR_BINARY型で取得したときのLengthメンバ,RealLengthメンバの意味
- 次に示す値のどれか一つを指定します。
- VARCHAR_LENGTH_DEF
- GetFieldメソッドの形式2を使用した場合,又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length:カラムの定義長※
RealLength:0
- GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length:切り捨てたデータ長
RealLength:カラムの定義長※
注※ SetMaxFieldSizeメソッドで取得データ長を指定している場合は,「カラムの定義長」ではなく「SetMaxFieldSizeメソッドで指定したサイズ」となります。
- VARCHAR_LENGTH_REAL
- GetFieldメソッドの形式2を使用した場合,又は形式3を使用してもデータの切り捨てが発生しなかった場合
Length:実際のデータ長※
RealLength:0
- GetFieldメソッドの形式3を使用してデータの切り捨てが発生した場合
Length:切り捨てたデータ長
RealLength:実際のデータ長※
注※ SetMaxFieldSizeメソッドでカラムの定義長よりも小さいサイズを指定している場合は,データベースから取得したデータは実際のデータよりも小さい場合があるため,「実際のデータ長」ではなく「取得データ長」となります。
nBLOBType
BLOB型データを取得するときは次の方法を使います。
- TYPE_BLOB_MEMORY
メモリ上に一括して取得します。
ResultSetのレコード数が1の場合,BLOB型データをすべて取得します。
ResultSetのレコード数が複数の場合,先頭から32Kバイトまでを取得します。
戻り値
機能詳細
検索レコードに対するロック方法,検索時にバッファを幾つ使うか,及びBLOB型データの取得方法について指定します。
指定した各引数の値は,次にGetResultSetメソッドを実行したときから有効になります。
このメソッドは,アクセスするDBMSがSQL Anywhere,Adaptive Server Anywhereの場合だけ利用できます。
発生する例外
DBSQLCA(RetCode)
- DB_ERROR_ARGUMENT_OUT_OF_RANGE
- 引数が指定できる範囲を超えています。
- DB_ERROR_NOT_ENOUGH_MEMORY
- メモリ容量が不足しています。