[RESUELTO] El archivo LCK no se borra al cerrar (Win 7)

Discute sobre las herramientas de la base de datos
Responder
Urxvt
Mensajes: 40
Registrado: Vie Mar 10, 2017 10:13 pm
Contactar:

[RESUELTO] El archivo LCK no se borra al cerrar (Win 7)

Mensaje por Urxvt »

Buenas tardes,

Me he fijado en que si uso una macro para cerrar la base de datos, el archivo temporal LCK que se genera no se borra. Si en cambio la cierro con el botón de cerrar de la ventana, sí que se borra. Mirando el Task Manager veo que los procesos soffice.exe y sbase.exe siguen activos mientras que el programa se cerró... Y por supuesto, si intento eliminarlo directamente me dice que está siendo utilitzado.

Windows 7, LibreOffice Base versión 5.2.6.2. En cambio en GNU/Linux no tengo este problema (bueno, en la versión que tengo en Arch se borra después de un minuto, algo que tampoco es muy normal).

Esta es mi macro:

Código: Seleccionar todo

REM  *****  BASIC  *****

Option Explicit

Sub CloseBase()
	Dim opcion As integer
		opcion = MsgBox ("¿Quieres salir de la BD?",4,"Salida")
	If opcion = 6 Then
		ThisDatabaseDocument.CurrentController.CloseSubComponents()
		Wait(500)
		ThisDataBaseDocument.Close(True)
	End if
End Sub
¿A alguien más le pasa? ¿Usáis otro código para tal fin? Personalmente, copié el código del directorio de bases de datos.
Última edición por Urxvt el Mar Jul 18, 2017 6:18 pm, editado 1 vez en total.
Debian 9 & i3wm + LibreOffice 5.2.7.2
Urxvt
Mensajes: 40
Registrado: Vie Mar 10, 2017 10:13 pm
Contactar:

Re: El archivo LCK no se borra al cerrar (Win 7)

Mensaje por Urxvt »

Parece ser que se cierra el documento pero no del todo, de modo que la solución pasa por añadirle esta línea de código al final de la función:

Código: Seleccionar todo

starDesktop.terminate
Debian 9 & i3wm + LibreOffice 5.2.7.2
Urxvt
Mensajes: 40
Registrado: Vie Mar 10, 2017 10:13 pm
Contactar:

Re: El archivo LCK no se borra al cerrar (Win 7)

Mensaje por Urxvt »

Así queda la solución definitiva:

Código: Seleccionar todo

Sub CloseBase()
	Dim opcion As integer
		opcion = MsgBox ("¿Quiere salir de la BD?", 4, "Salida")
	If opcion = 6 Then
		ThisDatabaseDocument.CurrentController.CloseSubComponents()
		Wait(500)
		ThisDataBaseDocument.Close(True)
		If GetGUIType = 1 Then
			Wait(500)
			starDesktop.terminate
		End If
	End if
End Sub
Explicación: muestra cuadro de diálogo preguntando si se quiere cerrar la aplicación. Si la respuesta es sí, cierra los subcomonentes de la BD, espera 500 milisegundos y cierra el documento. Entonces, comprueba si estás en entorno Windows y si es sí, espera otros 500 milisegundos y termina el LibreOffice.
Debian 9 & i3wm + LibreOffice 5.2.7.2
Responder