Single User

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Single User

Сообщение Александр Андреев » 06.06.2003 (Пт) 11:14

Любителям брейнстормов посвящается...

Есть у меня база, которая работает под SQL Server. К ней коннектится моя программа.
Q: Нужно сдалать так, чтобы в каждый момент времени с базой работал только один экземпляр программы, причем не только на локальной машине, а и на всех других машинах сети, откуда можно законнектиться к этой базе.

Можно поставить атрибут Single User у базы, скажете вы. Но есть одна сложность. Дело в том, что у меня в программе создается два соединения: ADODB.Connection и DTS.Connection. Первое соединение активно всегда, пока запущена программа. Второе создается при определенных действиях по импорту/экспорту данных. Если стоит Single User, то DTS.Connection уже не может соединиться с базой. Круто, если можно было бы заставить DTS работать через ADODB. Я об этом уже спрашивал (http://bbs.vbstreets.ru/viewtopic.php?t=1525) но мне никто так и не ответил. :(

Подскажите, как решить Q, не используя параметр Single User?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.06.2003 (Пт) 13:23

А чем плох вариант, когда клиентская программа сама обрабатывает такие моменты? К примеру, в базе данных храниться таблица APP_OPTIONS и один из параметров устанавливается при запуске программы и сбрасывается при завершении работы. И соответственно, при запуске программа проверяет этот параметр и если он уже установлен, то предупреждает об этом и завершает работу.
Lasciate ogni speranza, voi ch'entrate.

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 06.06.2003 (Пт) 13:28

А если программа вдруг вылетит во время исполнения? Или компьютер перезагрузят во время ее исполнения? Тогда она не успеет сбросить этот параметр. Придется лезть в базу и сбрасывать его ручками. Пользователи, естественно, этого делать не будут. Они будут звонить и говорить, что ничего не работает...

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 18.06.2003 (Ср) 11:38

Ну в общем-то решение найдено. Нужно смотреть в таблицу master..sysprocesses и проверять поле program_name.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.06.2003 (Ср) 16:36

И то верно, это пожалуй самое оптимальное :)

Но кстати мой вариант тоже рабочий. К примеру, программа каждые две минуты записывает текущие дату и время. И при запуске проверяется также и это поле и если значение этого поля расходится с текущим временем более, чем на пять (например) минут, значит программа слетела и нужно сбросить тот параметр.
Но это криво, использование системных таблиц лучше.
Lasciate ogni speranza, voi ch'entrate.

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 18.06.2003 (Ср) 16:58

Ты прямо мои мысли читаешь. Я прорабатывал такой вариант, но там была такая штука: в эту таблицу надо было класть время на сервере, а то у разных клиентов может разное время стоять и непонятки получатся.
Потом нашел другой вариант и забил :)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 212

    TopList  
cron