Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-03-2011, 10:12   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 117
SQLLite oder herkömmliche Arrays/XML?

Hi Leute!

Ich stehe momentan vor einer schwierigen Entscheidungsfrage wie ich mein Programm entwickeln soll und bräuchte daher ein paar Tipps.

Und zwar bastle ich an einer reinen Offline-Applikation. In dieser sollen unter anderen Personaldaten der Mitarbeiter einer Abteilung gewartet werden können (Name, Alter, Wohnort, usw.).
Die Oberfläche habe ich in Flash bereits umgesetzt. Jetzt geht es halt darum wie ich die Daten verwalte.
Da mir das FileReference Klasse von CS 4 nicht ausreicht um Zwischenspeicherungen und der gleichen durchzuführen, habe ich mich jetzt für eine AIR Umsetzung entschieden.

Bei ähnlichen Anwendungen die ich bis jetzt enwickelt habe (NUR Flash), habe ich es stets so gehandhabt, dass ich die Datensätze in einer XML Datei gespeichert habe und von dort in ein Array gesteckt habe.
Die Daten habe ich nach dem Bearbeiten durch Flash wieder ins XML Format gebracht und als XML Datei abgespeichert.
Da ich aber eben nun auf AIR setze, bin ich momentan stark am überlegen, ob ich nicht auf die SQLLite Option setzen sollte, die AIR anbietet und sämtliche Userdaten in einer SQLLite Datenbank abzulegen.
Ich möchte in meiner Applikation die Datensätze auch filtern, so sollen zum Beispiel nur alle Personen angezeigt und sortiert werden deren Anfangsbuchstabe des Nachnamens "M" ist.
Hier stehe ich momentan schon etwas an, was die Lösung mit den Arrays angeht. Ich bin mir aber auch nicht sicher, ob SQLLite diese Möglichkeiten bietet.

Meine SQL Kenntnisse beschränken sich momentan leider nur auf das Wesentlichste. Ich habe aber Kollegen, die mir da weiterhelfen können.

Ich wäre sehr dankbar, wenn mir jemand Hilfe geben könnte, welchen Weg ich einschlagen soll!

Besten Dank für eure Hilfe!

lg
Chris
Chris_Winters ist offline   Mit Zitat antworten
Alt 16-03-2011, 11:10   #2 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Benutze eine Datenbank, ist sauberer/schöner Ich meine, wenn man eine Datenbank nicht dazu benutzen sollte Personen, Daten etc. zu speichern - Wozu dann?
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist gerade online   Mit Zitat antworten
Alt 16-03-2011, 12:51   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 117
Hi Nico!

Danke für deine Antwort.

Ja es wird wohl die Datenbank Lösung werden.

Für mich ist es eben wichtig, dass ich die Daten auch gefiltert und sortiert in der Benutzeroberfläche ausgeben kann, also anhand von SELECT Befehlen. Blöde Frage: Diese sind doch mit SQLite dann anhand von Actionscript ausrufbar oder habe ich da irgendwelche Beschränkungen?

Außerdem:Verwendest du Zusatztools um SQLite Datenbanken zu warten?

Danke

lg
Chris
Chris_Winters ist offline   Mit Zitat antworten
Alt 16-03-2011, 13:08   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.407
Ich nutze eigentlich immer "heidisql", aber da gibts zig Tools die genauso gut sind.


Das Sortieren etc. kannst Du wunderbar per SQL-Befehle regeln, wahrscheinlich sogar "cooler/performanter" als in Flash selbst.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist gerade online   Mit Zitat antworten
Alt 16-03-2011, 13:52   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Wieso ist das eine reine offline Applikation? Sind das nicht Daten, die man tendenziell auch von mehreren Terminal aus nutzen möchte?
Omega Psi ist offline   Mit Zitat antworten
Alt 17-03-2011, 06:20   #6 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 117
@nico Danke für den Tipp!

