AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQLite Abfragen

Ein Thema von AnyKey · begonnen am 19. Apr 2010 · letzter Beitrag vom 19. Apr 2010
Antwort Antwort
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#1

SQLite Abfragen

  Alt 19. Apr 2010, 09:20
Datenbank: SQLite • Version: 3.2.2 • Zugriff über: UniDAC
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:
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;
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

Bitte helft mir!

Gruß
AnyKey
  Mit Zitat antworten Zitat
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQLite Abfragen

  Alt 19. Apr 2010, 09:24
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
Carsten
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#3

Re: SQLite Abfragen

  Alt 19. Apr 2010, 09:48
Also ich habs jetzt mal so umgebaut:

Delphi-Quellcode:
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;
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.
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
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#4

Re: SQLite Abfragen

  Alt 19. Apr 2010, 10:19
Hi,

probier mal:
Delphi-Quellcode:
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;
Viele Grüße ...

  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#5

Re: SQLite Abfragen

  Alt 19. Apr 2010, 11:59
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:
SELECT COUNT(ID)
FROM Tabelle
GROUP BY Fremdschlüssel
HAVING JaNein = true
Das funktioniert bei mir mal garnicht, aber so eine Abfrage bräuchte ich.

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SQLite Abfragen

  Alt 19. Apr 2010, 13:00
JaNein scheint auch kein Aggegat zu sein
SQL-Code:
SELECT COUNT(ID)
FROM Tabelle
GROUP BY Fremdschlüssel
WHERE JaNein = true;
oder
SQL-Code:
SELECT SUM(IIF(JaNein = true, 1, 0))
FROM Tabelle
GROUP BY Fremdschlüssel;
Markus Kinzler
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#7

Re: SQLite Abfragen

  Alt 19. Apr 2010, 14:55
Wie ich das DBGrid anpassen muss weiß nicht zufällig einer oder?

Gruß
AnyKey
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

Re: SQLite Abfragen

  Alt 19. Apr 2010, 15:05
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#9

Re: SQLite Abfragen

  Alt 19. Apr 2010, 15:16
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: SQLite Abfragen

  Alt 19. Apr 2010, 15:26
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz