Цитата:
Ошибка выходит не всегда, заметила такую закономерность, чем больше данных по записи, которая берется тем больше вероятность получить ошибку.
|
Теперь мы пойдём другим путём. Есть подозрение, что транзакция, которая вносит изменения ( напр, form8.OracleDataSet1.FieldByName('ROL_PASP_SEC').A sInteger:=bl_id; ) имеет монопольный доступ к данным и пока не закончится, отвергает Refresh, которой придётся подождать. Если дело в миллисекундах, то я обычно пишу:
Код:
while <плохая ситуация> do
Application.ProcessMessages;
или
repeat Application.ProcessMessages
until <хорошая ситуация>;
Если время идёт на секунды, то запускаю таймер с интервалом, напр. 100 [мс]:
Код:
Timer1.Enabled:= true;
...
procedure Form1.Timer1Timer(Sender: TObject);
begin
if <хорошая ситуация> then
begin
Timer1.Enabled:= false;
form2.pasp_rol0.Refresh;
end;
end;
Теперь хорошо бы получить сведения о ситуации. Может быть, провести исследования таким способом:
Код:
var State1: TDataSetState;
...
State1:= form2.pasp_rol0.State;
try
form2.pasp_rol0.Refresh;
ShowMessage(Format('норма: %u',[Ord(State1)]));
except
ShowMessage(Format('ошибка: %u',[Ord(State1)]));
end;