Реферат: 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. Практическое применение