Access - Botón alternar que marca y desmarca todas las casillas de verificacion

 
Vista:
Imágen de perfil de Visor
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Visor (74 intervenciones) el 23/04/2015 02:03:55
Estimados amigos por favor alguien me puede ayudar. He tomado un codigo creado por Jefferson Jimenez, es muy bueno el codigo pero parece que el lo aplica en access 2007 y yo tengo access 2010. El codigo es para activar todas las casillas de verificacion de los registros de un campo, con un solo boton de alternar. Para quien le parezca interesante el codigo es el siguiente. He intentado pedirle al mismo autor la solución pero parece que el ya no esta por estas paginas pues no me ha contestado. En todo caso me sale el error 3027 No se puede actualizar. Base de datos u objeto de solo lectura.

Por favor ayudenme a resover este caso

Mi tabla es ASISTENCIA y el campo es 1.

El codigo es el siguiente:

formulario al activar registro:

1
2
3
4
5
6
7
8
9
Private Sub Form_Current()
If MiRecordset(Consultar, "ASISTENCIA", "1", "1", -1) Then
BtnAlternar.Caption = "DesMarcar"
BtnAlternar.Value = True
Else
BtnAlternar.Caption = "Marcar"
BtnAlternar.Value = False
End If
End Sub

Boton alternar, al hacer click:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub BtnAlternar_Click()
Select Case BtnAlternar
Case -1
MiRecordset Actualizar, "ASISTENCIA", "1", , , -1
MsgBox "Ud selecciono  " & _
MiRecordset(Cuenta, "ASISTENCIA", "1", "1", BtnAlternar) & " Casillas"
BtnAlternar.Caption = "DesMarcar"
Case 0
MiRecordset Actualizar, "ASISTENCIA", "1", , , 0
MsgBox "Ud quito la seleccion de  " & _
MiRecordset(Cuenta, "ASISTENCIA", "1", "1", BtnAlternar) & " Casillas"
BtnAlternar.Caption = "Marcar"
End Select
Me.Refresh
End Sub

Modulo 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Option Compare Database
Enum TipoAccion
Agregar = 1
Consultar = 2
Actualizar = 3
Elimina = 4
Cuenta = 5
End Enum
 
Function MiRecordset(AccioN As TipoAccion, _
                                LaTabla As String, _
                                Optional ElCampo As String, _
                                Optional CampoCriterio As String, _
                                Optional ElCriterio As Variant, _
                                Optional DatoAgrega As Variant) As Variant
On Local Error GoTo VerError
Dim rst As DAO.Recordset
Dim MiBd As Database
If CampoCriterio <> vbNullString Then
 If IsNumeric(ElCriterio) Then
     Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla & " where " & CampoCriterio & "=" & ElCriterio)
 End If
 If IsDate(ElCriterio) Then
      Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla & " where " & CampoCriterio & "=#" & ElCriterio & "#")
 End If
 If Not IsDate(ElCriterio) And Not IsNumeric(ElCriterio) Then
      Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla & " where " & CampoCriterio & "='" & ElCriterio & "'")
 End If
 
ElseIf ElCampo = vbNullString Then
  Set rst = CurrentDb.OpenRecordset("Select * from " & LaTabla)
ElseIf ElCampo <> vbNullString Then
Set rst = CurrentDb.OpenRecordset("Select " & ElCampo & " from " & LaTabla)
Else
Set MiBd = CurrentDb
MiBd.Execute ("Delete * from " & LaTabla)
Exit Function
End If
                 With rst
                      Select Case AccioN
                        Case 1
                        .AddNew
                         rst(ElCampo) = DatoAgrega
                        .Update
                        Case 2
                         While Not .EOF
                         MiRecordset = rst(ElCampo)
                        .MoveNext
                         Wend
                        Case 3
                        While Not .EOF
                        .Edit
                         rst(ElCampo) = DatoAgrega
                        .Update
                        .MoveNext
                        Wend
                        Case 4
                        If ElCampo <> vbNullString Then
                        .Delete
                        .MoveNext
                        End If
                        Case 5
                        If .EOF Then MiRecordset = 0
                        While Not .EOF
                        .MoveNext
                        MiRecordset = .RecordCount
                        Wend
                       End Select
                  .Close
                 End With
                Set Rs = Nothing
          MiRecordset = MiRecordset
       Debug.Print MiRecordset
Exit Function
VerError:
MsgBox "Error #  " & Err.Number & vbCrLf & Err.Description, vbInformation
End Function
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 Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Norberto (753 intervenciones) el 23/04/2015 15:33:41
Hola.

Me parece entender que tú sólo quieres cambiar el estado a un único campo de tipo Sí/No, ¿cierto?.

Si es así, te adjunto un ejemplo mucho más sencillo.

Un saludo,

