Autor Beitrag
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Di 11.09.12 05:04 
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:

ausblenden 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.

ausblenden 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.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.