Цитата:
	
	
		| 
			
				Ошибка выходит не всегда, заметила такую закономерность, чем больше данных по записи, которая берется тем больше вероятность получить ошибку.
			
		 | 
	
	
 
Теперь мы пойдём другим путём. Есть подозрение, что транзакция, которая вносит изменения ( напр, 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;