При многопользовательской работе необходимость отключить от базы данных всех пользователей возникает довольно часто. Сделать это будет легко, если добавить в клиентскую программу специальную форму, которая будет по своему таймеру проверять наличие или отсутствие какого-либо сигнала и закрывать приложение. Таким сигналом может служить что угодно: появление файла с условным именем, особого сообщения электронной почты, специфического значения в специальном поле предназначенной для этого таблицы и т.д. и т.п.
В настоящее время, я использую последний метод, так как с его помощью проще реализовать запрет кому попало «выгонять» всех. Достаточно лишь дать права на изменение данных нужной группе или пользователю, а удалять и добавлять записи и вовсе запретить после того, как единственная сигнальная запись появится в таблице.
Там присутствуют лишь основы данного метода, однако в большинстве случаев этого должно хватить. В качестве сигнальной используется таблица Abort с единственным полем ExitNow логического типа, в которой есть только одна запись. Значение TRUE и является признаком того, что следует закрыть программу. Разумеется, эта таблица должна находиться в общей базе данных на сервере, а не в клиентской программе. В примере сделано наоборот только для того, чтобы не затрудняться установкой связи с другой базой.
Вся логика сосредоточена в форме frmAbortCheck. Она вовсе не обязана быть невидимой. Если Ваше приложение использует какую-либо форму в качестве, например, навигационной и она всё время загружена, а таймер не используется, то вполне можно задействовать и её. Таймер формы выставлен на 10 секунд (в реальности интервал надо увеличить до разумной величины). Пока сигнала нет, ничего не происходит, но стоит ему появиться, как при следующем срабатывании таймера это будет обнаружено.
Однако, выгружать программу сразу нельзя. Надо дать возможность и время пользователям закончить работу и закрыть приложение «добровольно». Поэтому, при первом обнаружении установленного «флага выхода» на экран выдаётся только предупреждение о необходимости завершить работу. Использовать для такого сообщения стандартный MsgBox нельзя, так как он блокирует таймер и, кроме того, хочется привлечь внимание пользователя большими красными страшными буквами.
Только после того, как предупреждающее сообщение выдано, можно, выждав ещё один интервал таймера, завершить работу приложения. Если за это время успеть снять флажок, то завершения работы не последует. Ну, и, конечно, использовать для установки/сброса флажка в реальной программе следует другую, специально предназначенную для этого форму.
Ссылки по теме