Macro para cerrar la base de datos y el Openoffice

Discute sobre las herramientas de la base de datos
Responder
joaofmateus
Mensajes: 33
Registrado: Lun Dic 05, 2016 12:53 pm

Macro para cerrar la base de datos y el Openoffice

Mensaje por joaofmateus »

Estoy usando el siguiente código de RMG para cerrar la base de datos.

Código:

Código: Seleccionar todo

Sub CerrarBase()
	Dim opcion As integer
		opcion = MsgBox ("¿Deseja realmente sair da Base de Dados?",36,"Opção de Sair da Base de Dados")
	If opcion = 6 Then
		ThisDatabaseDocument.CurrentController.CloseSubComponents()	'Cierra todos los formularios y pregunta si guarda los datos
		ThisDataBaseDocument.Close(True)'Cierra la base de datos (no pregunta nada)
	End if							
End Sub

Sucede que este código, tal vez porque no cierra el Openoffice, no elimina el lck y, tal vez por eso, en la versión 4.1.4 ya se han perdido datos.

He buscado un código antiguo que tenía para cerrar el Openoffice, éste elimina el lck, pero cuando vuelva a Openoffice comprueba que la base de datos necesita ser recuperada.

Código:

Código: Seleccionar todo

Sub FechaOffice

dim cmdShell As String
dim retour As Double

ThisComponent.Parent.store()

' Indicar o caminho completo para a sua macro
cmdShell = "soffice.exe macro:///FechaOffice.accoes.Fecha()"
Shell(cmdShell,2)

End sub

Sub Fecha()
stardesktop.terminate
End Sub


¿Alguien tiene una idea de un código que:
1º Cierre la base de datos
2º Cierre el openoffice

PS: ¿O es que todo esto resulta de bugs de la versión 4.1.4 de Openoffice?

Gracias desde ahora.
OpenOffice 4.1.6
Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por RMG »

Hola,

A mi me funciona perfectamente en AOO 4.1.4. Por que no pruebas a reiniciar el perfil de usuario.

https://forum.openoffice.org/es/forum/v ... =11&t=1082

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
joaofmateus
Mensajes: 33
Registrado: Lun Dic 05, 2016 12:53 pm

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por joaofmateus »

Hola RMG
En primer lugar agradecido por tu atención y sugerencia.
En el caso de que el problema persiste, he intentado con otro usuario y el lck seguía sin ser eliminado.
Por lo tanto, desinstaló el openoffice y eliminé toda mi carpeta de roaming.
El probema persiste y el lck sigue sin ser eliminado.
OpenOffice 4.1.6
Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por RMG »

Pues no se que otra solución darte. Por si acaso prueba a hacer un CHECKPOINT DEFRAG a la BD en el editor de SQL. Pasa en todas las BD?.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
joaofmateus
Mensajes: 33
Registrado: Lun Dic 05, 2016 12:53 pm

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por joaofmateus »

De todos modos gracias RMG.
Con tu base "gesfatura" el lcK se cierra pero el proceso del Openoffice continúa corriendo en segundo plano.
Con la mía, tal vez por el volumen de datos, no sucede.
Me parece que el problema es que la macro no cierra el proceso de Openoffice que continúa en segundo plano, si falla la base por "ficheiro", "sair" el problema deja de existir. Aquí se sentía el mismo problema

https://www.vivaolinux.com.br/topico/Ba ... re-Office/

y, por lo visto, no se encontró solución.
En varios forúns del openoffice constaté el mismo problema.
El código "FechaOfice" funcionó hasta algunas versiones de Openoffice ou Windows (no lo sé) , depués ha dejado de funcionar y la base pasó a tener que ser recuperada. perdiendo datos
OpenOffice 4.1.6
Windows 10
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por RMG »

La verdad es que Base si se carga con muchos datos llega un momento que deja de ser estable al 100%. Te recomiendo que si es ese tu caso complementes Base con otro motor de base de datos tipo MySQL, SQLite etc, mucho más estable. Por mi parte todos mis proyectos que he querido que fueran estables 100% los he hecho con SQLite que es lo más sencillo de implementar. Si consideras esta opción te puedo ayudar a prepararlo. SQLite no es compatible con HPSQL (Base) al 100% por lo que hay que variar algunas funciones.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por Longi »

Buenas!
En mi escasa experiencia, sin saber de qué estoy hablando, y habiendo usado base en carpetas compartidas ( que quisiera que funcionase multiusuario, pero no puedo sin añadir software), encuentro lo siguiente:
Parece que el abrir una base de datos sin más, después la puedes cerrar bien con la macro ya mostrada.
Si abres la base de datos, y después otro elemento de openoffice, aunque la cierres con esa macro, o con el botón de cierre, queda el proceso StarOffice.bin funcionando, y queda bloqueada la base para cualquier otro usuario de la carpeta compartida, aunque tú lo tengas aparentemente cerrado, pero con un writer o un calc abierto.
En definitiva: Parece que libre o AOO 'enganchan' de alguna manera a la base y no la sueltan hasta que todo el proceso ha terminado, teniendo que cerrar todos los programas de la suite, e incluso ir a procesos y matar el StarOffice.bin.
En cuanto a la estabilidad hay tutoriales para partir la base de datos en dos, por un lado los datos y por otro la estructura. A la hora de editar las tablas da problemas, pero luego, una vez funcionando se alcanza un grado de estabilidad muy, muy aceptable.
Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
joaofmateus
Mensajes: 33
Registrado: Lun Dic 05, 2016 12:53 pm

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por joaofmateus »

