Открытие соединения с несколькими базами данных - пробуждение - PullRequest
0 голосов
/ 01 мая 2020

У меня есть большое количество Azure баз данных, в настоящее время 6, но со временем go будет работать.

К базам данных обращаются очень редко, поэтому для экономии средств они устанавливаются в автоматический режим сна после 1 час.

Мне нужно подключиться к одной или нескольким из этих баз данных в Access для извлечения данных, поэтому мне нужно активировать правильные базы данных, что занимает около 30-60 секунд каждая.

Я пытаясь динамически добавить их в виде связанных таблиц, используя AttachDSNLessTable, но прежде чем я вызову это, мне нужно разбудить базы данных. Я хотел бы сделать это асинхронно, поскольку процесс пробуждения может занять некоторое время, которое станет нелепым при увеличении числа баз данных.

Моя идея заключалась в создании массива соединений ADODB, l oop через массив и вызовите метод .Open с параметром adAsyncConnect, затем контролируйте состояние подключения всех подключений, пока все они не отобразятся как Открыто или нет ошибок.

Код, который у меня есть пытался ниже:

Dim databases() As DatabaseInfo
Dim connections() As ADODB.Command
Dim drv As String
Dim i As Integer

databases = getDatabaseInfo()
drv = GetDriverName()

ReDim connections(UBound(databases))

For i = 0 To UBound(databases)

    Dim c As ADODB.Command
    Dim con As ADODB.Connection
    Dim sConn As String

    sConn = "ODBC;DRIVER=" & drv & ";SERVER=" & databases(i).Server & ";DATABASE=" & databases(i).Name & ";UID=" & databases(i).Username & ";PWD=" & databases(i).Password
    connections(i) = New ADODB.Connection 'Receive error 
    connections(i).Open sConn, , , adAsyncConnect

Next i

Я получаю ошибку компиляции в строке connections(i) = New ADODB.Connection, ошибка Invalid use of property.

Означает ли это, что нет никакого способа использовать ADODB соединения в массиве? Если нет, то есть ли другой способ асинхронного подключения к списку баз данных?

1 Ответ

2 голосов
/ 06 мая 2020

Это код проблемы:

Dim connections() As ADODB.Command

Имя и использование переменной указывают, что ваше намерение является массивом соединений, поэтому вместо этого должно быть:

Dim connections() As ADODB.Connection

Это позволит избежать ошибка компиляции из-за попытки назначить экземпляр соединения переменной команды.

...