Entwickler-Ecke

Datenbanken - Delphi, SQL und Rückgabewerte..


pheeos - Mo 15.11.04 22:04
Titel: Delphi, SQL und Rückgabewerte..
Hallo Leute!
Ich hoffe ihr helft auch einem Delphi Newbie ;-)

Ich greife per ODBC auf eine PervasiveSQL DB zu, das klappt soweit.
Nun muss ich herausfinden, welches der maximal Wert einer bestimmten spalte ist,also

Delphi-Quelltext
1:
2:
3:
query := 'SELECT max("001-Kunden_Nr") FROM "001-Kunden"';
tquery.add(query);
tquery.active;


Wie bekomm ich nun das Ergebnis des Querys ausgelesen?
Hatte mal gefunden

Delphi-Quelltext
1:
result := tquery.FieldByName('001-Kunden_Nr').AsString;                    


Das führt bei mir zu einem Fehler..

Hoffe ihr habt nen heissen Tip für mich.

Grüsse,

Michael :)

Moderiert von user profile iconUdontknow: Delphi-Tags hinzugefügt.


jasocul - Di 16.11.04 12:15

Hast du dran gedacht, deine Variable "result" (übrigens: eine schlechte Wahl als Bezeichner) auch als String zu definieren?


UGrohne - Di 16.11.04 12:24

Wenn Du in SQL eine Agregat-Funktion verwendest (z.B. MAX) wird der ursprüngliche Feldname nicht mehr verwendet. Jede Datenbank nennt das Feld in diesem Fall anders. Die bessere Alternative ist, das Feld in SQL manuell selbst zu benennen. Dein Code sieht danach in etwa so aus:

Delphi-Quelltext
1:
2:
3:
4:
query := 'SELECT max("001-Kunden_Nr") as Maxwert FROM "001-Kunden"'
tquery.add(query); 
tquery.active; 
result := tquery.FieldByName('maxwert').AsString;

Das dürfte eigentlich auch bei Pervasive so funktionieren ;-)


jasocul - Di 16.11.04 13:02

Aaaaauuuuaaaa!!!
Das habe ich doch glatt übersehen. :oops:
Verdammt, ist das peinlich.
P.S.: Falls das mit dem "as Maxwert" nicht gehen sollte (sollte aber), dann müsste es so funktionieren:

Delphi-Quelltext
1:
result := tquery.Fields[0].AsString;                    


pheeos - Di 16.11.04 16:28

UGrohne hat folgendes geschrieben:
Wenn Du in SQL eine Agregat-Funktion verwendest (z.B. MAX) wird der ursprüngliche Feldname nicht mehr verwendet. Jede Datenbank nennt das Feld in diesem Fall anders. Die bessere Alternative ist, das Feld in SQL manuell selbst zu benennen. Dein Code sieht danach in etwa so aus:

Delphi-Quelltext
1:
2:
3:
4:
query := 'SELECT max("001-Kunden_Nr") as Maxwert FROM "001-Kunden"'
tquery.add(query); 
tquery.active; 
result := tquery.FieldByName('maxwert').AsString;

Das dürfte eigentlich auch bei Pervasive so funktionieren ;-)



Jo das wars!!
Vielen Dank Leuts! :)