Eliminar registro de Tabla

Esta es mi consulta: en un form, para eliminar registros de la tabla, en el botón " coloque el siguiente código:
#DEFINE MSGBOX_YES        6
#DEFINE C_MSGBOX1        36
#DEFINE C_DELETE_LOC    "Desea eliminar registro?"
IF MESSAGEBOX(C_DELETE_LOC,C_MSGBOX1) = MSGBOX_YES
    DELETE
    PACK
ENDIF
IF !EOF()
    SKIP 1
     IF EOF() AND !BOF()
        SKIP -1
    ENDIF
Endif
THISFORM. Refresh
El problema es que al ejecutar EL BOTÓN ELIMINAR, envía el error "el archivo debe estar abierto exclusivamente" (" fiel must be opened exclusively") pero aun así (ignorando el error), elimina el registro del form. No obstante, en la tabla el registro no se elimina, siempre queda ahí.. Aunque en el form si se elimina. Podría ayudarme a corregir este error, ¿por favor? Si existiese alguna otra manera (código) para "eliminar" registros de la tabla que usted me pueda recomendar, se lo agradecería mucho, puesto que a través de los manuales y ejemplos, solo conozco esta forma!

1 Respuesta

Respuesta
1
Si lo imaginaba, no puedes utilizar el comando pack en un formulario debido a que este abre las tablas en modo compartido, para esto se requiere que las tablas se abran en modo exclusivo:
Use NombreTabla Exclusive
O bien quitar la línea de comando pack y en el evento init del formulario escribir los siguiente:
SetMultilocks On
Set Deleted On
Estableces las propiedades BufferMode y Datassesion a valor 2.
Lo anterior soluciona el problema.
El comando pack se debe utilizar en una rutina de mantenimiento de bases de datos.
Ohhh.. se me olvidaba.. el error me sennala "PACK" en el código! Gracias!
Estimado Sr. Alonso, muchas gracias por su respuesta! Me parece excelente y soluciona mi problema. No obstante, permítame hacerle otra consulta sobre el tema. Estuve leyendo sobre el uso de "PACK" en la eliminación de registros y encontré un ejemplo en el que colocan, en el evento "release" del form lo siguiente:
USE nombredetabla EXCLUSIVE
PACK
Yo, en el primer código del botón eliminar que le mostré, quite el comando "PACK" de la linea y deje solo "DELETE". Luego, en el evento release del form, copie:
USE mitabla EXCLUSIVE
PACK
El resultado funciono muy bien. Ahora ya no envía el error y realizando varias pruebas de manipulación de datos me di cuenta que al dar click en eliminar, el registro se elimina del form y cuando cierro el form, se borra también de la tabla, es decir, cumple con lo que requiero. No obstante, quisiera preguntanle: que implicaciones o consecuencias traería utilizar "PACK" de esta manera, abriendo en el release del form, ¿la tabla en modo exclusivo? ¿Seria perjudicial para la aplicación? ¿Cree usted que es seguro utilizarlo así? Me podría aconsejar, por favor! Me gustaría mucho y enriquecería mi conocimiento saber su opinión. Gracias!
Efectivamente eso trae consecuencias pero cuando se trata de una aplicación multiusuario, pues en dicho momento si otro usuario llega a utilizar la tabla que está abierta por otro usuario en modo exclusivo, el sistema le reportará un error que dice "El archivo está en uso" y no podría acceder en el momento a la tabla, si es una aplicación monousuario esto es una muy buena solución.
Estimado Sr. Alonso, recibo con mucha alegría su respuesta! Le agradezco mucho su tiempo y amabilidad al responder y despejar mis dudas! Le deseo éxitos en sus funciones. Atentamente. Ivanok! :D :D :D

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas