درست اینه که هیچ وقت هیچ کانکشنی رو باز نگه نداشت و هر زمان که لازم داشتید همون زمان Connection رو باز کنید و همون زمان هم ببندید شاید بگید این روش کند میشه ولی در اصل اینطور نیست و OLEDB یا ODBC از تکنیکی استفاده می کنند به نام Connection Pooling که این کاهش سرعت رو جبران میکنه. هر زمان نیاز به یک Recordset یا انجام یک دستور SQL داشتید میتونید مثل روش زیر اونو بگیرید
Option Explicit
Private connectionString As String
Public Function GetRecordSet(ByRef rsResult As ADODB.Recordset, ByVal CommandText As String) As Long
'
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
.connectionString = connectionString
.CursorLocation = adUseClient
.Open
End With
If rsResult Is Nothing Then rsResult = New ADODB.Recordset
If rsResult.State = adStateOpen Then rsResult.Close
rsResult.Open CommandText, cn
If Not (rsResult.EOF Or rsResult.BOF) Then
GetRecordSet = rsResult.RecordCount
End If
'Unmark this line if you don't need connected recordsets
'rsResult.ActiveConnection = Nothing
cn.Close
Set cn = Nothing
'
End Function
Public Function ExecuteSQL(ByVal CommandText As String) As Long
'
Dim cn As ADODB.Connection
Dim lngTemp As Long
Set cn = New ADODB.Connection
With cn
.connectionString = connectionString
.CursorLocation = adUseClient
.Open
End With
Call cn.Execute(CommandText, lngTemp)
ExecuteSQL = lngTemp
cn.Close
Set cn = Nothing
'
End Function