Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.396 Beiträge
 
Delphi 12 Athens
 
#2

AW: Generelles zu SQL Queries

  Alt 4. Jan 2025, 12:00
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]

Miniaturansicht angehängter Grafiken
files.png   black.png  

Geändert von haentschman ( 4. Jan 2025 um 12:43 Uhr)
  Mit Zitat antworten Zitat