Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error "Table is busy" (https://www.clubdelphi.com/foros/showthread.php?t=89123)

pelambres 29-09-2015 23:02:59

Error "Table is busy"
 
Hola:

A ver si a alguien le salido este error:

Al actualizar a Windows10 me da este error que con windows7 no salia (no he cambiado nada del código)

Error "Table Is busy"

Llevo usando el mismo código con diferentes versiones de Windows y nunca había tenido problema, quería pasarme de nuevo a Windows7, pero parece ser que una vez pasados 30 días ya no es posible.

Datos.Table2.Active:=False;
Datos.Table2.Exclusive:=True;
Datos.Table2.Active:=True;
Datos.Table2.EmptyTable;

Utilizo Delphi 5 con Windows10 y el BDE con tablas DBase

Agradeceria cualquier opinión al respecto.

Ñuño Martínez 30-09-2015 11:00:58

Hace mucho que no manejo Dbf, así que disculpa si me lío.

Podría ser que algún proceso marcara la tabla como abierta y olvidara quitar la marca al terminar. La cabecera de los archivos DBF tienen una marca para indicar que se está trabajando con ella, y si al abrir un archivo se encuentra dicha marca, entonces sólo permite operaciones de lectura. Ahora no sé si alguna herramienta como FoxPro o similar permita modificar dicha marca. También podrías modificarla directamente, haciendo un programa ex-profeso o mediante alguna herramienta de gestión de archivos binarios (como GHex), pero no lo recomiendo por si afecta a la integridad del archivo (si te equivocas de octeto, la lías parda).

Otra posible razón podría ser que el archivo de la tabla ya lo abrió otro proceso, programa o handle diferente y hasta que no se cierre no podrás acceder a él. Un problema de Windows es que siempre te bloquea los archivos cuando se abren, por lo que sólo un handle puede usarlo cada vez. Si ningún proceso lo tiene abierto, entonces es posible que algún proceso lo abriera y después no lo cerrara, dejándolo colgado. Personalmente, nunca me había pasado esto desde los tiempos de Windows 98, ya que con XP (como mínimo) al cerrar un programa se cierran todos los archivos y se liberan los handles correspondientes independientemente de lo que diga la aplicación. Lo mismo pasa al cerrar la sesión del sistema operativo.

pelambres 30-09-2015 23:09:49

Error "Table is busy"
 
Hola:
Ante todo gracias por responder tan rápido.
He revisado si había modificado código en relación con esa tabla, pero además de ese error con esa tabla me da el mismo error con otra que se usa muy exporadicamente, por lo cual sigo pensando que es problema de Windows10 y sus privilegios para modificar ficheros. Como ya comentaba en el mensaje anterior, no he cambiado el código que lleva escrito mas de 14 años en ninguno de los sitios en que da error, y coincide que el error les ha salido a usuarios que les hecho alguna modificación a partir de actualizarme a Windows10.

Ñuño Martínez 01-10-2015 10:17:48

Ahora que lo re-leo, creo que Windows 10 está todavía en fase beta, de ahí que lo anden regalando. Yo no suelo actualizar mi sistema operativo (sea Windows, Linux, Android o lo que sea) hasta como mínimo un año después de su primera publicación. Suele ahorrarme dolores de cabeza.

Pero sí, es posible que se deba a los permisos de Windows 10.

Casimiro Notevi 01-10-2015 10:18:55

Cita:

Empezado por Ñuño Martínez (Mensaje 497438)
Ahora que lo re-leo, creo que Windows 10 está todavía en fase beta, de ahí que lo anden regalando. Yo no suelo actualizar mi sistema operativo (sea Windows, Linux, Android o lo que sea) hasta como mínimo un año después de su primera publicación. Suele ahorrarme dolores de cabeza.

^\||/^\||/^\||/

pelambres 22-10-2015 22:47:47

Hola:

Para los que le surja el error esta es la forma en que yo lo he arreglado:

Datos.table2 es la tabla MOVIMIEN.DBF
Por lo que se ve el error sale al establecer un vínculo del Query1 con la tabla, por lo que creo una tabla TEMP.DBF para que coja los datos de ella en lugar de cogerlos de la tabla original.
Código Delphi [-]
     copyfile('MOVIMIEN.DBF','TEMP.DBF',False); // NUEVO
     Datos.Query1.SQL.Clear;
     Datos.Query1.Active:=False;
    // Datos.Query1.SQL.Add('Select * from MOVIMIEN.DBF'); // ANULADA
     Datos.Query1.SQL.Add('Select * from TEMP.DBF');  // NUEVO
     Datos.Query1.Active:=True;
     Datos.Table2.Active:=False;
     Datos.Table2.Exclusive:=True;
     Datos.Table2.Active:=True;
     Datos.Table2.EmptyTable;
Por lo que se ve esto se debe a un bug de Windows10, que por otra parte estoy contento con el, especialmente porque es increiblemente rápido al arrancar el ordenador.
Saludos a todos.

ecfisa 23-10-2015 01:27:17

Hola pelambres.

Por favor cuando incluyas código en tus mensaje usa etiquetas para darle más legibilidad:



Saludos :)


La franja horaria es GMT +2. Ahora son las 05:37:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi