I wrote the following code:
rTable.SETCURRENTKEY(Ready);
rTable.SETRANGE(Ready,FALSE);
IF rTable.FIND('-') THEN
REPEAT
IF {condition} THEN BEGIN
rTable.Ready:=TRUE;
rTable.MODIFY;
END;
UNTIL rTable.NEXT=0;
After modifying the first record, the until condition is true, so this code doesn't iterate through the range (MODIFY do a refresh?).
Is there a solution other than declaring an other record type variable, GET the wanted record and modify through this variable?
Comments
You could also try using the MODIFYALL function but in order to so this you would have to make your condition into a filter. This would save you having to loop through the table.
Another solution is to use the MARK function and then filter on MARKEDONLY
rTable.SETCURRENTKEY(Ready);
rTable.SETRANGE(Ready,FALSE);
IF rTable.FIND('-') THEN
REPEAT
rTable.MARK := {condition}
UNTIL rTable.NEXT=0
rTable.SETCURRENTKEY(Some other key);
rTable.SETRANGE(Ready);
rTable.MARKEDONLY(TRUE);
IF rTable.FIND('-') THEN
REPEAT
rTable.Ready:=TRUE;
rTable.MODIFY;
UNTIL rTable.NEXT = 0;
Try this:
The hint is to use 2 record variables.
One to cycle through and to check your condition and another to modify.