Не удается дважды подключиться к связанной таблице с помощью драйвера ACE / JET - PullRequest
0 голосов
/ 16 апреля 2010

Я пытаюсь подключиться к связанной таблице базы данных MS Access в VBScript. Он работает нормально при первом подключении к одному соединению, но если я закрываю это соединение и открываю новое в том же сценарии, это выдает ошибку.

test.vbs(13, 1) Microsoft Office Access Database Engine: 
ODBC--connection to '{Oracle in OraClient10g_home1}DB_NAME' failed.

Это некоторый код, который вызывает ошибку. TABLE_1 является связанной таблицей ODBC в файле test.mdb.

Dim cnn, rs

Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=test.mdb"

Set rs = cnn.Execute("SELECT * FROM [TABLE_1]")
rs.Close
cnn.Close

Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=test.mdb"

Set rs = cnn.Execute("SELECT * FROM [TABLE_1]") '' crashes here
rs.Close
cnn.Close

Эта ошибка не возникает, если я пытаюсь получить доступ к обычной таблице доступа. Сейчас я думаю, что это ошибка в драйвере Oracle ODBC.

1 Ответ

0 голосов
/ 16 апреля 2010

Я только что попробовал это, используя несколько таблиц, которые я связал с SQL-сервером, и он работает просто отлично (извините, у меня нет оракула БД для проверки), но у меня есть несколько вещей, которые вы можете попробовать.

Во-первых, в вашей строке DIM вы не указываете тип для cnn и rs.Как правило, это плохая практика, поэтому замените ее на что-то вроде

Dim cnn as ADODB.Connection
Dim rs as ADODB.Recordset

Во-вторых, вам нужно закрыть связь между операторами?Лучше держать его открытым и просто повторно использовать.Также, как сила хаббита, я также склонен закрывать любой открытый объект, а также устанавливать его на ничто, например

Set cnn=nothing

Если вам нужно закрыть его и открыть снова, попробуйте установить его на ничто, посмотрите, поможет ли это

...