Показать сообщение отдельно
Старый 25.07.2012, 20:41   #6  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
В общем, я не знаю как это комментировать...
Есть, скажем, процедура у меня. Называется она, допустим, 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;

...и полено начинает работать.
Т.е. надо не просто локальными объявить переменные, но и еще процедуру для дупликейта отдельную создать.

Серж, Артем, спасибо за дискуссию. Хренову тучу времени убил на этот ад. Может кому эта фигня тоже полезной окажется...

ЗЫ: коллеги, попробуйте на своих больших базах подобное. Возможно, конфа сервера влияет...