Das kann in dieser Form auch gar nicht funktionieren. Die Eigenschaft SQL einer Query ist eine Stringliste. Die Funktion TStringlist.Add gibt die Position des neuen Eintrages in der Liste zurück. Beim ersten Eintrag ist diese
0.
Eine Query kann überhaupt erst ,nach dem sie ausgeführt wurde, ein Ergebnis ausgeben. Als nächstes schau Dir mal die Delphi-Hilfe zu Exec-SQL an. Dort steht, für welche Zwecke dieser Befehl geeignet ist. Zum Ausführen von Select-Anweisungen ist er es definitiv nicht
Eine korrekte Lösung sieht z.B. so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function Datensaetze_zaehlen:integer; begin with Kundenformularfenster do begin Query1.SQL.Clear; Query1.SQL.Add('SELECT COUNT(DISTINCT Kundennummer) AS Anzahl FROM "' + dirkunden + '\Kunden.DB"'); Query1.Open; result := Query1.Fields[0].AsInteger; Query1.Close; end; end; |
Ich gebe berechneten Feldern im Übrigen grundsätzlich Namen (mit AS Name), falls ich eine Funktion ausbaue und nochmal auf diesen Wert zugreifen muss. Alternativ könnte man im obigen Beispiel auf das Ergebnis mit
Query1.FieldByName('Anzahl').AsInteger zugreifen.