Показать сообщение отдельно
Старый 12.03.2003, 12:30   #2  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
> // А вот что это за цирк:

Все очень просто. Таблица 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 уже существует просто обновлять ее. Но по каким-то причинам разработчики решили сделать именно так.