AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Konstante in Klasse?

Ein Thema von p80286 · begonnen am 6. Feb 2017 · letzter Beitrag vom 7. Feb 2017
 
nahpets
(Gast)

n/a Beiträge
 
#12

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
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz