Visual Basic para Aplicaciones - PROBLEMAS CON FORMULARIO Y UN RECORDSET

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de DANIEL
Val: 7
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

PROBLEMAS CON FORMULARIO Y UN RECORDSET

Publicado por DANIEL (4 intervenciones) el 23/07/2018 16:13:59
BUENAS COMPAÑEROS:

Tengo un formulario de registro, que me carga un recordset con 14,000 registros solo traigo dos columnas de esa tabla (SQL), pero tarda demasiado en cargar los datos que van separados en dos combobox uno con el codigo de un diagnostico y el otro con la descripción, si yo selecciono el codigo de un diagnostico, automitamente el otro me muestra la descripción de este diagnosticoeste, puede ser a lo inverso tambien, este es el codigo:

1
2
3
4
5
6
7
Private Sub cbo101_Click() '//-----------------CODIGO-----------
Me.cbodiag1.ListIndex = Me.cbo101.ListIndex
End Sub
 
Private Sub cbodiag1_Click() '//------------DESCRIPCION--------
Me.cbo101.ListIndex = Me.cbodiag1.ListIndex
End Sub

Codigo para llenar el Recordset, que esta en el load del formulario

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim CIE101Rs As ADODB.Recordset
Set CIE101Rs = New ADODB.Recordset
With CIE101Rs
.Open "select Diagnostico_Codigo, Diagnostico_Descripcion from tbl_Diagnosticos", CONEXION_ADO3, adOpenStatic, adLockOptimistic
If .RecordCount <> 0 Then
        .MoveFirst
        Me.cbo101.Clear
        Me.cbodiag1.Clear
        Me.cbo101.AddItem "  "
        Me.cbodiag1.AddItem "  "
        Do While Not .EOF
            CONTEO2 = Len(.Fields("Diagnostico_Codigo"))
            If CONTEO2 = 1 Then
                 Me.cbo101.AddItem .Fields("Diagnostico_Codigo") & " "
            Else
                 Me.cbo101.AddItem .Fields("Diagnostico_Codigo")
                Me.cbodiag1.AddItem .Fields("Diagnostico_Descripcion")
            End If
        .MoveNext
        Loop
    End If
    .Close
End With
Set CIE101Rs = Nothing
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de gilman
Val: 138
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

PROBLEMAS CON FORMULARIO Y UN RECORDSET

Publicado por gilman (47 intervenciones) el 24/07/2018 09:55:41
Para abrir el recordset usa adOpenForwardOnly en vez de adOpenStatic, debería mejorar el rendimiento.

De todas formas el código para una vez seleccionado un elmento en un combo posicionarse en el otro combo no debería funcionar correctamente. Me explico:

Pongamos por caso que la sentencia devuelve en la posición 10 el primer diagnóstico con código de longitud 1, este ocupará el ListIndex 10 del combo cbo101, el siguiente registro, sí el código no es de longitud 1, el código ocupará el ListIndex 11 del combo cbo101, pero la descripción ocupará el ListIndex 10 del combo cbodiag1, y así sucesivamente, con lo que a partir de la posición 10 los ListIndex no coincidirán, y los resultados devueltos al seleccionar un ítem en cualquiera de los combos devolverá, en el otro, un resultado erróneo, hasta el extremo de que, al seleccionar el último elemento del combo cbo101, se producirá un error, siempre que haya un diagnóstico con código de longitud 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de DANIEL
Val: 7
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

PROBLEMAS CON FORMULARIO Y UN RECORDSET

Publicado por DANIEL (4 intervenciones) el 24/07/2018 14:32:14
Buenas gracias compañero si me funciono mejoro el rendimiento de tiempo al cargar, sobre lo que me dices que debe mandar error ya se probo con 30 registros diferentes, yo guardo el codigo del diagnostico ejemplo X.09 descripcion aborto prematuro de 19 semanas por decir, esa dos cosas son las que guardo para el paciente en la atencíon medica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 138
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

PROBLEMAS CON FORMULARIO Y UN RECORDSET

Publicado por gilman (47 intervenciones) el 25/07/2018 08:48:55
Si no se produce el comportamiento que describo es porque no hay ningún diagnóstico con código de longitud 1, confirmalo, porque si no es así ocurrirá lo que te he comentado, el hecho de que hayas probado varios registros diferentes no significa nada, ya que como no has ordenado los registros en la SQL, no sabemos en que posición se cargan, y, si como me imagino, los combos están ordenados, aunque te posiciones en el último registro del combo de códigos no es seguro que la propiedad ListIndex coincida con el número de elementos y no tendría porque producirse el error.

Por contra si no hay ningún diagnóstico con código de longitud 1 el código:
1
2
3
4
5
6
7
CONTEO2 = Len(.Fields("Diagnostico_Codigo"))
If CONTEO2 = 1 Then
    Me.cbo101.AddItem .Fields("Diagnostico_Codigo") & " "
Else
    Me.cbo101.AddItem .Fields("Diagnostico_Codigo")
    Me.cbodiag1.AddItem .Fields("Diagnostico_Descripcion")
End If
Podría reemplazarse por:
1
2
Me.cbo101.AddItem .Fields("Diagnostico_Codigo")
Me.cbodiag1.AddItem .Fields("Diagnostico_Descripcion")
Obteniendose así un mejor remdimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar