Реферат: MIDAS. Практическое применение
if not RegisterDoc(DocID) then //Пытаемсязарегистрировать
raise Exception.Create('Документредактируется');
with ibqDelDoc do //Удаляем
begin
paramByName('DocID').AsInteger := DocID;
ExecSQL;
end;
Applied := True;
finally
UnregisterDoc(DocID); //Изменениезакончено, удалили
end;
end;
end;
Если удаляется документ, попытаемся его зарегистрировать в списке редактируемых функцией 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 :
function RegisterDoc(DocID: integer): boolean; begin Result := False; К-во Просмотров: 832
Бесплатно скачать Реферат: MIDAS. Практическое применение
|