Приложение с монопольным доступом к БД

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Приложение с монопольным доступом к БД

Сообщение Игорь Столяров »

Привет всем !

Возник вроде бы простой вопрос, нужно сделать "Приложение для монопольной работы с БД".
Но оказалось, что не все так просто.
Т.е. нужна программа, которая может работать с БД только в режиме монопольного доступа к данным.
Рассмотрим варианты решения задачи и почему они не решают вопрос.

1. Если задаем для списков БД режим монопольного доступа (Open() вместо Share()) - то нельзя внутри программы открыть например 2 Browse одного файла.
2. Делать файлы с флагами доступа к БД не хочется - при аварийном завершении работы программы, нельзя запустить ее повторно, без разблокировки.
3. Контроль запуска приложения не дает результата, т.к. программа может запускаться с разных компьютеров в сети или терминальных сессий.
4. ... и все. Или есть еще какие-нибудь варианты решения вопроса ?
Make Clarion Great Again ! 😎
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Re: Приложение с монопольным доступом к БД

Сообщение Ал »

Привет!
1.Контроль запуска - в том числе и монополии - где то в самих базах..
2.Учет сеанса/действий в процессе работы - где-то в самих базах... и набор действий проги при след запуске при различных результатах пред. сеанса - норма/сбой связи/сбой по питанию-вырубили комп/...
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Приложение с монопольным доступом к БД

Сообщение kreator »

Предлагаю наш опыт. Сделано, правда, по-простому, без заморочек. У нас Firebird, изначально от был без всяких админских штучек. Мы отслеживаем кол-во вошедших пользователей, поскольку продаём лицензии на каждый вход. Ну и вот, есть таблица, куда падает запись вошедшего (он входит по паролю, естественно). При его выходе его запись удаляется. Тут проблема, если неправильный выход. После праздников я могу это выяснить (не моя тема), но, думаю, можно что-нибудь придумать, например, реакция на время работы. Можно ещё покопать в сторону определения ip адреса, кто открывает, если открытие на локальной станции. если на сервере, то не вариант.
А ещё идея такая (пока писал пришла мысль). При загрузке программы открываешь одну таблицу в монопольном режиме (таблица не рабочая). Первый пользователь её открыл. Для второго пользователя проверяешь открытие этой таблицы - если открыта, то до свидания. А рабочие таблицы открываются в нормальном режиме.
Вообще, мне кажется, монопольный режим идёт из ДОСа. Сейчас надо как-то по-другому.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Приложение с монопольным доступом к БД

Сообщение Игорь Столяров »

Это все разнообразные флаги блокировки (через запись или блокировку контрольного файла).
В п.2. я как раз упомянул, что здесь есть проблема с аварийным завершением работы программы.

Что касается IP адреса - то это не решает проблему повторного запуска программы на одной рабочей станции.

Действительно, помню, что под DOS проблемы с монопольным доступом не было.
Но там и не было возможности внутри одного приложения работать с несколькими MDI потоками ... ;)
Наверно вопрос к этому и сводится: как различить многопользовательский доступ к БД из одной копии программы и из разных.
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Приложение с монопольным доступом к БД

Сообщение Алексей- Софт-Центр »

Добрый день!
Вероятнее всего это lock / unlock пользователей средствами БД
Те входите программой с юзером администратором, который просто блокирует всех пользователей
до завершения своей работы
потом разблокирут
в случае аварийного завершения- просто запускается разблокировка пользователей


Алексей
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Приложение с монопольным доступом к БД

Сообщение kreator »

а почему не годится мой последний вариант? Если программа с захваченной монопольным доступом таблицей некорректно выходит, то ничего страшного не происходит - таблица/файл всё равно закрывается. Другое дело, если сервак, где лежат файлы, не отрабатывает. У нас в конторе проблема - exe-шник и dll-ки не освобождаются от захвата при выходе из программы (они лежат на серваке). Пока мы не разобрались в чём дело. Это не каждый раз, и не с определённых станций, в общем системы какой-то не просматривается. Тем более, что в оборудовании зоопарк - станции на XP и Win7, сервер - виртуальный Win2012R2 через WMWare (кажется).
We are hard at work… for you. :)
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Приложение с монопольным доступом к БД

