Access denied после закрытия ADO

Программирование на Visual Basic for Applications
polycarbonate
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 16.06.2004 (Ср) 10:56

Access denied после закрытия ADO

Сообщение polycarbonate » 16.06.2004 (Ср) 11:52

День добрый!
Такое дело - из под VBA посредством ADO коннекчусь к FoxPro базе, делаю там что-то, потом закрываю коннект, закрываю рекордсет -

myConnection.Close
Set myConnection = Nothing
myRecordset.Close
Set myRecordset = Nothing

выхожу из своей программы.
Проблема в том, что база, с которой я работал остается недоступной вплоть до полного выхода из офис приложения :?
Т.е. пока я не закрою весь скажем Excel, до базы будет не добраться (Ассess denied).
Может кто сталкивался с таким, подскажите, плз!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2004 (Ср) 12:02

Во-первых, вначале надо закрывать рекордсет, а потом уже коннекцию.
А кроме того, какая версия MDAC установлена? А то драйвера для .DBF малость кривоваты, у меня с ними постоянные глюки (то длинные имена читать отказывается, то с кодировками накладки).
Lasciate ogni speranza, voi ch'entrate.

polycarbonate
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 16.06.2004 (Ср) 10:56

Сообщение polycarbonate » 16.06.2004 (Ср) 12:43

На счет последовательности не знал, но в проге она как надо - сначала закрывается рекордсет, потом коннект.
Какой MDAC тоже не в курсе (я уже в конец с этими технологиями запутался, что к чему относится и что в себя включает просто не понимаю! :(( )

вообще код в целом такой:

Dim DbfConnection
Dim DbfRecordset

Set DbfConnection = New ADODB.Connection
Set DbfRecordset = New ADODB.Recordset

Dim SQLConStr As String
Dim SQLRecStr As String

SQLConStr = "Provider=MSDASQL.1;Persist Security Info=False;DSN=Таблицы Visual FoxPro;UID=;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;SourceDB=" & FilePath & ";"

SQLRecStr = "SELECT * FROM " & FileName

DbfConnection.Open SQLConStr
DbfRecordset.Open SQLRecStr, DbfConnection, adOpenDynamic, adLockOptimistic

DbfRecordset.Close
Set DbfRecordset = Nothing
DbfConnection.Close
Set DbfConnection = Nothing

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2004 (Ср) 13:09

Ну в принципе правильно.
Я бы только код бы написал чуть по другому. От DbfRecordset можно вообще отказаться и использовать:
Код: Выделить всё
SQLConStr = "Provider=..."
SQLRecStr = "SELECT * FROM " & FileName
DbfConnection.Open SQLConStr
With DbfConnection.Execute(SQLRecStr)
  If Not (.EOF) Then
    ...
  End If
  .Close
End With
DbfConnection.Close
Set DbfConnection = Nothing
Lasciate ogni speranza, voi ch'entrate.

polycarbonate
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 16.06.2004 (Ср) 10:56

Сообщение polycarbonate » 16.06.2004 (Ср) 13:28

Вот и мне кажется, что все правильно, но факт остается фактом - к базе не пускает пока не закроешь всe офис приложение :(

polycarbonate
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 16.06.2004 (Ср) 10:56

Сообщение polycarbonate » 17.06.2004 (Чт) 7:33

я так понимаю, что VBA не удаляет созданные объекты не смотря на то, что я их вроде как закрываю и убиваю ссылки на них.
(такое было замечено даже на обычных переменных типа Integer или Boolean и т.д. - значения, которые они имели к концу работы сессии программы, доступны при следующем запуске программы...)
как с этим бороться?
ЗЫ: на счет обычных переменных - это работает, когда они объявлены глобально, с локальными все Ok! А вот с объектами все хуже - локальны только ссылки на них, вот объекты и висят до одури, точнее до закрытия всего приложения...


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 105

    TopList