@Omega Psi
Es soll eine Art Analyse/ControllingTool werden, die nur eine bestimmte Person der jeweiligen Abteilung verwenden soll und die Daten nur für diese Person ersichtlich sein sollen. Eine serverbasierende Lösung wäre nach momentanen Stand etwas überzogen, da hier auch die Infrastruktur dazu fehlt.
Chris_Winters ist offline   Mit Zitat antworten
Alt 17-03-2011, 15:03   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 117
So ich habe nun auf die SQL Variante gesetzt und nun steht es schon mal an.

Ich habe nun ein "Formular" in Flash erstellt wo anhand von TextFelder sämtliche Userdaten eingegeben werden ("Vorname","Nachname",etc.).

Nun möchte ich diese in meine Datenbank abspeichern. Die Tabelle in der DB hat exakt die gleiche Spaltenanzahl wie die Eingabefelder in Flash.

Mit meiner alten Array-Variante habe ich es so gehandhabt, dass ich anhand einer FOR Schleife alle Inhalte der TextFelder mit einer Zählvariable durchgegangen bin und diese in die jeweilige Arrayposition abgespeichert habe.
Nun möchte ich diesen Komfort auch bei der SQL Variante haben.
Doch meines momenten Wissens nach muss ich praktisch jede DB-Spalte aufgrund Ihres Namens ansprechen.
Also: INSERT INTO personalDaten (vorname,nachname,) VALUES ('MAX','MUSTERMANN')
Kann man dies nicht auch anhand einer Zählvariable handhaben, indem ich alle Spalten automatisch der Reihe nach durchgehe oder ist es bei SQL hier zwingend notwendig den Spaltennamen mitanzugeben?

Besten Dank.

lg
Chris
Chris_Winters ist offline   Mit Zitat antworten
Alt 17-03-2011, 18:27   #8 (permalink)
Kein Meister
 
Benutzerbild von DabelDirk
 
Registriert seit: Feb 2011
Ort: Zuhause. Näheres auf Anfrage.
Beiträge: 33
Hallo,

wenn ich Dich richtig verstehe willst du eine Zeile in einer Schleife befüllen.

