Data Copying Procedure - Active Method Doesn't Work

Troubles_In_ParadiseTroubles_In_Paradise Member Posts: 588
Hi guys!
I'm wondering if anyone has already faced a problem like this:
We started with a Re-numbering process for tables.
For example:
50000 -> 18035765
50001 -> 18035766
etc...
After that I want to transfer data from "old" tables to "new" tables. To do it without dataport I wrote a process.
The Table RenObject contains 1 record for each table, specifing the new number:
PK old ID new ID
1 50000 18035765
2 50001 18035766
ecc..
INTStart e INTEnd describe the table range I want to work with.
VarRecordRenObject.RESET;
VarRecordRenObject.SETRANGE("Source Type",VarRecordRenObject."Source Type"::Record);
VarRecordRenObject.SETRANGE("Source ID",INTStart,INTEnd);
IF VarRecordRenObject.FINDSET THEN BEGIN
  DLGWindow.OPEN(TXCMess1);    
  REPEAT
    DLGWindow.UPDATE(1,VarRecordRenObject."Source ID");
    VarRecordField.RESET;
    VarRecRefOld.OPEN(VarRecordRenObject."Source ID");
    VarRecRefNew.OPEN(VarRecordRenObject."Destination ID");
      IF VarRecRefNew.FINDSET THEN BEGIN
        ERROR('table not empty');
      END;
      IF VarRecRefOld.FINDSET THEN BEGIN
        INTRec := 1;
        REPEAT
          DLGWindow.UPDATE(2,INTRec);
          VarRecordField.SETRANGE(TableNo,VarRecordRenObject."Source ID");
          IF VarRecordField.FINDSET THEN BEGIN
            REPEAT
              VarFieldRefFrom := VarRecRefOld.FIELD(VarRecordField."No.");
              VarFieldRefTo := VarRecRefNew.FIELD(VarRecordField."No.");
              VarFieldRefTo.VALUE := VarFieldRefFrom.VALUE;
              VarRecRefNew := VarFieldRefTo.RECORD;
            UNTIL VarRecordField.NEXT = 0;
          END;
          IF VarRecRefNew.INSERT THEN BEGIN
          END;
          INTRec += 1;
        UNTIL VarRecRefOld.NEXT = 0;
       END;
    VarRecRefOld.CLOSE;
    VarRecRefNew.CLOSE;
  UNTIL VarRecordRenObject.NEXT = 0;
  DLGWindow.CLOSE;
END;
It works fine but in one case it gives me an error of overflow in the conversion from Code to Code.
When I read it I thought that the length of one field was too small for the content, but debugging I found that this error occurs on empty field and in particular with disabled table field. So I decide to put the part of the code that gives to the FieldRef variable the value of the other into an IF statement testing the Active method of the FieldRef but it doesn't work.
...
if VarFieldRefFrom.active then begin
  VarFieldRefTo.VALUE := VarFieldRefFrom.VALUE;
  VarRecRefNew := VarFieldRefTo.RECORD;
end;
...
So a colleague of mine suggest me a solution that works.
Testing the value of the field Enabled in the Table "Field" instead of using the method active on the FieldRef.
...
if VarRecordField.enabled then begin
  VarFieldRefFrom := VarRecRefOld.FIELD(VarRecordField."No.");
  VarFieldRefTo := VarRecRefNew.FIELD(VarRecordField."No.");
  VarFieldRefTo.VALUE := VarFieldRefFrom.VALUE;
  VarRecRefNew := VarFieldRefTo.RECORD;
end;
...
The only thing we wonder is if anyone already knows this problem...
Thx all and excuse me for the long post...
~Rik~
It works as expected... More or Less...

Comments

  • BeliasBelias Member Posts: 2,998
    "active" method for fieldrefs works on my own pc! :-k
    recref.open(3);
    fieldref := recref.field(2);
    message(format(fieldref.active));
    clear(fieldref);
    fieldref := recref.field(1);
    message(format(fieldref.active));
    
    the code is significant only in italian version, because field 2 is not enabled by default just in our contry
    -Mirko-
    "Never memorize what you can easily find in a book".....Or Mibuso
    My Blog
Sign In or Register to comment.