[GELÖST] Prepared Feldname

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
DasChris
Beiträge: 4
Registriert: So 3. Mai 2015, 01:41

[GELÖST] Prepared Feldname

Beitrag von DasChris »

Hallo Community,

derzeit arbeite ich an einer Software, die Kundendaten aus einer SQLite Tabelle liest. Um es "flexibler" zu halten, kann man auch die Spalte angeben, nach der gesucht werden soll.
Im Quelltext sieht das so aus:

[pascal]
 
function getAllCustomers(aStartLetter : string; aFieldName : string = 'Nachname') : TCustomerArray;
begin
rQuery.SQL.Text := 'SELECT * FROM Kunden WHERE :Feld LIKE :StartLetter;';
rQuery.ParamByName('Feld').AsString := aFieldName;
rQuery.ParamByName('StartLetter').AsString := aStartLetter+'%';
rQuery.Open;
 
// Daten auslesen
 
rQuery.Close;
end;
 
[/pascal]

Das klappt super ... wenn "aStartLetter" leer ist. Hat aStartLetter einen anderen Wert, wird nichts zurückgegeben.
Ersetze ich die erste Abfrage aber hierduch:
[pascal]
 
function getAllCustomers(aStartLetter : string; aFieldName : string = 'Nachname') : TCustomerArray;
begin
rQuery.SQL.Text := 'SELECT * FROM Kunden WHERE '+aFieldName+' LIKE :StartLetter;';
rQuery.ParamByName('StartLetter').AsString := aStartLetter+'%';
rQuery.Open;
 
// Daten auslesen
 
rQuery.Close;
end;
 
[/pascal]
Dann klappt das auch wenn aStartLetter nicht leer ist. Nun frage ich mich, woran das liegt.
Könntet ihr mir sagen, warum das so ist? Nach meinem Verständnis, sollte :Feld durch den Inhalt von aFieldName ersetzt werden.

Schöne Grüße
Das Chris
Zuletzt geändert von DasChris am Mo 13. Jul 2015, 09:15, insgesamt 1-mal geändert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Prepared Feldname

Beitrag von mse »

Wird es auch, allerdings wird der Parameterwert von :Feld nicht als Feldnamen sondern als Textkonstante interpretiert.

DasChris
Beiträge: 4
Registriert: So 3. Mai 2015, 01:41

Re: Prepared Feldname

Beitrag von DasChris »

Hallo mse,

danke für deine Antwort (und sorry für meine späte Reaktion). Das erkärt warum es nicht funktioniert hat. Und auch warum es bei einem leeren Wert trotzdem funktioniert hat.
Ich habe das nun so gelöst, dass ich den Feldnamen manuell prüfe bevor ich irgendwas zulasse.

Schönen Gruß
Das Chris

Antworten