CdbrEqlStatement::GetResultメソッド
機能
検索結果の取得
形式
DmaBoolean GetResult(
DmaBoolean bSearchContinue,
pDmaInteger32 plSearchCount,
SDBR_QUERYRESULT** ppQueryResult)
struct SDBR_PROPERTIES {
DmaInteger32 lType; //データ型
DmaInteger32 lCardinality; //基本単位
DmaInteger32 lCount; //プロパティ値の個数
union { //プロパティ値を
// 格納する共用体
pDmaBoolean pbBoolean; //Boolean
pDmaId pId; //ID
pDmaInteger32 plInteger; //Integer
pDmapv pplObject; //Object
ppDmaString_T ppString; //String
} uValue;
};
// 検索結果構造体
struct SDBR_QUERYRESULT {
DmaInteger32 lPropCount; //プロパティ個数
SDBR_PROPERTIES* pProperties; //プロパティ情報
};
詳細
直前に実行したCdbrEqlStatement::Executeメソッドで得られた検索結果(edmSQL文の実行結果)を取得するメソッドです。
取得できたデータの件数はplSearchCountに,データを格納した検索結果構造体の配列のポインタ値はppQueryResultに,それぞれ設定されます。
検索結果データを格納するための構造体のメモリは,このメソッド内で確保されます。このメモリは,ユーザプログラムでdbrDelete関数を使用して解放してください。なお,このメソッドをコールするたびにメモリは確保されるので,コールするごとにメモリを解放する必要があります。
検索結果が0件の場合には,検索結果データの構造体はNULLです。ただし,途中でエラーが発生した場合には,実行結果データの構造体のアドレスはユーザが指定した値のままで,NULLは設定されません。
SDBR_QUERYRESULT構造体のメンバであるSDBR_PROPERTIES構造体のuValue(プロパティ値を格納する共用体)には,Boolean型・ID型・Integer型・Object型・String型の値が格納されます。
検索結果が可変長配列の場合は,CdbrVariableArrayクラスのオブジェクト(Object型)が格納されます。このときlTypeにはデータ型としてDMA_DATATYPE_OBJECTが,lCardinalityには基本単位としてEDM_DMA_CARDINALITY_VARRAYが格納されます。
戻り値がDMA_FALSEの場合,ppQueryResultのポインタ値およびそのポインタ値が示す検索結果データの構造体の内容は保証できません。
なお,アクセス制御機能付きで検索(edmSQL文)を実行した場合は,検索結果集合のうち,アクセス権がある検索結果だけが取得できます。
次に示すメソッドがコールされていない状態でこのメソッドをコールした場合は,エラーになります。
引数
bSearchContinue(入力)
検索結果の取得方法を指定します。次に示す値のどちらかを指定してください。ただし,検索実行後,初めて検索結果を取得する場合は,どちらの値を指定しても検索結果の先頭から取得されます。
plSearchCount(出力)
実際に取得した検索結果の件数が設定されます。件数が設定される領域を指定してください。この値が,CdbrEqlStatement::ChangeGetObjCountメソッドで設定した取得件数よりも小さい場合は,その値を超える検索結果は存在しません。つまり,検索結果の最終行の取り出しが終了しています。
件数が設定される領域が指定されていない場合(NULLを指定した場合)はエラーになります。
ppQueryResult(出力)
検索結果を格納する検索結果構造体である,SDBR_QUERYRESULT構造体へのポインタが設定されます。SDBR_QUERYRESULT構造体およびそのプロパティ情報が設定されるSDBR_PROPERTIES構造体については,「付録C.2(1) 検索結果として取得する構造体」を参照してください。
戻り値
DMA_TRUE 正常終了
DMA_FALSE 異常終了
戻り値の詳細
major_code | minor_code | 説明 | 対処 |
---|---|---|---|
ERR_CORBA | CORBAの戻り値が設定されます。 | CORBAでエラーが発生しました。 | ユーザプログラムでは対処できません。エラー情報として文字列の値を取得して,ユーザプログラムを終了してください。 |
ERR_DB | ERR_DB_DEADLOCK_OCCURRED | データベースでデッドロックが発生しました。 | 時間を置いて,再度実行してください。 |
ERR_DB | ERR_DB_FAILED | データベースで障害が発生しました。 | syslogを参照して,障害の原因を取り除いてください。 |
ERR_DB | ERR_DB_LOCKED | オブジェクトがロックされています。 | 時間を置いて,再度実行してください。 |
ERR_DBR | ERR_EQL_NOT_INITIALIZE | 初期化が実行されていません。 | 初期化を実行してください。 |
ERR_DBR | ERR_EQL_STATEMENT_NOT_EXEC | edmSQL文が実行されていません。 | CdbrEqlStatement::Executeメソッドを実行し,edmSQL文を実行してください。 |
ERR_DBR | ERR_INVALID_STATUS | セッションの状態が不正です。一つのセッションに同時に複数のメソッド処理要求が出されています。 | 一つのセッションに対しては,一度に一つの処理要求しか出さないように見直してください。 |
ERR_DBR | ERR_SESSION_NOT_CONNECT | セッションが接続されていません。 | セッションを接続してください。 |
ERR_DMA | DMARC_BAD_PARAMETER | 不正な引数が入力されました。 | 正しい引数を指定してください。 |
ERR_DMA | DMARC_NO_MEMORY | メモリ不足で実行できません。 | メモリを増設してください。またはメモリを大量に消費しているアプリケーションを停止させて,処理を再実行してください。 |
ERR_DMA | DMARC_TIMEOUT | 制限時間を超過しました。 | タイムアウトしました。 |
ERR_DMA | DMARC_UNEXPECTED | 予期しないエラーが発生しました。 | 処理を終了してください。 |
ERR_DMA | EDMRC_NOT_INTRANSACTION | トランザクション外でメソッドが呼ばれました。 | Beginメソッドの呼び出し後に,この操作を実行してください。 |