Saludos a todos y una buena Navidad.

El problema sigue sin resolverse por lo que no voy a cerrar el tema porque puede aparecer alguien con el mismo problema y sin embargo puede surgir la milagrosa solución (equivalente a "archivo", "salir" del openoffice).

Esta solución no será para este proyecto pues, siguiendo la sugerencia del RMG, resolví transformarlo en
frontend y backend, estoy usando MySql.

Por eso RMG me aguarda.

Ya empezaron a surgir los problemas, voy a colocarlos aquí en el Foro y, como siempre, espero tu ayuda.
OpenOffice 4.1.6
Windows 10
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por gustavodiaz00 »

Hola no se si solucionaste le problema pero yo estaba buscando algun comando para cerrar openoofice/libreoffice por medio de una macro, y encontré la funcion que usas

Código: Seleccionar todo

Sub Fecha()
  stardesktop.terminate
End Sub
Gracias es lo que buscaba. Con respecto a tu problema yo tambien estoy trabajando con MySql.

A mi no se me presento ese problema con la base de datos.
por lo que veo en el codigo nunca cerras la conexión.

Yo uso para conectarme a la base el conector MySql Conector.

Te dejo un ejemplo de una Funcion que hace una consulta a la base de datos y los datos devueltos los cargo en un ListBox

Fijate que uso la sentencia Ocon.Close para cerrar la conexión

Código: Seleccionar todo

Sub Buscar_FiltroText(Dialogo As Object)
   
   Dim oDlg As Object

    oDlg = Dialogo.getControl("Datos")
   
   Dim oParms(2) As New "com.sun.star.beans.PropertyValue"
   Dim oCon as Object 

   oManager = CreateUnoService("com.sun.star.sdbc.DriverManager")
   sURL  = "sdbc:mysqlc:://localhost:3306/base_elementos"
      
   oParms(0).Name = "user"
   oParms(0).Value = "gustavo"       ' Usuario del servidor MySql
   oParms(1).Name = "password"
   oParms(1).Value = "21525406"    'Passwor del usuario del servidor MySql
   oParms(2).Name = "JavaDriverClass"
   oParms(2).Value = "com.mysql.jdbc.Driver"
   
   oCon = oManager.getConnectionWithInfo(sURL, oParms())    'Creamos la conexión
   oStatement = oCon.createStatement()                                 'Create an SQL statement object
   
   Buscar = UCase(oDlg.getControl("Filtro_Texto").Text)          'TextBox con el texto a buscar
   
   ' buscamos en  la columna numero de la tabla de datos elementos, donde numero contenga al texto que esta en el ListBox y devuelve los primeros 10 registros.
   sSQL = "SELECT numero FROM base_Elementos.elementos WHERE numero LIKE '" & Buscar & "%' ORDER BY numero ASC LIMIT 0, 10 ;"
   
   oResultSet = oStatement.executeQuery(sSQL)
   
   Registro = 0
   dim DatoFiltro(Registros) 'Matriz para guardar los codigos de la Plaforma 
   
   While oResultSet.next
      DatoFiltro(Registro) = oResultSet.getString(1) 'Cantidad Maxima de registros
      Registro = Registro + 1
      Redim Preserve DatoFiltro(Registro)               'Redimensionamos la matriz para agregar el dato nuevo conservando los datos existentes
   Wend

   ListBox_Datos = oDlg.getControl("Datos")   
   ListBox_Datos.RemoveItems (0, ListBox_Datos.ItemCount) 'Limpiamos el ListBox
   ListBox_Datos.addItems(DatoFiltro(), 0)                           'Cargamos el ListBox con los datosde la matriz
   ListBox_Datos.selectItemPos(0, true)                               'Seleccionamos la primera posición del ListBox
   
   Erase DatoFiltro                                                             'Borramos La Matriz
   oCon.Close                                                                    'Cerramos la conexión
End Sub
Si ya lo resolviste bueno no hay problema pero a lo mejor le es útil para otros.
LibreOffice 6.1 en KDE Neon
Avatar de Usuario
dunhill1
Mensajes: 78
Registrado: Jue May 24, 2012 8:16 pm
Contactar:

Re: Macro para cerrar la base de datos y el Openoffice

Mensaje por dunhill1 »

[quote="joaofmateus"]Estoy usando el siguiente código de RMG para cerrar la base de datos.

Código:

Código: Seleccionar todo

Sub CerrarBase()
	Dim opcion As integer
		opcion = MsgBox ("¿Deseja realmente sair da Base de Dados?",36,"Opção de Sair da Base de Dados")
	If opcion = 6 Then
		ThisDatabaseDocument.CurrentController.CloseSubComponents()	'Cierra todos los formularios y pregunta si guarda los datos
		ThisDataBaseDocument.Close(True)'Cierra la base de datos (no pregunta nada)
	End if							
End Sub
Es el que yo uso y funciona !!
OpenOffice 4.1.6 / Libreoffice 6 en Linux Mint 19
Responder