Programación General > Visual Basic 6.0 e inferiores

 Consulta Con Checkbox

(1/1)

az8:
tengo un problema con una query y unos chekbox.. pues resulta ke mi query me arroja 2 resultados ... aunke me puede arrojar varios... de acuerdo aun parametro...
me arroja estos 2 reslutados

Septiembre
Agosto

lo ke kiero es ke al momento de ejecutar esa consulta desde visual.. tengo 12 checkbox uno para cada mes del año... y lo ke kiero es ke se habiliten y deshabiliten los checkbox correspondientes a los meses del resultado de mi query o sea sep y ago...

espero me ayuden..

Gracias
ate

az8

RadicalEd:
Coloca la propiedad 'Value=1' para que el CheckBox te quede seleccionado.

az8:
eso ya lo hice y solo me toma y solo me toma el primer resultado de la consulta o sea ke si mi resultado me arroja
Septiembre
Agosto
solo me toma el primer valor o sea "Septiembre" y me activa septiembre
mi codigo es el siguiente


--- Código: Text ---SqlPagosHechos = "SELECT MesPagado from Pagos where IdAlumno= '" & LVAlumnos.SelectedItem.Text & "' " Call OnRs(rspago, SqlPagosHechos)         mes = rspago.Fields("MesPagado")                If mes = "Enero" Then chkEne.Value = 1 Else chkEne.Value = 0             If mes = "Agosto" Then chkAgo.Value = 1 Else chkAgo.Value = 0        If mes = "Septiembre" Then chkSep.Value = 1 Else chkSep.Value = 0 
al ejecutarse solo me activa el chk de septiembre y no me activa el de agosto .... eso es cuando tengo solo 2 registros como resultados pero puedo tener distintos registros obviamente.... esto es el codigo ke genero

Nebire:
Vamoa suponer que la query se ejecuta correctamente es decir que tienes el collation en CI (case insensitive) y que por tanto no falla si tienes guardado 'septiembre'  en vez de 'Septiembre', etc...

Entonces dado que parece ser que tienes 12 controles referidos a meses, yo haría algo como un array de controles checkbox llamados cheMes, donde los índices irían desde 0 para enero hasta 11 para diciembre y meter en una matriz los nombres de los algo así....

--- Código: Text --- Dim mes(0 To 11) As String Private Sub Form_Load()    Call asignaMesesEnd Sub Private Sub asignaMeses()    mes(0) = "Enero"    mes(1) = "Febrero"       ...       ...    mes(10) = "Noviembre"    mes(11) = "Diciembre"End Sub   
Entonces puesto que es de esperar que cada consulta chequee los 12 meses (supongo que por abreviar has puesto el ejemplo con 2 meses), entonces haría un bucle que recorriea todas las posibilidades:


--- Citar ---For i = 0 To 11
        cheMes(i).Value = (ucase(rspago.Fields("MesPagado")) = ucase( mes(i))) and 1
Next

--- Fin de la cita ---

Esto implica que no tienes que tener 12 controles con nombre propio, si en un momento dado tienes que setearlos todos a false, con un bucle del tipo 'for i= 0 to 11 : mes(i).value=0 : next' lo puedes hacer frente al caso que pones que tendrías 12 líneas de código redundante.

Aparte del array de controles y de las constantes del nombre de los meses, la expresión:  'rspago.Fields("MesPagado")' es lel result set que devuelve tu consulta, que se compara con la expresión 'mes(i)' , las funciones 'ucase' convierten a matúsculas ambas expresiones sólo en la comparación (lo lógico es que en la asignación de nombre del mes ya lo quedaras en mayúsculas, así se ahorra tiempo de convertir a mayúsuculas el mes), esto evita la sorpresa de que en la bd se haya metido 'enero', 'Enero', 'ENERO', o cualquier otra posibilidad... aún podrías poner un trim(texto) para dado los casos de haber introducido ' enero  ', es decir espacios en la cadena.

Como la evaluación de la expresión da un true-false si el resultado de la consulta es igual que el texto contenido en el indice de la matriz, y puesto que el checkbox recibe sólo valores '0' ó '1' , con 'and 1' convertimos desde true-false a 1-0 .

Saludos....

Navegación

[0] Índice de Mensajes

Ir a la versión completa