AIR astuces sql sur insert

Quand vous faites un insert, il vous faut déclarer une instance SQLStatement, il est possible d'utiliser cette même instance pour effectuer chaque requête, l'inconvénient dans un insert de série, c'est qu'il faut attendre la fin de l'opération pour faire la suivante...
Je vous propose donc un petit code qui permet d'effectuer les opérations sous forme de boucle:

Principe:
On utilise une variable global qui va décompter le nombre de requête restant, on met un écouteur de fin de requête SQLEvent.RESULT
On stock les requêtes sql dans un tableau (array)
On appel une première fois la fonction cible de l'écouteur qui va s'appeler jusqu'à la fin du décomptage

Le code mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init();">
<mx:Script source="dean.as"/>
<mx:DataGrid id="resultsGrid" height="100%" width="100%"/>
</mx:WindowedApplication>


Le code src/dean.as:

import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.filesystem.File;

private var conn:SQLConnection;
private var requete:SQLStatement = new SQLStatement();

private var tabSql:Array = new Array();
private var decompteInsert:int;

private function init():void{
conn = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, databaseOk);
conn.addEventListener(SQLErrorEvent.ERROR, echecDatabase);

status = "Création et ouverture de la base de donnée";
var dbFile:File = new File("file:///C:/dbTest2.db");
conn.open(dbFile);
//conn.openAsync(null);//in-memory database
}

private function databaseOk(event:SQLEvent ):void{
conn.removeEventListener(SQLEvent.OPEN, databaseOk);
conn.removeEventListener(SQLErrorEvent.ERROR, echecDatabase);
requete.sqlConnection = conn;
creationTable();
}

private function creationTable():void{
status = "Création de la table";
requete.text= "" +
"CREATE TABLE IF NOT EXISTS maTable (chiffre NUMERIC)";
requete.addEventListener(SQLEvent.RESULT, creationOk);
requete.addEventListener(SQLErrorEvent.ERROR, echecCreation);
requete.execute();
}

private function creationOk(event:SQLEvent):void{
requete.removeEventListener(SQLEvent.RESULT, creationOk);
requete.removeEventListener(SQLErrorEvent.ERROR, echecCreation);
prepareListeInsert()
}

private function prepareListeInsert():void{
status = "Insertion de données";
for(var i:int = 1;i<10;i++){
tabSql.push("INSERT INTO maTable (chiffre) VALUES ("+i+")");
}
insertListe(tabSql);
}
private function insertListe(tabSql:Array):void{

requete.addEventListener(SQLEvent.RESULT, insertOk);
requete.addEventListener(SQLErrorEvent.ERROR, echecInsert);

decompteInsert=tabSql.length;
insertOk();
}
private function insertOk(event:SQLEvent=null):void{
if(0!=decompteInsert){
requete.text=tabSql[--decompteInsert];
requete.execute();

}else{
requete.removeEventListener(SQLEvent.RESULT, insertOk);
requete.removeEventListener(SQLErrorEvent.ERROR, echecInsert);
getData();
}
}

private function getData():void{
status = "Chargement en cours...";
requete.text = "SELECT chiffre FROM maTable";
requete.addEventListener(SQLEvent.RESULT, selectOk);
requete.addEventListener(SQLErrorEvent.ERROR, echecSelect);
requete.execute();
}

private function selectOk(event:SQLEvent):void{
status = "Affichage";
requete.removeEventListener(SQLEvent.RESULT, selectOk);
requete.removeEventListener(SQLErrorEvent.ERROR, echecSelect);

var result:SQLResult = requete.getResult();
resultsGrid.dataProvider = result.data;
}

//********************* ERREURS **************

private function echecDatabase(event:SQLErrorEvent):void{
conn.removeEventListener(SQLEvent.OPEN, databaseOk);
conn.removeEventListener(SQLErrorEvent.ERROR, echecDatabase);

status = "Error opening database";

trace("event.error.message:", event.error.message);
trace("event.error.details:", event.error.details);
}
private function echecCreation(event:SQLErrorEvent):void{
status = "Error creating table";

requete.removeEventListener(SQLEvent.RESULT, creationOk);
requete.removeEventListener(SQLErrorEvent.ERROR, echecCreation);

trace("CREATE TABLE error:", event.error);
trace("event.error.message:", event.error.message);
trace("event.error.details:", event.error.details);
}
private function echecInsert(event:SQLErrorEvent):void{
status = "Error inserting data";

requete.removeEventListener(SQLEvent.RESULT, insertOk);
requete.removeEventListener(SQLErrorEvent.ERROR, echecInsert);

trace("INSERT error:", event.error);
trace("event.error.message:", event.error.message);
trace("event.error.details:", event.error.details);
}
private function echecSelect(event:SQLErrorEvent):void{
status = "Error loading data";

requete.removeEventListener(SQLEvent.RESULT, selectOk);
requete.removeEventListener(SQLErrorEvent.ERROR, echecSelect);

trace("SELECT error:", event.error);
trace("event.error.message:", event.error.message);
trace("event.error.details:", event.error.details);
}