sábado, 6 de agosto de 2011

Marcar registros para eliminacion (Borrar) con DELETE - VFP

Saludos estimados. En esta ocasion mostraremos como marcar un registro para eliminacion usando el comando DELETE. Esto equivale a borrar o "eliminar" un registro para que no aparezca en nuestros forms y asi inhabilitarlo para cualquier transaccion o accion posterior. No obstante, es correcto aclarar que DELETE no elimina fisicamente los registros de la tabla. Solo los marca para eliminarlos y  posteriormente usando en comando PACK si se pueden borrar 100% de nuestras bases de datos. En mi humilde opinion, basta con marcar un registro para eliminarlo y usar SET DELETED ON en el evento INIT de nuestros forms para "simular" la eliminacion, puesto que los registros no deben ser eliminados totalmente de nuestras tablas.

Para esto, procederemos de la suiguiente manera:

1. En el evento INIT del form escribimos SET DELETED ON. Esto es para que los registros que "eliminamos", no aparezcan. No obstante, tambien puedemos establecer SET DELETED OFF si queremos poder seguir viendolos una vez que ya los "eliminamos". Eso es en dependencia de la aplicacion y como queremos administrar dichos eliminados.

2. Creamos un boton (Eliminar) en tu form y en el evento CLICK escribimos esto:

**--Eliminar registros DELETE--**
#DEFINE   MSGBOX_YES       6
#DEFINE   C_MSGBOX1        36
#DEFINE   C_DELETE_LOC   "Desea eliminar este registro?"
IF EMPTY(ALIAS())
       RETURN
ENDIF

IF MESSAGEBOX(C_DELETE_LOC,C_MSGBOX1) = MSGBOX_YES
              DELETE
       THISFORM.Refresh
ENDIF
IF !EOF()
    SKIP 1
ENDIF
         IF EOF() AND !BOF()
              SKIP -1
         ENDIF

THISFORM.Refresh
**--Fin--**


No es aconsejable eliminar registros "totalmente" de las tablas con PACK en lugar de DELETE... puesto que podrian darse situaciones en que necesitaremos "llamar" o "recuperar"nuevamente esos registros con RECALL!!!



Saludos. Sugerencias y comentarios son siempre bienvenidos para mejorar.
Un abrazo! Desde Managua, Nicaragua.


Ravenn! :)

11 comentarios:

  1. muchas gracias me funciono de maravilla ¡¡¡¡

    ResponderEliminar
    Respuestas
    1. Graciasa ti por consultar el blog. Saludos :)

      Ravenn

      Desde Managua, Nicaragua.

      Eliminar
  2. una consulta como para eliminar los registros de solamente una columna en visual fox pro

    ResponderEliminar
    Respuestas
    1. Hola Ronnie. Disculpa la tardanza en contestar. He estado algo fuera de linea estos meses. SI te refieres a eliminar solo una columna, me presto a decirte que no se puede. Las tablas de VFP admiten una marcación (con DELETE) de eliminación para todo el registro, es decir, para toda la línea que afecta a todos los campos que tengas en la tabla. Si lo que preguntas es como eliminar en base a una condicion de una columna, prueba con DELETE... FOR aquivalacondicion

      Saludos.

      Eliminar
  3. Buenos días.

    Tengo una tabla que contiene registros de meses anteriores borrados con DELETE, sin embargo por error se corrió un DELETE a todos los demás registros. Necesito usar el comando RECALL, pero solamente que me recupere los registros que fueron borrados ayer y no tengo ningún campo que me diga la fecha de borrados. Sería de gran ayuda cualquier idea que me puedan brindar. Saludos

    ResponderEliminar
    Respuestas
    1. Hola anonimo. Temo decirte que si no tienes una condición (dato) asociada a los registros que eliminastes por último, no creo saber como decirle a foxpro "RECALL" sobre esos registros. Debe existir una condición que permita desmarcar esos registros usando RECALL... FOR... condicion.

      Saludos! :)

      Eliminar
    2. Hola, serian tan amables de decirme como eliminar un registro, se que es un poco sencilla la pregunta, pero mi profa de Bases de datos y la web no me responden de una forma entendible :S (Mi maestra no nos sabe enseñar) asi que agradecería mucho una ayudita, Saludos..!

      Eliminar
  4. hola nesesito crer un boton eliminar , para un trabajo de la universidad pero no tengo idea como hacerlo proderias ayudarme ?

    ResponderEliminar
  5. Buen día! donde coloco la condición RECALL? me interesa mucho

    ResponderEliminar