Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas al borrar un archivo desde Delphi (https://www.clubdelphi.com/foros/showthread.php?t=62648)

pablopessoa 06-01-2009 18:00:52

Problemas al borrar un archivo desde Delphi
 
Hola amigos!
tengo una aplicacion que baja de un server ftp una base de datos y la asocia a un AdoConection para usarla para hacer una actualizacion.
El problema es que , una ves que termino de usarla, primero dejo el adoConection vacio (osea, sin referencia a esa base) y luego elimino el archivo mdb.
Donde esta el problema? bueno, cuando termino de usar la base y le quito las referencias al .mdb (base access) algun proceso queda ligado a la base y cuando hago el delete no lo borra, entonces cuando corro de nuevo la actualizacion (sin cerrar la aplicacion) me dice que no puede reemplazar la base por que hay un proceso usandolo, me fijo con el unlocker que proceso es, y obviamente es mi aplicacion.
les muestro el codigo con que lo hago:
asi saco las referencias a la base:
Código Delphi [-]
BaseTemp.Connected:=false;
    BaseTemp.ConnectionString :='';
    BaseTemp.LoginPrompt:=false;
    BaseTemp.Free;

y despues la borro asi :
Código Delphi [-]
if FileExists(carpeta_instalacion+'DATOS\TEMP\temp.MDB') then
        deletefile(carpeta_instalacion+'DATOS\TEMP\temp.MDB');

la cosa es que no lo borra el archivo .mdb, y cuando me voy a fijar si esta, aparece el archivo mdb y al lado el otro que tiene el dibujo del candadito que indica que hay un proceso usandolo.
Alguien sabe a que se debe esto y como puedo arreglarlo? Muchas gracias!!!

vtdeleon 06-01-2009 18:47:48

Saludos

Como bien dices, está en uso. Alguna aplicacion (puede ser tu proyecto) aun lo tiene abierto. Si es un proyecto tuyo, debes cerrar la conexion y quizas liberar el objeto que lo carga para que despues lo puedas borrar.

pablopessoa 06-01-2009 19:58:22

claro, es lo que imaginaba, pero , si el adoConection que usa la base yo la libero ( conected en false, conection String = ' ', etc) que es lo que sigue atado al archivo?, hay alguna forma de forzar el borrado del archivo sin importar que tenga un proceso activo?

Faust 06-01-2009 20:03:25

En vez de esto:

Código Delphi [-]
    BaseTemp.Connected:=false;
    BaseTemp.ConnectionString :='';
    BaseTemp.LoginPrompt:=false;
    BaseTemp.Free;

¿ Has intentado esto?:

Código Delphi [-]
     BaseTemp.Close;
    BaseTemp.ConnectionString :='';
    BaseTemp.LoginPrompt:=false;
    BaseTemp.Free;

Faust 06-01-2009 20:07:15

Ahora que me acuerdo...

Ha habido ocasiones en que trabajo en un proyecto con Delphi y Access, abro la base de datos en tiempo de diseño, luego la cierro y finalmente cierro mi proyecto, pero no puedo eliminar el archivo *.mdb sin antes cerrar Delphi, aunque ya no este cargado mi proyecto en el IDE de Delphi...

No sé porque continue siendo usado el archivo por Delphi aún cuando mi proyecto ya no esté cargado, me parece algo curioso...

Si alguien nos lo purdiera explicar...

pablopessoa 07-01-2009 01:25:46

probe cambiar el conected= false por el close pero sigue saliendo el mismo error.... la verdad que no se que proceso es lo que sigue ligando el programa a la base si la cierro y le quito las referencias al AdoConnection en tiempo de ejecucion...
Ojala le encuentre arreglo.
Saludos y gracias por responder!


La franja horaria es GMT +2. Ahora son las 14:41:38.

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