Feldzugriff über ID?

1. November 2005 15:58

Hallo Leudde,

folgendes Problem stellt sich mir:
Bastele gerade an einem dynamischen Dataport (der mit dem langen Datensatz ;-) ) und hab mir nun analog eine Tabelle like "Field" gebaut, in der ich u.a. Position und Feldlänge verändern kann. Jetzt kann ich ja per Schleife über diese Zeilen gehen und mit der zugeordneten FieldNo festlegen, in welches Feld das aktuelle Datum gespeichert wird.

Wie kann ich diese FieldNo (elegant) auswerten?
Mir fällt erstmal nur ein Funktionsaufruf, der die FieldNo und das Datum mit übergibt und dann dort per CASE Auswertung die Zuweisung vornimmt:

zB.

Code:

AssignValue(FieldNO: Integer, Datum: Text30)

CASE FieldNo OF
  1:  Rec."No.":=Datum;
  2:  Rec."Line No.":=Datum;
  ....
  x:  Rec.Feldx:=Datum
END;


Macht sich halt für eine größere Anzahl von Feldern nicht so gutt.... :roll:

Idee?

Gruss,Otschko

1. November 2005 16:35

Schonmal mit RecordRef und FieldRef versucht?
Diese Variablen-Typen ermöglichen dir den dynamischen Zugriff auf verschiedene Records und Fields. Sehr empfehlenswert ;-)

Ich programmiere mittlerweile mit Vorliebe mit RecordRef und FieldRef.

1. November 2005 16:59

Hi Timo,

ich hab das hier ab und an mal gelesen, aber mit der Online Hilfe schnall ich das nicht....:-?
Hab auch noch keine Beispiel irgendwo gesehn....

Ich habe mir schon fast gedacht, das das was mit den Refs zu tun haben könnte...

Gruss,Otschko

1. November 2005 17:39

Ein ausgiebiges Beispiel für die Verwendung von RecordRef, FieldRef und KeyRef ist RecRefManagement aus dem Downloadbereich.

Für dein Beispiel würde das ungefähr so aussehen:
Code:
AssignValue(FieldNumber: Integer, NewValue: Text30)

RecRef.GETTABLE(Rec);
FldRef := RecRef.Field(FieldNumber);
FldRef.Value := NewValue;
RecRef.SETTABLE(Rec);
Bitte beachten: Der Parameter darf nicht FieldNo lauten, da dies schon durch C/SIDE belegt ist. Stattdessen nenne ihn einfach FieldNumber oder FldNo oder ...

Da es leider nicht möglich ist, EVALUATE(FldRef.Value,NewValue) auszuführen, empfehle ich die Verwendung der oben genannten Codeunit.
Dort ist ein EVALUATE für RecRef enthalten.

Würdest du nur lesend zugreifen, dann könnte es z. B. so aussehen:
Code:
GetValue(FieldNumber: Integer) : Text30

RecRef.GETTABLE(Rec);
EXIT(RecRef.Field(FieldNumber).Value);