Если удаляется документ, попытаемся его
зарегистрировать в списке редактируемых функцией RegisterDoc, затем, если это
получилось, удаляем его с помощью запроса ibqDelDoc и удаляем из списка
редактирования (UnregisterDoc). Устанавливаем Applied := true, чтобы сказать
провайдеру, что все уже сделано.
Конечно, одновременно может редактироваться
(удаляться, добавляться) довольно много документов, поэтому нужен единый список
этих документов, к которому будут обращаться процедуры RegisterDoc и
UnregisterDoc. Поскольку обращение к нему будет производиться из модулей
данных, работающих в разных потоках, то наилучшим образом для этого подходит
TThreadList (потокобезопасный класс списка). Список документов должен быть
единым для всех клиентских частей, поэтому расположить его нужно в отдельном
модуле, например, в модуле главной формы сервера. На ней потом можно вывести, например, список редактируемых на данный момент документов. Так и сделаем.
В модуле главной формы сервера в разделе
implementation объявим переменную DocList: TThreadList; Этот список лучше
инициализировать сразу при запуске сервера и уничтожать при выходе:
initialization
DocList := TThreadList.Create;
finalization
if Assigned(DocList) then
begin
DocList.Free;
DocList := nil;
end;
end.
|
С этим списком работают две функции: RegisterDoc и
UnregisterDoc :