chiusura db con macro

Discussioni sulle caratteristiche di database
Rispondi
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

chiusura db con macro

Messaggio da fulk »

Ho associato ad un bottone la seguente macro per chiudere il database e uscire da openoffice:

Codice: Seleziona tutto

Sub escidaooo
   Dim oForms as Object, oForm as Object 
   Dim oCtrl as Object 
   oForms = ThisComponent.DrawPage.Forms 
   oForm = oForms.GetByName("MainForm") 
   'Xray oForm 
   oForm.ActiveConnection.flush() 
   StarDesktop.terminate
End sub
La macro è presa direttamente da qui:
http://www.comunecampagnano.it/gnu/bibl ... hiudieesci
e sembra svolgere egregiamente il suo dovere.
Tuttavia, dopo aver chiudo il database con quel bottone se si va a riaprire viene visualizzata la seguente pagina di notifica errori di openoffice:
Immagine
Qualcuno ha idea di cosa possa essere ?!
Ultima modifica di fulk il lunedì 5 marzo 2012, 10:29, modificato 2 volte in totale.
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

Dimenticavo..
sto utilizzando il database in multi-mode.
Inoltre ho dovuto commentare questa riga:
oForm.ActiveConnection.flush()
perchè generava questo errore:
Immagine
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: chiusura db con macro

Messaggio da UTPiovene »

Cosa vuol dire in "multi-mode"?
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: chiusura db con macro

Messaggio da UTPiovene »

Ok, mi sono documentato ... leggendo l'argomento precedente.
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

fulk ha scritto:Dimenticavo..
sto utilizzando il database in multi-mode.
Inoltre ho dovuto commentare questa riga:
oForm.ActiveConnection.flush()
perchè generava questo errore:
Immagine
Piccola rettifica, il database ora viene utilizzato in modalità normale.
L'errore persiste anche commentando la "flush"...

Qualche idea ?!
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

puoi mettere file?
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

Mandato via mp..
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

si ora con un po di tempo guardo
appena aperto e click sul pulsante va in crash
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

vladko ha scritto:si ora con un po di tempo guardo
appena aperto e click sul pulsante va in crash
Si si tranquillo.
Io commentando la flush sono riuscito ad eliminare il "crash" in ogni caso il problema persisteva..
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

ho spostato tutto in macro personali in una nuova libreria e tutto funziona
ora non so
se puoi provare a spostare in una nuova libreria ma in macro documento e vedere forse si può capire cosa butta giù
forse un tempo di più si può anche dare
fai sapere grazie
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

vladko ha scritto:ho spostato tutto in macro personali in una nuova libreria e tutto funziona
ora non so
se puoi provare a spostare in una nuova libreria ma in macro documento e vedere forse si può capire cosa butta giù
forse un tempo di più si può anche dare
fai sapere grazie
  • Con le macro spostate in "macro personali" sembra funzionare.
  • Con le macro ricopiate in una nuova libreria legata al db (nominata Module2) il problema si ripresenta.
Ovviamente non posso lasciare le macro in "macro personali" perchè non le vedrei dagli altri pc...
:crazy:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

si certo non è che ti sono stato di aiuto ma le macro solo mal di testa per me. :D
ma ragionare si può
ora quello che velocemente ho scritto è che se sposto in macro personali tutto funziona
mentre in macro del doc no.
in "letteratura" sulle macro ho trovato scritto che non si deve usare la libreria standard delle macro del documento ma creare una nuova e solo lì mettere le macro. :roll:
allora per maometto che va alla montagna ho buttato tutto in macro personali ma a te non serve a nulla.

allora ti dico puoi?:
1 creare nuova libreria nel doc (che mi pare hai già fatto)
2 rifare collegamenti
3 eliminare macro autoexec o altre fino a trovae dove è il prob
e fare un test
credo che la colpa sia sua forse perchè collega il db e poi nessuno lo scollega e va in crash.
fai sapere
grazie
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: chiusura db con macro

Messaggio da Mizio1961 »

