В общем, я не знаю как это комментировать...
Есть, скажем, процедура у меня. Называется она, допустим, Proc1. И есть в этой процедуре следующий кусок кода (переменные RecRef и RecRef2 - локальные). Бегаю я только по 17-й таблице с парой миллионов записей, предварительно натравив рекрефу на 17-ю, разумеется:
Proc1()
IF RecRef.FIND('-') THEN BEGIN
REPEAT
RecRef2 := RecRef.DUPLICATE;
RecRef2.CLOSE;
UNTIL RecRef.NEXT = 0;
Система в этом случае валится через непродолжительное время.
Делаю следующее изменение...
Proc1()
IF RecRef.FIND('-') THEN BEGIN
REPEAT
Proc2(RecRef,RecRef2);
RecRef2.CLOSE;
UNTIL RecRef.NEXT = 0;
Proc2(VAR RecRefFrom,VAR RecRefTo)
RecRefTo := RecRefFrom.DUPLICATE;
...и полено начинает работать.
Т.е. надо не просто локальными объявить переменные, но и еще процедуру для дупликейта отдельную создать.
Серж, Артем, спасибо за дискуссию. Хренову тучу времени убил на этот ад. Может кому эта фигня тоже полезной окажется...
ЗЫ: коллеги, попробуйте на своих больших базах подобное. Возможно, конфа сервера влияет...
|