como hace un tiempo atrás le mencioné que estoy partiendo a en esto de flex, buscando en el foro y ejemplos en la web me encontre con gran cantidad de información para crear una bd en sqlite con Air. Bueno incurr{i en cada una de ellas y empecé en base a los ejemplos a elaborar mi pequeña aplicación. Jajaja, ustedes se van a reír pero es solo una prueba, insertando ese dato se que voy por buen camino. Mi base de datos tiene solo un campo para rellenar y bueno el id por defecto que incrementa de forma automatica pero en este caso no hacemos referencia a ella.
Desgloso aquí-
En primer Lugar creé mi interfaz, dejo la direccion donde está la imagen de la interfáz.
http://l4c.me/fotos/cafeheco/ingreso-nombre/sizes/m
El codigo air es el siguiente
[code mxml]
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="abreConexion();" width="628" height="324" >
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script source="IngresoCliente.as"/>
<mx:Canvas width="628" height="324">
<s:Button x="308" y="180" label="Aceptar" id="btn_ingresar" enabled="false" click="validaForma();"/>
<s:Label x="281" y="42" text="Ingresar Registros" width="148" height="23" color="#D97F0B" fontSize="16" verticalAlign="middle" textAlign="center" fontWeight="bold"/>
<s:Label x="196" y="88" text="Nombre:" width="60" height="20"/>
<s:TextInput x="281" y="82" width="148" id="nombre_txt"/>
<s:Label x="430" y="87" text="(*)" height="17" id="msj1" visible="false" fontWeight="bold" color="#B80808" fontFamily="Verdana" fontSize="10" width="27"/>
</mx:Canvas>
</s:WindowedApplication>
[/code]
de aquí hago la llamada al archivo IngresoCliente.as el cual tiene el codigo en as3 donde hago el procedimiento en abrir la base de datos llamada "Registro.db", el cual la creé con un manager de sqlite llamado Lita, por lo demás muy práctico. Así que en este código me salto el paso de crear la base de datos en caso de que no existiera, como lo hacen los otros ejemplos en la web. La base de datos Registro.db lo creé en la carpeta raiz de la aplicacion principal.
Ahora va mi inquietud y pregunta, compilé e hice correr el programa y no arroja niun error, pero al momento de gusrdar y clickear el boton 'Aceptar' en la consola me arroja el siguiente error y los datos no los guarda.
Error: Al ejecutarla query: SQLError: 'Error #3115: SQL Error.', details:'no such table: 'tb_ingreso'', operation:'execute', detailID:'2013'
Me fijé en la tabla, está correcta ,en el operador execute, al parecer igual está bién, bueno digo al parecer por que como recien empiezo, tengo muchas inseguridades, por fsvor si pueden ayudarme se lo agradecería un montón, os dejo el código en AS3 para que lo analicen y puedan hecharme una mano.
Código ActionScript :
// ActionScript file import flash.data.SQLConnection; import flash.data.SQLResult; import flash.data.SQLStatement; import flash.events.Event; import flash.events.MouseEvent; import flash.events.SQLErrorEvent; import flash.events.SQLEvent; import flash.filesystem.File; import mx.controls.Alert; import mx.events.AIREvent; private var conexion:SQLConnection; // Nuestro objeto de la clase SQLConnection //private var database:File; /* Aquí guardaremos la referencia de nuestro archivo .sqlite que es nuestra base de datos */ private var queryStatement:SQLStatement = new SQLStatement(); /* Creamos una variable de tipo SQLStatement en la cual estableceremos los queries y parámetros de nuestras consultas */ public function abreConexion():void { nombre_txt.setFocus(); //database = new File(File.applicationStorageDirectory.resolvePath("ingreso.db")); //new File((File.applicationStorageDirectory.resolvePath("ingreso.db"))); var db:File = File.applicationStorageDirectory.resolvePath("Registro.db"); conexion = new SQLConnection(); conexion.addEventListener(SQLEvent.OPEN, dbAbrirConexion); conexion.addEventListener(SQLErrorEvent.ERROR, dbErrorConexion); conexion.openAsync(db); } private function dbAbrirConexion(event:SQLEvent):void { btn_ingresar.enabled = true; queryStatement.sqlConnection = conexion; } private function dbErrorConexion():void { trace("No se pudo conectar a la base de datos"); } private function insertaCliente():void { var sql:String = "INSERT INTO tb_ingreso (nombre) VALUES ('@_nombre') "; queryStatement.clearParameters(); queryStatement.parameters["@_nombre"] = nombre_txt.text; queryStatement.text = sql; queryStatement.addEventListener(SQLEvent.RESULT, queryExitosa); queryStatement.addEventListener(SQLErrorEvent.ERROR, queryFallida); queryStatement.execute(); } private function queryExitosa(evt:SQLEvent):void { var datos:Array = queryStatement.getResult().data; trace(datos); } private function queryFallida(evt:SQLErrorEvent):void { trace("Error: Al ejecutarla query: " + evt.error.toString()); } private function restableceForma():void { nombre_txt.text = ""; } private function validaForma():void { escondeMensajes(); if(nombre_txt.text == "") { msj1.visible = true; nombre_txt.setFocus(); } else { insertaCliente(); } } private function escondeMensajes():void { msj1.visible = false; }
desde ya se lo agradesco mucho
Atte. cafeheco