Nella macro che vedo all'inizio hai provato a cambiare StarDesktop.terminate con ThisComponent.close(True) ?
Ho fatto alcune prove su questo comando e dava lo stesso problema di StarDesktop.terminate.
Siccome ciò m'era capitato anche in altre situazioni ho provveduto a modificare la macro ancora in modo comunque semplicistico, chiudendo prima il Dialog da cui richiamo ThisComponent.Close e poi eseguendo questo comando. In questo modo i problemi sono spariti.
La spiegazione sta nel fatto che questo comando, in questo modo, può essere eseguito solo con tutti gli oggetti (Viste di tabelle, Query, Report, Formulari, ecc) CHIUSI perchè altrimenti restano appesi in memoria e OO va in bambola al riavvio.
La soluzione corretta sarebbe quella di realizzare un ciclo su tutti gli oggetti aperti, chiuderli tutti in modo corretto e per ultimo eseguire ThisComponent.Close(True)
Di seguito il codice che ho provato dove ti dovrebbe bastare cambiare FMain col nome della tua variabile che contiene il riferimento all'oggetto Dialog da cui vuoi richiamare il comando (assegnandolo come macro a un bottone) e verificare se funziona anche a te. (prima però incrocia le dita eh ;) )

Sub cmdCloseDB ' CHIUSURA DATABASE
FMain.endExecute() ' ESEGUE LA FUNZIONE DI CHIUSURA DIALOG MAIN
' Msgbox ThisComponent.Title
ThisComponent.Close(True) ' CHIUSURA DB CON SALVATAGGIO
end sub ' FINE
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

Mizio1961 ha scritto:Nella macro che vedo all'inizio hai provato a cambiare StarDesktop.terminate con ThisComponent.close(True) ?
Ho fatto alcune prove su questo comando e dava lo stesso problema di StarDesktop.terminate.
In effetti anche a me, in questo modo, continua a dare il problema...
Siccome ciò m'era capitato anche in altre situazioni ho provveduto a modificare la macro ancora in modo comunque semplicistico, chiudendo prima il Dialog da cui richiamo ThisComponent.Close e poi eseguendo questo comando. In questo modo i problemi sono spariti.
La spiegazione sta nel fatto che questo comando, in questo modo, può essere eseguito solo con tutti gli oggetti (Viste di tabelle, Query, Report, Formulari, ecc) CHIUSI perchè altrimenti restano appesi in memoria e OO va in bambola al riavvio.
La soluzione corretta sarebbe quella di realizzare un ciclo su tutti gli oggetti aperti, chiuderli tutti in modo corretto e per ultimo eseguire ThisComponent.Close(True)
Di seguito il codice che ho provato dove ti dovrebbe bastare cambiare FMain col nome della tua variabile che contiene il riferimento all'oggetto Dialog da cui vuoi richiamare il comando (assegnandolo come macro a un bottone) e verificare se funziona anche a te. (prima però incrocia le dita eh ;) )

Sub cmdCloseDB ' CHIUSURA DATABASE
FMain.endExecute() ' ESEGUE LA FUNZIONE DI CHIUSURA DIALOG MAIN
' Msgbox ThisComponent.Title
ThisComponent.Close(True) ' CHIUSURA DB CON SALVATAGGIO
end sub ' FINE
Ho quindi provato questo codice però mi viene restituito questo errore:
Errore di runtime BASIC.
Proprietà o metodo non trovati: endExecute.

Sbaglio sicuramente ad utilizzare il riferimento all'oggetto dialog...qualche dritta in proposito ?
Il codice che sto usando (associato alla pressione di un bottone) è questo:

Codice: Seleziona tutto

Sub cmdCloseDB ' CHIUSURA DATABASE
	Dim oForms as Object, oForm as Object
	oForms = ThisComponent.DrawPage.Forms
   	oForm = oForms.GetByName("NOME_FORM")
	oForm.endExecute() ' ESEGUE LA FUNZIONE DI CHIUSURA DIALOG MAIN
	ThisComponent.Close(True) ' CHIUSURA DB CON SALVATAGGIO
end sub ' FINE
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: chiusura db con macro

Messaggio da Mizio1961 »

Nel caso tu abbia creato una barra personalizzata col pulsante di chiusura DB a me funziona in questo modo:
Public Sub FrmClose
Dim FrmObj as object
FrmObj = ThisComponent.currentController.frame
FrmObj.Close(True)
End sub ' FINE