spontan fällt mir da folgendes ein.
PHP-Code:
private function addPersonData(person:Object):void
{
    for(var 
key:String in person)
    {
        
trace(key ": " person[key].toString());

        
this.sqls.text 
            
"INSERT INTO personalDaten (:column) VALUES (:data)"

        
this.sqls.parameters[":column"]=key;
        
this.sqls.parameters[":data"]=person[key];
        
        
this.dbResponder = new Responder(resultHandlererrorHandler);
        
this.sqls.execute(-1dbResponder);
    }

person ist ein assoziatives Array (also ein Object. beim Typ Array gibt es manchmal Probleme mit den Keys), bei dem du als Keys einfach die Spaltennamen respektive die IDs der Textfelder einsetzt.
Hab das jetzt nicht getestet, sollte aber laufen. Evtl. die DB synchon öffnen, damit das auch wirklich nacheinander abläuft, falls das so sein muss. (Datenbank Connect etc. musst du natürlich vorher machen, evtl. in einem Konstruktor einer Klasse die das alles händelt).

Evtl. gibts ne bessere Lösung (vielleicht per SQL statements - keine Ahnung genau, denn ich bin auch nicht so der SQL Experte), probier einfach mal

Ach so, eins noch.
Zitat:
Es soll eine Art Analyse/ControllingTool werden, die nur eine bestimmte Person der jeweiligen Abteilung verwenden soll und die Daten nur für diese Person ersichtlich sein sollen.
Wenn Du auf Sicherheit großen Wert legst (oder legen musst), dann kannst Du Dank Air die SQLite auch verschlüsseln, ohne zusätzliche Kosten etc.
In der as3corelib findest du dazu MD5 oder SHA1 Generatoren.

Nachtrag:
Bezüglich der verschlüsselung der DB.
Wenn du die DB ausserhalb mit einem Tool anlegst/design'st, dann achte darauf dass Du sie UTF-16 anlegst, denn Air verlangt bei der Verschlüsselung UTF-16 (ohne Verschlüsselung komischerweise nicht).

Nachtrag 2:
Mit dem Tool Lita kannst du verschlüsselte SQLite Datenbanken administrieren. Ist zwar nicht so komfortable und umfangreich wie andere Tools, ist aber auch ein Air Programm und kann deshalb die Verschlüsselung (out of the Box) die Air bietet.

Und noch ein Hinweis zu dem assoziativen Array "person". In der Hilfe steht:
Zitat:
(da für Objekteigenschaften keine feste Reihenfolge gilt, werden sie in willkürlicher Reihenfolge angezeigt)
Das bedeutet bei dem Beispiel oben: Wenn die Reihenfolge wichtig ist in der die Daten in die Tabelle geschrieben werden sollen, dann wird das so nichts (ohne die Reihenfolge der Keys zu prüfen und die Schleife so oft aufzurufen, bis jeder Key durch ist. Finde ich nicht so elegant, aber würde auch gehen bei wenigen Daten. ArrayCollections haben indizes, filter, sortierung etc. Damit könnte man das Ganze sicherlich eleganter lösen. Oder evtl. so: person[0]['vorname']; person[1]['nachname'];, damit hast du eine Reihenfolge), wobei ich auch denke, dass die Reihenfolge bei einem einfachen speichern von Daten aus einem Formular vernachlässigbar ist.

Greetz

Geändert von DabelDirk (17-03-2011 um 22:05 Uhr)
DabelDirk ist offline   Mit Zitat antworten
Alt 18-03-2011, 13:02   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2008
Beiträge: 117
Hi DabelDirk!
Danke für deine Antwort und die hilfreichen Tipps! Werde ich wahrscheinlich noch brauchen!!!Bestens!

Es hat sich mittlerweile aber wieder ein kleines SQL Verständnisproblem aufgetan. Und zwar habe ich bei der Erstellung meiner Tabelle zwei Felder (vorname,nachname) mit NOT NULL also als Pflichtfelder deklariert.
Der Benutzer gibt über Eingabetextfelder eben seine persönlichen Daten ein und diese werden in die Datenbank geschrieben. Funktioniert soweit.
Nur, kommt es mir eigenartig vor, dass wenn der Benutzer die beiden Pflichtfelder(vorname,nachname) NICHT befüllt, es SQLite trotzdem akzeptiert und keine Fehlermeldung ausspuckt, das die beiden NOT NULL Felder nicht befüllt wurden.
Ich bilde mir ein, SQL müsste da einen Error ausgeben oder ist das Standard, dass er da trotzdem drüberläuft und ich eine extrige Prüfroutine per AS schreiben muss?
Chris_Winters ist offline   Mit Zitat antworten
Alt 18-03-2011, 16:09   #10 (permalink)
Kein Meister
 
Benutzerbild von DabelDirk
 
Registriert seit: Feb 2011
Ort: Zuhause. Näheres auf Anfrage.
Beiträge: 33
Hallo,

Du verstehst das schon richtig! Wenn Felder in der DB "not null" sind MUSS da ein Wert rein und du bekommst einen Datenbankfehler (zb. im error-responder, oder mit catch oder halt zur Laufzeit eine unbehandelte Exception), wenn bei einem Insert so ein Feld kein Wert erhält.

Ich vermute mal, du schreibst da ein Leerstring rein und das ist eben nicht null.
Der Wert von einem Textfeld wenn es leer ist, ist "" - also ein Leerstring (inputText.text = "") und das akzeptiert die Datenbank als "not null".

D.h. Du musst das schon in AS vorher prüfen ob alle Felder mit gültigen Werten gefüllt sind, bevor du das in die Datenbank schreibst.

Greetz

Geändert von DabelDirk (18-03-2011 um 23:50 Uhr)
DabelDirk ist offline   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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Flex und SQLlite problem mirzahat Adobe AIR 8 08-10-2009 10:38
SQLLite gigo Adobe AIR 2 17-02-2008 22:15
Zinc o.ä. und SQLlite? kugelfunk Am Rande 3 09-01-2007 13:08
Arrays mit URL, oder umgekehrt ?! SirGottfried ActionScript 1 5 22-05-2003 06:23
arrays über arrays - aber watt sind überhaupt arrays? ActionScript 1 14 29-01-2002 16:08


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

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


Copyright ©1999 – 2012 Marc Thiele