Zitat von
berndberndbernd5b:
... war was durcheinander ....
Eigentlich ganz einfach. Wenn in einem
SQL-Kommande etwas mit einem Doppelpunkt davor steht wird dies als Parameter interpretiert.
SELECT * FROM tabelle WHERE feld1 = :blubb
Hier ist "blubb" der Parameter. Dieser muss naürlich noch mit einem Wert gefüllt werden. Hierfür kannst Du
ParamByName verwenden um ihn anhant seines Namens zu finden oder mit [
oh]Params[nummer][/
oh] um ihn anhant der Nummer (mit 0 beginnend) zu setzen.
Warum nun der ganze Aufwand?
Einer der vorteile von Parametern ist das Du dich nicht darum kümmern musst das Du etwas im richtigen Format übergibst.
Viele
DBMS wollen das Strings in ' eingeschlossen sind wenn sie in dem
Query stehen.
Also so:
SELECT * FROM tabelle WHERE feld1 = 'meow'
Jetzt kannst Du entweder so etwas machen:
Delphi-Quellcode:
begin
with query do
begin
SQL.Text := '
SELECT * FROM tabelle WHERE feld1 = ' + QuotedStr('
meow');
end;
end;
oder
Delphi-Quellcode:
const
sqltext := '
SELECT * FROM tabelle WHERE feld1 = %s';
begin
with query do
begin
SQL.Text := Format (sqltext,[QuotedStr('
meow')];
end;
end;
oder aber Du arbeitest mit Parametern und überlässt es dem "Treiber" die Daten richtig an die
DB zu übergeben.
Delphi-Quellcode:
begin
with query do
begin
SQL.Text := '
SELECT * FROM tabelle WHERE feld1 = :parameter1';
ParamByName('
parameter1').AsString := '
meow';
end;
end;
Richtig lustig wird es wenn Du ein Datum übergeben möchtest. Dann muss das Datum, wenn Du es als String in das
Query schreibst in dem Format stehen wie es von der Verwendeten
DB verlangt wird. Im Zweiffelsfall kennst Du das Format aber überhaupt nicht. Die Lösung? Ja -> Parameter
Delphi-Quellcode:
begin
with query do
begin
SQL.Text := '
SELECT * FROM tabelle WHERE datumsfeld = :datum';
Params[0].AsDate := date;
// Den ersten Parameter mit dem heutigen Datum füllen.
end;
end;
Egal wie das
DBMS das Datum nun erwartet. Es kommt richtig dort an.
Stephan B.
"Lasst den Gänsen ihre Füßchen"