Hola Rita,
Preguntas y Respuestas:
1. "Debe abrir el archivo en modo exclusivo"
Respuesta: el mensaje sale porque el comando PACK requiera que abra la
tabla en modo exclusivo.
Solución:
SET EXCLUSIVE OFF (Se usa toda la vida para trabajar en red y poder
abrir
las tablas por varios usuarios simultaneamente).
USE Mitabla EXCLUSIVE
Go NumerodeRegistroaborrar
Delete
Pack
SET EXCLUSIVE OFF
2. Cuando llega al PACK ya que quiero que borre físicamente el
registro de la tabla.
Solución: En la practica No se usa PACK nunca, solo cuando se hace
labor de mantenimiento de la base de datos.
Para esto, el administrador del sistema debe pedir a todo el mundo que
salgan del sistema en todas las terminales, para correr los REINDEX y
los PACK para borrar datos basura.
En la vida real solo se "marca para borrado" usando el comando DELETE.
También se suele usar SET DELETE ON para que no se vean los registros
marcados para borrado.
En resumen: es muy mala practica "borrar" información.
3. Estuve mirando y tengo el SET EXCLUSIVE ON
Se usa al reves. Ponemos el SET EXCLUSIVE OFF en cada evento LOAD de
los forms y/o en el MAIN.PRG del sistema.
Cuando queremos abrir en modo exclusivo, será temporal. y luego
volvemos a poner SET EXCLUSIVE OFF.
4. Ademas sale un mensaje donde me pregunta que si desea sobrescribir
el archivo de indice..
Se suele usar SET SAFETY OFF en los Loads o en el MAIN.PRG para que no
aparezcan mensajes de confirmación.
5. Que hago para que me borre físicamente y ademas no me salga el
mensaje incomodo.?
No borres fisicamente con PACK.
Solo ve al registro a borrar y marcalo con DELETE.
Para los mensajes: SET SAFETY OFF.
NOTA.- Me dice walter que se puede hacer un ZAP a cursores porque
estos se crean en la memoria del equipo a nivel local y si se borran
no afectarían a los demas usuarios.
Te ayudará mucho leer estos enlaces acerca de los cursores y los
grids:
https://groups.google.com/group/publicesvfoxpro/browse_thread/thread/8b0b7c6ed54ddaeb/111c495ea6575fc1?hl=es&lnk=gst&q=grids#111c495ea6575fc1
Correcciones al CODIGO:
> *** PROCEDIMIENTO - CLICK - OBJETO - BOTON 06 - ELIMINAR
> PROCEDURE image14.Click
USE c:\deata\data2\sdeata_05.dbf ===> Esto casi no se usa.
En lugar usamos:
SET DEFAULT TO "UNIDAD:\RUTA" En los main.prg del sistema o en
los load de los forms.
Para subcarpetas de organizacion dentro de la ruta principal usamos:
SET PATH (Busca la sintaxis conveniente para ti en la ayuda de Fox).
Luego ya no pones rutas cada vez. Solo haces esto en los load de los
forms:
CLOSE DATABASES
SET EXCLUSIVE OFF
SELE 3 (Seleccionas el area de trabajo)
USE Mitabla
SELE 5
USE Otratabla
SELE nArea
USE nTabla
...
INDEX ON s511000 TO c:\deata\data2\sdeata_05
SEEK _CODIGO
> DELETE
> PACK
> REINDEX
> CLOSE ALL
> DO limpia_text0501
> DO limpia_contenido
> DO mensaje_050101
> ENDPROC
Este sería un tipico codigo de arranque y cierre de forms:
Evento Init (Para declarar variables)
PUBLIC A
PUBLIC B
SET DATE ITALIAN
Evento Load (Para carga de tablas)
CLOSE DATABASES (Cerramos cualquier tabla que pudiera estar abierta)
SET SAFETY OFF
SET EXCLUSIVE ON (Solo temporalmente para crear los indices)
USE MitablaUno
INDEX ON ALLTRIM(NOMBRE)+DTOS(FECHA) TAG NOMBRE
(Para indexar por el campo nombre y luego por fecha con NOMBRE como
etiqueta principal del indice CDX.
USE (Sin parametros, Para cerrar la tabla despues de crear el indice)
SET EXCLUSIVE OFF
SELE 15
USE MitablaUno
SET ORDER TO NOMBRE
(Ordena el archivo de índice por el campo nombre).
En los eventos Unload, escribimos:
CLOSEDATABASES
CLOSE ALL
En los botones de comandos Salir usamos:
Thisform.Release()
Espero te sirva..