Registrazione database
-
- Messaggi: 93
- Iscritto il: mercoledì 31 marzo 2010, 9:09
Registrazione database
Il database creato con Base va registrato affinche funzioni correttamente
vorrei automatizzare con una macro la procedura così da evitare la registrazione manuale la prima volta che lo si apre
tempo fa ne avevo già parlato e mi era stato suggerito di usare ThisComponent.location
ma non riesco a capire come usarlo
Qualche suggerimento?
Grazie in anticipo per le risposte
vorrei automatizzare con una macro la procedura così da evitare la registrazione manuale la prima volta che lo si apre
tempo fa ne avevo già parlato e mi era stato suggerito di usare ThisComponent.location
ma non riesco a capire come usarlo
Qualche suggerimento?
Grazie in anticipo per le risposte
LibreOffice 3.3.2
Ubuntu 10.10
Ubuntu 10.10
Re: Registrazione database
Cosa significa va registrato? Io non l'ho mai fatto e ha sempre funzionato. Forse intendi questo?
http://user.services.openoffice.org/it/ ... f=13&t=827
indica Risolto se ok
http://user.services.openoffice.org/it/ ... f=13&t=827
indica Risolto se ok
Windows 10 - Apache OpenOffice 4.1.8
-
- Messaggi: 93
- Iscritto il: mercoledì 31 marzo 2010, 9:09
Re: Registrazione database
No no è risolto
la registrazione serve per far funzionare correttamente le macro e altre cose
intendo quella che si fa in
Strumenti->Opzioni->Openoffice.Org Base->Database
La vorrei automatizzare affinchè la prima volta che si apre il DB non sia necessario girare per menù
la registrazione serve per far funzionare correttamente le macro e altre cose
intendo quella che si fa in
Strumenti->Opzioni->Openoffice.Org Base->Database
La vorrei automatizzare affinchè la prima volta che si apre il DB non sia necessario girare per menù
LibreOffice 3.3.2
Ubuntu 10.10
Ubuntu 10.10
-
- Messaggi: 93
- Iscritto il: mercoledì 31 marzo 2010, 9:09
Re: Registrazione database
Un primo passo potrebbe essere quello di conoscere il percorso del file del database
Come posso fare per ottenerlo tramite una macro e inserirlo in una variabile?
Come posso fare per ottenerlo tramite una macro e inserirlo in una variabile?
LibreOffice 3.3.2
Ubuntu 10.10
Ubuntu 10.10
- marcofoc
- Messaggi: 235
- Iscritto il: martedì 12 ottobre 2010, 16:48
- Località: Arzignano (VI)
- Contatta:
Re: Registrazione database
Ma il tuo problema qual'è?
Inserito una volta (registrato), l'hai disponibile per sempre..
Inserito una volta (registrato), l'hai disponibile per sempre..
Non esistono buoni maestri senza buoni allievi...
-
- Messaggi: 93
- Iscritto il: mercoledì 31 marzo 2010, 9:09
Re: Registrazione database
Il database lo vorrei distribuire ad altri e vorrei evitare di far compiere ulteriori operazioni
inoltre conoscere il percorso del file mi permetterebbe di migliorare il codice delle macro
inoltre conoscere il percorso del file mi permetterebbe di migliorare il codice delle macro
LibreOffice 3.3.2
Ubuntu 10.10
Ubuntu 10.10
- marcofoc
- Messaggi: 235
- Iscritto il: martedì 12 ottobre 2010, 16:48
- Località: Arzignano (VI)
- Contatta:
Re: Registrazione database
ho chiesto su un altro forum..
ti incollo la risposta e fai le prove..
non conosco le macro e il linguaggio di cui sono composte..
ti incollo la risposta e fai le prove..
non conosco le macro e il linguaggio di cui sono composte..
> Allora, se io volessi distribuire un mio file database .odb, c'è una
> maniera per fare in modo che si registri in automatico, magari al
> primo avvio?
Che io sappia solo con una macro.
Tipo questa:
sub registradatabase
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
sName = "nomecompletodelfiledeltuodatabase.odb"
oDataSource = oBaseContext.getByName(sName)
oBaseContext.registerObject("Nomedeldatabase", oDataSource)
end sub
Dimenticavo che c' una piccola difficolt .
Tu non puoi sapere a priori nomecompletodelfiledeltuodatabase.odb.
Ci dovuto al fatto che non puoi sapere a priori il path del file del
data base dell'utente finale.
Questa informazione la puoi ottenere ad esempio cos (ma solo se la
macro contenuta nel file .odb):
Doc = thiscomponent
If (Doc.hasLocation()) Then
sDocURL = Doc.getURL()
End If
Non esistono buoni maestri senza buoni allievi...
- xergio
- Messaggi: 315
- Iscritto il: lunedì 15 marzo 2010, 21:54
- Località: Arzignano (Vicenza)
- Contatta:
Re: Registrazione database
Qui c'è un po' di tutto (prende il percorso del database dalla .oxt, copia il database in una nuova directory creata apposta e registra il database in OOo), anche se ci sono altri metodi.
n.b.: ci sono delle stringhe da modificare secondo necessità, in particolare il nome del db e il codice univoco della .oxt
n.b.: ci sono delle stringhe da modificare secondo necessità, in particolare il nome del db e il codice univoco della .oxt
Codice: Seleziona tutto
'***Set db**********************************
Sub recDb
sDb = "edil"
oContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
If Not ( oContext.hasByName(sDb) ) Then
If GetGUIType=1 Then
path = convertFromUrl(ENVIRON("HOMEDRIVE") & ENVIRON("HOMEPATH"))
Else
path = convertFromUrl(ENVIRON("HOME"))
End If
sStandardDir = "Edil"
path = ConvertToUrl(ConvertFromUrl(path) & getPathSeparator & sStandardDir)
oSfA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
If Not oSfA.exists(path) Then
oSfA.createFolder(path)
Endif
sUrl = ConvertToUrl(ConvertFromUrl(path) & getPathSeparator & sDb & ".odb")
If Not oSfA.exists(sUrl) Then
sOxtDbUrl = GetDatabaseURL
Dim m(0) As New com.sun.star.beans.PropertyValue
m(0).Name = "Hidden"
m(0).Value = True
oDbDoc = StarDesktop.loadComponentFromUrl(sOxtDbUrl, "_blank" , 0, m())
Dim mb()
oDbDoc.StoreAsURL (sUrl, mb())
oDbDoc.close(True)
Endif
oDb = oContext.getByName(convertToUrl(sUrl))
oContext.registerObject(sDb, oDb)
Endif
End Sub
REM ***** BASIC *****
'***Thanks to Paolo Mantovani***
Public Const PKG_ID = "it.icstools.Edil"
'______________________________________________________________________________
Function OpenForm(sFormUrl As String, bReplaceCurrent As Boolean, Optional bDontHideMenuBar As Boolean) As Object
' sFormUrl = GetFormURL(sFormName)
' sDbUrl = GetDatabaseURL()
' silentCheckDb
oContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
If Not oContext.hasByName("edil") Then
Exit Function
Endif
If bReplaceCurrent Then
oCmpLoader = StarDesktop.ActiveFrame
sDestFrame = "_self"
Else
oCmpLoader = StarDesktop
sDestFrame = "_blank"
Endif
Dim mArgs(1) As New com.sun.star.beans.PropertyValue
mArgs(0).Name = "MacroExecutionMode"
mArgs(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN '4
mArgs(1).Name = "ReadOnly"
mArgs(1).Value = True
oDoc = oCmpLoader.loadComponentFromURL(sFormUrl, sDestFrame, 0, mArgs())
oDoc.CurrentController.setFormDesignMode(True)
' Remove UI stuff
oLMgr = oDoc.CurrentController.Frame.LayoutManager
oLMgr.setVisible(False)
If bDontHideMenuBar = True Then
'Nothing to do
Else
oLMgr.hideElement("private:resource/menubar/menubar")
Endif
'init forms and subforms
' For Each oForm In oDoc.DrawPage.Forms()
' InitializeForm(oForm, sDbUrl)
' Next
OpenForm = oDoc
End Function
'______________________________________________________________________________
Sub InitializeForm(oForm, sDbUrl)
Dim oElem
Dim sImageUrl As String
Dim mParams()
Dim sCommand
If oForm.DataSourceName <> sDbUrl Then
'iCmdType = oForm.CommandType
'sCommand = oForm.Command
oForm.DataSourceName = sDbUrl
'oForm.Command = Command
Endif
For Each oElem In oForm
If oElem.supportsService("com.sun.star.form.component.Form") Then
InitializeForm(oElem, sDbUrl)
Endif
Next
oForm.load()
End Sub
'______________________________________________________________________________
Function GetFormURL(sFormName As String) As String
GetFormURL = ConvertToUrl(ConvertFromUrl(GetPackageUrl()) & getPathSeparator & "forms" & getPathSeparator & sFormName & ".odt")
End Function
'______________________________________________________________________________
Function GetDatabaseURL() As String
GetDatabaseURL = ConvertToUrl(ConvertFromUrl(GetPackageUrl()) & getPathSeparator & "db" & getPathSeparator & sDb & ".odb")
End Function
'______________________________________________________________________________
Function GetPackageUrl() As String
oCtx = GetDefaultContext()
oPkgManFactory = oCtx.getByName("/singletons/com.sun.star.deployment.thePackageManagerFactory")
oPkgMan = oPkgManFactory.getPackageManager("user")
oPkg = oPkgMan.getDeployedPackage(PKG_ID, "", Null)
GetPackageUrl = ExpandMacroFieldExpression(oPkg.Url)
End Function
'_________________________________________________________________________________________
Function ExpandMacroFieldExpression(sURL As String) As String
Dim sTemp As String
Dim oSM As Object
Dim oMacroExpander As Object
'get the service manager
oSM = getProcessServiceManager
'get the macro expander
oMacroExpander = oSM.DefaultContext.getValueByName("/singletons/com.sun.star.util.theMacroExpander")
'cut the vnd.sun.star.expand: part
sTemp = Join(Split(sURL, "vnd.sun.star.expand:"), "")
'Expand the macrofield expression
sTemp = oMacroExpander.ExpandMacros(sTemp)
sTemp = Trim(sTemp)
ExpandMacroFieldExpression = sTemp
End Function
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
-
- Messaggi: 93
- Iscritto il: mercoledì 31 marzo 2010, 9:09
Re: Registrazione database
Grazie per le dritte
integro e il codice e, se funziona, pubblico il risultato
integro e il codice e, se funziona, pubblico il risultato
LibreOffice 3.3.2
Ubuntu 10.10
Ubuntu 10.10
-
- Messaggi: 93
- Iscritto il: mercoledì 31 marzo 2010, 9:09
Re: Registrazione database
Dopo prolungate elucubrazioni mentali e il prezioso aiuto di XSergio
ho trovato questo
A me funziona, ma non so se è del tutto corretto
Aspetto a mettere RISOLTO
ho trovato questo
Codice: Seleziona tutto
Sub RegistraDatabase
dim sUrl as string
dim sName as string
dim oBaseContext as object
dim OdataSource as object
GlobalScope.BasicLibraries.loadLIbrary( "Tools" )
If ThisComponent.hasLocation() Then
sUrl = ThisComponent.URL
sName= GetFileNameWithoutExtension( FilenameOutOfPath( ConvertFromURL(sUrl ) ) )
oBaseContext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = oBaseContext.getByName(sUrl)
oBaseContext.registerObject(sName, oDataSource)
endif
End Sub
Aspetto a mettere RISOLTO
LibreOffice 3.3.2
Ubuntu 10.10
Ubuntu 10.10
Re: Registrazione database
Con il codice sopra riportato però a me sorge un altro problema, la prima volta che lancio il db ok viene registrato, ma quando lo riapro la seconda volta mi da un errore, credo legato al fatto che il db risulti già registrato.
C'è la possibilità di fare in modo che la macro di cui sopra si avvii solo ed esclusivamente al primo avvio?
Oltretutto mi risolverebbe anche il problema legato al fatto che avevo già collegato una macro per aprire un form specifico all'apertura del documento. Se fosse possibile assegnare la registrazione del db ad un altro evento sarebbe perfetto.
C'è la possibilità di fare in modo che la macro di cui sopra si avvii solo ed esclusivamente al primo avvio?
Oltretutto mi risolverebbe anche il problema legato al fatto che avevo già collegato una macro per aprire un form specifico all'apertura del documento. Se fosse possibile assegnare la registrazione del db ad un altro evento sarebbe perfetto.
OpenOffice 3.3 su Windows 7 Home Premium