經過上次發表的 Flash ActionScript 3 資料庫操作 (新增篇),那麼接下來資料庫寫入都沒問題了,當然就要把資料讀出來了喔,讀出來的部份要先思考一下 Flash 介面如何呈現,當然比較懶一點的話可以直接使用 Flash 的組件,是的;就是我,我很懶;所以我直接使用 DataGrid 這個組件,不過在使用組件的時候要注意,有可能較舊的 FLASH 播放器會無法使用喔,這點要注意,不過雖然使用組件,但原理是相同的,只要知道如何讀出資料,那使用甚麼樣的介面呈現其實也沒差了,如果在更懶一點也可以直接使用一個動態文字直接將資料呈現出來。好的,那麼以下開始介紹資料庫的查詢方法。
資料庫讀取的方式使用 XML 的方式,不過不是產生一個 XML 檔案喔,而是 "格式" 符合 XML 資料結構,但還是一個 PHP 的檔案,呈現出來的就是 XML 這個可以直接讓 FLASH 讀取。
資料庫動作:查詢
查詢: Flash ActionScript 3
首先宣告一段程式碼
rs_list.addEventListener(MouseEvent.CLICK, gridItemSelected);
var myLoader:URLLoader = new URLLoader(); //宣告建立一個載入器
myLoader.addEventListener(Event.COMPLETE, XMLHandler); //載入器載入完成
myLoader 是定義的載入器變數,addEventListener 是建立一個事件,Event.COMPLETE 指當事件載入完成就觸發 XMLHandler 這個 function 。
由於宣告的這二行程式碼並不是放在 function 裡面而是放在影格一般區,也就是一進到這個影格就會執行囉,宣告了 myLoader 並建立了事件,於是 myLoader 就會在背後監聽這個事件看是否完成。
好的我們已經定義了 XMLHandler 這個 function 名稱,那麼來建立這個 function 吧。
//XML讀取完成後的動作
function XMLHandler(e:Event):void {
var myXML:XML = new XML(myLoader.data); //定義資料物件
m_txt.text = ""; //清空文字欄位
rs_list.removeAll(); //清空 DataGrid
var i:int;
//拆解陣列一筆一筆讀出
for (i = 0; i < myXML.field1.length(); i++)
{
m_txt.text = m_txt.text+myXML.field1[i].*+"\n"; //加入換行
var dbItem:Object = {編號:myXML.field0[i].*,欄位1:myXML.field1[i].*,欄位2:myXML.field2[i].* };
rs_list.addItem(dbItem);
}
x_txt.text = "資料庫共有:"+myXML.field1.length()+" 筆";
}
以上的 m_txt 及 rs_list 這二個物件,就是我預備拿來讀取 XML 的資料,m_txt 是文字欄位, rs_list 是 DataGrid 將讀取的 XML 使用陣列的方式一筆一筆的讀出並放到想要的位置,以上程式碼示範的是放入 DataGrid 裡面, DataGrid 有三個欄位,分別為 (編號、欄位1、欄位2) 我宣告了一個 dbItem 來定義,然後使用 addItem 寫入。
m_txt 是 "組件" 的 "文字欄位" 。
rs_list 是 "組件" 的 DataGrid 。
備註:關於 DataGrid 要使用前要先建立表頭,表頭的語法為 (rs_list.columns = ["編號","欄位1","欄位2"];) 這段必須再使用 function 前在一般區就要先指定喔
function gridItemSelected(event:MouseEvent):void {
x_tmp.text = rs_list.selectedItem.編號;
txt1.text = rs_list.selectedItem.欄位1;
txt2.text = rs_list.selectedItem.欄位2;
}
建立好這個 function 之後,咦,怎麼沒發現要讀取 XML 網址的地方呢?別急接下來就會講到囉。
建立好一個按鈕並寫好觸發的事件
//讀取資料庫
function fl_Click_ReadDB(event:MouseEvent):void {
rs_list.removeAll();
myLoader.load(new URLRequest("http://要讀取 xml 的網址/xml.php")); //容器的位置 }
這個按鈕在這個影格一般區就建立這樣的事件
btn_r.addEventListener(MouseEvent.CLICK, fl_Click_ReadDB); //讀取XML的按鈕
btn_r 是我按鈕的 "實體名稱" addEventListener 新增一個事件,MouseEvent.CLICK 當滑鼠按下就執行 fl_Click_ReadDB 這個 function。如上
當然你也可以配合其他的事件來呼叫讀取資料庫的動作,例如新增完後想接著讀取你可建立這段:
add_urll.addEventListener(Event.COMPLETE, db_add); //讀出資料
以上這段可以參考 Flash ActionScript 3 資料庫操作 (新增篇) 在第一段 ActionScript 的程式碼中,宣告的載入器為 add_urll 於是;我們在 add_urll 建立一個新事件,當資料庫新增事件完成;我們就執行 db_add 這個 Function 。
//容器載入完成後動作,確認XML讀取完成
function db_add(e:Event):void {
myLoader.load(new URLRequest("http://要讀取 xml 的網址/xml.php")); //容器的位置
}
一開始有說過 myLoader 是定義的載入器變數,而這個 function 只是替這個 myLoader 再指定一個 new URLRequest 要讀取 xml 的位置,這樣就會觸發一開始 myLoader 的事件 XMLHandler 執行寫入到 DataGrid 。
呼, Flash 的部份到此差不多完成,接下來換 PHP 的部份囉。
查詢: PHP
<?php
$conn = mysql_connect("要連線的網路位置", "使用者", "密碼");
$database_conn = "資料庫";
mysql_select_db("資料庫",$conn);
mysql_query("SET NAMES 'utf8'");
$dom = new DOMDocument('1.0', 'UTF-8');
$sql="Select * From 資料庫名稱";
$rs=mysql_query($sql);
$realRead = $dom->createElement('palette');
//第一層
$dom->appendChild($realRead);
$r_count = "";
while($readDB=mysql_fetch_array($rs)){
//$r_count = $r_count + 1;
//$record = $dom->createElement('record');
//每一筆的第二層
//$realRead ->appendChild( $record );
//實際資料欄位
$try0 = $dom->createElement( 'field0',$readDB["member_id"]); //欄位1
$realRead->appendChild( $try0 );
$try1 = $dom->createElement( 'field1',$readDB["try1"]); //欄位1
$realRead->appendChild( $try1 );
$try2 = $dom->createElement( 'field2',$readDB["try2"]); //欄位2
$realRead->appendChild( $try2 );
mysql_query($sql);
//每一筆處理一次
}
echo $dom->saveXML();
?>
PHP 貼上程式碼,就差不多完成了喔 ^^

*****
*****