none
Evento EnDatosNoGuardados(OnDirty) Propiedad Modificado(Dirty). RRS feed

  • Pregunta

  • Hola a todos.

    Pretendo que en un formulario dependiente no se modifique accidentalmente un registro existente.

    Lo he intentado respondiendo al evento EnDatosNoGuardados del formulario, pero ese evento(por lo visto) tambien sucede cuando se introduce uno nuevo.

    En la Ayuda de Access he leido que una forma de hacerlo es leyendo la propiedad Modificado(Dirty), y la verdad es que no tengo ni idea de cómo se hace.

    Agradezco culaquier ayuda.

    Un saludo.

    sábado, 9 de febrero de 2008 16:26

Respuestas

Todas las respuestas

  •  

    Hola!

     

    el mejor método para evitar la edición accidental es poner la propiedad "Permitir Ediciones" a falso, asi no hay peligro alguno, otro modo sería poner un cancel = True en el evento antes de actualizar del formulario.

    sábado, 9 de febrero de 2008 23:29
  • Gracias por atenderme.
    Siento no haber realizado bien la pregunta.
    Lo que me gustaría(si se puede) es que si modifico un registro existente me aparezca un formulario personal advirtiendome que se va a modificar un registro y preguntandome si deseo hacerlo.
    De no encontrar otra solución, establecere la propiedad "Permitir Ediciones" a falso añadiendo al formulario un control(boton de opcion,casilla de verificación,...) para cambiar dicha propiedad cuando necesite modificar algún registro.
    La segunda opción creo que no me valdría pues el evento AntesDeActualizar tmbien sucede cuando añado un registro.
    Ademas seguiré indagando sobre la propiedad Modificado(Dirty), que a mi escaso entender es el metodo más adecuado, por lo que si alguien me puede ayudar sobre esta opción quedaré muy agradecido.
    Saludos

    lunes, 11 de febrero de 2008 16:34
  • En ese caso lo que tienes que hacer es:, en el evento antes de actualizar el registro, por algo así

     

    If Me.Dirty then

    if MsgBox ("El registro se ha modificado, ¿Está seguro de que quiere guardar los cambios?, vbOKCancel+vbQuestion, "Atención Pregunta")=VbCancel then

    Cancel=True

    endif

     

    lunes, 11 de febrero de 2008 18:06
  • Lo he probado, y al introducir nuevos registros sin modificar nada también me hace la pregunta, cuando no debería ser así ya que en la Ayuda de Access dice textualmente:

    La propiedad Modificado (Dirty) se puede utilizar para determinar si el registro activo ha sido modificado desde que se guardó por última vez. Por ejemplo, puede que desee preguntar al usuario si los cambios que se hicieron en un registro eran intencionados y, si no es así, permitirle que se mueva al siguiente registro sin guardar los cambios.

    He subrayado lo que me hizo deducir que en nuevos registros el valor siempre sería false.

    Agradezco cualquier sugerencia.

    Saludos.

    lunes, 11 de febrero de 2008 19:20
  • Desde el momento en que lo has creado, ya considera que ha habido cambios y por tanto te pregunta si lo quieres guardar, la solución, recorrer todos los campos verificando si tiene o no datos y cancelar o preguntar si se quiere o no guardar.

    lunes, 11 de febrero de 2008 19:26
  • Lo siento, no comprendo la solución.

    Es posible que haya campos en blanco. Es que no he entendido la solución.

    Hay alguna forma de saber si se está añadiendo o no,para hacer o no la pregunta.

    Sería posible tener una variable/propiedad Insertando, que se inicializaría a false, se establecería a true en BeforeInsert y a false en AfterInsert, con lo que sabriamos si estamos añadiendo o no.

    Espero no estar abusando.

    Gracias, Un Saludo.

    lunes, 11 de febrero de 2008 21:47
  • Puedes saber si el registro es nuevo por medio de Me.NewRecord, luego recorrer cada campo y verificar si tienen o no datos mediante nz(elCampo,"")=""

    lunes, 11 de febrero de 2008 22:00
  • ¡Perfecto!, justo lo que necesitaba.
    Agradezco tu interés, no sabes cuanto me has ayudado.
    Saludos.
    martes, 12 de febrero de 2008 9:28