Access - Me.Dirty en Formulario

 
Vista:
Imágen de perfil de Juan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Me.Dirty en Formulario

Publicado por Juan (150 intervenciones) el 06/05/2019 19:47:34
Hola a todos,

Estoy usando el Me.Dirty para deshacer cambios en los formularios si no se quieren guardar los cambios.

El código funciona bien, pero el caso es que siempre aparece el msgbox.

1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_Close()
 
If Me.Dirty = False Then
If MsgBox("Desea guardar los cambios?", vbYesNo, "Guardar cambios") = vbNo Then
DoCmd.SetWarnings (WarningsOff)
DoCmd.RunCommand acCmdUndo
DoCmd.SetWarnings (WarningsOn)
Else
DoCmd.RunCommand acCmdSaveRecord
End If
End If

Siempre aparece el msgbox porque tengo varios textbox ocultos en el encabezado que al abrir toman el nombre de usuario, y el nivel de permisos de usuario, o sea, el formulario siempre cambia aunque no hagas cambios.

Hay alguna forma de que la funcion Dirty no tenga en cuenta esos textbox?

Otra duda que tengo es que el msgbox, solo aparece cuando tengo Me.Dirty = False, lo tenía en Me.Dirty = True ya que creía que era como tenia que estar y no funcionaba.

Gracias por vuestra ayuda.
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

Me.Dirty en Formulario

Publicado por Anonimo (3316 intervenciones) el 06/05/2019 20:52:58
La propiedad 'Dirty' no impone cambia o destruye nada, es un simple testigo que indica si hubo cambios en ese objeto, es como si se le pregunta a un niño antes de comer si se ha lavado las manos (asumiendo que dice a verdad) solo informa del estado actual (si/no).

Lo que ocurre en este caso es que creo que no sirve para lo que se desea, pues si se inicia un registro y por defecto se le adjudican datos (no valores por defecto) siempre se producirán modificaciones (esto es: Dirty a true) y si se sabe que por el simple hecho de que se inicia un registro ya se ha efectuado un cambio … Dirty carece de sentido en ese entorno (siempre será TRUE).

Dado que se modifica por defecto, la alternativa consistiría en verificar si 'cualquier otro dato' (o datos), esto es: los datos que se precisarían para considerar valido ese registro (normalmente datos requeridos) ha sido modificado.

En este caso (verificar modificaciones en campos concretos) necesitaría comparar el valor original con el actual:
1
Me.[campo_1] = Me.[campo_1].OldValue

Utilizando esa comparación con todos los campos a evaluar (la comparación devolverá (-1/0) esto es: True/False y sumando el valor obtenido, tendríamos que si la suma final es cero, no existen cambios y si es diferente de cero …. hay datos modificados.
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 Juan
Val: 414
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Me.Dirty en Formulario

Publicado por Juan (150 intervenciones) el 07/05/2019 09:41:04
Gracias,

Esto ya lo probé, pero al querer saber si se han hecho modificaciones, para cada formulario y para cada elemento del formulario tendría que poner mucho código diferente para cada uno.

Saludos,
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

Me.Dirty en Formulario

Publicado por Anonimo (3316 intervenciones) el 07/05/2019 20:47:28
Una función bien planteada resolvería el problema, recibiría los elementos a evaluar y devolvería resultado.

Si asusta un poco de trabajo (código diferente) para hacer algo bien: suerte con esa aplicación.
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