[GELÖST] Prepared Feldname

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

[GELÖST] Prepared Feldname

Beitragvon DasChris » 9. Jul 2015, 11:22 [GELÖST] Prepared Feldname

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:

Code: Alles auswählen
 
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;
 


Das klappt super ... wenn "aStartLetter" leer ist. Hat aStartLetter einen anderen Wert, wird nichts zurückgegeben.
Ersetze ich die erste Abfrage aber hierduch:
Code: Alles auswählen
 
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;
 

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 13. Jul 2015, 08:15, insgesamt 1-mal geändert.
DasChris
 
Beiträge: 4
Registriert: 3. Mai 2015, 00:41

Beitragvon mse » 9. Jul 2015, 17:39 Re: Prepared Feldname

Wird es auch, allerdings wird der Parameterwert von :Feld nicht als Feldnamen sondern als Textkonstante interpretiert.
mse
 
Beiträge: 1900
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon DasChris » 13. Jul 2015, 08:15 Re: Prepared Feldname

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
DasChris
 
Beiträge: 4
Registriert: 3. Mai 2015, 00:41

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried