Essentially, I don't think you can call nextId(), it has to be a request
that dispatches an event when the id comes back from the server.

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of PremierNEWS
Sent: Sunday, January 27, 2008 4:00 AM
To: [email protected]
Subject: [flexcoders] How to dispatch an event on 2 levels

 

Hello,

i've Database.as class that manages the connection to database and
send/retrieve queries and results.

It, only, uses SQL classes.

 

For example

import flash.events.SQLErrorEvent;
 import flash.events.SQLEvent;
 import flash.filesystem.File;
 
 import mx.rpc.events.FaultEvent;
 import mx.rpc.events.ResultEvent;
 
 [Event(name="result",type="mx.rpc.events.ResultEvent")]
 [Event(name="fault",type="mx.rpc.events.FaultEvent")]
 public class DatabaseManager extends EventDispatcher
 {
  private var instance:DatabaseManager= null;
  
  private var dbFile:File;
  private var dbConn:SQLConnection;
  
  public function open(path:String):void {
   dbFile= new File(File.desktopDirectory.nativePath+"\\"+path
<file:///\\> );  
   dbConn= new SQLConnection();
   dbConn.addEventListener(SQLEvent.OPEN, successOpen);
   dbConn.open(dbFile);
  }

 

private function successMethod(evt:Event):void {
   var queryResult:SQLResult= SQLStatement(evt.target).getResult();
   var event:ResultEvent= new
ResultEvent("result",true,true,queryResult.data);
   dispatchEvent(event);
  }
  
  private function errorMethod(evt:Event):void {
    var event:FaultEvent= new FaultEvent("fault",false,true);
    dispatchEvent(event);
  }
  
  public function execQuery(query:String):void {
   var dbQuery:SQLStatement= new SQLStatement();
   dbQuery.text= query;
   dbQuery.sqlConnection= this.dbConn;
   dbQuery.addEventListener(SQLEvent.RESULT,successMethod);
   dbQuery.addEventListener(SQLErrorEvent.ERROR,errorMethod);
   dbQuery.execute();
  }
 }
}

 

 

 

 

In this way, up-level class uses database need to invoke Database.as's
methods.

 

For example

private function nextId(table:String):int {
   var query:String= "SELECT MAX(ID) FROM LISTA;";
   var max:int;
   dbManager.addEventListener(ResultEvent.RESULT,
function(evt:ResultEvent):void {
    max= evt.result as int;
   });
   dbManager.execQuery(query);
   Alert.show("max "+max);
   return max+1;
  }

 

In last method i would in nextId returns the value of the max+1. So it
needs run the query, retrieve the value and return to caller the
value+1.

 

How i need to manage the events?

 

Thanks.

 

Reply via email to