Пауза синхронизации из TMS

Материал из wiki.standart-n.ru
Версия от 12:00, 24 августа 2018; Olgav (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
В случаях "длинных транзакций" в ТМС, например, загрузка больших объемов справочников, массовый апдейт и т.д. 
крайне рекомендовано ставить синхронизацию текущей БД на паузу. 
Для этого нужно
1. Обновить dtclient до версии не ниже 2.2062
2. В ТМС добавить процедуру и вызывать ее до начала "длинной транзакции". Время указываем в минутах - максимально требуемое время для выполнения.

  
procedure DoSyncPause(minutes: integer);
var q_pause: TIBQuery;
    dt: TDateTime;
    s:String;
begin
  q_pause:=dm.tempquery(nil);
  try
    dt:=now+ minutes*1/(24*60);
    frmSpacePro.LogIt('Ñèíõðîíèçàöèÿ ïðèîñòàíîâëåíà äî: '+datetimetostr(dt));
    s:='STOPEXCHANGEUNTIL0-0000-000000000000';
    q_pause.SQL.Text:='update or insert into g$distribute (TABLENAME,UUID,SOPER,FROM_PROFILE_ID,TO_PROFILE_ID)
        values (''DistributeClient'','''+s+''',2,-1,
        cast((cast('''+datetimetostr(dt)+''' as dm_datetime)-cast(''30.12.1899 00:00:00'' as dm_datetime))*1000000 as numeric(15,0)))'; //
   frmSpacePro.LogIt(q_pause.SQL.Text);
    q_pause.ExecSQL;
    q_pause.Transaction.Commit;
  finally
    q_pause.Free;
  end;
end;