Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VBA MS Office

Программирования для MS Office кроме ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Закрытие базы данных
 
 автор: Штурман   (28.01.2008 в 09:55)   личное сообщение
 
 

На сервере лежит файл .mdb. С разных компов необходимо периодически к нему подключаться.
Подключаюсь через:
Set Db = OpenDatabase(путь, True, False, "MS Access")

Set r = Db.OpenRecordset("таблица", dbOpenDynaset)


произвожу необходимые действия, и отключаюсь в конце процедуры
r.Close
Set r = Nothing
Db.Close
Set Db = Nothing


Но при попытке получения доступа к базе с другого компа, выясняется, что база остается занятой до тех пор, пока не будет закрыта книга Excel, с которой произошло предыдущее подключение. Пару раз даже потребовалось перезагружать комп, с которого запускалось подключение к базе. Попытка открытия .mdb ручками так же не возможна. При двойном клике ничего не происходит, и даже не выскакивают предупреждения, что файл занят другим предложением.

Как правильно закрыть базу данных, чтобы можно было подключаться с разных компов, не закрывая управляющие книги Excel ???

ПыСы: Собственно, то же самое происходит и при переносе базы с сервера на локальный диск. Подключение к базе происходит нормально, отключения нет, пока не закроешь управляющую книгу. :cry:

  Ответить  
 
 автор: osmor   (28.01.2008 в 13:04)   личное сообщение
 
 

МОжет вместо DAO c OpenDatabase использовать ADO Connection ?

  Ответить  
 
 автор: Штурман   (29.01.2008 в 17:02)   личное сообщение
 
 

Это месть за долгое отсутствие? Я с DAO то только недавно разобрался... С VBA я дружу хорошо, но вот изучением баз данных никогда не увлекался за ненадобностью. Посему, встречный вопрос.

МОжет вместо DAO c OpenDatabase использовать ADO Connection ?
а как?

  Ответить  
 
 автор: osmor   (29.01.2008 в 17:51)   личное сообщение
 
 

как вариант (нужна ссылка на ADODB)

Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "SElect * from tbl_dogovora", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=диск:\Путь\база.mdb"
Do While Not rst.EOF
  Debug.Print rst.Fields("ИмяПоля").Value
  rst.MoveNext
Loop
rst.Close


это если только один запрос надо или можно открыть Connection


Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=диск:\Путь\база.mdb"
Set rst = New ADODB.Recordset
rst.Open "SElect * from tbl_dogovora", con
Do While Not rst.EOF
  Debug.Print rst.Fields("Поле").Value
  rst.MoveNext
Loop
rst.Close
con.Close

  Ответить  
 
 автор: Штурман   (30.01.2008 в 13:29)   личное сообщение
 
 

Стыдно мне, господа и дамы, стыдно... Хотел даже тихо молча пропасть, чтобы не признаваться в такой лаже, но собрал всю силу воли в кулак, и вот... каюсь перед всеми...
В процедуре(довольно солидной по кол-ву строк) обнаружилось местечко, где запускалась другая процедура, написанная как тестовая, но вовремя не уничтоженная. А в той(тестовой) процедуре база открывается, но код на закрытие базы не был прописан. Вот эта сволочь и не давала базе закрываться
Посыпаю голову пеплом, и бьюсь головой об стол.... Можно начинать кидаться банановой кожурой Пли...

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList