Ich habe Probleme mit dem Versuch, eine Verbindung mit SQLite und Adobe AIR herzustellen. Ich verwende das Flex 4 SDK mit AIR 2.0. Ich habe Code aus einem Tutorial von David Tucker auf InsideRIA (http://insideria.com/2008/04/air-api-additional-query-tech.html) geändert. Ich schreibe in FlashDevelop (was vermutlich mein Problem sein könnte), und ich kann die App kompilieren und ausführen. Das Problem ist, dass wenn ich die db-Datei durchsuche, bekomme ich immer einen Fehler, der in der "BREAKER" -Spur resultiert (dh - die "queryError" -Funktion wird aufgerufen). Ich habe versucht, einfach den SQL-Befehl auf der db ausgeführt und es funktioniert gut, so gibt es ein Problem irgendwo in der Art, wie Flex oder AIR meine Abfrage behandelt (oder natürlich hätte ich einen Fehler bei der Codierung gemacht haben). Danke an alle, die Ihnen helfen können. Mein Code ist wie folgt:Abfragen der SQLite-Datenbank mit der Flex/AIR-App
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:TestSQL="*"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:fl="http://code.google.com/p/flexlib/"
xmlns:views="com.views.*"
layout="absolute"
showFlexChrome="false"
showStatusBar="false"
creationComplete="init()">
<!-- xmlns:com="components.*" -->
<fx:Script>
<![CDATA[
import flash.data.SQLStatement;
import flash.errors.SQLError;
import flash.events.Event;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.events.TimerEvent;
import flash.filesystem.File;
import flash.utils.Timer;
// -- PROPERTIES -------------------------------------------------------------/
private var dbFile:File;
private var conn:SQLConnection;
// -- AUTO INIT FUNCTIONS ---------------------------------------------------/
private function init():void {
// Create a File Reference to the Included DB
dbFile = File.applicationDirectory.resolvePath("contacts.db");
// Create SQL Connection
conn = new SQLConnection();
conn.openAsync(dbFile);
}
private function callQuery():void {
var q:SQLStatement = new SQLStatement();
q.sqlConnection = conn;
q.addEventListener(SQLEvent.RESULT, queryResult);
q.addEventListener(SQLErrorEvent.ERROR, queryError);
var sql:String = "SELECT DISTINCT contacts.lastName, contacts.firstName, contacts.email " +
"FROM contacts " +
"WHERE lastName LIKE :searchString " +
"OR firstName LIKE :searchString";
q.parameters[":searchString"] = "%" + searchString.text + "%";
q.text = sql;
q.execute();
}
private function queryResult(event:SQLEvent):void {
var r:SQLResult = SQLStatement(event.currentTarget).getResult();
dg.dataProvider = r.data;
}
private function queryError(event:SQLErrorEvent):void {
trace("BREAKER");
}
]]>
</fx:Script>
<mx:VBox>
<mx:TextInput id="searchString" change="callQuery()" enabled="true" />
<mx:DataGrid id="dg" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn id="lastName" dataField="lastName" headerText="Last Name" />
<mx:DataGridColumn id="firstName" dataField="firstName" headerText="First Name" />
<mx:DataGridColumn id="email" dataField="email" headerText="Email Address" />
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:WindowedApplication>