Martha es muy sencillo, personalmente utilizo una función para hacer la conexión y otra para abrir el recordset, desconectado o conectado.
Supongamos que el cuadro combinado se llama cboBuscar. Al cargar el formulario principal tengo el siguiente evento
Private Sub Form_Load()
On Error GoTo ErrorHandler
Dim strSql As String
Set Me.cboBuscar.Recordset = recorset_desc("SELECT id, benefi_nombre FROM benefi_seguro_vida ORDER BY benefi_nombre ", 1)
ExitProcedure:
Err.Clear
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 0
Case Else
MsgBox "Error " & Err.Number & " (" & Err.Description & ") en procedimiento " & "Form_Open" & " " & Application.VBE.ActiveCodePane.CodeModule.Name
Resume ExitProcedure
End Select
End Sub
Asigno el recordset al cuadro combinado con la función recordset_desc()
Ahora en el evento Después de actualizar del cuadro combinado tengo el siguiente código:
Private Sub cboBuscar_AfterUpdate()
Dim mform As Form
Set mform = Me.frmSubBeneficiario.Form
Set mform.Recordset = recorset_desc("SELECT * FROM temporal WHERE id=" & Me.cboBuscar, 2)
End Sub
Nuevamente con la función recordset_desc() asigno el recordset al subformulario, observe que en este caso la función tiene 2 como segundo parámetro, esto indica que el recodset es actualizable.
FUNCIÓN RECORDSET_DESC()
Public Function recorset_desc(sql As String, Optional bloqueo As Byte) As ADODB.Recordset
' Función para obtener un recordset ADO desconectado o conectado
' en este caso retorna el select pasado en el parámetro sql
' Sirve como origen de datos para formulario, cuadro combinado y cuadro de lista
' Parámtros:
' sql --> Una instruccion SQL
' Bloqueo --> 1. Recordset Solo lectura - desconectado
' 2. Recordset actualizable no visible para los demás usuarios - conectado
' 3. Recordset actualizar por lotes - desconectado
' Elaborado por: EDUARDO PÉREZ FERNÁNDEZ
' Fecha: 12/12/2022
Dim strSql As String
Dim rs As ADODB.Recordset
'Valido la conexión con el servidor
If ConexionSQL = False Then
Call MsgBox("Se ha perdido la conexión con el servidor.", vbExclamation, "Atención")
Exit Function
End If
strSql = sql
'Crear e iniciar el recordset
Set rs = New ADODB.Recordset
rs.ActiveConnection = CnRemota
rs.CursorLocation = adUseClient
Select Case bloqueo
Case 1
rs.CursorType = adOpenForwardOnly
rs.LockType = adLockReadOnly
Case 2
rs.CursorType = adOpenStatic
rs.LockType = adLockPessimistic
Case 3
rs.CursorType = adOpenKeyset
rs.LockType = adLockBatchOptimistic
End Select
rs.Open strSql
'Desconectando
If bloqueo <> 2 Then ' solo lectura recordset desconectado
Set rs.ActiveConnection = Nothing
End If
'Devolver el recordset
Set recorset_desc = rs
'Quito la referencia a la variable objeto
Set rs = Nothing
End Function
La función ConexionSQL() permite hacer y validar la conexión con el servidor de Cloud Cluster, asumo que usted utiliza algo similar para la conexión. Utilizo un DSN y una variable pública para almacenar la conexión.
Public CnRemota As New ADODB.Connection
Si quiere ampliar información al respecto puede contactarme en [email protected]