Llamar registros de access y mostrarlos en listbox de excel

Solicito de su valiosa ayuda con el siguiente asunto: tengo un formulario en excel con varios textbox, combobox y un listbox, y debajo de este formulario tengo una tabla donde me muestra los registros almacenados en la base de datos access; cada vez que me sitúo sobre alguna fila de la tabla me llena los textbox y los combobox pero no logro hacer que me llene el listbox, adicional quiero que después de mostrar los registros del listbox (si por algún motivo me llegase a equivocar y seleccioné un item que no debia) ese registro se eliminara al "desselecionarlo".

1 respuesta

Respuesta
1

Sería bueno ver/conocer tus avances para poder entenderte mejor y ayudarte.

Abraham Valencia

Si sr, 

https://drive.google.com/file/d/1IR6jRrBUyZOo5DHGa06gyQdHFh_44Wey/view?usp=sharing 

En tu ListBox tienes datos de la columna H de la "Hoja2" ¿qué es lo que necesitas salga en dicho ListBox?

Abraham Valencia

Si sr, que pena, me explique mal, lo que deseo es que me seleccione los items de la lista que ya tiene cargados cada paciente en access ... Es decir, si yo me sitúo en la fila 2 de la tabla, me seleccione(sombree) los 11 exámenes que le corresponden al paciente registrado en esta fila y así sucesivamente. Esta información la trae de la tabla en access llamada Relacion

Cambia el procedimiento correspondiente por éste:

Public Sub MuestraDetalleCliente(id As Long)
    'Inserción de fila al final de la tabla pulsando TAB
    If id = 0 Then
        Call NuevoRegistro
        Exit Sub
    End If
    Dim cnn         As ADODB.Connection
    Dim rst         As ADODB.Recordset
    Dim strSQL      As String
    Dim cnn2        As ADODB.Connection
    Dim rst2        As ADODB.Recordset
    Dim str2SQL     As String
    'Establece la conexión con la base de datos
    Set cnn = New ADODB.Connection
    With cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .Open strDB
    End With
    'Consulta
    strSQL = "SELECT * FROM Pacientes WHERE Id=" & id
    str2SQL = "Select Nombre_cups From Relacion Where id_Paciente=" & id
    'Abrimos un RecordSet
    Set rst = New ADODB.Recordset
    Set rst2 = New ADODB.Recordset
    Rst. Open strSQL, cnn, adOpenForwardOnly, adLockOptimistic
    Rst2. Open str2SQL, cnn, adOpenForwardOnly, adLockOptimistic
      'Copiamos los resultados del RecordSet en los distintos textBox:
    Hoja4.txbId.Value = rst(0)
    Hoja4. TxbCiudad.Text = IIf(IsNull(rst(1)), "", rst(1))
    Hoja4. Txbproveedor.Text = IIf(IsNull(rst(2)), "", rst(2))
    Hoja4. TxbEmpresa.Text = IIf(IsNull(rst(3)), "", rst(3))
    Hoja4. TxbEmpresaMision.Text = IIf(IsNull(rst(4)), "", rst(4))
    Hoja4. TxbExamen.Text = IIf(IsNull(rst(5)), "", rst(5))
    Hoja4. TxbCargo.Text = IIf(IsNull(rst(6)), "", rst(6))
    Hoja4. TxbPaciente.Text = IIf(IsNull(rst(7)), "", rst(7))
    Hoja4. TxbCedula.Text = IIf(IsNull(rst(8)), "", rst(8))
    Hoja4. TxbTelefono.Text = IIf(IsNull(rst(9)), "", rst(9))
    Hoja4. TxbRadicado.Text = IIf(IsNull(rst(10)), "", rst(10))
    Hoja4. TxbNoFact.Text = IIf(IsNull(rst(11)), "", rst(11))
    Hoja4. TxbTotExamen.Text = IIf(IsNull(rst(12)), "", rst(12))
    Hoja4. TxbObservaciones.Text = IIf(IsNull(rst(13)), "", rst(13))
    Hoja4. TxbFechaOrden.Text = IIf(IsNull(rst(14)), "", rst(14))
    Hoja4. TxbHoraOrden.Text = IIf(IsNull(rst(15)), "", rst(15))
    Hoja4. TxbFechaAtencion.Text = IIf(IsNull(rst(16)), "", rst(16))
    Hoja4. TxbHoraAtencion.Text = IIf(IsNull(rst(17)), "", rst(17))
    Hoja4. TxbFechaEntrega.Text = IIf(IsNull(rst(18)), "", rst(18))
    Hoja4. TxbHoraEntrega.Text = IIf(IsNull(rst(19)), "", rst(19))
    Hoja4. TxbRecepcion.Text = IIf(IsNull(rst(20)), "", rst(20))
    Hoja4. TxbCorreo.Text = IIf(IsNull(rst(21)), "", rst(21))
  Hoja4. ListaExamenes. Clear
     Do While Not rst2.EOF
     Hoja4. ListaExamenes. AddItem rst2.Fields("Nombre_cups")
     Rst2. MoveNext
     Loop
    'Close
    Rst. Close
    Rst2. Close
    Cnn. Close
    Set rst = Nothing
    Set rst2 = Nothing
    Set cnn = Nothing
