Access - casilla de verificacion no guarda cambios

 
Vista:

casilla de verificacion no guarda cambios

Publicado por Manuel (6 intervenciones) el 08/05/2014 04:36:02
Hola participantes del foro recurro a ustedes a ver si alguien me ayuda en este gran problema para mi y tal vez pequeño paroblema para ustedes, les explico tengo un formulario en sus tres estados solo lectura, agregar y modificar, en este formulario le he puesto dos casillas de verificación que cuando lo marco me aparece dos cuadros de textos y cuando esta desmarcado estos cuadros están oculto, el problema esta en que si en el ultimo registro del formulario marco las dos casillas o las desmarcos estas se graban automáticamente en todos los demás registros es decir a todos los registros guardos les activa los dos cuadro de texto o los oculta, espero sus comentarios.
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

casilla de verificacion no guarda cambios

Publicado por Norberto (753 intervenciones) el 08/05/2014 09:20:06
Hola.

Para que los controles de un formulario guarden los cambios deben de estar vinculados con sendos campos de alguna tabla. Si son independientes, el valor que das a un control de este tipo estando en un registro, permanece igual cuando te cambias de uno a otro, de la misma manera que se pierde cuando cierras el formulario.

Para hacer lo que quieres debes de añadir en la tabla tantos campos de tipo Sí/No como casillas de verificación tengas. Luego en el formulario los vinculas a través de la propiedad Origen del control. Además para que cuando cambies de registro se compruebe el estado de los checks y en consecuencia se muestren u oculten otros controles, deberás añadir el correspondiente código en el evento Al activar registro (Form_Current).

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

casilla de verificacion no guarda cambios

Publicado por Manuel (6 intervenciones) el 08/05/2014 19:13:43
Gracias por la respuesta Norberto, siguiendo tu consejo agregue a la tabla del formulario dos campos de tipo si/no y los vincule, ahora bien en el evento al activar registro el código que puse creo que esta mal porque no funciona me sale el siguiente mensaje: hay un uso no valido de un .(punto), de un operador ! o de parentesis (). A ver si me hechas una mano si no es mucho pedir en chequear mis códigos que use tanto para la casilla de verificación como para el evento al activar registro.

Atte.

Manuel.

Private Sub CHEK1_Click()
If Form!CHEK1.Value = True Then

Form!Cuadro1.Visible = False

Else

Form!Cuadro1.Visible = True

End If
End Sub

Private Sub Chek2_Click()
If Form!Chek2.Value = True Then

Form!Cuadro2.Visible = False

Else

Form!Cuadro2.Visible = True

End If
End Sub


Codigo de evento activar registro:
Private Sub Form_Current()
If Me.CHEK1.Value = True Then
Me.Cuadro1.Visible = False
Else
Me.Cuadro1.Visible = True
End If

End Sub
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

casilla de verificacion no guarda cambios

Publicado por Norberto (753 intervenciones) el 09/05/2014 10:59:39
Hola de nuevo.

No dices en qué linea se produce el error pero veo que en el evento Clic de los checks usas Form!CuadroX.Visible y en el evento Current usas Me. La forma de referirse al propio formulario/informe es esta última. Si usas Form!, a continuación debes de poner el nombre del formulario antes del nombre del control. Ejemplo:

Si el formulario se llama Clientes y quieres referirte a un controlo llamado CIF que se encuentra en él, siempre puedes usar Forms!Clientes.CIF. Si la referencia se hace dentro del mismo es válida la anterior o Me.CIF. Ésta, además, tiene la ventaja de que en el momento que pulsas el . y comienzas a escribir el nombre del campo se va completando automáticamente.

En cualquier caso, la forma Form!CheckX, Form!CuadroX, es incorrecta.

Otra cosa: En el evento Current debes comprobar el estado de los dos checks y asignar la propiedad Visible de los dos Cuadros.

De propina:

1. No compares un valor booleano con True o False: If xxxx = True Then puede ponerse como If xxxx Then y If xxxx = False Then puede ponerse como If Not xxxx Then.

2. Usa la función IIf en vez de la estructura If...Then...Else...End If para dar un valor u otro en función de una condición.

1
2
3
4
5
...
Me.Cuadro1.BackColor = IIf(Me.Check1, vbRed, vbBlue)
Me.Cuadro2.BackColor = Me.Cuadro1.BackColor
Me.Cuadro3.BackColor = Me.Cuadro1.BackColor
...

en vez de

1
2
3
4
5
6
7
8
9
10
11
...
If Me.Check1 Then
    Me.Cuadro1.BackColor = vbRed
    Me.Cuadro2.BackColor = vbRed
    Me.Cuadro3.BackColor = vbRed
Else
    Me.Cuadro1.BackColor = vbBlue
    Me.Cuadro2.BackColor = vbBlue
    Me.Cuadro3.BackColor = vbBlue
End If
...

3. Si el valor que se quiere dar según la condición es de tipo booleano como son las propiedades Visible, Enabled, Locked, etc., asignalo directamente.

1
2
3
4
...
Me.Cuadro1.Visible = Me.Check1
Me.Cuadro2.Visible = Not Me.Check1
...

en vez de

1
2
3
4
5
6
7
8
...
If Me.Check1 Then
    Me.Cuadro1.Visible = True
    Me.Cuadro2.Visible = False
Else
    Me.Cuadro1.Visible = False
    Me.Cuadro2.Visible = True
End If

4. Si tienes que usar el mísmo código en varios eventos no lo repitas en todos ellos.

1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Check1_Click()
    Me.Cuadro1.Visible = Me.Check1
End If
 
Private Sub Check2_Click()
    Me.Cuadro2.Visible = Me.Check2
End If
 
Private Sub Form_Current()
   Check1_Click
   Check2_Click
End IF


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

casilla de verificacion no guarda cambios

Publicado por Manuel (6 intervenciones) el 10/05/2014 03:24:05
Muchas gracias Norberto por tu ayuda, con personas como tu podemos resolver nuestros problemas, gracias por el tiempo que te tomaste chequeando mi caso, la verdad no soy experto en access lo que se es gracias a los foros en lo que estuve investigando y tomando ejemplo y adaptándolos a mis necesidades, como en este caso que tome un ejemplo de un foro y lo adapte a mi base de datos.
Respecto al problema que tenía lo pude resolver gracias a tu ayuda, como dijiste cree dos campos si/no dentro de mi tabla pero mi error fue que no borre las casillas de verificación que había puesto antes y les genere código a esas casillas, esto lo solucione borrando esas casillas y agregando de la misma tabla los campos si/no al formulario. Respecto a los códigos estos me funcionaron a la perfección luego de haber agregado los dos nuevos campos, quise usar tus códigos propuestos porque eran más cortos que los que uso, pero algo estaba haciendo mal porque me salía error, en fin deje el código tal como estaba solo agregue en el evento activar registro el otro CHEK2 que faltaba a mi anterior código para que los cambios no se borren en mi segundo cuadro de texto.
Una vez mas gracias por tus comentarios.

Atte.
Manuel.

Código de evento activar registro:

Private Sub Form_Current()
If Me.CHEK1.Value = True Then
Me.Cuadro1.Visible = False
Else
Me.Cuadro1.Visible = True
End If

If Me.CHEK2.Value = True Then
Me.Cuadro2.Visible = False
Else
Me.Cuadro2.Visible = True
End If
End Sub
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