Константин wrote:
Насколько я знаю FibPlus - при закррытии БД, закрываются и
все DataSet'ы ... так что насчёт гридов я не беспокоюсь ...
Я не знаю твой код, но если в треде вы открываешь датасет, а на основной
форме к нему привязан грид - то грид может его дернуть в любой момент.
Отошлю к старой борландовой статье
http://www.vspu.ru/is/files/doc/delphi-ti/16231.html
(почему то на борландовом сайте она не сохранилась)
Там про BDE, но принцип тот же: смотри как работа с VCL организована.
А вообще-то я не понял как ты DM (TDataModule) перенёс в
тред ?
Я о том, что в треде сделал бы _private_ переменную DM, в треде бы ее
создавал и уничтожал, это бы гарантировало отсутствие внешних обращений.
Хотя от задачи, конечно зависит.
KRB> Это тут нафиг не надо, и скорее вредно.
Что именно ?
"if Dm.DB.Connected then DM.DB.Close;"
если ты создал второй коннект, то какая тебе разница, что происходит с
основным? У меня вообще до 50 коннектов создается, половина к одной базе
А выбивание может быть как раз с работой VCL связано (закрытие датасетов
и перерисовка датаконтролов). Подозреваю, что у тебя все на одни
датасеты завязано.
KRB> Resume в блоке обработки ошибок??????? Бред!!
KRB> Или ты чего-то пересокращал...
Не там флаг bErr выставляется ...
Я бы понял если б было так:
try
...
resume;
except
SomeErrorProc()
Free;
end;
Ведь при неудачном конструкторе объект уничтожается (кроме тех
переменных что создал именно ты). А в деструкторе надо проверять все
переменные на то, что они инициализированы и уничтожать при
необходимости, то же самое с вызовом inherited в деструкторе - при
необходимости. Если развернуть, то как-то так:
constructor ---
MyVar:=nil;
try
MyVar:=TMyVar.Create();
inherited;
inheritedOK:=true;
resume;
except
SomeErrorProc()
Free;
end;
destructor ---
MyVar.Free; // Free проверяет на nil
if inheritedOK then inherited;
end;
А Resume созданного с ошибкой треда - брррр...
KRB> Он дергает основной поток,
Что ???? ЛЮБОЙ raise ???
Не любой, а необработанный в try-except. А насколько я вижу, у тебя
обработчика нет, и raise передается в основной поток. Со всеми вытекающими.