Norberto.
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 Visor
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Visor (74 intervenciones) el 23/04/2015 20:14:48
Hola Norbeto,... No en realidad es para al menos 100 o (dia100)
Te explico:
Efectivamente el codigo que me has enviado es mas sencillo y bien practico, excelente me ha servido. Funciono bien luego de haberlo puesto de acuerdo a la tabla y campo que tengo (tuve que hacer unos cambios de nombre la Tabla quedo igual pero el campo cambio de nombre 1 a dia1, para no confundirme con numeros).
Sin embargo yo pensé que podría ser tan solo con copiar el ChkMark y sus codigos para el campo dia2 y dia3 y asi hasta el dia100. Al copiar para el campo dia2 me resulto lo siguiente: al hacer click en el ChkMark2 se activan las casillas, al segundo Click se desactivan, pero al tercer click me sale error me indica "error 94 en tiempo de ejecucion ... uso no valido de Null" . Supongo que en este caso debía haber un ...no se anidamiento bucle o quien sabe que cosa o repetir todos los codigos para da diaX y eso seria muy tedioso y/o consumir bytes y ser mas pesado la aplicacion.
Esta aplicacion es para señalar las asistencias de los estudiantes cada dia. y el Codigo del ChkMark me serviria para marcar rapidamente las asistencias de los 45 estudiantes y me quedaría solo desmarcar manualmente los que no han asistido. Para el proximo semestre desmarco para limpiar y vuelvo a marcar para repetir el mismo evento del dia1.

Todo esta diseñado de ese modo solo me faltaba lo que me has enviado pero me he quedado en esta situacion
Te agradezco muchisimo tu ayuda ha sido excelente pero me quede alli. si me puede darme una manito mas te lo agradezco y cualquier cosa estoy a las ordenes.
Gracias
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Felix (74 intervenciones) el 28/04/2015 00:48:17
OK encuentro aqui una forma de enviar lo que aplique al primer ejemplo que me has enviado, aunque lo segundo no es directamente como lo tengo diseñado pero se ajusta mas a lo que requiero, y vere como ajustarlo pero igualmente seria repetir eventos de codigo para cada copia de casilla control (casilla verificacion). Es decir que en el diseño que te envio el activar o desactivar las casillas controla directamente las casilla que estan justamente debajo del control (casilla de verificacion), entonces tendría 100 controles para los 100 dias (uno para cada campo). Veo que no puedo enviar el archivo tiene 22.144Kb
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Felix (74 intervenciones) el 28/04/2015 01:45:19
por Fin logre subir el archivo espero se pueda abrir sin problemas.
como veras hay un control de casillas para cada campo de verificacion (diax)
Gracias de anticipadas
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Felix (74 intervenciones) el 28/04/2015 21:24:42
Bueno, en todo caso te envio las imagenes del formulario que tenia antes, y luego lo que he tratado de hacer con lo que me has enviado.
En la imagen FORMASISTimg estan la imagen dividad en dos pues es muy largo, y como veras estan los campos dias en casilla de verificacion y sobre cada una de estas coloque un control de casillas de verificacion usando la casilla de verificacion y el codigo que me enviaste la primera ocasion, luego trate de copiar a los demas y vi que no era practico hacer asi por eso pense que se podia hacer con las funciones for to pero no se el modo.
como veras hay una fecha representando a cada campo dia (que al respecto tengo el problema de no poder colocar a todos los registros automaticamente esa fecha solo esta en el primer registro en los demas tengo que poner uno por uno el mismo valor y eso no es practico) Ademas veras que estan los NhL....NhV que es el numero de horas del dia de la semana segun doy clases) que me sirven para hacer el campo calculado luego del campo dia100 ( Asis, % Asist, Ausencias y observaciones)

Lo que esta en la segunda imagen en formAsistModif es lo segundo que me enviaste pero procure aplicar asimismo a mas casillas de verificacion pero veo que no es necesario, sin embargo como coloco la fecha por dia de clase dada?? y ademas como muestro a un estudiante el dia en que consta una ausencia???

De cualquier modo, sea una solucion para el primer caso o para el segundo caso o para los dos casos
y tendria resuelto esto


Pero tambien se requiere colocar el mismo numero de horas según el dia y la misma fecha para todos los registros de la clase dada.

