Dynamischer Zugriff auf Tabelleninhalt

2. Mai 2007 17:41

Hallo,
wer weiß denn, wie man in Navision zur Laufzeit auf den Inhalt eines Tabellen-Feldes zugreifen kann, wenn man den Tabellen-ID und FeldNo hat?

Ich habe also eine Tabelle myTablesAndFields. In diese Tabelle besteht aus den Spalten "TableID" und "FieldNo", die beispielsweise folgenden Eintrag beinhalten:
"TableID" := 17
"FieldNo" := 1

In der Tabelle 17 habe ich eine Funktion myFunction. Diese Funktion schaut zur Laufzeit in der Tabelle myTablesAndFields nach und ermittelt "FieldNo" := 1
Jetzt möchte ich zur Laufzeit auf den Inhalt des dort angegebenen Feldes zugreifen.

weiß jemand wie das geht?

Grüße
Shah

2. Mai 2007 18:08

Hallo,

dazu gibt es die Variablen-Typen RecordRef und FieldRef. Schau dir zu diesen Punkten mal die Hilfe an.

Hier ein kurzes Beispiel für den ersten Versuch, das in einer Funktion die Caption und den Inhalt des ersten gefundenen Datensatzes in der übergebenen Tabellennummer aus dem Feld der übergebenen Feldnummer in einer Message ausgibt (Ja, es gibt bestimmt bessere Beispiele! :roll: ):

Code:
ShowFieldValue(ForRecNo : Integer;ForFieldNo : Integer)

RRef.OPEN(ForRecNo);
IF RRef.FIND('-') THEN BEGIN
  FRef := RRef.FIELD(ForFieldNo);
  Message('Feld %1 hat Wert %2', FRef.CAPTION, FRef.VALUE);
END;


Gruß
Frank

3. Mai 2007 10:53

Hi,
sehr schön... das ist genau das was ich brauche...
kannst du mir noch sagen wie ich die aktuelle RecNo vom Rec ermitteln kann?

Ich befinde mich nämlich im OnDelete Trigger meiner Tabelle und möchte also RRef.OPEN(Rec) ausführen. Das geht aber nicht, weil RRef.OPEN einen Integer, also die Nummer des aktuellen Datensatzes möchte. So habe ich das zumindest verstanden !?!

Vielen Dank und Grüße
Shah

3. Mai 2007 10:58

Hallo,

wenn du einen Record hast, kannst Du den RecordRef von diesem Ableiten. Dazu verwendest Du:

Code:
RRef.GETTABLE(MyRecord);


Gruß
Frank

3. Mai 2007 11:17

FANTASTISCH... Bin begeistert.

Es funktioniert.

Danke Frank!