Сообщение Алексей- Софт-Центр »

Добрый день!
Кто сказал , что не годится?
все варианты, которые приводят к решению поставленной задачи, имеют право на жизнь. :)
Во всех базах данных (оракл, скл, и т д) есть готовое решение типа лок. можно, конечно,
средствами клариона сделать аналог, но для чего?
Если оно чем-то не устраивает-то да, если все подходит-то ...?


Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Приложение с монопольным доступом к БД

Сообщение Игорь Столяров »

То, что в серьезных БД этот вопрос решен - сомнений не вызывает.
Речь идет о приложении, например с TPS БД.
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Приложение с монопольным доступом к БД

Сообщение Алексей- Софт-Центр »

Добрый день!
Игорь
Тогда здесь возможны любые варианты.
Например, моделируя лок базы данных.
В файле пользователей программы добавляете поле блокировки
опять таки , запуская прогу в режиме админа, он взводит флаги блокировки пользователей, кроме своего.
Тогда п.2 вашего поста несущественен .
Правда, не зная структуры Вашей базы, мы просто философствуем на эту тему.
(возможно у Вас просто нет файла пользователей :) )

Алексей
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Приложение с монопольным доступом к БД

Сообщение kreator »

Если в "Global Properties" в настройках таблиц поставить "File Open Mode" "Open", а "File Attributes"/"Threaded" - "None Threaded", то проблема №1 снимается, можно открыть два треда по одной таблице.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Приложение с монопольным доступом к БД

Сообщение Игорь Столяров »

Ух ты ! А вот это действительно интересно, спасибо. Пошел пробовать ...
Подозреваю, что такая комбинация может решить еще один вопрос: работа MDI приложения с драйвером SQLite (который по своей сути монопольный).
Make Clarion Great Again ! 😎
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Приложение с монопольным доступом к БД

Сообщение Yufil »

Я в каталоге программы завожу подкаталог Lock и даю в него доступ всем.

Программа при запуске:

1. Заходит в каталог и пытается удалить оттуда все файлы. Те, кто не удалились, соответствуют работающим пользователям.
Дальше-по вкусу, можно принимать решение - отправить пользователя подальше, не пускать, если с эти именем уже вошли, составить список сидящих в программе и испросить благословения на работу.

Эта же операция может быть повторена b при открытии файла БД.

2. Программа заводит файл <userno>.<computername>.lock, где username - код пользователя, computername - погоняло компа, после чего тут же открывает его монопольно.

По концу программы этот файл закрывается и удаляется.
При аварии файл остаётся, но будет удалён при первой же попытке доступа к БД.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Приложение с монопольным доступом к БД

Сообщение Игорь Столяров »

Все очень здорово, но можно пояснить ключевую фразу (последнюю):
Yufil писал(а):При аварии файл остаётся, но будет удалён при первой же попытке доступа к БД.
Насколько я знаю, при аварийном завершении программы, контрольный файл на сервере "<userno>.<computername>.lock"
останется заблокированным. И удалить его можно будет только после сброса блокировки на сервере (ну или его перезугрузке).
Или я не прав ?
Make Clarion Great Again ! 😎
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Приложение с монопольным доступом к БД

Сообщение Yufil »

Дык, программа начинается с попытки удалить ВСЕ файлы из каталога. Если файл не заблокирован (например, если прога слетела), его удалить можно, а если заблокирован-отнюдь.
Поэтому список неудалённых файлов показывает, кто в данный момент сидит в программе.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Приложение с монопольным доступом к БД

Сообщение Yufil »

Этот механизьм опробован и лет десять как юзается
Ответить