Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-07-2009, 12:06   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 8
SQLite: Fehler bei SQL-Abfrage

Hallo,

ich habe das Tutorial von www.video-flash.de durchgearbeitet.

Sobald ich aber einen SQL-Query ausführen möchte, bekomme ich folgende Fehlermeldung:
Error: Error #3109: Operation is not permitted when the SQLStatement.sqlConnection property is not set.

Mein Code sieht so aus:

ActionScript:
  1. public class Datenbank extends SQLConnection{
  2.         var conn:SQLConnection;
  3.         var selectStmt:SQLStatement;
  4.                 var sqlResult:Array = new Array();
  5.  
  6.         function Datenbank() {
  7.             var conn = new SQLConnection();
  8.            
  9.             conn.addEventListener(SQLEvent.OPEN, openHandler);
  10.             conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
  11.            
  12.             var dbFile:File = File.applicationDirectory.resolvePath("data.db");
  13.             conn.openAsync(dbFile);
  14.         }
  15.  
  16.  
  17.         function openHandler(event:SQLEvent):void {
  18.                     trace("Datenbank erfolgreich geöffnet");
  19.         }
  20.  
  21.         function errorHandler(event:SQLErrorEvent):void {
  22.                     trace("Fehler:", event.error.message);
  23.                     trace("Details:", event.error.details);
  24.         }
  25.  
  26.         public function getSQL(sql:String) {
  27.             selectStmt = new SQLStatement();
  28.             selectStmt.sqlConnection = conn;
  29.             selectStmt.text = sql;
  30.            
  31.             selectStmt.addEventListener(SQLEvent.RESULT, resultHandler);
  32.             selectStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
  33.  
  34.             selectStmt.execute(); //Hier liegt wohl der Fehler
  35.         }
  36.  
  37.         function resultHandler(event:SQLEvent):void {
  38.             sqlResult= new Array();
  39.  
  40.             var result:SQLResult = selectStmt.getResult();
  41.             var numResults:int = result.data.length;
  42.  
  43.             for (var i:int = 0; i <numResults; i++) {
  44.                 sqlResult[i] = result.data[i];
  45.                 trace(sqlResult[i].vorname);
  46.             }
  47.         }
  48.  
  49.     }

Bei selectStmt.execute(); hängt er sich auf. Der SQL-Query ist soweit richtig. Die Datenbank wurde auch geöffnet.

Über ein paar Tipps wäre ich euch sehr dankbar

Liebe Grüße!

Geändert von Suppenkelch (01-07-2009 um 15:59 Uhr)
Suppenkelch ist offline   Mit Zitat antworten
Alt 01-07-2009, 13:18   #2 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Das Du SQLConnection extendest ist ziemlich unsinnig, der Vorteil wird mir jedenfalls nicht klar.


2. Frage: Wie rufst Du Deine anderen Methoden auf? Einfach so in einer anderen Klasse?

Ich würde in die "openHandler" Funktion ein dispatch knallen, damit die andere Klasse weiß, wann das Ding erstellt ist. Laut Deiner Fehlermeldung ist die "conn" nämlich nicht vorhanden.
Ein:

ActionScript:
  1. if( conn != null)
  2. {
  3.    // Dein Code
  4. }
  5. else
  6. {
  7.   throw new Error("bla");
  8. // Oder in die Richtung
  9. }

schadet sicherlich auch nicht. ;_)

Achja: Zeig mal Deinen Querry, ob der richtig ist. Ansonsten sehe ich keine andere Fehlerquelle, kann aber an der Sonne liegen ;-)


Ps: Benutz das nächste Mal die [.as] Tags, sieht schöner aus als mit den [.code] Tags.

Geändert von Nico B. (01-07-2009 um 13:22 Uhr)
Nico B. ist gerade online   Mit Zitat antworten
Alt 01-07-2009, 15:56   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 8
Hallo Nico,

erstmal Danke für deine Antwort.

Im nachhinein sehe ich natürlich auch ein, dass es keinen Sinn macht mit SQLConnection zu extenden. Ich habe es jetzt auf Sprite extendet, damit ich dispatchEvent's werfen kann.

Ich rufe meine Klasse in der .fla Datei auf.

ActionScript:
  1. var db:Datenbank = new Datenbank();
  2.  
  3. //Nach einem Klick auf einem Button wird dann folgendes ausgeführt
  4. db.getSQL("SELECT * FROM Projekte");

Ich habe deinen Tipp mit dem Testen der Verbindung ausprobiert.
Die Variable conn ist tatsächlich leer.

Woran kann denn das liegen?
Suppenkelch ist offline   Mit Zitat antworten
Alt 01-07-2009, 16:37   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Naja, man steinige mich für eine falsche Darstellung, aber ich machs mal so, dass er es hoffentlich versteht.

Wenn Du in function b eine variable aus funktion a benutzen willst, muss diese noch nicht zwingend existieren. Sprich, Deine Funktion hat die variable noch gar net erstellt/befüllt, du rufst sie aber dennoch auf. Ergo: Leere Variable = Fehler.


Einen Sprite zu extenden macht übrigens auch keinen Sinn, da das Ding ja nix mit der DisplayList zu tun hat. (ist ja nix sichtbares) Extende mal "EventDispatcher", dass würde schon mehr Sinn machen.

Außerdem sollteste Deine "Klassen" Variablen mit private bzw. public deklarieren. In Deinem Falle private und ggfl. einen getter für das Result.

Achja noch was... Bin zwar alles andere als ein Datenbank Profi, aber ich glaube man schreibt DatenbankNamen und TabellenNamen imme klein. ;.)
(Projekte)

Grüße, Nico


Mögliche Vorgehensweise:
Datenbank erstellen, Tabelle erstellen, Event dispachten (damit dein Programm weiss "ist erstellt") und dann das "getSQL" ausführen.

Geändert von Nico B. (01-07-2009 um 16:38 Uhr)
Nico B. ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele