1. Чтобы сделать решение независимым от СУБД, придется использовать решение, которое все же будет "напрягать" программу, в некотором смысле. Добавление поля on_line - самое простое решение, но у него есть недостаток: в случае аварийного завершения программы пользователь так и останется отмеченным он-лайн. Если требуется более достоверная информация, то это поле нужно сделать типа DateTime, а приложение должно обновлять его каждую минуту (по таймеру). В этом случае можно определять подключенных пользователей с точностью в одну минуту. Но есть тут подводный камень: для MySQL все будет точно, так как время в базу будет записываться серверное, а вот в SQLite каждый компьютер будет записывать своё локальное время.
2. Контроль числа запущенных экземпляров правильно бы сделать на мьютексах, но их в MVDB нет, остается вариант с поиском запущенной копии по заголовку окна.
// Не мьютекс, но работает почти всегда)))
// Проверка заголовка главной формы
const
APP_NAME = 'My App Name';
procedure Form1_OnShow(Sender: string; Action: string);
begin
Form1.Caption := '';
if FindWindow(nil, APP_NAME) <> 0 then
begin
ShowMessage('Application is already launched.');
Form1.Close;
end;
Form1.Caption := APP_NAME;
end;
Этот пример и другие решения можно найти в "Руководство разработчика" - это база знаний, куда вы сможете добавлять свои собственные находки.
https://k245.ru/software-ru/is-ru/rukov … chika.html
Визуальное программирование:
блог и
телеграм-канал.