SQLを使う
次に、SQLを使うサンプルを紹介します。
SELECT文の例
まずは、SELECT文を実行するSQLを紹介します。
select * into RECORDINTOAREA from NAMETABLE;
return 0;
SELECT文ではWHERE句をつけると条件を絞ることができます。 例えば、
select * into RECORDINTOAREA where FAMLYNAME = 'fuse' from NAMETABLE;
のようにすると、フィールドFAMLYNAMEがfuseのデータだけ読み込みます。 データが少なければ全部を読みこんでもいいのですが、多い場合はパフォーマンスが落ちるため、できるだけ条件を絞るようにしましょう。
別のテーブルを続けて読むこともできます。また、SQLなので、他のテーブルを結合して読むこともできます。
この例の前に、変数をHTMLに入力する例を上げましたが、今回の例は、配列の変数をHTMLに書き込んでいます。
<html> <head> <title>SAMPLE05</title> </head/> <body> すでに登録してあるデータを表示します。<br> データベースのテーブル、"NAMETABLE"に格納されている 内容を表示します。<br> sample05.alnsに記述してある"@RECORDINTOAREA"という場所に、 条件に合う"NAMETABLE"のレコード全てを入力します。<br> (今回のSQL文は特に条件をつけていないので、全部のデータ)<br> それを1行ずつ表示させるために、 "DimRecord"という配列を用意して表示させています。 <br> "$DimRecord.FAMLYNAME"のFAMLYNAMEはテーブルの項目名称です。<br> テーブルは以下の項目になっています。<br> FAMLYNAME、text型<br> FIRSTNAME、text型<br> <br> <table> <tr alns:iterate="@RECORDINTOAREA" alns:variable="DimRecord"> <td>氏: {$DimRecord.FAMLYNAME}</td> <td>名: {$DimRecord.FIRSTNAME}</td> </tr> </table> </body> </html>
INSERT文の例
次に、INSERT文を使う例を紹介します。この例では、AlinousScript上で変数とSQLを組み合わせて利用しています。
$FAMLYNAME = "test"; $FIRSTNAME = "stand"; // これは追加のSQL文です insert into nametable (FAMLYNAME,FIRSTNAME) values ($FAMLYNAME,$FIRSTNAME); return 0;
<html> <head> <title>SAMPLE06</title> </head> <body> データベースにデータを追加します。<br> FAMLYNAMEに新たにデータを追加しました。<br> 内容は、<br> FAMLYNAMEに"{$FAMLYNAME}"<br> FIRSTNAMEに"{$FIRSTNAME}"<br> としました。<br> <a href="sample05.html">sample05.html</a>を実行し、 データが追加されることを確認してください。 </body> </html>
なお、追加したデータは「sample08.html」を実行することで削除できます。
SELECT文とINSERT文の組み合わせの例
ここで、SELECT文とINSERT文をAlinousScriptで組み合わせた例を紹介します。この例で登場するArray.size()関数は、配列のサイズを取得する関数です。
$FAMLYNAME = "test"; $FIRSTNAME = "stand"; select * into TEST from NAMETABLE where FAMLYNAME = $FAMLYNAME and FIRSTNAME = $FIRSTNAME; $NUM = Array.size(@TEST); if($NUM == 0) { insert into nametable (FAMLYNAME,FIRSTNAME) values ($FAMLYNAME,$FIRSTNAME); $msg = "新規データです。"; } else { $msg = "すでにデータがありました。"; } return 0;
この例では、まず、最初にSELECT文で現在のレコードの状態をチェックし、挿入しようとしているレコードと同じ値がないときのみレコードの挿入を行っています。また、レコードの挿入を行ったかどうかについて、$msg変数を利用してHTMLで表示しています。
また、このとき、select文を使って取得したデータは、配列変数のTESTに格納されます。$TESTの構造は、TEST.Record.[フィールド名]になります。
<html> <head> <title>SAMPLE07</title> </head> <body> データベースにデータを追加します。<br> すでに同じものが登録されていたら<br> 登録しないようにしてみました<br> {$msg}<br> <a href="sample05.html">sample05.html</a>を実行して、 データが追加されること (すでに登録されている場合は、登録されないこと)を確認してください。 </body> </html>
追加したデータは「sample08.html」を実行して削除しておいてください。
DELETE文の例
DELETE文を削除する例を紹介します。この例では「INSERT文の例」で追加したレコードを削除できます。
$FAMLYNAME = "test"; delete from nametable where FAMLYNAME = $FAMLYNAME; return 0;
<html> <head> <title>SAMPLE08</title> </head> <body> データベースからデータを削除します。<br> FAMLYNAMEからデータを削除しました。<br> <a href="sample05.html">sample05.html</a>を実行して、 削除されたことを確認してください。<br> </body> </html>
UPDATE文の例
UPDATE文でレコードを更新する例を紹介します。
$FAMLYNAME = "test"; $FIRSTNAME = "stand"; $FIRSTNAMEUPD = "updatedata"; update nametable set FIRSTNAME = $FIRSTNAMEUPD where FAMLYNAME = $FAMLYNAME; return 0;
<html> <head> <title>SAMPLE09</title> </head> <body> データベースのデータを更新します。<br> 内容は、<br> FAMLYNAMEに"{$FAMLYNAME}"<br> FIRSTNAMEに"{$FIRSTNAME}"<br> となっているデータに対して、<br> FIRSTNAME行を"{$FIRSTNAMEUPD}"に書き換えました。<br> <a href="sample05.html">sample05.html</a>を実行して、 更新されたことを確認してください。 </body> </html>
UPDATE文とSELECT文を組み合わせた例
この例は、UPDATE文をSELECT文を組み合わせた例で、2つの画面をサポートしています。まず、最初に「http://localhost:8080/sample10.html」にアクセスしてください。すると、次のような画面が表示されます。
このフォームの入力の「FAMLYNAME」にtest、「FIRSTNAME」に太郎と入力すると、下の方に表示されている氏のフィールドがtestのレコードの名の値が太郎に変わります。
このソースコードは次のようになります。この例で「sample10.alns」は、2通りの動きをします。最初にブラウザから「http://localhost:8080/sample10.alns」にアクセスされたときには、UPDATE処理は行わず送信ボタンを表示します。次に、先ほどのURLにアクセスしてそのページのフォームから投稿されたときにはUPDATE処理を行います。
このスクリプトでは、Form変数のfamlynameが存在するかどうかで、ブラウザからURLを入力してアクセスされているのか、一度表示したHTMLのページのフォームから投稿されているのかを判断しています。
if($IN.famlyname == null) { // このページが最初に起動されたときに走行するロジックです。 select * into RECORDINTOAREA from NAMETABLE; $inputbutton = '<br><input type="submit" value="送信します"/>'; $FAMLYNAME = ""; $FIRSTNAMEUPD = ""; } else { $FAMLYNAME = $IN.famlyname; $FIRSTNAMEUPD = $IN.firstname; update nametable set FIRSTNAME = $FIRSTNAMEUPD where FAMLYNAME = $FAMLYNAME; // 更新後データ表示のために読みます select * into RECORDINTOAREA from NAMETABLE; $inputbutton = '更新されました。<br> 念のため<a href="sample05.html">sample05.html</a>を実行して、 更新されたことを確認してください。<br>'; } return 0;
<html> <head> <title>SAMPLE10</title> </head> <body> <form name="testForm" action="sample10.html"> FAMLYNAME<br> <input type="text" name="famlyname" alns:validate="notNull"> <span alns:msg="famlyname" alns:form="testForm"
alns:validate="notNull"> <font color="#FF0000">FAMLYNAMEを入力してください。</font> </span><br> この条件に合致するデータについて <br> FIRSTNAME<br> <input type="text" name="firstname" alns:validate="notNull"> <span alns:msg="firstname" alns:form="testForm"
alns:validate="notNull"> <font color="#FF0000">FIRSTNAMEを入力してください。 (表示色等は自在に変えることができます)</font> </span><br> この内容でFIRSTNAME項目を書き換えます。 <br> <br> ※以下はチェックボタンのサンプル表示です。 動作には関係ありません。<br> <input type="checkbox" name="abc[]" value="A">A <input type="checkbox" name="abc[]" value="B">B <input type="checkbox" name="abc[]" value="C">C <br> {$inputbutton} </form> {$FAMLYNAME}<br> {$FIRSTNAMEUPD}<br> NAMETABLEの内容です。参考までに・・・<br> <table border="1"> <tr alns:iterate="@RECORDINTOAREA" alns:variable="Record"> <td> 氏: {$Record.FAMLYNAME} </td> <td> 名: {$Record.FIRSTNAME} </td> </tr> </table> </body> </html>


