flex sqlite datagrid air adobe

Problema de la base de datos Adobe Air/Flex+SQLite



datagrid (2)

Todavía soy un novato en Adobe Air / Flex, y aún bastante nuevo con SQL.

He descargado este código ( http://coenraets.org/blog/2008/11/using-the-sqlite-database-access-api-in-air ... -part-1 /) y he estado revisándolo y Estoy tratando de implementar la misma idea.

Creo que es solo algo estúpido. Estoy usando Flex Builder. Hice un nuevo proyecto de aplicación de escritorio, no importé nada.

Agregué un objeto DataGrid y lo vinculé a una ArrayCollection:

Intento que sea así, cuando el programa se inicialice, cargará los datos de una base de datos si existe, de lo contrario creará uno nuevo.

El problema es que cuando se ejecuta la aplicación, la cuadrícula de datos está vacía. Sin encabezados de columna, sin datos, nada. Intenté cambiar un montón de cosas, utilicé el depurador para asegurarme de que todas las funciones se llamen como deberían. No sé lo que estoy haciendo mal. He comparado mi código con el código mencionado anteriormente, he buscado tutoriales en Google. ¿Alguien sabe lo que estoy haciendo mal?

<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="672" height="446" applicationComplete="onFormLoaded()" title="iRecipes"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; private var sqlConnection:SQLConnection; [Bindable] private var recipeList:ArrayCollection; private function onFormLoaded():void { sqlConnection = new SQLConnection(); openDataBase(); } private function openDataBase():void { var file:File = File.userDirectory.resolvePath("recipes.db"); sqlConnection.open(file, SQLMode.CREATE); if(!file.exists) { createDatabase(); } populateRecipeList() } private function createDatabase():void { var statement:SQLStatement = new SQLStatement(); statement.sqlConnection = sqlConnection; statement.text = "CREATE TABLE Recipes (recipeId INTEGER PRIMARY KEY AUTOINCREMENT, recipeName TEXT, authorName TEXT)"; statement.execute(); statement.text = "INSERT INTO Recipes (recipeName, authorName) VALUES (:recipeName, :authorName)"; statement.parameters[":recipeName"] = "Soup"; statement.parameters[":authorName"] = "Joel Johnson"; statement.execute(); statement.parameters[":recipeName"] = "Garbage"; statement.parameters[":authorName"] = "Bob Vila"; statement.execute(); } private function populateRecipeList():void { var statement:SQLStatement = new SQLStatement(); statement.sqlConnection = sqlConnection; statement.text = "SELECT * FROM Recipes"; statement.execute(); recipeList = new ArrayCollection(statement.getResult().data); } ]]> </mx:Script> <mx:DataGrid dataProvider="{recipeList}"> </mx:DataGrid> </mx:WindowedApplication>


Acabo de probar esto usando tu código. Hice un cambio y eliminé la condición ya que recibía errores sobre la tabla que no existía.

//if(!file.exists) //{ createDatabase(); //}

Esto tiene la cuadrícula de datos que muestra la información correcta. Creo que hay algún problema con la forma en que está inicializando el archivo de la base de datos. Estoy echándole un vistazo en este momento.

Intenta usar

sqlConnection.open(file, SQLMode.CREATE);

en cambio, para abrir la base de datos.


Gracias Pies. Con su sugerencia, creo que lo he descubierto. Cambié la declaración if a esto:

if(!file.exists) { sqlConnection.open(file, SQLMode.CREATE); createDatabase(); } else { sqlConnection.open(file, SQLMode.UPDATE); }

Y funciona genial Gracias por tu ayuda.