Autor Beitrag
ProggyPeter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 20.11.12 21:21 
Hallo,
wir streiten gerade, was bei einer SQL Abfrage der bessere Programmierstil ist.

1. Der Abfragetext direkt im Quelltext.

ausblenden Delphi-Quelltext
1:
2:
Query.SQL.Text := 'Select * From Table Where ID=:ID';
Query.ParambyName('ID').asinteger := 1;


2. Die Abfrage als Konstante im Quelltext

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Const
 cReadTable = 'Select * From Table Where ID=:ID';
.
.
Query.SQL.Text := cReadTable;
Query.ParambyName('ID').asinteger := 1;


Und dann noch die Variationen.
1. Alle Abfragetexte in einer eigenen Datei (Unit).


2. Parameter über Format

ausblenden Delphi-Quelltext
1:
2:
Query.SQL.Text := Format('Select * From Table Where ID=%d', [1]);;
Query.ParambyName('ID').asinteger := 1;


Oder gibt es noch einen anderen Weg?
Dazu würde mich Eure Meinung interessieren.

Mit Grüßen
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 20.11.12 21:41 
Ich persönlich verwende meistens die erste Methode, wenn die Query nur an einer Stelle im Code benutzt wird. Wird die selbe Query an mehreren Stellen benutzt, dann erstelle ich entweder ne View, ne Procedure oder ne Konstante.

Den Parameter über Format zu übergeben sollte man tunlichst lassen. Bei IDs ist es vielleicht nicht so wild, aber spätestens bei Strings muss man anfangen zu escapen. Und das artet in Arbeit aus und ist sehr fehleranfällig.
Außerdem kann der Datenbankserver bei der Variante mit den Parametern die Query einmal vorbereiten (also parsen) und sie dann n-mal ausführen. Den Aufwand, sie zu parsen hat der Server dann nur einmal. Das hat dann einen erheblichen Geschwindigkeitsvorteil, wenn man die selbe Query oft ausführt (z.B. wenn man Daten importiert).

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)