End Sub

Por lo que vi lo estabas intentando, era solo cuestión de establecer tu cadena SQL. Salu2

Abraham Valencia

nada amigo, me genera el siguiente error al ejecutar el código:

https://drive.google.com/open?id=1SC9aO73QZzZ_U_VllOWo5WQEHK70hrk7

Ese error ocurre si hiciste algún cambio entre el archivo que enviaste y al que has pegado el código enviado o si pegaste en "otro lado" dicho código. Te dejo un enlace con el archivo que enviaste ya con la modificación:

https://1drv.ms/x/s!ApkTgtnWCTgAh3QOfkRFbwV06Z3I 

Salu2

Abraham Valencia

amigo, gracias por tu respuesta, veo que ya me trae los exámenes por cada paciente....el problema surge cuando yo me equivoco y al paciente le seleccione un examen que no debía seleccionarle, o me falto un examen por seleccionarle, es allí donde me debe permitir mostrarme todos los exámenes para:
1. la lista contiene 228 exámenes, de los 228, el paciente 1 tiene 3 exámenes seleccionados y guardados en la base de datos access, pero hay 2 exámenes que seleccione demás y debo eliminarlos(como hago para eliminarlos).
2.  la lista contiene 228 exámenes, de los 228, el paciente 1 tiene 1 examen seleccionado y guardado en la base de datos access, pero hay 2 exámenes que me hicieron falta seleccionarlos por lo que necesitaría que me mostrara todos los elementos de la lista para agregarle los 2 que me hicieron falta.
te agradezco nuevamente por tu valiosa ayuda.
adjunto archivo con imágenes para una mejor orientación:
https://drive.google.com/open?id=1rbJMzORt0lihifCnDDQVS2KEA2yZAtt3 

Si quieres hacerlo todo con un solo ListBox, es decir que se vean todos los tipos de exámenes, que resalte los de cada paciente, que se pueda eliminar o agregar algunas, etc., la verdad se puede pero requiere programar mucho más y es algo que no requiere poco tiempo y no sé si alguien en el foro te lo podría hacer, en mi caso soy sincero y eso va más allá del tiempo que doy para ayudar.

Otra alternativa es que tengas dos ListBox, en uno ves, como ahora te lo deje, los exámenes de cada paciente y en otro tienes todos y vas "moviendo" información entre uno y otro para que, una vez que tengas los exámenes que quieras por paciente, lo guardes nuevamente en Access. Creo que esta alternativa te sería más fácil de elaborar.

Abraham Valencia

Amigo nuevamente gracias por tu ayuda, voy a insertar 2 listbox, una donde estén los 228 exámenes y otros donde voy a cargar los exámenes por paciente haber como me va y les cuento...

Un abrazo.

Abraham Valencia

Amigo una última consulta...ya tengo mis dos listbox, ya puedo agregar a la lista los items que (por error) me hicieron falta, pero para finalizar me falta poder eliminar algún ítem de esa lista...como haría, basándome en el archivo que me enviaste? 

Sin ver lo que tienes y/o saber exactamente que deseas es difícil ayudarte, dadas las nuevas modificaciones que seguramente has hecho.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas