Thema: Delphi Konstante in Klasse?

Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#13

AW: Konstante in Klasse?

  Alt 6. Feb 2017, 17:15
'ne andere Idee:

Warum die SQLs als Konstanten ... vorhalten?

Einfach eine Tabelle in der Datenbank anlegen, die die SQL-Statements enthält. Jedes Statement bekommt 'ne ID, 'ne Beschreibung und natürlich das eigentliche SQL.

SQL-Code:
create table SQLStatements(
id Integer,
Beschreibung VarChar(200),
Statement VarChar(4096) /* oder Memo oder Textblob je nach Datenbank */
);

create unique index ID on SQLStatements (ID);
Delphi-Quellcode:
function dm.GetSQL(ID : Integer) : String;
begin
  // Das einzige festverdrahtete Statement im Programm:
  qrySQLs.SQL.Text := Format('select Statement from SQLStatements where id = %d',[id]);
  qrySQLs.Open;
  Result := qrySQLs.Fields[0].AsString;
  qrySQLs.Close;
end;
oder:
Delphi-Quellcode:
const
  // Das einzige festverdrahtete Statement im Programm:
  csSQL = 'select Statement from SQLStatements where id = :id';

function dm.GetSQL(ID : Integer) : String;
begin
  qrySQLs.SQL.Text := csSQL;
  qrySQLs.Parameters('ID').Value := id;
  qrySQLs.Open;
  Result := qrySQLs.Fields[0].AsString;
  qrySQLs.Close;
end;
Irgendwo im Programm dann in etwa sowas:
Delphi-Quellcode:
procedure dm.HoleKundenDaten(KundenID : Integer);
begin
  qry.Close;
  qry.SQL.Text := GetSQL(1); // das SQL für die Kundendaten habe hier mal die ID 1.
  LabelSQLStatement.Caption := qry.SQL.Text; // Zum Angucken.
  Screen.Cursor := csSQLWait;
  qry.Open;

  ...

  qry.Close;
  Screen.Cursor := csDefault;
end;
Wenn man die SQLs in der Datenbank mit Parametern versieht, kann man sie in den Routinen gut mit Werten befüllen.

Weiterer Vorteil: Muss man mal die Datenbank wechseln, so kann man einfach die Statements in der Tabelle anpassen und muss nichts im Programm ändern.

Beim Wechsel von Access nach FireBird würde man dann z. B. aus dem Statement
select top 10 * from Tabelle select first 10 * from Tabelle machen. Das ist für's Programm selbst absolut transparent und spart auf Dauer viel Arbeit.

Hat man so auch SQLs für diverse Reports in der Tabelle liegen, kann man Reports auch anpassen, indem man nur das entsprechende Statement in der Tabelle ändert. Ist das Programm entsprechend flexibel aufgebaut, sind in ihm keinerlei Änderungen erforderlich.

Mit ein bisserl Aufwand läßt sich sowas wunderbar in 'nem Datenmodul kapseln (oder auch in 'ner entsprechenden Klasse).

Man baue eine Basisklasse und leitet von der dann Fachobjekte ab, die für die Befüllung der Parameter, entsprechend ihrer Eigenschaften zuständig sind ...
  Mit Zitat antworten Zitat