Hola como estan??
Voy compartir una clase que desarrollé que podría ser muy útil para todos los que trabajan con Air y SQLite (base local) o quieran hacerlo, ya que entre todos tenemos que hacer a esta maravillosa aplicación conocida y destruir a hacerle competencia a Silverlight jaja (bromilla).. (o no..
)
He estado rompiéndome la cabeza un poco para pasar los métodos que tengo de conexión de PHP a ActionScript 3, para poder manejar registros simples, como UPDATE, INSERT y SELECT desde una sola clase y lo he conseguido!!.
Voy a tratar de ser breve..
Desde ActionScript 3 la implementación es muuuuy simple.. en este caso trabajo desde Flex 3, vamos por pasos.
Primero, importamos la clase y hacemos la conexión, la clase automáticamente creará la base de datos si no existe:
Código :
import phoxer.DataManager.AirSqlManager;
private var database:AirSqlManager;
private function onComplete():void{
database = new AirSqlManager("test.db");
}Código :
//CREAR LA TABLA var campos:Object= new Object(); campos.id="INTEGER PRIMARY KEY NOT NULL"; campos.titulo="TEXT"; campos.fecha="TEXT"; var tableTareasToCreate:Object= new Object(); tableTareasToCreate.tabla="tareas"; tableTareasToCreate.campos=campos; database.createTable(tableTareasToCreate,insertTarea);
Código :
//INSERTAR REGISTRO var campos:Object= new Object(); campos.titulo="Registro 1"; campos.fecha="20/08/2009"; var dataToInsert:Object = new Object(); dataToInsert.tabla="tareas"; dataToInsert.datos=campos; database.setInsert(dataToInsert,consultar);
Código :
//HACER UNA CONSULTA
var tableToConsult:Object= new Object();
tableToConsult.tabla="tareas";
tableToConsult.principal="id";
tableToConsult.orden="DESC";
database.setSelect(tableToConsult,leerDatos,onError);
private function leerDatos(dts:Array):void{
for each(var dt:Object in dts){
trace(dt.id+" "+dt.titulo+" "+dt.fecha);
}
}
private function onError():void{
trace("no se pudo hacer la consulta");
}Código :
//HACER UNA CONSULTA
var tableToConsult:Object= new Object();
tableToConsult.tabla="tareas";
tableToConsult.principal="id";
tableToConsult.orden="DESC";
tableToConsult.filtro="titulo";
tableToConsult.same="Registro";
database.setSelect(tableToConsult,leerDatos,onError);
private function leerDatos(dts:Array):void{
for each(var dt:Object in dts){
trace(dt.id+" "+dt.titulo+" "+dt.fecha);
}
}
private function onError():void{
trace("no se pudo hacer la consulta");
}Código :
//MODIFICAR UN REGISTRO var datos:Object=new Object(); datos.titulo="Modificado"; datos.fecha="1/09/2009"; var registroAModificar:Object = new Object(); registroAModificar.tabla="tareas"; registroAModificar.datos=datos; registroAModificar.campo="id"; registroAModificar.valor="3"; database.setUpdate(registroAModificar);
Código :
/**
Air SQLite Manager
By ::[PHOXER]::
http://www.phoxer.com
v 1.1;
*/
package phoxer.DataManager{
import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.errors.SQLError;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
public class AirSqlManager{
private var conexion:SQLConnection;
private var BDFile:File;
private var State:SQLStatement = new SQLStatement();
public function AirSqlManager(db:String,asy:Boolean=false){
conexion = new SQLConnection();
conexion.addEventListener(SQLEvent.OPEN,onDbOpen,false,0,true);
conexion.addEventListener(SQLErrorEvent.ERROR,onDbError,false,0,true);
BDFile=File.applicationStorageDirectory.resolvePath(db);
trace("DB PATH: "+BDFile.nativePath)//path actual.
trace("DB EXIST: "+BDFile.exists)//si existe la base.
if(asy){
conexion.openAsync(BDFile);
}else{
conexion.open(BDFile);
}
}
private function onDbOpen(e:SQLEvent):void{
trace("DB CONECTED")
State.sqlConnection = conexion;
}
private function onDbError(e:SQLErrorEvent):void{
trace("DB Error: SqlData: "+e)
}
public function createTable(Obj:Object,bk:Function=null,err:Function=null):void{
var campos:Object=Obj.campos;
var sql:String="CREATE TABLE IF NOT EXISTS "+Obj.tabla+" (";
var cmp:String="";
for(var dt:Object in campos){
cmp+="`"+dt+"` "+campos[dt]+",";
}
cmp=cmp.substring(0,cmp.length-1);
sql+=cmp+")";
trace(sql);
State.text=sql;
try{
State.execute();
if(bk!=null){
bk();
}
}catch (e:SQLError){
trace("CREATE ERROR: "+e);
if(err!=null){
err();
}
}
}
public function setSelect(Obj:Object,bk:Function=null,err:Function=null):void{
var tabla:String=Obj.tabla;
var principal:String=Obj.principal;
var orden:String=Obj.orden;
var filtro:String=Obj.filtro;
var same:String=Obj.same;
var like:String=Obj.like;
var limite:String=Obj.limit;
var select:String=Obj.select;
//-limit
limite=(limite!="" && limite!=null)? String(" LIMIT "+limite):"";
//-Select
select=(select!="" && select!=null)? String("`"+select+"`"):"*";
//-SQL
var sql:String;
if(filtro!="" && filtro!=null && same!="" && same!=null) {
sql="SELECT "+select+" FROM "+tabla+" WHERE "+filtro+" ='"+same+"' ORDER BY "+principal+" "+orden+" "+limite;
}else if(filtro!="" && filtro!=null && like!="" && like!=null){
sql="SELECT "+select+" FROM "+tabla+" WHERE "+filtro+" LIKE '%"+like+"%' ORDER BY "+principal+" "+orden+" "+limite;
}else{
sql="SELECT "+select+" FROM "+tabla+" ORDER BY "+principal+" "+orden+" "+limite;
}
trace(sql);
State.text=sql;
try{
State.execute();
//var result:SQLResult=State.getResult();
if(bk!=null){
var result:SQLResult = State.getResult();
bk(result.data);
}
}catch (e:SQLError){
trace("SELECT ERROR: "+e);
if(err!=null){
err();
}
}
}
public function setInsert(Obj:Object,bk:Function=null,err:Function=null):void{
var datos:Object=Obj.datos;
var sql:String="INSERT INTO "+Obj.tabla+" (";
var campos:String="";
var valores:String="";
for(var dt:Object in datos){
campos+=dt+",";
valores+="'"+String(datos[dt])+"',";
}
campos=campos.substring(0,campos.length-1);
valores=valores.substring(0,valores.length-1);
sql+=campos+") VALUES ("+valores+")";
trace(sql);
State.text=sql;
try{
State.execute();
//var result:SQLResult=State.getResult();
if(bk!=null){
bk();
}
}catch (e:SQLError){
trace("INSERT ERROR: "+e);
if(err!=null){
err();
}
}
}
public function setUpdate(Obj:Object,bk:Function=null,err:Function=null):void{
var tabla:String=Obj.tabla;
var datos:Object=Obj.datos;
var campo:String=Obj.campo;
var valor:String=Obj.valor;
var sql:String="UPDATE `"+tabla+"` SET "
var sets:String="";
for (var dt:Object in datos){
sets+= "`"+dt+"`='"+String(datos[dt])+"',";
}
sets=sets.substring(0,sets.length-1);
sql+=sets+" WHERE "+campo+"='"+valor+"'";
trace(sql);
State.text=sql;
try{
State.execute();
//var result:SQLResult=State.getResult();
if(bk!=null){
bk();
}
}catch (e:SQLError){
trace("INSERT ERROR: "+e);
if(err!=null){
err();
}
}
}
}
Raxiro-blog :
Código :
public int function AirSqlManager(db:String,asy:Boolean=false) //devuelve 1 si se ha creado ó 0 si no se ha creado
Código :
public Tabla function createTable(tabla:String,Obj:Object)
Código :
//es un "método" de la clase Tabla. public int function setInsert(Obj:Object) //devuelve 1 si se ha insertado o 0 si no se ha insertado
Código :
database:AirSqlManager = new AirSqlManager("test.db");
var campos:Object= new Object();
campos.id="INTEGER PRIMARY KEY NOT NULL";
campos.titulo="TEXT";
campos.fecha="TEXT";
titulos:Tabla=AirSqlManager.createTable("tareas",campos)
campos:Object= new Object();
campos.titulo="Registro 1";
campos.fecha="20/08/2009";
titulos.Insert(campos)
Eliseo-blog :
Código :
public Tabla function createTable(tabla:String,Obj:Object)
Código :
var estructura:Object=new Object();
.....
empleadosTb:Tabla=mydbs.createTable("empleados",estuctura);
if (empleadosTb==null){
funcionOnError()
}else{
funcionOnExito()
}
Código :
var estructura:Object=new Object();
.....
if (mydbs.createTable("empleados",estuctura)!=null){
var empleadosTb:Tabla=mydbs.resultTable
}