【发布时间】:2020-08-15 21:26:07
【问题描述】:
我有大量的 Azure 数据库,目前有 6 个,但随着时间的推移会增加。
数据库的访问频率非常低,因此为了节省成本,它们被设置为 1 小时后自动休眠。
我需要在 Access 中连接到一个或多个这些数据库以检索数据,因此需要唤醒正确的数据库,每个数据库大约需要 30-60 秒。
我正在尝试使用AttachDSNLessTable 动态地将它们添加为链接表,但是在我调用它之前我需要唤醒数据库。我想异步执行此操作,因为唤醒过程可能需要一些时间,随着数据库数量的增加,这将变得荒谬。
我的想法是创建一个 ADODB 连接数组,遍历该数组并使用 adAsyncConnect 选项调用 .Open 方法,然后监视所有连接的连接状态,直到所有连接都出现 Open 或有错误。
我一直在尝试的代码如下:
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 连接? 如果没有,还有其他方法可以异步连接到数据库列表吗?
【问题讨论】:
-
看来
Dim connections() As ADODB.Command应该是Dim connections() As ADODB.Connection。 -
5 DTU 的数据库每月需要 8 澳元才能获得 2GB 的数据。如果您可以将所有现有数据库压缩到一个数据库中(使用模式),那么您可以获得一个成本相当低的解决方案,而无需摆弄按需。
-
@DanGuzman 哇,就是错字,谢谢
-
@Nick.McDermaid 已经在那里托管了很多小型的,但是其中许多是 2-50gb
-
@DanGuzman 你能发帖作为答案吗?它将有助于报告功能。谢谢。
标签: sql-server vba azure adodb