Recuperar y buscar registros con recordset desconectado

¿Cómo se haría para obtener en un formulario la información del registro seleccionado de un cuadro combinado, la base de datos esta alojada en un servidor? Aclaro no existen tablas vinculadas.

1 respuesta

Respuesta
1

Martha su pregunta corresponde a la forma de trabajar con Access como Front End y un servidor de datos, por ejemplo, SQL Server, Oracle, MySQL, DBMaria y PostgreSQL como Back End. Personalmente utilizo PostgreSQL. Le preparé el siguiente ejemplo.

Nota: Asumo que ya sabe hacer la conexión con el servidor, en este ejemplo utilizo un DSN.

FORMULARIO

El formulario consta de 1 cuadro combinado, 1 cuadro de lista, 5 cuadros de texto para mostrar los datos del empleado, más 4 botones para desplazamiento entre registros.

Ahora, elijo un empleado del cuadro combinado.

Elijo a MARTHA TORRES y obtengo en los 4 campos de texto.

Ahora hago clic sobre el cuadro de lista en el empleado CARLOS MARTINEZ y obtengo.

EVENTOS DEL FORMULARIO

EVENTO AL CARGAR EL FORMULARIO

Private Sub Form_Load()
    On Error GoTo ErrorHandler
    Dim strSQL As String
    strSQL = "SELECT  tblempleados.* FROM tblempleados ORDER BY empleado"
    Set Me.Recordset = recorset_desc(strSQL)
    Me.Caption = Space(20)
    Call carga_buscar
    Call carga_lista
    Call bloqueo
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

LLamo los eventos carga_buscar; llena la información del cuadro combinado, carga_lista; llena la información del cuadro combinado. por último, el procedimiento bloqueo para bloquear los campos de texto, aunque el recordset NO es editable.

EVENTO CARGA_BUSCAR

Sub carga_buscar()
    On Error GoTo ErrorHandler
    Set Me.cboBuscar.Recordset = recorset_desc("SELECT  tblempleados.idempleado,tblempleados.empleado FROM tblempleados ORDER BY empleado")
    Me.Caption = Space(20)
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

EVENTO CARGA_LISTA

Sub carga_lista()
    On Error GoTo ErrorHandler
    Set Me.lstEmpleados.Recordset = recorset_desc("Select * from tblempleados")
    Me.Caption = Space(20)
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

EVENTO BLOQUEO

Sub bloqueo()
  Dim ctrl As Control
  For Each ctrl In Me.Controls
    If ctrl.ControlType = acTextBox Then
      ctrl.Locked = True
    End If
  Next
End Sub

Si observa los 3 primeros eventos utilizan la función recordset_desc(), tiene como fin crear el recordset desconectado.

FUNCIÓN RECORSET_DESC()

Public Function recorset_desc(sql As String) As ADODB.Recordset
    ' Función para obtener un recordset ADO desconectado
    ' 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
    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
    rs.CursorType = adOpenForwardOnly
    rs.LockType = adLockReadOnly
    rs.Open strSQL
  'Desconectando
  Set rs.ActiveConnection = Nothing
 'Devolver el recordset
  Set recorset_desc = rs
  'Quito la referencia a la variable objeto
  Set rs = Nothing
End Function

La función recibe como parámetro la consulta SQL, puede ser una tabla o un JOIN. Observe que esta función llama la función ConexionSQL(), permite verificar que este correcta la conexión con el servidor. Como esta función no es de mi autoría no la incluyo. Sobra mencionar que la Connection se define como Pública.

Me cuenta si le interesa el ejemplo, ya tiene mi correo.

Se olvidaron los eventos del cuadro combinado y el cuadro de lista.

Evento Después de actualizar del cuadro combinado. Observe que vuelve a cargar los datos del recordset, pero sigue desconectado.

Private Sub lstEmpleados_Click()
     Dim strSQL As String
     strSQL = "SELECT  tblempleados.* FROM tblempleados WHERE idempleado=" & Me.lstEmpleados & " ORDER BY empleado"
     Set Me.Recordset = recorset_desc(strSQL)
      Me.Comando16.Visible = False
      Me.Comando18.Visible = False
      Me.btnSiguiente.Visible = False
      Me.Comando19.Visible = False
      Me.Cuadro20.Visible = False
      Me.AllowAdditions = False
End Sub

Evento Al hacer clic del cuadro de lista

Private Sub lstEmpleados_Click()
     Dim strSQL As String
     strSQL = "SELECT  tblempleados.* FROM tblempleados WHERE idempleado=" & Me.lstEmpleados & " ORDER BY empleado"
     Set Me.Recordset = recorset_desc(strSQL)
      Me.Comando16.Visible = False
      Me.Comando18.Visible = False
      Me.btnSiguiente.Visible = False
      Me.Comando19.Visible = False
      Me.Cuadro20.Visible = False
      Me.AllowAdditions = False
End Sub

Como puede apreciar el código es sencillo, gracias a la función se puede economizar líneas de código. Con esta forma de recuperar la información permite que lo hagan muchos usuarios concurrentes y sin afectar el rendimiento.

Disculpas por el olvido.

¡Gracias! Eduardo, disculpa que no había valorado tu respuesta, lo voy a poner en práctica, para mi eres uno de los mejores expertos. Mil gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas