Показать сообщение отдельно
  #20  
Старый 19.06.2007, 10:42
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

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