In pratica, da quello che ho capito fino ad ora il DB aperto viene visto come un frame e quindi deve essere trattato come tale.
Così la barra personalizzata in cui si trova il pulsante è di proprietà del frame DB e quando lo premi l'oggetto corrente che viene trovato da ThisComponent.currentController.frame è proprio lui.
Così il successivo richiamo del metodo Close chiude il DB (True sta per salva prima di chiudere)
Quello che mi rimane oscuro è l'obbiettivo di chiudere il DB da macro visto che la stessa cosa la puoi fare premendo la X classica della finestra in cui è aperto il DB
Posso avere spiegazione per curiosità?
Se è risolto il problema ricordati di scrivere [RISOLTO] davanti al titolo chiusura con macro
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

eliminare file .lck
modificare macro con

Codice: Seleziona tutto

Sub ChiudeBase()
		ThisDatabaseDocument.CurrentController.CloseSubComponents()
		ThisDataBaseDocument.Close(True)							
End Sub
funziona
fai sapere
grazie
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

Mizio1961 ha scritto:Nel caso tu abbia creato una barra personalizzata col pulsante di chiusura DB a me funziona in questo modo:
Public Sub FrmClose
Dim FrmObj as object
FrmObj = ThisComponent.currentController.frame
FrmObj.Close(True)
End sub ' FINE

In pratica, da quello che ho capito fino ad ora il DB aperto viene visto come un frame e quindi deve essere trattato come tale.
Così la barra personalizzata in cui si trova il pulsante è di proprietà del frame DB e quando lo premi l'oggetto corrente che viene trovato da ThisComponent.currentController.frame è proprio lui.
Così il successivo richiamo del metodo Close chiude il DB (True sta per salva prima di chiudere)
Quello che mi rimane oscuro è l'obbiettivo di chiudere il DB da macro visto che la stessa cosa la puoi fare premendo la X classica della finestra in cui è aperto il DB
Posso avere spiegazione per curiosità?
Se è risolto il problema ricordati di scrivere [RISOLTO] davanti al titolo chiusura con macro
Saluti
Intanto ti ringrazio..
In realtà con questa macro che dici viene chiusa la finestra corrispondente al formulario corrente, dove è presente il bottone per uscire.
Ma la finestra del database (per intenderci quella di base che contiene gli elenchi di tutte le tabelle, query, formulari, ecc..) non viene chiusa.

Il motivo della macro per chiudere il database da bottone è presto detto:
quello che mi è stato richiesto è di realizzare una interfaccia grafica che permetta un accesso user-friendly ad un database con varie operazioni (filtri, ordinamenti, stampa di elenchi).
Per uscire dal database ho quindi pensato di fornire all'utente un bottone sempre accessibile da questa interfaccia (un formulario); questo bottone dovrebbe permettere un'uscita COMPLETA dall'applicazione.
Utilizzando il bottone "chiudi" (la X in alto a destra) l'utente avrebbe dovuto premerlo sul formulario e successivamente sulla finestra del db.
So che può sembrare una banalità ma quando ci sono utenti "de coccio" è meglio semplificare tutto il più possibile...

Ah giusto per dire, un altro problema che avevo riscontrato sempre dopo la chiusura del db:
con l'installazione di OO viene automaticamente attivato il "quickstart".
Con questo benetto quisckstart che gira, chiudendo un database, rimane il file temporaneo che quindi non permette di riaprirlo da un'altra postazione.
Dopo averlo capito ho quindi dovuto disabilitare il quickstart..
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

vladko ha scritto:eliminare file .lck
modificare macro con

Codice: Seleziona tutto

Sub ChiudeBase()
		ThisDatabaseDocument.CurrentController.CloseSubComponents()
		ThisDataBaseDocument.Close(True)							
End Sub
funziona
fai sapere
grazie
:shock:
Non ci posso credere, così funziona...
:bravo: :bravo: :bravo:

:super:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

fulk ha scritto:
vladko ha scritto:eliminare file .lck
modificare macro con

Codice: Seleziona tutto

Sub ChiudeBase()
		ThisDatabaseDocument.CurrentController.CloseSubComponents()
		ThisDataBaseDocument.Close(True)							
End Sub
funziona
fai sapere
grazie
:shock:
Non ci posso credere, così funziona...
:bravo: :bravo: :bravo:

:super:
Purtroppo mi devo contraddire da solo...sto ancora impazzendo per salvare e chiudere un db con un bottone..
Anche queste righe di codice che mi sembravano funzionare in realtà danno il seguente problema:
Il database viene salvato e chiuso ma il file di lock dell' HSQL non viene cancellato pertanto un altro utente che desideri aprire il db successivamente non può farlo.

