0

我有一个用户标记的记录,比如说 100 行。我检索这样的记录:

CurrPage.SETSELECTIONFILTER(recSelection);
recSelection.FINDSET;

现在,我想一次将 20 行选择复制到另一个记录变量中,并将其传递给函数。

如何分步处理记录?像这样的东西:

batchSize := 20;
currSize := 0;
totalSize := recSelection.COUNT;
totalProcessed := 0;
recSelection.FINDSET;
REPEAT
  IF (currSize = 0) THEN BEGIN
    tmpRec.INIT;
  END;

  // how can I add the current to the tmp?
  // tmpRec.INSERT -> recSelection

  currSize += 1;
  totalProcessed += 1;

  IF (currSize = batchSize) OR (totalProcessed = totalSize) THEN BEGIN
     SomeHeavyFunction(tmpRec);
     currSize := 0;
  END;

UNTIL recSelection.NEXT = 0;
4

2 回答 2

0

根据您的版本,您可以检查recTemp.ISTEMPORARY.

有关更多详细信息,请参阅文档

于 2017-08-25T05:22:21.000 回答
0

我让它通过这个工作:

(删除所有临时记录对我来说总是有点吓人:P),recTemp 是临时记录

CURR_BATCH_SIZE := 0;
TOTAL_ITEMS := recSelected.COUNT;
BATCH_SIZE := 20;
TOTAL_PROCESSED := 0;
IF recSelected.FIND('-') THEN
REPEAT

  IF (CURR_BATCH_SIZE = 0) THEN BEGIN
    recTemp.RESET;
    recTemp.DELETEALL;
    recTemp.INIT;
  END;

  // copy over
  recTemp := recSelected;
  recTemp.INSERT;

  // store state
  CURR_BATCH_SIZE := CURR_BATCH_SIZE + 1;
  TOTAL_PROCESSED := TOTAL_PROCESSED + 1;

  // did we reach batch limit or end?
  IF (CURR_BATCH_SIZE = BATCH_SIZE) OR (TOTAL_PROCESSED = TOTAL_ITEMS) THEN BEGIN
    // process batch
    MESSAGE('Processing next %1. total processed %2/%3', FORMAT(recTemp.COUNT), FORMAT(TOTAL_PROCESSED), FORMAT(TOTAL_ITEMS));

    // reset counters
    CURR_BATCH_SIZE := 0;    
  END;


UNTIL recSelected.NEXT = 0;
于 2017-07-06T09:41:00.580 回答