[Gelöst]Transferfields und Änderung im Feld

18. September 2009 13:34

Hallo,

ich möchte alle Records (die FromNumber entsprechen) von einer Tabelle in eine andere kopieren. Die Tabellen sind gleich aufgebaut.
Das Feld "Seminar Registration No." soll mit ToNumber gefüllt werden. Ist folgender Code richtig?
Code:
SemCharge.RESET;
SemCharge.SETRANGE("Seminar Registration No.", FromNumber);

IF SemCharge.FINDSET THEN
  REPEAT 
    PstSemCharge.TRANSFERFIELDS(SemCharge);
    PstSemCharge.INIT   
    PstSemCharge."Seminar Registration No." := ToNumber;
    PstSemCharge.MODIFY;
  UNTIL SemCharge.NEXT = 0;

Danke und schöne Grüße
Ralf
Zuletzt geändert von ralf5 am 18. September 2009 14:32, insgesamt 1-mal geändert.

Re: Transferfields und Änderung im Feld

18. September 2009 13:37

Hm fast!

Code:
SemCharge.RESET;
SemCharge.SETRANGE("Seminar Registration No.", FromNumber);

IF SemCharge.FINDSET THEN
  REPEAT 
    // INIT immer ZUERST!
    PstSemCharge.INIT; // Semikolon nicht vergessen
    PstSemCharge.TRANSFERFIELDS(SemCharge);
    PstSemCharge."Seminar Registration No." := ToNumber;
    PstSemCharge.INSERT; // sind doch neue Datensätze, oder nicht?
  UNTIL SemCharge.NEXT = 0;


INIT leert doch (fast) alle Felder, die du mit TRANSFERFIELDS eben erst geschrieben hast.

Re: Transferfields und Änderung im Feld

18. September 2009 13:47

ich wuerde Grundsaetzlich folgendes empfehlen:

Code:
SemCharge.RESET;
SemCharge.SETRANGE("Seminar Registration No.", FromNumber);

IF SemCharge.FINDSET THEN
  REPEAT
    CLEAR(PstSemCharge);                   // <-------------------------------------------------------------------
    PstSemCharge.INIT; // Semikolon nicht vergessen
    PstSemCharge.TRANSFERFIELDS(SemCharge);
    PstSemCharge."Seminar Registration No." := ToNumber;
    PstSemCharge.INSERT; // sind doch neue Datensätze, oder nicht?
  UNTIL SemCharge.NEXT = 0;


ich hatte einfach zu oft falsche Daten weil ich kein CLEAR gemacht habe und der z.B. die Primärschlüsselfelder warum auch immer noch gefüllt gelassen hat.
Sollte eigentlich bei nem transferfields nicht passieren aber ich geh da lieber auf nummer sicher!

Re: Transferfields und Änderung im Feld

18. September 2009 13:56

Wenn du ein CLEAR machst, brauchst du kein INIT mehr.

Table.CLEAR macht ein Table.RESET, dann ein Table.INIT und löscht dann die Primärfelder, wenn ich das richtig in Erinnerung habe.

Re: Transferfields und Änderung im Feld

18. September 2009 14:02

ein Table.INIT und löscht dann die Primärfelder

FALLS damit gemeint war, dass INIT die Primärschlüsselfelder löscht: INIT initialisiert fast alle Felder, NUR NICHT die Primärschüsselfelder (im Gegensatz zu CLEAR).

Re: Transferfields und Änderung im Feld

18. September 2009 14:13

Damit war gemeint, was bei einem CLEAR passiert.

Also sprich CLEAR(Table) macht:
Table.RESET;
Table.INIT
und löscht nach dem INIT die Primärschlüsselfelder

Damit wollte ich eigentlich nur auf den Code von Matthias eingehen, da er ein CLEAR(Table) und anschließend ein Table.INIT gemacht hat.
Und wollte dann erklären was bei einem CLEAR alles passiert.
Zuletzt geändert von meto89 am 18. September 2009 14:14, insgesamt 2-mal geändert.

Re: Transferfields und Änderung im Feld

18. September 2009 14:13

Muss ich den überhaupt bei einem TRANSFERFIELD Befehl ein Insert machen oder brauche ich das gar nicht?

Re: Transferfields und Änderung im Feld

18. September 2009 14:16

ralf5 hat geschrieben:Muss ich den überhaupt bei einem TRANSFERFIELD Befehl ein Insert machen oder brauche ich das gar nicht?


Eine Recordvariable ist per se erst mal nur ein Platzhalter für ganz viele Variablen.
TRANSFERFIELDS setzt zwar die Variablen, aber erst durch MODIFY(ALL) oder INSERT werden diese Variablen auch in die zugrundeliegende Tabelle geschrieben.

Re: Transferfields und Änderung im Feld

18. September 2009 14:31

Vielen Dank, die Antworten haben mir sehr geholfen. :-D

Re: [Gelöst]Transferfields und Änderung im Feld

18. September 2009 14:54

Natalie hat geschrieben: ein Table.INIT und löscht dann die Primärfelder


FALLS damit gemeint war, dass INIT die Primärschlüsselfelder löscht: INIT initialisiert fast alle Felder, NUR NICHT die Primärschüsselfelder (im Gegensatz zu CLEAR).

und deswegen mache ich immer CLEAR und dann INIT, immer alles richtig und sooooo performance fressend sind sie ja nich :).

Re: [Gelöst]Transferfields und Änderung im Feld

18. September 2009 15:05

Das war genau das was ich meinte... ein CLEAR enthält ein INIT.

=> Wenn du ein CLEAR machst brauchst du gar kein INIT mehr machen.

Re: [Gelöst]Transferfields und Änderung im Feld

18. September 2009 15:09

meto89 hat geschrieben:=> Wenn du ein CLEAR machst brauchst du gar kein INIT mehr machen.

Nicht so ganz: falls es Felder mit InitValues gibt, setzt INIT diese, clear nicht. Oder?

Re: [Gelöst]Transferfields und Änderung im Feld

18. September 2009 15:17

McClane hat geschrieben:
meto89 hat geschrieben:=> Wenn du ein CLEAR machst brauchst du gar kein INIT mehr machen.

Nicht so ganz: falls es Felder mit InitValues gibt, setzt INIT diese, clear nicht. Oder?

Trugschluss: CLEAR löscht die Felder nicht, sondern setzt deren init-Werte.

Re: [Gelöst]Transferfields und Änderung im Feld

18. September 2009 15:45

Dann ziehe ich meinen Einwand eben zurück :-?

Re: [Gelöst]Transferfields und Änderung im Feld

18. September 2009 17:12

Das war genau das was ich meinte... ein CLEAR enthält ein INIT.

=> Wenn du ein CLEAR machst brauchst du gar kein INIT mehr machen.

okay...mmhhh du hast recht :D
beim naechsten mal, wenn ich das brauche, werde ich das wohl anders machen.