Access - TRATAMIENTO DE FICHEROS

 
Vista:

TRATAMIENTO DE FICHEROS

Publicado por CARLOS (3 intervenciones) el 17/01/2005 12:01:32
¿Cómo se controla el estado de un fichero?
Mediante el botón de un formulario creo un fichero .sql que contiene llamadas a procedimientos almacenados. Después llamo a ese fichero desde otro (.bat) que contiene una linea de conexión al sql*plus y la ejecución de ese fichero .sql. Esa llamada al sql*plus, genera un log que se guarda en local y tarda un tiempo indeterminado en cerrarse.
Mi pregunta es, ¿cómo puedo saber que se ha escrito todo el log para escribir una linea al final? Me piden que, la aplicación espere hasta que termine de escribir el log, y una vez terminado, que automáticamente escriba esa linea. ¿Cómo puedo dejar suspendido o bloqueado al usuario hasta que pueda escribir esa linea?

Gracias de antemano, Carlos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Controlar el estado de un archivo y bloquear la aplicación hasta que finalice la escritura del log

Publicado por Alejandro (4142 intervenciones) el 23/05/2023 00:56:11
En la situación que describes, donde necesitas controlar el estado de un archivo y bloquear la aplicación hasta que finalice la escritura del log, puedes utilizar el siguiente enfoque:

1. Después de llamar al archivo .sql desde el archivo .bat y antes de continuar con la aplicación, puedes verificar si el archivo de log ha sido modificado recientemente. Puedes hacerlo comparando la fecha y hora de modificación del archivo con la fecha y hora actual.

2. Puedes utilizar la función `FileDateTime` en VBA para obtener la fecha y hora de modificación de un archivo. Aquí tienes un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim logFilePath As String
logFilePath = "C:\ruta\al\archivo.log"
 
Dim logLastModified As Date
logLastModified = FileDateTime(logFilePath)
 
Do While logLastModified > Now
    ' El archivo de log aún está siendo modificado, esperar un poco antes de verificar nuevamente
    DoEvents
    Sleep 1000 ' Esperar 1 segundo antes de volver a verificar
    logLastModified = FileDateTime(logFilePath)
Loop
 
' Aquí puedes escribir la línea adicional en el archivo de log una vez que ha finalizado la escritura

3. En el código anterior, se utiliza un bucle `Do While` para verificar periódicamente si el archivo de log ha sido modificado. Mientras la fecha y hora de modificación del archivo sea posterior a la fecha y hora actual, el bucle se ejecutará y se realizará una pausa antes de volver a verificar.

4. Puedes ajustar el tiempo de espera entre las verificaciones modificando el valor en la función `Sleep`. En el ejemplo anterior, se espera 1 segundo (1000 milisegundos) antes de volver a verificar.

5. Una vez que el bucle haya terminado, significa que la escritura del log ha finalizado y puedes proceder a escribir la línea adicional en el archivo.

Ten en cuenta que este enfoque asume que la escritura en el log se realiza de manera sincrónica y que el archivo no está bloqueado por otros procesos mientras se escribe. Además, es importante manejar adecuadamente las situaciones excepcionales, como cuando el archivo de log no existe o no se puede acceder a él.

Espero que esta solución te sea útil para controlar el estado del archivo y bloquear la aplicación hasta que finalice la escritura del log. ¡Buena suerte con tu aplicación!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar