> // А вот что это за цирк:
Все очень просто. Таблица DoubleEntryBuffer обновляется записями из DoubleEntryBufferTemp. Если в DoubleEntryBuffer есть запись одноименная с DoubleEntryBufferTemp, то она обновляет, иначе создается новая.
> WITH DoubleEntryBuffer DO BEGIN
> LOCKTABLE();
> REPEAT
Если находим в таблице DoubleEntryBuffer запись, у которой значение первичного ключа совпадает со значением первичного ключа текущей записи в DoubleEntryBufferTemp, то удаляем ее.
> DoubleEntryBuffer := DoubleEntryBufferTemp;
> IF FIND THEN
> DELETE;
Добавляем в DoubleEntryBuffer текущую запись из DoubleEntryBufferTemp.
> DoubleEntryBuffer := DoubleEntryBufferTemp;
> INSERT;
> UNTIL DoubleEntryBufferTemp.NEXT = 0;
> END;
> END;
Конечно, можно было бы, если запись в DoubleEntryBuffer с таким же значением первичного ключа как и у текущей записи в DoubleEntryBufferTemp уже существует просто обновлять ее. Но по каким-то причинам разработчики решили сделать именно так.
|