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:
| procedure dm.BeforePost(Dataset : TDataset);
begin with Dataset do begin if (Tag = 0) and (state = dsInsert) then begin FieldByName(Feld1).AsInteger := Berechnung(Bedingung(Inhalt_von_Feld2)); 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
Toleranz ist eine Grundvoraussetzung für das Leben.