Fieldname oder -caption finden?!

21. März 2007 09:43

Guten Morgen,

hier direkt mal was kniffliges:

Hat jemand von euch eine Idee wie ich in einem Trigger Namen oder caption des dazugehörigen Feldes bekomme?

D.H. ich suche eine Möglichkeit meinen Funktionsaufruf allgemein zu halten.

Hier mein Code im OnValidate-Trigger:

ProtokollDaten(TABLENAME,"Nr.",FIELDNAME(VKPreis),
FORMAT(xRec.VKPreis),FORMAT(VKPreis));


Die Zeile übergibt einige Werte bei validate des Feldes an eine Funktion.

Problem dabei ist, dass ich so beim Kopieren der Zeile in andere Felder jedesmal auch den Code bearbeiten muß. Optimal wäre etwas allgemeines ähnlich wie "Tablename", aber leider scheinen "Fieldname" oder "Fieldcaption" nur mit Feldzuweisung zu laufen.

Ich hoffe, ihr habt noch ´n Tip was ich versuchen könnte. Danke.

21. März 2007 10:41

Evtl kannst du mit Fieldref was reißen, da kenne ich mich aber nicht so aus.
Die Nummer des aktuellen Feldes, von dem die ganze Validierung gestartet wurde, bekommst du auf jeden Fall mit der Funktion CurrFieldNo
Wenn Du damit die Änderungen der Tabelle protokollieren willst, warum verwendest du dann nicht das Änderungsprotokoll? oder gibts das in Nav1-2 noch nicht?

21. März 2007 10:46

Hi Michael,

das ist die Lösung!!!

Zusammen mit dem was ich gerade beim Stöbern durch Zufall über die Tabelle "Field" gelesen hab und dein Hinweis auf "CurrFieldNo" werde ich das sicher umsetzen können.

Ich meld mich, sobald ich ´ne Lösung präsentieren kann.

Vielen Dank. Bis später.

21. März 2007 10:53

wie erwähnt, wenn der Validate z.B. des Feldes Preis durch eine Änderung des Feldes Menge verursacht wurde, bekommst du mit Currfieldno auch im OnValidate des Feldes Preis die Nummer des Feldes Menge!
und wenn änderungen aus dem Validate Trigger direkt ohne Validate durchgeführt werden, wie z.B. im onValidate des Feldes Menge:
Code:
preis:=menge * Einzelpreis;

dann bekommst du die Änderung des Preises gar nicht mit in deiner Protokollfunktion.
Besser ist es, du nutzt den OnModify-Trigger der Tabelle und prüfst dort mit einer Zählschleife mit Fieldref die Änderungen der einzelnen Felder, dann musst du die ganze Funktion auch nur einmal schreiben.

21. März 2007 11:03

Leider hab ich Fieldref nicht, soweit ich weiß. Scheint wohl bei 2.6 nicht vorhanden zu sein.

Sonst wäre das klar die bessere Alternative, da hast du recht.

21. März 2007 11:22

Dune hat geschrieben:Leider hab ich Fieldref nicht, soweit ich weiß. Scheint wohl bei 2.6 nicht vorhanden zu sein.


RecordRef und FieldRef sind erst mit der Version 3.60 gekommen.

Gruß, Marc

21. März 2007 11:24

Dune hat geschrieben:Leider hab ich Fieldref nicht, soweit ich weiß. Scheint wohl bei 2.6 nicht vorhanden zu sein.


Das ist richtig, diese Funktionen gibt es erst ab Version 3.x (ich glaube 3.6 oder 3.7, bin da aber nicht ganz sicher).

Ein technisches Upgrade würde dir aber diese Funktionen ebenfalls bringen.

21. März 2007 11:25

Michael Schumacher hat geschrieben:Wenn Du damit die Änderungen der Tabelle protokollieren willst, warum verwendest du dann nicht das Änderungsprotokoll? oder gibts das in Nav1-2 noch nicht?

Auch das Änderungsprotokoll gibt es erst mit der Version 3.60.

Gruß, Marc

21. März 2007 11:41

Ok, soweit so gut:

Über die Tabelle Field und die CurrFieldNo hab ich jetzt den Namen des Feldes. Natürlich ist dieser Name jetzt in einem String. Um damit aber was anfangen zu können, muß ich daraus jetzt eine Feldzuweisung machen.

fieldname(MeinFeldName);

MeinFeldName sieht so aus: 'VKPreis', soll aber so aussehen: "VKPreis".

Hat jemand vielleicht auch dafür eine Idee?

21. März 2007 11:51

Das geht nur mit den Funktionen RecordRef und FieldRef die, wie beschrieben, erst ab Version 3.6 zur Verfügung stehen.

Wenn du das mit den Mitteln der Version 2.xx machen willst, musst du das ausprogrammieren im Sinne von:

Code:
CASE FieldNo of
  1: Zuweisung
  2: Zuweisung
END
;


usw.

21. März 2007 12:05

Das gibt´s doch nicht! Wie grausam ist das denn?! :-)

Ok, einen Strohhalm hab ich noch und daran halte ich fest:
Kann ich ein Feld auch über die Feldnummer ansprechen, sodass mir als Ergebnis der Wert des Feldes angezeigt wird?

21. März 2007 12:19

Das geht nur mit Fieldref

21. März 2007 12:25

Dune hat geschrieben:Kann ich ein Feld auch über die Feldnummer ansprechen, sodass mir als Ergebnis der Wert des Feldes angezeigt wird?

Mit deiner Version leider nicht.

Gruß, Marc