Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизЭксклюзивное соединение через ADO Найти похожие ветки
← →
H010d Freeze (2006-01-28 21:26) [0]Всем доброго времени суток.
Задача - необходимо, чтобы соединение с БД MS SQL через ADO было эксклюзивным (чтоб больше никто кроме меня к БД законектится не мог).
Вопрос - как это сделать.
ADOConnection.Mode = cmShareExclusive не помогает, я все равно могу установить несколько соединений с БД.
← →
Nikolay M. © (2006-01-28 23:02) [1]Например, соединяться и сделать DENY всем пользователям.
← →
Fay © (2006-01-29 04:16) [2]alter database YOUR_DATABASE set [SINGLE_USER | MULTI_USER | RESTRICTED_USER]
← →
H010d Freeze (2006-01-29 11:20) [3]
> Например, соединяться и сделать DENY всем пользователям.
При коннекте хотелось бы так:
if установлены ли соединения с БД then
begin
выдать warning "Подключены пользователи"
завершить приложение
end
else
begin
коннект
недопустить других коннектов
нормальная работа приложения
end
> alter database YOUR_DATABASE set [SINGLE_USER | MULTI_USER
> | RESTRICTED_USER]
Идея интересная, я так понял, получается что-то вроде:
alter database MY_DATABASE set SINGLE_USER with ROLLBACK IMMEDIATE
if успешно then
begin
нормальная работа приложения
alter database MY_DATABASE set MULTI_USER
end
else
begin
выдать warning "Подключены пользователи"
завершить приложение
end
Хотелось бы конечно эксклюзива добиться средствами ADO, может это все-таки возможно?
← →
sniknik © (2006-01-29 11:54) [4]> получается что-то вроде:
неправильно понял. один раз установи и это будет свойство базы. ado (и др.) второй раз не подключится.
← →
sniknik © (2006-01-29 11:56) [5]> Хотелось бы конечно эксклюзива добиться средствами ADO, может это все-таки возможно?
т.е. ADO подключается только один раз, а ODBC/... сколько угодно... ;о) бред. это только на сервере регулируется.
← →
H010d Freeze (2006-01-29 12:20) [6]
> неправильно понял. один раз установи и это будет свойство
> базы. ado (и др.) второй раз не подключится.
Фишка вот в чем, есть БД и два приложения - обычное клиентское приложение и инструментальное клиентское приложение. Инструментальное приложение требует эксклюзивного соединения (чтоб обычные клиенты при работе инструментального подключиться не могли).
Поэтому SINGLE_USER как постоянное свойство базы не подходит (многопользовательская работа обычных клентов накроется).
А если делать так как я писал выше, то если при работе инструментальной утилиты упадет сервак или сама утилита то БД останентся в режиме SINGLE_USER и обычные клиенты пойдут лесом...
Поэтому и хочется эксклюзив сделать средствами ADO. Может быть как-то при коннекте можно узнать количество установленных соединений с БД и в контексте каких приложений они выполненны...
Например в FIBPlus через TpFIBDatabase можно узнать имена пользователей, подключенных к указанной БД (может и инфу про соединения можно вытащить, подробно не копался...)
> т.е. ADO подключается только один раз, а ODBC/... сколько
> угодно... ;о) бред.
А при чем тут ODBC, я соединение устанавливаю через Microsoft OLE DB Provider for SQL Server.
Связку Microsoft OLE DB Provider for ODBC Drivers -> ODBC Driver for Microsoft SQL Server НЕ использую :)
← →
Nikolay M. © (2006-01-29 12:52) [7]Имхо, не надо тебе пока писать инструментальные утилиты, особенно такие, которые могут уронить БД...
Что значит "сделать ср-вами АДО"? АДО - это не более чем механизм доступа. Это все равно, что вскапывать поле лопатой, но так, чтобы никто другой, даже на тракторе, рядом копать не смог бы.
> Может быть как-то при коннекте можно узнать количество установленных
> соединений с БД и в контексте каких приложений они выполненны.
sysprocesses
← →
H010d Freeze (2006-01-29 13:07) [8]
> Имхо, не надо тебе пока писать инструментальные утилиты
С чего вдруг...
Наверно я не совсем понятно объяснил: не инструментальная утилита, а инструментальное клиентское приложение - "инструментальное" в контексте программного комплекса а не БД вообще. Эта утилита закачивает в базу (в обычные пользовательские таблицы) необходимые статические сведения...
> Что значит "сделать ср-вами АДО"?
Я имею в виду следующий сценарий работы:
Если коннектится инструментальное приложение и с БД установлены другие соединения - то warning и завершение работы
Если коннектится обычное приложение и с БД установлено соединение инструментальным приложением, то warning и завершение работы
← →
sniknik © (2006-01-29 13:24) [9]> А при чем тут ODBC
при том что ADO не единственное средство доступа и ограничивать только его смысла нет, надо "источник перекрыть", иначе это будет не монопольным (в вопросе было выскозано это).
> Я имею в виду следующий сценарий работы:
> ...
ну так вот если бы было такое для ADO, то на другие срдства доступа оно не распространялось бы. (это не локальная таблица которую можно монопольно открыть, сдесь базой управляет сервер)
просто ты опять путаеш, с теми у кого возможно такое (локальные) адо это свойство все одно движку передает, он открывает монопольно, все последующие блокируются. у mssql такого нет, передавать некуда. а то что есть тебе сказали... попытайся обойтись. (или действительно "не надо тебе пока ..." ;о))
← →
H010d Freeze (2006-01-29 13:43) [10]Ладно, пороюсь по системным таблицам и хп,
раз все говорят, что средства ADO не помогут, буду делать средствами приложений (сценарий см. чуть выше).
Всем спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.021 c