Ho provato svariate macro alla fine il codice che si avvicina maggiormente alla soluzione è questo:

Codice: Seleziona tutto

Sub database_close
   Dim oForms as Object, oForm as Object
   Dim oCtrl as Object
   oForms = ThisComponent.DrawPage.Forms
   oForm = oForms.GetByName("MainForm")
   oForm.ActiveConnection.flush()
   StarDesktop.terminate
End sub
Si avvicina ma non risolve tutti i problemi..
Salva e chiude correttamente il db MA alla riapertura del si apre la finestra di notifica errore di o.o.
:crazy:
Avreste qualche altra idea.. ?!
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: chiusura db con macro

Messaggio da UTPiovene »

Io uso questa e funziona:

Codice: Seleziona tutto

Sub closeDatabase
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.close( true )
End Sub
l'ho messa sul formulario che autoexec apre all'inizio.
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

UTPiovene ha scritto:Io uso questa e funziona:

Codice: Seleziona tutto

Sub closeDatabase
   ThisComponent.CurrentController.Frame.close(True)
   ThisDatabaseDocument.close( true )
End Sub
l'ho messa sul formulario che autoexec apre all'inizio.
Grazie, l'ho appena provata ma il solito file che viene creato dove si trova il db (nomedb.lck) non viene rimosso alla chiusura..quindi sono al punto di prima..
:crazy:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

Tra l'altro,
chiudendo il db usando la X di chiusura della maschera, le modifiche ai record (effettuate utilizzando le maschere) non vengono salvate..
:-?
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

ciao fulk per me è difficile ricordare tutti i db che passa, allora chiedo
  • il tuo db è realizzato con base connesso a db esterno o db incorporato?
    le macro per questo tuo db hanno riferimenti a

    GetConnection?
ora è probabile che qualcosa tiene impegnato quella connessione quindi bisogna staccare
potrebbe essere che ci vuole un controllo sulle connessioni attive o attivate da macro avviate prima di questa
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

vladko ha scritto:ciao fulk per me è difficile ricordare tutti i db che passa, allora chiedo
  • il tuo db è realizzato con base connesso a db esterno o db incorporato?
    le macro per questo tuo db hanno riferimenti a

    GetConnection?
ora è probabile che qualcosa tiene impegnato quella connessione quindi bisogna staccare
potrebbe essere che ci vuole un controllo sulle connessioni attive o attivate da macro avviate prima di questa
Ciao a te Vladko,
il db di cui parlo è incorporato, non collegato ad alcun db esterno.

Anche secondo me rimane qualcosa di "appeso" come per esempio la connesione al db.

Detto questo di seguito incollo la funzione che effettua la GetConnection, tu dici che quindi dovrei lanciare qualche funzione per chiudere questa connessione che con la chiusura del db non viene effettuata ?!
Forse sono sbagliate le properties che imposto...

Codice: Seleziona tutto

Sub subDisplayForm(sDatabaseName as string, sFormName as string)
   Dim pProp(1) As New com.sun.star.beans.PropertyValue
   Dim dbContext As Object

   dbContext = createUnoService("com.sun.star.sdb.DatabaseContext")
   oDataSource = dbContext.GetByName(sDatabaseName)
   oForms = oDataSource.DatabaseDocument.FormDocuments
   oAConnection = oDataSource.getConnection("","")

   'impostazione properties
   pProp(0).Name = "ActiveConnection"
   pProp(0).Value = oAConnection
   pProp(1).Name = "OpenMode"
   pProp(1).Value = "open" ' OR: openDesign

   'apertura form
   oFormulario = oForms.loadComponentFromURL(sFormName,"_blank",0,pProp())
End Sub
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

Ah tra le svariate prove che ho fatto ho anche riavviato il pc ed il problema si è presentato anche al riavvio (lanciando il db compare la finestra di notifica errori di o.o.)...

A questo punto mi viene in mente un "workaround"..
Si può disabilitare questa benedetta finestra di notifica errori di o.o.?

Nelle opzioni ho trovato solo questo
Immagine
ma non fa quello che desidero.
:crazy:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: chiusura db con macro

Messaggio da fulk »

