Hallöle...
Zitat:
ich wollte mal gerne von euch Profis wissen, wie ihr es generell mit den
SQL-Abfragen handhabt.
...da gibt es einige Methoden. Je nach Anwendungsfall...
[meine Meinung]
1.
- Die Datenbank wechseln ...
Access
(
Access ist bekannt dafür, das der "
SQL Standard" nicht immer funktioniert)
- Kostenlose Variante: ZEOS mit Firebird (Embedded und Server...klein aber fein)
2.
- Persönlich speichere ich meine
SQL Statements als Dateien in einem Ordner.
- Die
SQL werden als Ressource, wie Text, eincompiliert.
https://www.delphipraxis.net/49505-s...einbinden.html
Vorteile:
- keine
SQL Add Orgien bei Eingabe im Quelltext (Add nur beim Zusammenbauen)
- Die
SQL Statements sind besser testbar, weil normaler Text, statt in der
DFM als Strings.
-
SQL Statements können "zusammengebaut werden".
- Mehrfachverwendung einzelner
SQL in verschieden Projekten durch Datei basierte Ablage
- Unterstützung von verschiedenen Datenbanken mit unterschiedlichen
SQL "Dialekten" über separate Units oder Interfaces (nebeneinanderlegen der
SQL bei verschieden
DBMS - Vergleich)
Beispiel: Firebird kennt "returning"
MSSQL macht das anders...
- einfacher Wechsel der Zugriffskomponenten, weil unabängig vom
SQL (nicht in
DPR verankert)
- Die
SQL Dateien liegen in der Versionsverwaltung und können unabhängig vom Quelltext von einem Datenbankprofi geändert werden.
Beispiel
SQL:
Delphi-Quellcode:
function TDatabase_FB.GetSQLByName(SQLName:
string):
string;
var
SQLStream: TResourceStream;
SQLStrings: TStringList;
begin
Result := '
';
SQLStrings := TStringList.Create;
try
SQLStream := TResourceStream.Create(HInstance, SQLName, PWideChar(conDatabaseResourceGroupString[FDatabaseProperties.DBMS]));
try
try
SQLStrings.LoadFromStream(SQLStream);
Result := TTools.Decrypt(SQLStrings.Text, conKey);
except
Result := '
';
end;
finally
SQLStream.Free;
end;
finally
SQLStrings.Free;
end;
end;
...
function TDatabase_FB.CreateQuery: TUniQuery;
begin
Result := TUniQuery.Create(
nil);
Result.Connection := FConnection;
end;
...
var
Query: TUniQuery;
begin
Query := CreateQuery;
try
Query.SQL.Text := GetSQLByName('
CLI_PLANT_SCHEME');
Query.ParamByName('
PID').AsInteger := PlantID;
Query.Open;
while not Query.Eof
do
begin
-
https://www.delphipraxis.net/190316-...e-creator.html
-
https://www.delphipraxis.net/49505-s...einbinden.html
Grundsätzlich:
Delphi-Quellcode:
MyQuery.Close; // nicht immer nötig
MyQuery.SQL.Clear; // nicht nötig, weil ".Text" das automatisch macht
MyQuery.SQL.Text := 'SELECT 'Select * from Table''; // falsch "select * from Table" oder mit Parameter "select FeldName from Table where SearchField = :PAR"
MyQuery.ParamByName('PAR').AsString := 'Bla'; // immer Parameter verwenden wenn gebraucht
MyQuery.Open;
[meine Meinung]