[loadVarsの使い方]

外部のデータを取り込んだり、外部にデータを出力するために、
フラッシュは様々な方法を提供しているけれども、
その中のひとつに『loadVarsクラス』って言う物がある。
非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0303007.html

フラッシュMX2004からサポートされるようになったこのクラス。
MX時代もあったけれどもクラス化されたことで非常に便利になった。
外部から読み込んだ文字列を、直接変数名でアクセスできることもあって、
MovieClip.loadVariableでやってた時よりも、大分分かりやすくなっている。
ポイントになるのは、変数名1=データ1&変数名2=データ2という形に
加工されたファイルを読み込んだときのみ、loadVars.onLoadイベント内で、
this.変数名という書式でデータ1にアクセスできるという点。

で、今回はこれを使ってDBの検索・更新などの処理するという話。

[環境]

お金がないので、もちろんColdFusionも無ければ、 Flash Communication Serverもない。
そんな貧相な環境で、FlashとDBとの連携をやることが今回のテーマなので、
環境もそれに応じたものを用意。

DB:MySQL(Windows)
HTTPServer:Apache(PHPモジュール入り。Windows)

ちなみにPEARDBも入っていないというオチ付き。さすがにやりすぎかも。
環境構築は、いろいろなところで紹介されているので省略。
同様にDBとのハンドリングをする知識に関しては、ここでは省略。
今回はPHPでアクセスしますが、サーバサイド言語ならcgiでもjavaでもなんでもいけます。

[データ]

Table : meibo
┌─┬──┐
│ID│Name│
├─┼──┤
│01│Azsa│
│02│Nina│
└─┴──┘
あっさりと。

[やること]

いわゆる基本処理ということで、
『(1)検索、(2)登録』の2本立てで。

[データの取得と検索]

loadVarsクラスの引数に指定するパスは、何もテキストファイルでなくても良い。
動的にテキストを出力してやれば良いことになる。手順としては、以下のような感じ。

(1)【Flash】DBにアクセスするサーバサイドプログラムを呼ぶ。

//エンコーディングをUTF-8からOS依存のコードにする。
System.useCodepage = true;
var my_lv:LoadVars = new LoadVars();
//ロードしたら呼び出される
my_lv.onLoad = function(success:Boolean) {
if (success) {
//ロード成功時の記述

//trace(my_lv.name);

} else {
//ロード失敗時の記述
}
};
my_lv.load("http://hoge.hoge.com/load.php";;);


(2)【PHP】データベースからデータを取得

『Select * from meibo;』の結果セットを配列で確保するイメージ。
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){
$data[] = $line;
}
という感じで。

(3)【PHP】送信用文字列の形成

ようは、loadVarsで読み込める形に整形してしまえばいいわけですなんですが・・。
先ほども出てきたとおり、loadVarsは標準のMIME形式 application/x-www-form-urlencoded、
つまり変数名1=データ1&変数名2=データ2の形でしか読めないということで、
同一の列のデータを別の変数名になるように加工してやらないといけない。
今回の場合なら、
『$strOut = id0=01&name0=Azsa&id1=02&name1=Nina&cnt=2』という感じ。
今後の処理を考えて変数名の後ろに連番をつけておくのが無難。
また、最後にデータの数をつけておくと処理が楽。
この辺りが力技なので、ミスが無いにチェックしないといけない。

(4)【PHP】送信用文字列の出力

PHPなら、echo $strOut;。これで、やっとFlash側での処理に。

(5)【Flash】Flash側で受け取ったデータを加工する。

あとは、データの加工処理。
for(var i:Number = 0;i < my_lv.cnt;i++){
//trace(eval("this.my_lv.name" + i));
}

これで複数件の検索ができたことになる。
非常に人力に頼る部分が多くて、大変ですな・・・。

この辺りで上に。

コメント

nophoto
grim
2005年12月14日18:48

onDataイベントを使えば普通の文字列も読めるようなのですが何かデメリットがあるのでしょうか?

最新の日記 一覧

<<  2025年6月  >>
1234567
891011121314
15161718192021
22232425262728
293012345

お気に入り日記の更新

最新のコメント

日記内を検索