[Risolto] Registrazione automatica database
Inviato: sabato 26 luglio 2014, 14:31
Salve a tutti!
Sono di nuovo qui a proporre un nuovo quesito e spero mi sappiate aiutare!
La domanda è: "come faccio a far funzionare la macro seguente?"
Ora vi spiego quanto ho fatto prima di arrivare a chiedervi aiuto.
Ho creato un file di calc che lavora con delle finestre di dialogo per l'inserimento di dati e un file di base che utilizzo come archivio dati.
Per lavorare con le finestre di dialogo, alla loro apertura, le caselle di riepilogo inserite vanno a prelevare i dati dal database e per fare questo ho inserito una macro che vada ad aprire il database e poi di conseguenza ricercare nelle tabelle i valori da inserire nella finestra di dialogo.
Il problema è che se volessi passare i file ad un'altro computer, la finestra di dialogo all'apertura mi dà errore se il database non è registrato, quindi volevo ovviare questo problema inserendo la macro sopra citata per registrare in automatico il database appena si va ad aprire il file di calc per l'inserimento dei dati.
Al momento la macro l'ho inserita nel file di calc alla procedura che va ad aprire il database:
ma mi dà questo errore Fatemi sapere dove sbaglio.
Sono di nuovo qui a proporre un nuovo quesito e spero mi sappiate aiutare!
La domanda è: "come faccio a far funzionare la macro seguente?"
Codice: Seleziona tutto
Sub registraDatabase
dim oBaseContext,oDataSource as object
dim sName as string
oDoc = ThisComponent
If (oDoc.hasLocation()) then
sDocURL = oDoc.getURL()
End if
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
sName = "DatiperBilancio"
oDataSource = oBaseContext.getByName(sName)
oBaseContext.registerObject("DatiperBilancio",oDoc)
Msgbox sName + " è stato registrato!",48,"Registrazione Database"
End SubHo creato un file di calc che lavora con delle finestre di dialogo per l'inserimento di dati e un file di base che utilizzo come archivio dati.
Per lavorare con le finestre di dialogo, alla loro apertura, le caselle di riepilogo inserite vanno a prelevare i dati dal database e per fare questo ho inserito una macro che vada ad aprire il database e poi di conseguenza ricercare nelle tabelle i valori da inserire nella finestra di dialogo.
Il problema è che se volessi passare i file ad un'altro computer, la finestra di dialogo all'apertura mi dà errore se il database non è registrato, quindi volevo ovviare questo problema inserendo la macro sopra citata per registrare in automatico il database appena si va ad aprire il file di calc per l'inserimento dei dati.
Al momento la macro l'ho inserita nel file di calc alla procedura che va ad aprire il database:
Codice: Seleziona tutto
public Sub DBOpen(sDBName) ' APERTURA DB LAVORO
'---------------------------------------------'-----------------------------'
' Questa routine crea il servizio di accesso alla banca dati 'sDBName'
' passata come parametro dal programma chiamante e attiva la connessione
' assegnandola alla variabile globale oDBConn
'---------------------------------------------'-----------------------------'
dim oDoc,oDBIHnd,oDBServ, oContext as object
dim sDocURL as string
oDoc = ThisComponent
If (oDoc.hasLocation()) then
sDocURL = oDoc.getURL()
end if
oContext= CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDBServ = oContext.getByName(sDBName)
oContext.registerObject("DatiperBilancio",oDBServ)
Msgbox sDBName & "è stato registrato!", 48, "Registrazione Database"
If Not oContext.hasByName(sDBName) Then
Msgbox "Errore. il database [" & sDBname & "] non è registrato"
Exit Sub
End If
If Not oDBServ.IsPasswordRequired Then ' IF NO RICHIESTA PWD ACCESSO
oDBConn = oDBServ.GetConnection("","") ' ACCEDO SENZA PASSWORD
Else ' ELSE PWD RICHIESTA
oDBIHnd = createUnoService("com.sun.star.sdb.InteractionHandler")
oDBConn = oDBServ.ConnectWithCompletion(oDBIHnd) ' ACCEDO CON PASSWORD
End If ' ENDIF ACCESSO CON PWD
End Sub ' FINEma mi dà questo errore Fatemi sapere dove sbaglio.