![]() |
Datenbank: SQLite • Version: 3.2.2 • Zugriff über: UniDAC
SQLite Abfragen
Hi,
folgendes Problem, ich will eine Abfrage auf die Datenbank machen und mir die ausgelesenen Werte in eine StringList schreiben. Code sieht folgendermaßen aus:
Delphi-Quellcode:
In Value steht allerdings nichts drin, wie komme ich nun an die Werte der Abfrage? Bei einer Anderen Abfrage bin ich über .Filds[0].Value an den Wert gekommen. Das das mit dem Fileds.Count wohl nicht richtig funktioniert ist mir klar, aber wie komme ich nun an die Werte? Über Fields[1] komme ich auch nicht ran
UniQuery1.SQL.Clear;
UniQuery1.SQL.Add('SELECT ABPfad FROM tblArchivierbar ' +'GROUP BY PRNr HAVING ABArchivierbar = 1;'); UniQuery1.Execute; for i := 0 to UniQuery1.Fields.Count-1 do begin HelpList.Add(fMain.UniQuery1.Fields[0].Value[i]); end; Bitte helft mir! Gruß AnyKey |
Re: SQLite Abfragen
Hallo,
Du darfst die SQL-Abfrage nicht mit Execute ausführen - dann läuft es einmal und liefert danach aber keine Resultate. Query.Execute nutzt man im Allgemeinen für Delete bzw. Update-Statements. Für Result-Sets taugen sie nicht. Nutze statt dessen
Delphi-Quellcode:
Query.Open
while Not Query.EOF // Hier adden Query.Next; end; Query.Close |
Re: SQLite Abfragen
Also ich habs jetzt mal so umgebaut:
Delphi-Quellcode:
Funktioniert aber leider immer noch nicht... An der Stelle an der ich in die Stringlist schreiben möchte bekomme ich eine Fehlermeldung: Listenindex überschreitet das Maximum.
UniQuery1.Open;
UniQuery1.SQL.Clear; UniQuery1.SQL.Add('SELECT ABPfad FROM tblArchivierbar ' +'GROUP BY PRNr HAVING ABArchivierbar = 1;'); for i := 0 to RowsInDB do begin HelpList.Add(UniQuery1.Fields[0].Value); UniQuery1.Next; end; RowsInDB ist einfach nur die Anzahl der Zeilen in der Datenbank, die ich mir vorher über ein Select auslese, dort steht dann auch die Zahl der Zeilen drin, hab ich durchs Debugen nachgeprüft. Wo kann mein Fehler liegen? Gruß AnyKey |
Re: SQLite Abfragen
Hi,
probier mal:
Delphi-Quellcode:
Viele Grüße ...
UniQuery1.SQL.Clear;
UniQuery1.SQL.Add('SELECT ABPfad FROM tblArchivierbar ' +'GROUP BY PRNr HAVING ABArchivierbar = 1;'); UniQuery1.Open; while not UniQuery1.eof do begin HelpList.Add(UniQuery1.FieldByName['ABPfad'].AsString); UniQuery1.Next; end; |
Re: SQLite Abfragen
Naja richtig funktionieren tut es noch nicht. Außer einer von euch hat noch eine Idee wie man so eine Abfrage machen kann:
SQL-Code:
Das funktioniert bei mir mal garnicht, aber so eine Abfrage bräuchte ich.
SELECT COUNT(ID)
FROM Tabelle GROUP BY Fremdschlüssel HAVING JaNein = true Ich habe da noch eine Andere Frage, hat zwar nicht viel hiermit zu tun, wäre aber zu simpel sie wo anders noch mal zu stellen, wie kann ich in einem dynamisch erzeugten DBGrid die Spaltenbreite auf Autosize stellen? Im Moment sehen die Spalten noch irgendwie doof aus. Danke für eure Hilfe! Edit: Wäre super wenn mal kurz jemand helfen könnte! Gruß AnyKey |
Re: SQLite Abfragen
JaNein scheint auch kein Aggegat zu sein
SQL-Code:
oder
SELECT COUNT(ID)
FROM Tabelle GROUP BY Fremdschlüssel WHERE JaNein = true;
SQL-Code:
SELECT SUM(IIF(JaNein = true, 1, 0))
FROM Tabelle GROUP BY Fremdschlüssel; |
Re: SQLite Abfragen
Wie ich das DBGrid anpassen muss weiß nicht zufällig einer oder?
Gruß AnyKey |
Re: SQLite Abfragen
Ich hab's bei einem anderen Grid so gelöst, daß ich die max. Länge der eingefügten Strings gesucht habe und dementsprechend die Breite der Zellen nachgerichtet habe.
Gruß K-H |
Re: SQLite Abfragen
Und wie kommt man im Code an die Spaltengöße? Welche Eigenschaft ist das? Ich nehme mal an DBGrid.Columns oder? nur wie gehts dann danach weiter?
Besser wäre es halt sie auf Autosize zu stellen... Gruß AnyKey |
Re: SQLite Abfragen
AutoSize gibt es aber nicht. Du musst schon den jeweils längsten Eintrag ermitteln (LEN, LENGTH, CHAR_LEN, schau mal in die Doku zu Deinem DBMS) und die Spaltenbreite dann mittels Canvas.TextWidth errechnen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz