Приложение с монопольным доступом к БД
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Приложение с монопольным доступом к БД
Привет всем !
Возник вроде бы простой вопрос, нужно сделать "Приложение для монопольной работы с БД".
Но оказалось, что не все так просто.
Т.е. нужна программа, которая может работать с БД только в режиме монопольного доступа к данным.
Рассмотрим варианты решения задачи и почему они не решают вопрос.
1. Если задаем для списков БД режим монопольного доступа (Open() вместо Share()) - то нельзя внутри программы открыть например 2 Browse одного файла.
2. Делать файлы с флагами доступа к БД не хочется - при аварийном завершении работы программы, нельзя запустить ее повторно, без разблокировки.
3. Контроль запуска приложения не дает результата, т.к. программа может запускаться с разных компьютеров в сети или терминальных сессий.
4. ... и все. Или есть еще какие-нибудь варианты решения вопроса ?
Возник вроде бы простой вопрос, нужно сделать "Приложение для монопольной работы с БД".
Но оказалось, что не все так просто.
Т.е. нужна программа, которая может работать с БД только в режиме монопольного доступа к данным.
Рассмотрим варианты решения задачи и почему они не решают вопрос.
1. Если задаем для списков БД режим монопольного доступа (Open() вместо Share()) - то нельзя внутри программы открыть например 2 Browse одного файла.
2. Делать файлы с флагами доступа к БД не хочется - при аварийном завершении работы программы, нельзя запустить ее повторно, без разблокировки.
3. Контроль запуска приложения не дает результата, т.к. программа может запускаться с разных компьютеров в сети или терминальных сессий.
4. ... и все. Или есть еще какие-нибудь варианты решения вопроса ?
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 1038
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Re: Приложение с монопольным доступом к БД
Привет!
1.Контроль запуска - в том числе и монополии - где то в самих базах..
2.Учет сеанса/действий в процессе работы - где-то в самих базах... и набор действий проги при след запуске при различных результатах пред. сеанса - норма/сбой связи/сбой по питанию-вырубили комп/...
1.Контроль запуска - в том числе и монополии - где то в самих базах..
2.Учет сеанса/действий в процессе работы - где-то в самих базах... и набор действий проги при след запуске при различных результатах пред. сеанса - норма/сбой связи/сбой по питанию-вырубили комп/...
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Приложение с монопольным доступом к БД
Предлагаю наш опыт. Сделано, правда, по-простому, без заморочек. У нас Firebird, изначально от был без всяких админских штучек. Мы отслеживаем кол-во вошедших пользователей, поскольку продаём лицензии на каждый вход. Ну и вот, есть таблица, куда падает запись вошедшего (он входит по паролю, естественно). При его выходе его запись удаляется. Тут проблема, если неправильный выход. После праздников я могу это выяснить (не моя тема), но, думаю, можно что-нибудь придумать, например, реакция на время работы. Можно ещё покопать в сторону определения ip адреса, кто открывает, если открытие на локальной станции. если на сервере, то не вариант.
А ещё идея такая (пока писал пришла мысль). При загрузке программы открываешь одну таблицу в монопольном режиме (таблица не рабочая). Первый пользователь её открыл. Для второго пользователя проверяешь открытие этой таблицы - если открыта, то до свидания. А рабочие таблицы открываются в нормальном режиме.
Вообще, мне кажется, монопольный режим идёт из ДОСа. Сейчас надо как-то по-другому.
А ещё идея такая (пока писал пришла мысль). При загрузке программы открываешь одну таблицу в монопольном режиме (таблица не рабочая). Первый пользователь её открыл. Для второго пользователя проверяешь открытие этой таблицы - если открыта, то до свидания. А рабочие таблицы открываются в нормальном режиме.
Вообще, мне кажется, монопольный режим идёт из ДОСа. Сейчас надо как-то по-другому.
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Приложение с монопольным доступом к БД
Это все разнообразные флаги блокировки (через запись или блокировку контрольного файла).
В п.2. я как раз упомянул, что здесь есть проблема с аварийным завершением работы программы.
Что касается IP адреса - то это не решает проблему повторного запуска программы на одной рабочей станции.
Действительно, помню, что под DOS проблемы с монопольным доступом не было.
Но там и не было возможности внутри одного приложения работать с несколькими MDI потоками ...
Наверно вопрос к этому и сводится: как различить многопользовательский доступ к БД из одной копии программы и из разных.
В п.2. я как раз упомянул, что здесь есть проблема с аварийным завершением работы программы.
Что касается IP адреса - то это не решает проблему повторного запуска программы на одной рабочей станции.
Действительно, помню, что под DOS проблемы с монопольным доступом не было.
Но там и не было возможности внутри одного приложения работать с несколькими MDI потоками ...

Наверно вопрос к этому и сводится: как различить многопользовательский доступ к БД из одной копии программы и из разных.
Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Приложение с монопольным доступом к БД
Добрый день!
Вероятнее всего это lock / unlock пользователей средствами БД
Те входите программой с юзером администратором, который просто блокирует всех пользователей
до завершения своей работы
потом разблокирут
в случае аварийного завершения- просто запускается разблокировка пользователей
Алексей
Вероятнее всего это lock / unlock пользователей средствами БД
Те входите программой с юзером администратором, который просто блокирует всех пользователей
до завершения своей работы
потом разблокирут
в случае аварийного завершения- просто запускается разблокировка пользователей
Алексей
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Приложение с монопольным доступом к БД
а почему не годится мой последний вариант? Если программа с захваченной монопольным доступом таблицей некорректно выходит, то ничего страшного не происходит - таблица/файл всё равно закрывается. Другое дело, если сервак, где лежат файлы, не отрабатывает. У нас в конторе проблема - 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 БД.
Речь идет о приложении, например с TPS БД.
Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Приложение с монопольным доступом к БД
Добрый день!
Игорь
Тогда здесь возможны любые варианты.
Например, моделируя лок базы данных.
В файле пользователей программы добавляете поле блокировки
опять таки , запуская прогу в режиме админа, он взводит флаги блокировки пользователей, кроме своего.
Тогда п.2 вашего поста несущественен .
Правда, не зная структуры Вашей базы, мы просто философствуем на эту тему.
(возможно у Вас просто нет файла пользователей
)
Алексей
Игорь
Тогда здесь возможны любые варианты.
Например, моделируя лок базы данных.
В файле пользователей программы добавляете поле блокировки
опять таки , запуская прогу в режиме админа, он взводит флаги блокировки пользователей, кроме своего.
Тогда п.2 вашего поста несущественен .
Правда, не зная структуры Вашей базы, мы просто философствуем на эту тему.
(возможно у Вас просто нет файла пользователей

Алексей
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Приложение с монопольным доступом к БД
Если в "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 (который по своей сути монопольный).
Подозреваю, что такая комбинация может решить еще один вопрос: работа MDI приложения с драйвером SQLite (который по своей сути монопольный).
Make Clarion Great Again ! 
Re: Приложение с монопольным доступом к БД
Я в каталоге программы завожу подкаталог Lock и даю в него доступ всем.
Программа при запуске:
1. Заходит в каталог и пытается удалить оттуда все файлы. Те, кто не удалились, соответствуют работающим пользователям.
Дальше-по вкусу, можно принимать решение - отправить пользователя подальше, не пускать, если с эти именем уже вошли, составить список сидящих в программе и испросить благословения на работу.
Эта же операция может быть повторена b при открытии файла БД.
2. Программа заводит файл <userno>.<computername>.lock, где username - код пользователя, computername - погоняло компа, после чего тут же открывает его монопольно.
По концу программы этот файл закрывается и удаляется.
При аварии файл остаётся, но будет удалён при первой же попытке доступа к БД.
Программа при запуске:
1. Заходит в каталог и пытается удалить оттуда все файлы. Те, кто не удалились, соответствуют работающим пользователям.
Дальше-по вкусу, можно принимать решение - отправить пользователя подальше, не пускать, если с эти именем уже вошли, составить список сидящих в программе и испросить благословения на работу.
Эта же операция может быть повторена b при открытии файла БД.
2. Программа заводит файл <userno>.<computername>.lock, где username - код пользователя, computername - погоняло компа, после чего тут же открывает его монопольно.
По концу программы этот файл закрывается и удаляется.
При аварии файл остаётся, но будет удалён при первой же попытке доступа к БД.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8031
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Приложение с монопольным доступом к БД
Все очень здорово, но можно пояснить ключевую фразу (последнюю):
останется заблокированным. И удалить его можно будет только после сброса блокировки на сервере (ну или его перезугрузке).
Или я не прав ?
Насколько я знаю, при аварийном завершении программы, контрольный файл на сервере "<userno>.<computername>.lock"Yufil писал(а):При аварии файл остаётся, но будет удалён при первой же попытке доступа к БД.
останется заблокированным. И удалить его можно будет только после сброса блокировки на сервере (ну или его перезугрузке).
Или я не прав ?
Make Clarion Great Again ! 
Re: Приложение с монопольным доступом к БД
Дык, программа начинается с попытки удалить ВСЕ файлы из каталога. Если файл не заблокирован (например, если прога слетела), его удалить можно, а если заблокирован-отнюдь.
Поэтому список неудалённых файлов показывает, кто в данный момент сидит в программе.
Поэтому список неудалённых файлов показывает, кто в данный момент сидит в программе.