SQL Query liefert mehrere ergebnisse zurück?
-
Hallo, habe ein Problem. Ich arbeite mit der SQLITE Embeded Datenbank und der Komponente Aducom SQLite3. Leider finde ich keine richtige Dolumentatation. Und daher weiß ich nicht wie ich die einzelnen werte auslese wenn ein Query mehrere ergebnisse zurückliefert, zb:
ASQLite3Query1->Close();
ASQLite3Query1->SQL->Clear();
ASQLite3Query1->SQL->Add("SELECT * FROM 'member'");
ASQLite3Query1->Open();
Memo1->Text = ASQLite3Query1->FieldByName("name")->AsString;Dann schreibt er den ersten Datensatz hinein, aber wie komme ich an die anderen?
Gruß
Scuby
-
ne schleife drumrum?
while(!ASQLite3Query1->Eof){ //oder so ähnlich.. Memo1->Text = ASQLite3Query1->FieldByName("name")->AsString; ASQLite3Query1->Next(); }
-
oder
for (ASQLite3Query1->First();!ASQLite3Query1->Eof;ASQLite3Query1->Next()) { Memo1->Lines->Add(ASQLite3Query1->FieldByName("name")->AsString); }
-
Vielen Dank, habe es hinbekommen. Nun gibt es aber schonwieder ein problem:
ASQLite3Query1->Close(); ASQLite3Query1->SQL->Clear(); ASQLite3Query1->SQL->Add("SELECT * FROM 'stats'"); ASQLite3Query1->Open(); while(!ASQLite3Query1->Eof) { ComboBox1->Items->Add(ASQLite3Query1->FieldByName("date")->AsString); ASQLite3Query1->Next(); }
gibt mir einen fehler zurück:
...is not a valid date and time
Er kann wohl das datum das ich in der DB als Datenty date gespeichert habe nicht umwandeln, wie bekomme ich das hin?
vielen dank schonmal!
-
Hallo
versuchs mal mit
AsDateTime statt mit AsString
Mfg
Klaus
-
Hi, bringt auch nix, problem is nach Stundenlanger analyse wohl das SQLite das datum im Format
DD-MM-YYYY
speichert, Borland aber nur mit
DD.MM.YYYY
Klarkommt. Jemand eine Idee wie ich das umgehen kann? Weil ich müsste es schon als Datum speichern, ansonsten werden die abfragen komplizierter
danke schonmal
Scuby
-
Sry das ich nachhake, aber komme da echt nicht weiter...hab schon mit allen möglichen befehlen die ich in Borland oder hier im Forum gefunden habe rumhantiert aber nix bringt mich weiter
gruß
Scub
-
Liegt vermutlich an Deinen Windows-Einstellungen für das Datumsformat.
Schau Dir mal StrToDate() an, da erfährst Du etwas mehr darüber.Weitere Denkanstöße:
- DataType des Feldes mal anschauen, um sicherzustellen, dass der Typ richtig "ankommt"
- Versuchen, das Datumsformat auf der Datenbank zu ändern
- Im Select-Statement das Datum in einen String umwandeln
- Die TField-Instanz im Debugger genauer untersuchenGruß
Alexander
-
Ok, vielen dank für die Hilfe.
Also in der Datenbank ist das feld vom Typ DATE. Dort kann man es auch in kein anderes Format bringen (ja.....ich weiß.....alles geht....irgendwie...aber ich kann nicht^^
)
Am sinnvolsten ercheint mir die ausgabe im Select umzuwandeln, andersherum könnte ich das ja später in die anderes Richtung genausomachen, also vo, Programm in die DB z.b bei einem INSERT.
Hättest du vll noch einen kleinen denkanstoß wonach ich googlen muss um es im Select zu ändern? Habe in SQL leider nur Grundkentnisse also einfache Select, Update, und Insert befehle aus meinen PHP Arbeiten.
vielen dank, damit bringst du mich jedenfalls schonmal ein großes stück weiter
gruß
Scuby
-
Hallo
Scuby schrieb:
Vielen Dank, habe es hinbekommen. Nun gibt es aber schonwieder ein problem:
ASQLite3Query1->Close(); ASQLite3Query1->SQL->Clear(); ASQLite3Query1->SQL->Add("SELECT * FROM 'stats'"); ASQLite3Query1->Open(); while(!ASQLite3Query1->Eof) { ComboBox1->Items->Add(ASQLite3Query1->FieldByName("date")->AsString); ASQLite3Query1->Next(); }
gibt mir einen fehler zurück:
...is not a valid date and time
Er kann wohl das datum das ich in der DB als Datenty date gespeichert habe nicht umwandeln, wie bekomme ich das hin?
vielen dank schonmal!
Ich sehe überhaupt nicht wo das Problem liegt. Bei diesem Code spielt es doch gar keine Rolle was für Datumsformat hat, ja nicht mal ob es überhaupt ein Datum ist. Alles was du im Codeauszug machst ist Strings verarbeiten, nichts Datumspezifisches. Das SQL immmer im Format JJJJ-MM-DD arbeitet ist richtig und auch notwendig. Wenn du die Datumsangabe dann entsprechend des Landesformates ausgeben willst must du nur die bereits angesprochene AsDateTime-Eigenschaft benutzen.
Das einzige Problem mit AsDateTime dürften NULL-Werte in der Tabelle sein. Je nach Datenbankmodul-Implementation ist dann verschiedenes Verhalten möglich, zum Beispiel auch so eine Exception. Da must du dann eben doch manuell konvertieren, mit StrToDateTime o.ä.bis bald
akari
-
hi,
ja so habe ich es auch gedacht, aber warum gibt er dann den Fehler aus?
Kannst ja auch mal ne DB Anlegen mit nem Feld vom Typ Date, wenn es kein problem gäbe wäre ich nicht hier^^
-
Hi,
habe es nun anders gelöst. Anstelle des Typs Date benutze ich einfach ein INT Feld und schreibe die Unix Timestamp rein, ist dogar noch genauer^^. Gibt in Borland ja genug funktionen um dann damit zu arbeiten. Trotzdem vielen dank für eure Hilfe, echt ein Top Forum hier
gruß
Scuby