NON risolve ma per ora mette una "toppa" al problema..

Codice: Seleziona tutto

sub database_close
	oDoc = ThisDatabaseDocument
	'salvataggio database
	If (oDoc.hasLocation AND (Not oDoc.isReadOnly)) Then
		oDoc.store()
	Else
		oDoc.setModified(False)
	End If
	'chiusura form
	ThisComponent.CurrentController.Frame.close(True)
end sub
Praticamente chiudo solo la maschera e prima di farlo salvo i dati.
Successivamente l'utente dovrà quindi chiudere con la "X" la finestra di base che rimane aperta.

Di meglio per ora non sono riuscito ad ottenere pur facendo svariate prove..
:knock:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Asmis
Messaggi: 44
Iscritto il: giovedì 5 aprile 2012, 18:10

Re: chiusura db con macro

Messaggio da Asmis »

Anche io Ho riscontrato il problema del File *.lck alla chiusura con macro del Db :(

Ragionandoci un po' sopra del perchè... mi sono accorto che il seguente codice messo in apertura del DB... quando eseguivo la macro di chiusura... rimenava il file LCK...

Codice: Seleziona tutto

Dim Control as Object
   Control = ThisDatabaseDocument.CurrentController
   If Not Control.IsConnected Then   Control.Connect
   ThisDatabaseDocument.FormDocuments.GetByName("MENU").Open
End Sub
Mentre se non facevo caricare quella macro... il DB si chiudeva regolarmente con la sua macro di chiusura....
Quindi ho risolto inserendo nella macro di chiusura e salvataggio DB la Chiusura forzata del FORM MENU
e adesso il File *.lck viene cancellato regolarmente

Codice: Seleziona tutto

Sub closeDatabase 
Dim Control as Object
   Control = ThisDatabaseDocument.CurrentController
ThisDatabaseDocument.FormDocuments.GetByName("MENU").Close( true )
   ThisDatabaseDocument.close( true )
End Sub
Sono un Niubbo in fatto di macro... e sicuramente ci sono modi migliori... ma così Funziona Tutto Bene :)
Spero serva a qualcuno :)
OpenOffice 3.3 su Windows 7 Pro
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: chiusura db con macro

Messaggio da vladko »

:super:
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
Luberfly
Messaggi: 70
Iscritto il: giovedì 20 maggio 2010, 9:02

Re: chiusura db con macro

Messaggio da Luberfly »

Ciao ragazzi, io ho lo stesso problema, ma nonostante abbia seguito gli stessi passi, mi rimane il file lck aperto alal chiusura dle database.
Questa è la macro di chiusura.
Premetto che in apertura con la macro Autoexec apro la form "Menu" alla quale è associato il pulsante "ESCI"

Codice: Seleziona tutto

Sub ChiudeBase()
rem	ThisComponent.CurrentController.Frame.close(True)
rem   ThisDatabaseDocument.CurrentController.CloseSubComponents()
    ThisDatabaseDocument.FormDocuments.GetByName("Menu").Close( true )
    ThisDataBaseDocument.Store()
    ThisDataBaseDocument.Close(True)                     
End Sub
Ho provato sia con che senza i due rem, ma il file lck rimane alla chiusura dle database.

Se, invece, opero manualmente chiudendo la Form "Menu" e poi "File-Esci da Libreoffice" tutto funziona regolarmente.

Allego il database che crea il problema.
Curiosità: la prima volta che lo lancio mi lascia il file .lck, se poi rimuovo manualmente il file e apro/chiudo il database con i pulsanti, non produce più il file .lck
...non capisco....

Qualche aiutino?

Grazie

Luca
Allegati
Prova.odb
(13.59 KiB) Scaricato 184 volte
DellLatitude E5470 - Libreoffice 7.18 / Windows 10
marvil
Messaggi: 14
Iscritto il: giovedì 21 novembre 2013, 11:34

Re: chiusura db con macro

Messaggio da marvil »

Potrebbe essere utile ?

Sub escidaooo
Dim oForms as Object, oForm as Object
Dim oCtrl as Object
oForms = ThisComponent.DrawPage.Forms
oForm = oForms.GetByName("MainForm")
'Xray oForm
oForm.ActiveConnection.flush()
StarDesktop.terminate
End sub

Ciao, Marco
OpenOffice 4.1.2. su Win 7
Rispondi