| 1 |
import flash.events.*; |
|---|
| 2 |
import mx.events.*; |
|---|
| 3 |
import mx.controls.Alert; |
|---|
| 4 |
import mx.collections.ArrayCollection; |
|---|
| 5 |
import org.libspark.utils.SqlUtil; |
|---|
| 6 |
import org.libspark.snippets.controls.SQLDataGrid; |
|---|
| 7 |
|
|---|
| 8 |
[Bindable] |
|---|
| 9 |
private var cbTableList_data:Array; |
|---|
| 10 |
|
|---|
| 11 |
private var columns:ArrayCollection; |
|---|
| 12 |
|
|---|
| 13 |
private function buildSQL(table:String):String { |
|---|
| 14 |
columns = SqlUtil.getColumnDef(connection, table); |
|---|
| 15 |
var sql:String = "SELECT "; |
|---|
| 16 |
for each(var val:* in columns) |
|---|
| 17 |
sql += val.name + ", "; |
|---|
| 18 |
sql = sql.substring(0, sql.length - 2); |
|---|
| 19 |
sql += " FROM " + table; |
|---|
| 20 |
return sql; |
|---|
| 21 |
} |
|---|
| 22 |
|
|---|
| 23 |
private function cbTableList_close(event:DropdownEvent):void { |
|---|
| 24 |
dg.executeQuery(buildSQL(String(event.target.selectedItem))); |
|---|
| 25 |
} |
|---|
| 26 |
|
|---|
| 27 |
private function bAddRow_click(event:MouseEvent):void { |
|---|
| 28 |
var rowData:ArrayCollection = new ArrayCollection(); |
|---|
| 29 |
for each(var val:* in columns) |
|---|
| 30 |
rowData.addItem({column: val.name, type: val.type, value: null}); |
|---|
| 31 |
var status:Boolean = SqlUtil.insertRow(connection, String(cbTableList.selectedItem), rowData); |
|---|
| 32 |
dg.executeQuery(buildSQL(String(cbTableList.selectedItem))); |
|---|
| 33 |
} |
|---|
| 34 |
|
|---|
| 35 |
private function bDelRow_click(event:MouseEvent):void { |
|---|
| 36 |
if (dg.selectedIndex < 0) |
|---|
| 37 |
return; |
|---|
| 38 |
|
|---|
| 39 |
var record_id:int = dg.selectedItem.record_id; |
|---|
| 40 |
var status:Boolean = SqlUtil.deleteRow(connection, String(cbTableList.selectedItem), "record_id", record_id); |
|---|
| 41 |
dg.executeQuery(buildSQL(String(cbTableList.selectedItem))); |
|---|
| 42 |
} |
|---|
| 43 |
|
|---|
| 44 |
private function onClosing(event:Event):void { |
|---|
| 45 |
trace("Application closing..."); |
|---|
| 46 |
if (connection != null) |
|---|
| 47 |
if(connection.connected) |
|---|
| 48 |
connection.close(); |
|---|
| 49 |
} |
|---|
| 50 |
|
|---|
| 51 |
private function onItemEditBegin(event:DataGridEvent):void { |
|---|
| 52 |
if (event.columnIndex == 0) |
|---|
| 53 |
event.preventDefault(); |
|---|
| 54 |
} |
|---|
| 55 |
|
|---|
| 56 |
private function onItemEditEnd(event:DataGridEvent):void { |
|---|
| 57 |
if (event.reason == DataGridEventReason.CANCELLED) |
|---|
| 58 |
return; |
|---|
| 59 |
|
|---|
| 60 |
var item:Object = event.itemRenderer.data; |
|---|
| 61 |
var column:String = event.dataField; |
|---|
| 62 |
var columnType:String; |
|---|
| 63 |
var itemEditor:Object = dg.itemEditorInstance; |
|---|
| 64 |
|
|---|
| 65 |
if (itemEditor.text == item[column]) |
|---|
| 66 |
return; |
|---|
| 67 |
|
|---|
| 68 |
for each(var val:* in columns) { |
|---|
| 69 |
if (val.name == column) { |
|---|
| 70 |
columnType = val.type; |
|---|
| 71 |
break; |
|---|
| 72 |
} |
|---|
| 73 |
} |
|---|
| 74 |
|
|---|
| 75 |
var status:Boolean = SqlUtil.updateRow(connection, String(cbTableList.selectedItem), "record_id", item.record_id, |
|---|
| 76 |
column, itemEditor.text, columnType); |
|---|
| 77 |
} |
|---|
| 78 |
|
|---|
| 79 |
private var connection:SQLConnection = new SQLConnection(); |
|---|
| 80 |
private var dg:SQLDataGrid = new SQLDataGrid(); |
|---|
| 81 |
|
|---|
| 82 |
private function init():void { |
|---|
| 83 |
addEventListener(Event.CLOSING, onClosing); |
|---|
| 84 |
dg.x = 20; dg.y = 64; dg.width = 680; dg.height = 396; |
|---|
| 85 |
dg.editable = true; |
|---|
| 86 |
dg.addEventListener(DataGridEvent.ITEM_EDIT_BEGIN, onItemEditBegin); |
|---|
| 87 |
dg.addEventListener(DataGridEvent.ITEM_EDIT_END, onItemEditEnd); |
|---|
| 88 |
addChild(dg); |
|---|
| 89 |
openDB(); |
|---|
| 90 |
} |
|---|
| 91 |
|
|---|
| 92 |
private function openDB():void { |
|---|
| 93 |
var dbFile:File = new File(); |
|---|
| 94 |
var dbFilter:FileFilter = new FileFilter("DB File", "*.db"); |
|---|
| 95 |
try { |
|---|
| 96 |
dbFile.browseForOpen("Open", [dbFilter]); |
|---|
| 97 |
dbFile.addEventListener(Event.SELECT, dbFileSelected); |
|---|
| 98 |
dbFile.addEventListener(Event.CANCEL, dbFileCanceled); |
|---|
| 99 |
} catch (error:Error) { |
|---|
| 100 |
Alert.show(error.message, "ERROR!"); |
|---|
| 101 |
} |
|---|
| 102 |
} |
|---|
| 103 |
|
|---|
| 104 |
private function dbFileSelected(event:Event):void { |
|---|
| 105 |
try { |
|---|
| 106 |
connection.open(File(event.target), SQLMode.READ); |
|---|
| 107 |
dg.sqlConnection = connection; |
|---|
| 108 |
getTableList(); |
|---|
| 109 |
} catch(error:Error) { |
|---|
| 110 |
Alert.show(error.message, "ERROR!"); |
|---|
| 111 |
} |
|---|
| 112 |
} |
|---|
| 113 |
|
|---|
| 114 |
private function dbFileCanceled(event:Event):void { |
|---|
| 115 |
try { |
|---|
| 116 |
var path:String = "file://" + File.documentsDirectory.nativePath + "/user.db"; |
|---|
| 117 |
connection.open(new File(path), SQLMode.CREATE); |
|---|
| 118 |
dg.sqlConnection = connection; |
|---|
| 119 |
getTableList(); |
|---|
| 120 |
} catch(error:Error) { |
|---|
| 121 |
Alert.show(error.message, "ERROR!"); |
|---|
| 122 |
} |
|---|
| 123 |
} |
|---|
| 124 |
|
|---|
| 125 |
private function getTableList():void { |
|---|
| 126 |
cbTableList_data = SqlUtil.getTableList(connection); |
|---|
| 127 |
dg.executeQuery(buildSQL(cbTableList_data[0])); |
|---|
| 128 |
} |
|---|