la expresion en el campo calculado de aistencia es el que sigue:
([dia1]*[NhL]+[dia2]*[NhM]+[dia3]*[NhMi]+[dia4]*[NhJ]+[dia5]*[NhV]+[dia6]*[NhL]+[dia7]*[NhM]+[dia8]*[NhMi]+[dia9]*[NhJ]+[dia10]*[NhV]+[dia11]*[NhL]+[dia12]*[NhM]+[dia13]*[NhMi]+[dia14]*[NhJ]+[dia15]*[NhV]+[dia16]*[NhL]+[dia17]*[NhM]+[dia18]*[NhMi]+[dia19]*[NhJ]+[dia20]*[NhV]+[dia21]*[NhL]+[dia22]*[NhM]+[dia23]*[NhMi]+[dia24]*[NhJ]+[dia25]*[NhV]+[dia26]*[NhL]+[dia27]*[NhM]+[dia28]*[NhMi]+[dia29]*[NhJ]+[dia30]*[NhV]+[dia31]*[NhL]+[dia32]*[NhM]+[dia33]*[NhMi]+[dia34]*[NhJ]+[dia35]*[NhV]+[dia36]*[NhL]+[dia37]*[NhM]+[dia38]*[NhMi]+[dia39]*[NhJ]+[dia40]*[NhV]+[dia41]*[NhL]+[dia42]*[NhM]+[dia43]*[NhMi]+[dia44]*[NhJ]+[dia45]*[NhV]+[dia46]*[NhL]+[dia47]*[NhM]+[dia48]*[NhMi]+[dia49]*[NhJ]+[dia50]*[NhV]+[dia51]*[NhL]+[dia52]*[NhM]+[dia53]*[NhMi]+[dia54]*[NhJ]+[dia55]*[NhV]+[dia56]*[NhL]+[dia57]*[NhM]+[dia58]*[NhMi]+[dia59]*[NhJ]+[dia60]*[NhV]+[dia61]*[NhL]+[dia62]*[NhM]+[dia63]*[NhMi]+[dia64]*[NhJ]+[dia65]*[NhV]+[dia66]*[NhL]+[dia67]*[NhM]+[dia68]*[NhMi]+[dia69]*[NhJ]+[dia70]*[NhV]+[dia71]*[NhL]+[dia72]*[NhM]+[dia73]*[NhMi]+[dia74]*[NhJ]+[dia75]*[NhV]+[dia76]*[NhL]+[dia77]*[NhM]+[dia78]*[NhMi]+[dia79]*[NhJ]+[dia80]*[NhV]+[dia81]*[NhL]+[dia82]*[NhM]+[dia83]*[NhMi]+[dia84]*[NhJ]+[dia85]*[NhV]+[dia86]*[NhL]+[dia87]*[NhM]+[dia88]*[NhMi]+[dia89]*[NhJ]+[dia90]*[NhV]+[dia91]*[NhL]+[dia92]*[NhM]+[dia93]*[NhMi]+[dia94]*[NhJ]+[dia95]*[NhV]+[dia96]*[NhL]+[dia97]*[NhM]+[dia98]*[NhMi]+[dia99]*[NhJ]+[dia100]*[NhV])*-1

en el porcentaje Asistencia es:
([Asistencia]/[Semestre])*100

en el de ausencias es
([Semestre]-[Asistencia])

considerando que en Semestre traigo de otra tabla [Semestre] que tiene un indice de numero de horas de que pongo desde otro formulario
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 Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Norberto (753 intervenciones) el 03/05/2015 13:54:48
Hola de nuevo.

Te adjunto un nuevo archivo con una tabla con los 100 campos, y un formulario con el aspecto como el tuyo. También verás que hay un módulo. Échale un vistazo. Es lo que he usado para añadir los 100 campos a la tabla y los controles y el código de los mismos al formulario.

Si necesitas cualquier aclaración, házmelo saber.

Un saludo,

Norberto.
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Felix (74 intervenciones) el 05/05/2015 16:05:50
Muchas gracias Norberto, revisare y te comentare y si necesito despejar alguna duda te lo haré saber
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Felix (74 intervenciones) el 05/05/2015 22:21:33
Realmente eres un genio Norberto, adapte lo que me has enviado a mi aplicacion de toma de asistencia y funciono de maravilla. La unica duda que me queda es que si deba plantearte mas preguntas del mismo formulario con otros datos, pues creo que lo que me has enviado es enormemente grande y te agradezco mucho, y no quiero ser cansador.
gracias
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 Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Norberto (753 intervenciones) el 06/05/2015 11:13:36
Hola.

Recuerda que contra el vicio de pedir está la virtud de no dar,

En serio: me alegro de haberte sido de ayuda. En cuanto a lo demás, plantéalo en el foro y si puedo ayudarte lo haré y si no, pude que lo haga otra persona.

Un saludo,

Norberto.
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 Felix
Val: 6
Ha disminuido su posición en 19 puestos en Access (en relación al último mes)
Gráfica de Access

Botón alternar que marca y desmarca todas las casillas de verificacion

Publicado por Felix (74 intervenciones) el 08/05/2015 20:42:00
Jejeje es cierto es como lo de enseñar a pescar pero no dar el pescado, y como la fabula la culpa es de la vaca. me ha llevado mucho tiempo ver como podia resolver aquello en que me has ayudado en eso ya no podia lo que hare es revisar cada codigo y entender asi de ese modo empezare a pescar yo mismo y a ayudar enseñando a otros a pescar muy agradecido a ti Norberto. seguire en el foro planteando esos retos de resolver cosas con access
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