Thema: Delphi Query mit Primary Key

Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Query mit Primary Key

  Alt 5. Nov 2005, 11:21
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 Delphi-Referenz durchsuchenParamByName 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"
  Mit Zitat antworten Zitat