Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.013 c
2-1141233776
49 Cent
2006-03-01 20:22
2006.03.19
Можно ли подсвечивать строку в Dbgrid?


3-1138267273
kyn66
2006-01-26 12:21
2006.03.19
Как спрятать скроллинг по гриду ?


1-1139781777
FBuilder
2006-02-13 01:02
2006.03.19
Посылка строк


15-1140472832
GanibalLector
2006-02-21 01:00
2006.03.19
Снифер для GPRS сетей


2-1141215909
WestBronx
2006-03-01 15:25
2006.03.19
Сортировка в TListBox.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский