Einzelnen Beitrag anzeigen

Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Ähnliche Funktionen von Klassen - Implementierung?

  Alt 15. Jul 2010, 17:43
Hmmm, also hier mal der Aufbau einer der Tabellen (auf die wichtigsten Felder gekürzt=, damit es klarer wird:

Code:
CREATE TABLE TAB_TAGE (
  ID INTEGER NOT NULL,
  DATUM DATE NOT NULL,
  FEIERTAG SMALLINT DEFAULT 0 NOT NULL,
  FARBEBEREITSCHAFT INTEGER,
  FARBENOTARZT INTEGER,
  FARBERUFDIENST INTEGER);
Erklärung (wie gesagt, ist nur ein Beispiel!). Bei dieser Tabelle handelt es sich letztlich um nichts anderes als ein Monatskalendar. Nun gibt es - wie gesagt - 3 Dienstarten. Diesen kann der Benutzer im Kalendar zur Markierung eine Hintergrundfarbe verpassen. Diese Farbe wird in dieser Tabelle hinterlegt (Ein Tag = 1 Zeile). Die eigentlichen Dienste werden in einer separaten Tabelle über einen FK gespeichert (zwecks Normalisierung). Möchte ich nun EINE Klasse haben, um die jeweilige Hintergrundfarbe auszulesen, hätte ich ja - bei JEDER Abfrage, welche sich auf dienstspezifische Felder bezieht - folgendes oder ähnliches Konstrukt:

Delphi-Quellcode:
  case DienstTyp of
    1 : FeldName := 'FARBEBEREITSCHAFT';
    2 : FeldName := 'FARBERUFDIENST';
    3 : FeldName := 'FARBENOTARZT';
  end;

  FQuery.SQL.Clear;
  FQuery.SQL.Add('UPDATE tab_tage');
  FQuery.SQL.Add('SET %FeldName% = :FARBE');
  FQuery.SQL.Add('WHERE id = :DBID;');
  FQuery.SQL.Text := StringReplace(FQuery.SQL.Text, '%FeldName%', FeldName, []);
Teile ich es jedoch in 3 Klassen auf, kann ich mir die CASE-Abfrage sparen (hier exemplarisch für Dienst 2), hätte aber wegen der abstrakten Methoden in der Basisklasse haufenweise redundanten Quellcode:

Delphi-Quellcode:
  FQuery.SQL.Clear;
  FQuery.SQL.Add('UPDATE tab_tage');
  FQuery.SQL.Add('SET FARBERUFDIENST = :FARBE');
  FQuery.SQL.Add('WHERE id = :DBID;');
P.S.: Ich denke nicht, dass es in diesem Fall sinnvoll ist, eine weitere Tabelle für die 3 Farben zu erstellen und über einen FK zu referenzieren, oder?!?
Michael Kübler

Geändert von scrat1979 (15. Jul 2010 um 17:47 Uhr)
  Mit Zitat antworten Zitat