Entwickler-Ecke

Datenbanken - Steuerung der Felderbelegung durch die TAG-property


Tranx - Di 11.09.12 05:04
Titel: Steuerung der Felderbelegung durch die TAG-property
Hallo,

ich habe folgendes Problem und habe dafür eine Lösung gefunden, von der ich mal Eure Meinung erfragfen möchte:

Es sollen bestimmte Felder einer Datenbank nur bei einem neuen Datensatz nach einer automatischen Berechnung belegt werden.
Wenn jedoch neue Datensätze erzeugt werden, die aus Vorgabedaten bestehen, sollen ebenfalls die Felder nicht automatisch, sondern manuell belegt werden.

Ich habe dafür folgende Lösung gefunden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// Nutzen des Before-Post-Ereignisses von TDataset

  procedure dm.BeforePost(Dataset : TDataset);

  begin 
    with Dataset do
    begin
      if (Tag = 0and (state = dsInsert) then 
      begin
// hier erfolgen dann die automatischen Belegungen der Felder
        FieldByName(Feld1).AsInteger := Berechnung(Bedingung(Inhalt_von_Feld2)); //automatische Berechnung des Feldinhalts von Feld1 in Abhängigkeit des Feldinhalts des Feldes 2)
      end;  
        end;
   end;


Wenn ich nun aus Vorgabewerden Datensätze generiere, setze ich vor der Prozedur die property TAG des TDataset auf 1, so dass obige automatische Berechnung niocht erfolgt. Bei nicht Eintragen eines neuen Datensatzes, sondern bloß Änderung eines bestehenden erfolgt ebenfalls keine neue Berechnung.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  try
    Dataset.Tag := 1;
    Lade_Vorgabedaten;
  finally
    Dataset.Tag := 0;
  end;


Ich weiß zwar, dass das bloß eine Krücke ist, aber normalerweise ist ja TAG mit 0 voreingestellt. Das muss man selber anders einstellen, wenn man ein anderes Verhalten wünscht. Vielleicht gibt es ja eine elegantere Variante. Habt Ihr da eine Idee?

Im Voraus danke für Eure Bemühungen.

Gunther


Narses - Di 11.09.12 09:44

Moin!

Du arbeitest nicht wirklich immer noch produktiv mit der BDE? :shock: :gruebel: Also mehr als "Grabpflege" meine ich... :?

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Ich weiß zwar, dass das bloß eine Krücke ist, aber normalerweise ist ja TAG mit 0 voreingestellt. Das muss man selber anders einstellen, wenn man ein anderes Verhalten wünscht. Vielleicht gibt es ja eine elegantere Variante. Habt Ihr da eine Idee?
Wie wäre es mit BDE weglassen? *duckweg* :zwinker:

Jetzt aber im Ernst: Klasse ableiten und deine Änderungen als Eigenschaft/Ereignis implementieren, statt vorhandene Eigenschaften zu "missbrauchen" (naja, nicht wirklich missbrauchen, aber zumindest "unerwartet umfunktionieren"). :nixweiss:

Allerdings: wenn du das sowieso nur in deinen Anwendungen so umsetzt, wen interessiert´s dann? :lupe:

cu
Narses