|
|
|
| На сервере лежит файл .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: | |
|
| |
|
|
|
| МОжет вместо DAO c OpenDatabase использовать ADO Connection ? | |
|
| |
|
|
|
|
| как вариант (нужна ссылка на 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
|
| |
|
| |
|
|
|
| Стыдно мне, господа и дамы, стыдно... Хотел даже тихо молча пропасть, чтобы не признаваться в такой лаже, но собрал всю силу воли в кулак, и вот... каюсь перед всеми...
В процедуре(довольно солидной по кол-ву строк) обнаружилось местечко, где запускалась другая процедура, написанная как тестовая, но вовремя не уничтоженная. А в той(тестовой) процедуре база открывается, но код на закрытие базы не был прописан. Вот эта сволочь и не давала базе закрываться
Посыпаю голову пеплом, и бьюсь головой об стол.... Можно начинать кидаться банановой кожурой Пли... | |
|
| |