Symfoware Server WebDBtoolsユーザーズガイド - FUJITSU -
目次 索引 前ページ次ページ

第3章 データベース連携> 3.6 拡張タグの使用例

3.6.2 データ検索:全件検索

■処理の内容

データベースを全件検索し、検索した結果を5件ずつ表示します。
データベースを検索するには拡張タグの<!DO>を使用します。この<!DO>タグでSQL文を宣言し、データベースを検索します。
検索した情報は、拡張タグ<!VAR>で宣言されたグローバル変数を利用して5件ずつ表示されます。

■サンプルプログラム

page.html
・・・
<!IF 'defined(rslt)'>
    <!UNDEFVAR rslt>
<!/IF>
<!VAR rslt SCOPE=GLOBAL>                           (1)
<!DO "SELECT 製品名,カテゴリ,機能,型番,数量,価格,説明
          FROM WL_SCHEMA.製品表" RESULT=rslt>      (2)
<!IF 'defined(tbl)'>
    <!UNDEFVAR tbl>
<!/IF>
<!VAR tbl SCOPE=GLOBAL VALUE='listlen(rslt)'>
全部で <!HREPLACE tbl> 件あります.<BR>
<!IF '!defined(start)'>
    <!UNDEFVAR start>
<!/IF>
<!VAR start SCOPE=GLOBAL>                          (3)
<!SETVAR start 0>
(そのうち,1 件 〜 
        <!IF '5 < tbl'> 5
        <!ELSE> <!HREPLACE tbl> <!/IF> 件を表示しています)<BR>
<TABLE BORDER=1>
    <TR>
        <TD>製品名</TD>
        <TD>カテゴリ</TD>
        <TD>機能</TD>
        <TD>型番</TD>
        <TD>数量</TD>
        <TD>価格</TD>
        <TD>説明</TD>
    </TR>
    <!FOR i 0 4>
        <TR>
            <TD><!HREPLACE 'rslt[start+i]{製品名}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{カテゴリ}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{機能}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{型番}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{数量}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{価格}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{説明}'></TD>
        </TR>
    <!/FOR>                                        (4)
</TABLE>
<!IF 'start+5 < tbl'>
<FORM ACTION="$SYSTEM::FMTR" METHOD="POST">
    <INPUT TYPE="HIDDEN" NAME="WIT_html" VALUE="page_fmt.html">
    <INPUT TYPE="HIDDEN" NAME="DIRECTION" VALUE="NEXT">
    <INPUT TYPE="SUBMIT" VALUE="次のページ">
</FORM>                                             (5)
<!/IF>
・・・

(1) 変数“rslt”の宣言
検索情報を格納する変数“rslt”を、グローバル変数として宣言し、初期値として0を設定します。
(2) データベースの検索
データベースを全件検索し、結果を“rslt”に格納します。
(3) 変数“start”の宣言
表示件数をカウントする変数“start”を、グローバル変数として宣言し、初期値として0を設定します。
(4) 検索情報の表示
“rslt”に格納されている情報を5件表示します。
(5) 次のページの表示
次のページ(5件以降)を表示する場合、page_fmt.html に処理を引き継ぎます。

page_fmt.html
・・・
全部で <!HREPLACE tbl> 件あります.<BR>
<!IF 'QUERY::DIRECTION eq "PREV"'>
    <!SETVAR start 'start-5'>
<!ELSE>
    <!SETVAR start 'start+5'>
<!/IF>                                             (6)
(そのうち,<!HREPLACE 'start+1'> 件 〜
        <!IF 'start+5 < tbl'><!HREPLACE 'start+5'>
        <!ELSE><!HREPLACE tbl><!/IF> 件を表示しています)<BR>
<TABLE BORDER=1>
    <TR>
        <TD>製品名</TD>
        <TD>カテゴリ</TD>
        <TD>機能</TD>
        <TD>型番</TD>
        <TD>数量</TD>
        <TD>価格</TD>
        <TD>説明</TD>
    </TR>
    <!FOR i 0 4>
        <TR>
            <TD><!HREPLACE 'rslt[start+i]{製品名}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{カテゴリ}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{機能}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{型番}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{数量}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{価格}'></TD>
            <TD><!HREPLACE 'rslt[start+i]{説明}'></TD>
        </TR>
    <!/FOR>                                        (7)
</TABLE>
<BR>
<!IF 'start-5 >= 0'>
    <FORM ACTION="$SYSTEM::FMTR" METHOD="POST">
    <INPUT TYPE="HIDDEN" NAME="WIT_html" VALUE="page_fmt.html">
    <INPUT TYPE="HIDDEN" NAME="DIRECTION" VALUE="PREV">
    <INPUT TYPE="SUBMIT" VALUE="前のページ">       (8)
    </FORM>
<!/IF>
<!IF 'start+5 < tbl'>
    <FORM ACTION="$SYSTEM::FMTR" METHOD="POST">
    <INPUT TYPE="HIDDEN" NAME="WIT_html" VALUE="page_fmt.html">
    <INPUT TYPE="HIDDEN" NAME="DIRECTION" VALUE="NEXT">
    <INPUT TYPE="SUBMIT" VALUE="次のページ">        (9)
    </FORM>
<!/IF>
・・・

(6) 結果表示画面の設定
[次のページ]ボタンがクリックされて画面が表示された場合と、[前のページ]ボタンがクリックされて画面が表示された場合に分けて、この画面では何番目のデータから表示するかを設定します。
引き継いだ“rslt”と“start”を使用して次の5件を表示します。
(7) 検索情報の表示
引き継いだ“rslt”と“start”を使用して次の5件を表示します。
(8) 前のページの表示
前のページを表示する場合、page_fmt.htmlに処理を引き継ぎます。
(9) 次のページの表示
次のページを表示する場合、page_fmt.htmlに処理を引き継ぎます。

■解説

page.html でデータベースの全件検索をし、検索した情報を“rslt”に格納します。
次に、“rslt”から件数のカウントを行う“start”を使用して、最初の5件を表示します。
続けて次の5件を表示する場合、page_fmt.html に処理を引き継ぎます。
page_fmt.html では、page.html から引き継いだ“rslt”から、同じく引き継いだ“start”を利用して次の5件を表示します。

さらに次の5件を表示する場合、または前の5件を表示する場合は、page_fmt.html に処理を引き継ぎます。

個別セションでは、グローバル変数を使用することができますが、共有セションでは使用することができません。
共有セションでは、グローバル変数ではなく、cookieを使用します。cookieの使用については、“共有セション”を参照してください。

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

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