━━━━━━━━━━━━━━━━━━━━━ 2003.11.27 Vol.876 ━━━━━
■□■□■
■□■□■ 日刊「WEBのツボ!」
□■□■□ http://www.soho-union.com/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
配信部数 xxxx部
「システムはオブジェクト指向 Ruby & Flash」(#009)
福井修@Fsys
【○】本日のお題【 応用編 】Ruby&Flash&PostgreSQL での 郵便番号検索 ━━
はや11月も終わりいよいよ冬ですね。それにしても南極皆既日食は、なかなか
神秘的でしたね。本連載も9回目であと2回、Ruby&Flash応用編となります。
前回【 実践編 】「LoadVars連携での DB検索 」というテーマでサーバサイド
のRubyでのDBデータハンドリングについて解説しました。簡潔で楽しいプログ
ラムを感じて頂ければ有り難いところです。
さて本日は、Ruby&Flash&PostgreSQL での 郵便番号検索 というテーマで実用的
な画面に進みます。
前回PostgreSQLはもうすぐバージョン7.4が出るという予告をしましたが、11
月17日に PostgreSQL7.4 が正式リリースされました。注1)
また IBM DB2 Express の料金体系にも情報がありますので、補足します。注2)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 準備
────────────────────────────────────
今回から【応用編】ですが、【実践編】過去3回で、説明した記事が準備となり
ます。
管理者権限のあるLinuxマシンでRuby,PostgreSQLがインストールされており、郵
便番号が、登録済みであるところの準備が整っている必要があります。
連載 6【実践編】サーバサイドで Ruby&PostgreSQL 連携
http://www.melma.com/mag/02/m00020302/a00000641.html
連載 7【実践編】LoadVars連携での ログイン認証
http://www.melma.com/mag/02/m00020302/a00000651.html
連載 8【実践編】LoadVars連携での DB検索
http://www.melma.com/mag/02/m00020302/a00000661.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ まとまったデータの受け渡しは、LoadVarオブジェクトのonDataメソッドで
────────────────────────────────────
前回はサーバサイドのDB連携まわりを解説しましたので、今回は、クライア
ントのActionScriptの方のツボに迫ります。対象バージョンは、Flash MX です。
DBの検索結果は、複数レコードの場合があります。これまでの LoadVarsの例
では、取り扱うデータにひとつひとつ変数名を与えては、値とのペアで操作する
方式でした。これは、基本ではありますが、データ量が増えてくるとその方式で
は、なかなかいちいちやっておれなくなってきます。
まとまったデータを扱うには、XMLオブジェクトも有効です。次回の最終回には、
このXMLオブジェクトを利用します。
ActionScriptでは、イベントが発生した場合に、あらかじめ仕掛けておいたイベ
ントハンドラメソッドを呼び出してくれるしくみになっています。
外部データにアクセスするLoadVarsオブジェクトのイベントハンドラには
onLoad イベントハンドラがあります。このイベントハンドラメソッドに処理を
実装してゆくのです。
オブジェクト.onLoad = function(){
読み込みが完了したイベントで実行する処理
}
第7回 LoadVars連携での ログイン認証の中で login.as スクリプトで
:
// 応答読み込み完イベントハンドラメソッドを定義
resCheck.onLoad = function(success) {
_root.res.text = resCheck.addr
}
:
という部分があります。この onLoadイベントハンドラメソッドでは、サーバか
ら応答された住所データを表示用のテキストのインスタンスに格納しています。
この onLoadというイベントハンドラメソッドは、サーバからのデータを受信用
LoadVarsオブジェクトに読み込み完了して発行されるイベントなのです。
XMLオブジェクトでは、ダウンロードしたデータをXMLとして解析した後で発生す
るonLoadの他に、onLoadの前に、すなわちダウンロードしたデータをXMLとして
解析する前の素のテキストデータを渡してもらうイベントの onDataというイベ
ントハンドラメソッドもあります。
このように解析する前の素のテキストデータを渡してもらえるメソッドが
LoadVarsオブジェクトにも存在すると、いちいち取り扱うデータをひとつひとつ
変数名と値とのペアで操作する必要がなくなります。幸いなことに LoadVarsオ
ブジェクトでも onDataイベントハンドラメソッドが使えるのです。
但し公式マニュアルには、記載されていない非公式な利用方法であったのです。
しかし 幸いな事に Flash2004 では、公式に使えるようなので、もうどんどん使
っても良いのでしょう。
データ量が多い場合には、LoadVarsオブジェクトの onDataメソッドを、使用し
ます。
〜〜〜〜〜 ここから postlist.as 抜粋 〜〜〜〜〜〜〜〜〜〜〜〜
:
// Load完時に サーバで作成した.csvファイルを読む
rcvData.onLoad = function(success) {
// 読み込みリクエスト
loadCSV("postlist.csv")
}
// csv読み込み完了時の処理を定義
csvLoad.onData = loadDataInfo
// データリクエスト サーバサイドのスクリプト呼び出し
reqData.sendAndLoad("getpostlist.rb",rcvData,"POST")
:
//──────────────────────────────────
// 受信データの編集表示
function loadDataInfo(list) {
// 受け取ったcsvデータを編集格納
// 行毎に区切る
lineList = list.split("\n")
// データ数(=行数)
maxDataCount = lineList.length - 1
if (maxDataCount > maxLine){
// 画面のmaxを越える場合は、画面のmaxにとどめる
maxDataCount = maxLine
}
//--受け取ったcsvデータを行毎に分解した分を逐次処理
// 行毎に逐次処理
rowEdit(lineList,maxLine)
}
〜〜〜〜〜 ここまで postlist.as 抜粋 〜〜〜〜〜〜〜〜〜〜〜〜
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ ActionScriptで テーブル表示は、TextFieldオブジェクト
────────────────────────────────────
Flashで文字を出力するには、レイアウト上で固定文言をベタに、貼り付ける事
もやりますし、レイアウトは固定で、テキスト文言を可変で表示する事もできま
す。
では、レイアウト自体を可変にすることは可能でしょうか?もちろん可能です。
DBの検索結果の表示などで、可変行を大量に出力する場合など、いちいちマウ
スで、文字出力枠を定義していると大変ですし、そもそも可変になりません。
可変に文字列出力枠を定義するには、createTextFieldメソッドにてTextField
オブジェクトを生成します。
〜〜〜〜〜 ここから postlist.as 抜粋 〜〜〜〜〜〜〜〜〜〜〜〜
:
// ─────── 項目毎に逐次処理 ───────→
// 項目毎に逐次処理
for (var j = 0; j