Interstage Shunsaku Data Manager アプリケーション開発ガイド - Microsoft(R) Windows(R) 2000/ Microsoft(R) Windows Server(TM) 2003 - - UNIX共通 -
目次 索引 前ページ次ページ

第2部 APIでのアプリケーション開発> 第11章 C APIのアプリケーション開発> 11.2 C APIの使用方法> 11.2.2 データの検索

11.2.2.7 条件に一致するXML文書を連続して取得する

Webアプリケーションでは、検索した結果を一定件数ごとに区切って、前後に連続したデータを取得したい場合があります。

XML文書を連続して取得するには、ShunSearch関数を利用します。ShunSearch関数の引数である取得開始位置、または、取得終了位置に、その直前の検索処理によって取得した最終位置情報、または、先頭位置情報を指定します。

条件に一致するXML文書を連続して取得する場合の流れについて、以下の図に示します。

[図:条件に一致するXML文書を連続して取得する場合の流れ]

■記述例

SHUNHSTMT StmtH;
SHUNPOS *First_Pos, *Last_Pos;
int iDirection, Direction;
SHUNPOS *sFirst_Pos, *sLast_Pos, Reply_Pos;

/* データ操作ハンドルの割当て */                                           (1)
ShunAllocHandle(ConH, &StmtH);

// どのページを表示するかによってShunSearchの第3パラメタと第4パラメタの設定を変更
// 次のページを表示する場合は iDirectionがNEXT、前のページを表示する場合は iDirectionがPREVとする
if(iDirection == NEXT) {
  // 次のページを表示する場合                                              (3)
  Reply_Pos = sLast_Pos;
  Direction = SHUN_DIRECTION_FORWARD_EXCLUSIVE;
}else if(iDirection == PREV) {
  // 前のページを表示する場合                                              (4)
  Reply_Pos = sFirst_Pos;
  Direction = SHUN_DIRECTION_BACKWARD_EXCLUSIVE;
}else{
  // 最初のページを表示する場合                                            (2)
  Reply_Pos = NULL;
  Direction = 0;
}

/* 検索の実行 */                                                          (5)
ShunSearch(StmtH, 1, Reply_Pos, Direction, 30,
           Search_Exp, Return_Exp, Sort_Exp,
           &Hit_Cnt, &Return_Cnt, &Returnable_Cnt,
           &Rec_Id_Out,
           &Data, &First_Pos, &Last_Pos); 

/* 検索した結果の取出し */                                                 (6)
printf("ヒット件数              = %d\n", Hit_Cnt);
if(Hit_Cnt != 0) { 
  for (i = 0; i < Return_Cnt; i++) {
    printf("[結果] %s\n", Data[i].Data);
  } 
}

/* 先頭位置情報と最終位置情報を格納 */                                     (7)
sLast_Pos = Last_Pos;
sFirst_Pos = First_Pos;

/* データ操作ハンドルの解放 */                                             (8)
ShunFreeHandle(StmtH);

◆(1) データ操作ハンドルの割当て

事前にデータ操作ハンドルを割り当てます。データ操作ハンドルは、ShunAllocHandle関数に、親ハンドルとなるコネクションハンドルを指定して割り当てます。

◆(2) 最初のページを表示する場合

最初のページを表示する検索処理では、最初のデータから取出しを行うため、データの取得位置(取得開始位置または取得終了位置)にはNULLを指定します。取得位置にNULLを指定すると、返信開始番号に指定した位置からデータを取り出します。

◆(3) 次のページを表示する場合

次のページを表示する検索処理では、前回の検索時に取得した最終位置情報を取得開始位置に指定します。この指定により前回取得したデータの次のページのデータを取得します。

◆(4) 前のページを表示する場合

前のページを表示する検索処理では、前回の検索時に取得した先頭位置情報を取得終了位置に指定します。この指定により前回取得したデータの前の部分のデータを取得します。

◆(5) 検索の実行

ShunSearch関数のパラメタに、データ操作ハンドル、データの取得位置(取得開始位置または取得終了位置)、データの最大件数、検索式、リターン式、先頭位置情報および最終位置情報を受け取るための領域を指定して検索を実行します。

先頭位置情報または最終位置情報を受け取るための領域には、取得開始位置または取得終了位置に指定した領域と同じ領域を指定することができます。そのときには、古い位置情報は取得開始位置を特定するために使用されたあと破棄され、今回の検索で新たな位置情報が設定されます。

◆(6) 検索した結果の取出し

ShunSearch関数では、検索した結果のアドレスを返却します。検索した結果は、構造体の配列で構成されていますので、これをもとにデータを取り出します。

◆(7) 先頭位置情報と最終位置情報を格納

先頭位置情報と最終位置情報を格納します。

◆(8) データ操作ハンドルの解放

データの検索および結果の取出しが完了したら、ShunFreeHandle関数でデータ操作ハンドルを解放します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006