Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 09:13

Morgen zusammen,

habe folgendes Anliegen : Ich möchte in einer Schleife (1 - 100) eine Tabelle füllen. Je nach Index aber eine andere Spalte. Ist das irgendwie machbar ?

Zum Verständnis :

Code:
FOR i := 1 TO 100 DO BEGIN
  Tabellenspalte [i] := [i];
END;


In dem Beispiel sollte also nach dem Durchlauf in Spalte 1 eine 1 drinstehen, in Spalte 2 eine 2, u.s.w.

Besten Dank im Vorraus.

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 09:19

Wenn die FeldIDs auch von 1 - 100 gehen würden, dann ließe sich das über FieldRefs lösen.

Ansonsten bliebe nur der Weg
Code:
Feld1 := 1;
Feld2 := 2;
Feld3 := 3;
...

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 09:49

Natalie hat geschrieben:Wenn die FeldIDs auch von 1 - 100 gehen würden, dann ließe sich das über FieldRefs lösen.

Dafür müssen die Felder nicht zusammenhängend fortlaufend durchnummeriert sein.

Beispiel:
Das 15. Feld der Tabelle hat die Feldnr. 4711
Zugriff möglich mit
FldRef := RecRef.Field(4711);
oder auch
FldRef := RecRef.FieldIndex(15);

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 09:53

Timo Lässer hat geschrieben:FldRef := RecRef.FieldIndex(15);

Ha! Das hatte ich doch glatt vergessen ... verdrängt ... oder so ähnlich :-)

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 10:24

Hiho,

Danke für die schnelle Antwort.
Die FeldIDs haben nicht die Werte 1 - 100 daher geh ich nen anderen Lösungsweg mit Referenzen.
Ich bekomme allerdings jetzt die die Meldung Die FIELDREF Variable ist nicht initialisiert.
Es gibt allerdings kein RESET Befehl oder dergleichen.

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 11:34

CBT hat geschrieben:Ich bekomme allerdings jetzt die die Meldung Die FIELDREF Variable ist nicht initialisiert.
Es gibt allerdings kein RESET Befehl oder dergleichen.

Zuerst brauchst du einen RecordRef, welcher auf die Tabelle bzw. den Datensatz zeigt.
z. B.
Code:
RecRef.OPEN(TableNo);
IF RecRef.FIND('-') THEN
  REPEAT
    [...]
  UNTIL RecRef.NEXT = 0;

Nun brauchst du einen FieldRef, um die einzelnen Felder befüllen zu können.
Diese Informationen können z. B. aus einer anderen Tabelle kommen.
Der Einfachheit halber durchlaufen wir jetzt mal die ersten 100 Felder:
Code:
RecRef.OPEN(TableNo);
IF RecRef.FIND('-') THEN
  REPEAT
    FOR I := 1 TO 100 DO BEGIN
      FldRef := RecRef.FIELDINDEX(I);
      FldRef.VALUE := [...]
    END;
  UNTIL RecRef.NEXT = 0;

Möchtest du die Felder nur auslesen (also nicht beschreiben), so kannst du dir den FieldRef sogar sparen und direkt mit dem RecordRef arbeiten:
Code:
RecRef.OPEN(TableNo);
IF RecRef.FIND('-') THEN
  REPEAT
    FOR I := 1 TO 100 DO
      MESSAGE('%1',RecRef.FIELDINDEX(I).VALUE);
  UNTIL RecRef.NEXT = 0;

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 12:27

Genau so ähnlich hab ich das auch gemacht ...
Aber bei dem Part hier gibts glaube ich die Probleme

Code:
RecRef.OPEN(TableNo);
IF RecRef.FIND('-') THEN
  REPEAT
    FOR I := 1 TO 100 DO BEGIN
      FldRef := RecRef.FIELDINDEX(I);
      FldRef.VALUE := [...]
    END;
  UNTIL RecRef.NEXT = 0;


Pro Schleifendurchlauf setzt er immer wieder den Value und den entsprechenden Index ... Und hier will er wohl anscheinend ein "RESET" haben was das Ganze wieder initalisiert ... Hab es so :

Zuweisung der RecRef Felder in den FieldRef Array :

Code:
  FOR LIntIndex := 1 TO 5 DO BEGIN
    LFieldRefX [LIntIndex] := LRecRefX.FIELD (LIntIndex);
  END;


...

Wertzuweisung :

Code:
      LIntIndex := 1;
      REPEAT
        LFieldRefX [LIntIndex].VALUE := FORMAT (LRecX.Wert);
        LIntIndex := LIntIndex + 1;
      UNTIL LRecX.NEXT = 0;

Re: Tabellen Spalten über eine Schleife ansprechen

3. Juli 2009 13:24

Klingt zwar etwas komisch, aber:
Wie verhält es sich, wenn du anstelle eines FieldRef-Arrays fünf FieldRef-Variablen deklarierst?

Ich erinnere mich z. B. an Probleme, wenn man eine Record-Variable als Array definiert.
Hier verhält sich NAV anders, als bei Variablen-Arrays.
Es wäre also möglich, dass sich NAV bei RecRef- / FieldRef- / KeyRef-Arrays ebenfalls anders verhält.