Вопрос: Как полностью отсоединиться от файла бд access! | Добавлено: 18.06.09 20:43 |
Автор вопроса: ![]() |
Закрываю соединение с бд. Пытаюсь произвести сжатие бд, но вылезает ошибка: "Попытка открыть базу данных, открытую пользователем '..' на машине '..' для монопольного доступа. Повторите попытку, когда база данных освободится".
NameConnect.Close() ' отсоединение от NameMDB Dim Jro As JRO.JetEngine Jro = New JRO.JetEngine lJro.CompactDatabase(NameMDB, NameCopyMDB) Jro = Nothing Не сталкивался с этим, неужели Close не достаточно для освобождения файла бд??? ..подсоединение к бд было стандартным: NameConnect.Open() |
Ответы | Всего ответов: 16 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #1 | Добавлено: 18.06.09 21:01 |
В 4-ой строке опечатка, исправляю:
Jro.CompactDatabase(NameMDB, NameCopyMDB) Но вопрос остается не решенным! |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #2 | Добавлено: 19.06.09 03:49 |
Ни одного совета ![]() Может вопрос слишком простой!? Пытаюсь разобраться уже 2 недели. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #3 | Добавлено: 19.06.09 07:59 |
Может вопрос слишком простой!?
Да конечно простой.. Чудес на свете не бывает! Для выполнения метода CompactDatabase, нужен экслюзивный доступ, раз ты его получить не можешь, значит кто то или что то держит соеденение к БД.. Это может быть кто угодно.. например Access, к примеру ты просматривал записи в БД и оставил Access открытым и свернутым. Либо в твоем коде где то еще держится соеденение открытым или еще какая то программа юзает эту БД. Кроме того, есть такое понятие как пул соеденений (не знаю правда применимо ли оно к Access) при котором вызов метода Close() не приводит к удалению соеденения, а лишь к его закрытию и помещению в пул для скорейшего доступа к БД в следующий раз. Пул так же не даст возможность открыть БД в режиме монопольного доступа. Лучше всего попробовать занулить NameConnect после закрытия.. В любом случае косяк у тебя.. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #4 | Добавлено: 19.06.09 12:06 |
А этот "Пул" еще как-нибудь можно принудительно закрыть???
Пробовал: NameConnect = Nothing ..НЕ ПОМОГАЕТ! С файлом БД соединяюсь один раз при запуске программы, и рассоединяюсь при закрытии. Больше подсоединений к бд нет. И вот пытаюсь отсоедениться во время работы программы, не получается. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #5 | Добавлено: 19.06.09 12:38 |
С файлом БД соединяюсь один раз при запуске программы
Вот при соеденении попробуй открыть БД в монопольном режиме.. Если не выйдет, значит ищи кто еще юзает эту БД.. если же получится, значит косяк у тебя в коде и ты где то не закрываешь соединение.. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #6 | Добавлено: 19.06.09 23:51 |
...что косяк у меня, даже не сомневаюсь![]() БД открыта в монопольном доступе, это же пишется в сообщении об ошибке! А файл открывается только моей программой. В VB6 проблемы отконнектится не было. Мне кажется, грамотные программеры с access не связываются и найти ответ будет не просто ![]() Все равно спасибо! А есть смысл задать этот вопрос на форуме: vbnet, "Работа с данными"??? Или там все те же!? |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #7 | Добавлено: 20.06.09 21:46 |
БД открыта в монопольном доступе, это же пишется в сообщении об ошибке! А файл открывается только моей программой.
Отсюда можно сделать вывод, что соединение удерживаешь ты в коде.. Ищи где ты накосячил.. Ищи то место, где ты забываешь закрыть соединение.. В VB6 проблемы отконнектится не было.
а ты на чем пишешь, на NET? Есди это, так то зачем ты напрямую юзаешь com-объект??? Получить доступ к ядру ты сможешь через рефлексию.. Вот тут я как то показывал как это можно сделать.. http://kbyte.ru/Code/Show.aspx?id=120&lang=ru |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #8 | Добавлено: 20.06.09 22:21 |
Пишу на vb.net (vb2005), раньше юзал vb6. Соединений с базой больше нет - это железно!
Твоего примера так с хода не понимаю! Даже языка не пойму ![]() зачем ты напрямую юзаешь com-объект??? Получить доступ к ядру ты сможешь через рефлексию.. ..извини, но я ничего не понял, мне бы попроще! Нарыл, что команда NameConnect.Close() только запускает процесс отсоединения и не отслеживает само время процесса. Типа, прога работает дальше, но для реального отсоединения требуется время! Может исправляется с помощью обработчика ошибок Try…Catch, а может отслеживанием времени задержки. ..думаю как это реализовать. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #9 | Добавлено: 20.06.09 22:29 |
Попробуй вызвать что то типа NameConnect.Dispose() |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #10 | Добавлено: 20.06.09 22:39 |
NameConnect.Dispose() и NameConnect=Nothing не срабатывают ни вместе ни по отдельности ![]() Года пол назад, натыкался в одном из форумов на компактный код решения, но было не надо! |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #11 | Добавлено: 21.06.09 00:17 |
На форуме SQL.ru есть ветка посвященная аксу и модеры там знающие. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #12 | Добавлено: 21.06.09 00:23 |
Try…Catch и задержка времени оказались не для моего случая.
У меня 2 вопроса: 1. а что означает: Получить доступ к ядру ты сможешь через рефлексию
что ввести в гугле, чтобы разобраться!? 2. Открытие базы в монопольном режиме??? Строка подключения:
|
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #13 | Добавлено: 21.06.09 00:25 |
Try…Catch и задержка времени оказались не для моего случая.
У меня 2 вопроса: 1. а что означает: Получить доступ к ядру ты сможешь через рефлексию
что ввести в гугле, чтобы разобраться!? 2. Открытие базы в монопольном режиме это как??? Мое подключение:
|
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 10 |
Профиль | Цитата | #14 | Добавлено: 21.06.09 00:36 |
На форуме SQL.ru есть ветка посвященная аксу и модеры там знающие.
Спасибо, попробую и там. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #15 | Добавлено: 21.06.09 02:24 |
Прежде чем постить внимательно пролистай ихний ФАК.
В смысле FAQ ![]() |
|