|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Приветствую всех. Как уже понятно многим стало, не получается перевести из программы на VB, которая работает с базой на MS SQL в SINGLE USER Подключаюсь к базе через ADO используя Provider=SQLOLEDB Наслышан про проблемы создания скрытых подключений в ADO, но как это исключить? Хотя бы перед переводом в SINGLE USER и обратно? Может быть перед выполнением инструкции "почистить" дополнительные подключения? Или как? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 10:04 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Как происходит работа с данными, в частности запись в базу и какой курсор используется? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 10:27 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Shocker.Pro, чтение через Код: plaintext
курсор не выставляю, по дефолту идет запись в основном 95%ов сказал бы через Код: plaintext 1. 2.
есть пара "участков" кода где выставлен курсор adUseClient ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 10:36 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
по дефолту adUseServer в общем-то, если не используется открытие рекордсета для записи, адо лишних соединений не плодит, по крайней мере у меня. ну а что видно в списке соединений? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:05 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Shocker.Pro, пробую получить коннекты к базе через Код: plaintext
до коннекта уже выходит одно подключение со статусом sleeping забыл сказать что еще используется пулинг подключений и запретить это не смогу ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:15 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
вместо: Код: plaintext
надо так: Код: plaintext 1.
тогда будет использоваться всегда одно соединение cnnMain ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:15 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Konst_One, хмм... не знал про это. сейчас сделал чуть по другому, предварительно перевел в базу в SINGLE_USER режим затем, попробовал запустить клиентскую прогу, подключение прошло успешно, после подключения были операции обращения к базе по схеме Код: plaintext 1.
были еще обращения к хранимкам, ошибка возникла как раз в них, т.е. скрытое создание подключений хранимки запускаются в виде: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
и при выполнении таких хранимок и выкидывает с ошибкой: Cannot open database "DBNAME" requested by the login. The login failed. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:41 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
А не открыт ли при этом какой-нибудь рекордсет? я сталкивался с тем, что при открытом рекордсете при попытке открыть другой на том же соединении, АДО плодит еще одно соединение. При этом все нормально, если рекордсет ForwardOnly-ReadOnly - не плодит. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:47 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:56 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
всегда надо Set делать, иначе может создать новый экземпляр подключения ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 11:57 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Shocker.ProА не открыт ли при этом какой-нибудь рекордсет? я сталкивался с тем, что при открытом рекордсете при попытке открыть другой на том же соединении, АДО плодит еще одно соединение. При этом все нормально, если рекордсет ForwardOnly-ReadOnly - не плодит. возможно, но.... чтобы не оставлять открытых recordset'ов нужно будет всю логику программы переделывать Konst_Oneвсегда надо Set делать, иначе может создать новый экземпляр подключения спасибо за совет, переделал но по любому не выкидывает ммм.... вообще я это делал конечно для монопольного доступа к данным, точнее чтобы сменить операционный день но так как перевести базу в SINGLE USER через ADO не получается, либо получится только переделав всю программу приходится обдумывать другие варианты, скажем так эмуляции монопольного режима, на ум приходит 2 варианта: 1. Создаю таблицу TblExclusive, и есть глобальная переменная rstExclusive в клиентской программе. Клиентская программа при подключении к базе данных, открывает таблицу TblExclusive следующим способом: Код: plaintext 1.
В участке кода где нужно "инициализировать" монопольный доступ, клиентская прога пытается открыть таблицу TblExclusive с HINT'ом XLOCK, т.е. Код: plaintext
Но такой метод не получается реализовать, XLOCK по любому срабатывает 2. Другой метод отслеживать подключения к базе на уровне SQL Server'а. Но здесь тоже много "подводных камней", может быть в силу отсутствия опыта в разработке под MS SQL, или может быть из-за специфики логики работы приложения. Дело в том что к базе подключаются через один логин, а сессии пользователей и пользователи управляются на логическом уровне клиентской прогой, т.е. таблица TblUsers и TblUserSessions и т.д. Проблема в отслеживании дисконнектов и т.д. Может быть у вас уже был опыт разработки в этом направлении? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 12:22 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
не понял вашу проблему, с чем вы там боритесь? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 12:26 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Konst_One, организация монопольного доступа есть база на SQL Server 2008 R2, клиент написан на VB нужно чтобы определенные операции реализовывались в монопольном режие, перевод в SINGLE USER в ADO не получается ну поэтому и ищу обходные пути ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 12:31 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
что-то странное задание какое-то. в монопольный режим через osql, например, можно базу перевести скриптом ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 13:04 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Konst_One, ну это само собой, просто после перевода в монопольный режим нужно "проделать" кое-какие запросы через хранимки и recordset'ы поэтому эта версия пока что отпадает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 14:09 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
orunbekKonst_One, ну это само собой, просто после перевода в монопольный режим нужно "проделать" кое-какие запросы через хранимки и recordset'ы поэтому эта версия пока что отпадает и в чём проблема? g ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 14:24 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
перевели скриптом, отключились, подключились прогой своей , сделали, что нужно, отключились ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 14:24 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Konst_Oneперевели скриптом, отключились, подключились прогой своей , сделали, что нужно, отключились я вот сейчас перевожу скриптом, подключаюсь прогой но и в этом случае хранимки не работают почему то, хотя я изменял коды Код: plaintext 1. 2. 3. 4. 5.
на Код: plaintext 1. 2. 3. 4. 5.
Поэтому и ищу альтернативные способы контроля монопольного доступа ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 15:59 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
всё должно работать. если у вас база переведена в режим одного пользователя и вы не можете подключиться, то скорее всего соединение уже занято кем-то, проверяйте ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 16:05 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Konst_One, тестовый сервак у меня на ноуте, кроме меня никто не подключен не работает, поэтому я и начал "карты раскрывать" в свое время пытался реализовать журналирование изменений где клиент был написан тоже на VB база на MS SQL и ADO из-за того что на ADO создаются "лишние" коннекты пришлось пойти обходными путями ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 16:19 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
проверяйте всякие контролы, может вы что-то используете в программе на основе соединений с базой ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 16:53 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
только recordset'ы свойства подключений которых выше приводил, хранимки и есть пара cnnMain.Execute strSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 16:56 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
если везде у вас используется только одно глобальное соединение, которые вы открываете при старте программы, то должно работать. Код: plaintext
должно быть для всех видов объектов. это всё можно промониторить профайлером на сервере SQL. добейтесь чтобы ваша прога делала только один коннект в обычном режиме, потом уже пробуйте в монопольном. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 17:03 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
Konst_Oneесли везде у вас используется только одно глобальное соединение, которые вы открываете при старте программы, то должно работать. Код: plaintext
должно быть для всех видов объектов. ... ... сделал так, но не помогло почему то можно еще поискать через Profiler, но полюбому это кажется мне долгой историей ммм... я пока мест подумал о другой схеме, авторизация через клиентскую программу работает через хранимку в коде хранимки добавил Код: plaintext 1.
и затем в месте установки монопольного режима можно проверить через Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2011, 19:45 |
|
VB & MS SQL. Проблема перевода в SINGLE USER через ADO
|
|||
---|---|---|---|
#18+
у вас явно что-то с логикой работы программы не то. вы видимо пытаетесь из уже открытого соединения установить монопольный доступ к базе. так нельзя. надо через консоль (утилита командной строки osql) серверную выполнить перевод сервера в монопольный режим, все остальные соединения к серверу при этом будут убиты (поищите скрипт на форуме MS SQL, его неоднократно выкладывали). потом osql сеанс закрываете и уже после этого можете запускать свою программу и коннектиться к серверу. PS проверьте, может у вас ещё job-ы какие-нибудь на сервере работают, тогда агента надо остановить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2011, 11:18 |
|
|
start [/forum/topic.php?fid=60&msg=37255342&tid=2158727]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 260ms |
0 / 0 |