eccezione apertura db

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

eccezione apertura db

Messaggio da fulk »

Ciao a tutti,
da quello che so, l'accesso ai database con il base che si appoggia all'HSQL non permette la multiutenza.

Vorrei gestire quindi il caso in cui due utenti accedano nello stesso momento ad un database.
Quello che faccio attualmente è:

Codice: Seleziona tutto

dbContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = dbContext.GetByName("miodb")
oForms = oDataSource.DatabaseDocument.FormDocuments
oAConnection = oDataSource.getConnection("","")
e lo schianto (nel caso in cui un utente tenti di aprire il database già aperto da un altro) avviene nella getConnection.

Quello che farei è visualizzare una banale finestra (msgbox per esempio) con un messaggio "umano" dato che attualmente viene visualizzato il seguente messaggio di errore:
Errore di runtime BASIC.
Si è verificata un'eccezione
Type: com.sun.star.sdbc.SQLException
Message: Errore generale: org.hsqldb.lib.FileSystemRuntimeExceptions:
java.io.IOException: O:/OOO330/ooo/package/source/xtor/xstorage.cxx: :3332;
Grazie a chiunque risponda.

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

Re: eccezione apertura db

Messaggio da vladko »

Ciao, base in modalità embedded-mode cioè db incorporato non puoi usare in multimode

ma c'è un trucco fantastico per usare base come frontend di hsqldb:
http://www.oooforum.org/forum/viewtopic ... 523#396523
questo è automatico e puoi usare hsqldb1.8 e anche aggiornare a hsqldb 2.2.7
partire da zero richiede nulla e in poco tempo hai tutto pronto

per migrazione di db già fatti in embedded-mode qui c'è guida in italiano:
http://user.services.openoffice.org/it/ ... f=6&t=1485

attenzione :!:
leggere bene e fare test , che si può fare anche su X-OOO(versione portable)

ora un piccolo suggerimento
prima di tutto fai spostamento per file multimode con hsqldb1.8
poi fai

Codice: Seleziona tutto

shutdown compact
poi fai aggiornamento (se vuoi) a versione superiore
poi ancora

Codice: Seleziona tutto

shutdown compact
e fai sempre copie dei tuoi 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 :-)
TMY
Messaggi: 81
Iscritto il: giovedì 22 dicembre 2011, 7:41

Re: eccezione apertura db

Messaggio da TMY »

vladko ha scritto:Ciao, base in modalità embedded-mode cioè db incorporato non puoi usare in multimode

cosa intendi per multimode??????

ho letto gli indirizzi che hai nominato ma il mio db non va in rete.
windows XP a casa
windows Vista in ufficio
opn office 3.3.0
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

@TMY
multimode è db con accesso da più utenti può essere in rete ma anche in stesso computer
quel file mydb crea una cartella con dentro due file .odb

uno serve per usare in modalita file singolo
uno per usare in modalità multimode (accesso contemporaneo di più utenti)
tutto questo serve a conservare meglio i dati, a essere più veloce, etc etc
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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:Ciao, base in modalità embedded-mode cioè db incorporato non puoi usare in multimode

ma c'è un trucco fantastico per usare base come frontend di hsqldb:
http://www.oooforum.org/forum/viewtopic ... 523#396523
questo è automatico e puoi usare hsqldb1.8 e anche aggiornare a hsqldb 2.2.7
partire da zero richiede nulla e in poco tempo hai tutto pronto

per migrazione di db già fatti in embedded-mode qui c'è guida in italiano:
http://user.services.openoffice.org/it/ ... f=6&t=1485

attenzione :!:
leggere bene e fare test , che si può fare anche su X-OOO(versione portable)

ora un piccolo suggerimento
prima di tutto fai spostamento per file multimode con hsqldb1.8
poi fai

Codice: Seleziona tutto

shutdown compact
poi fai aggiornamento (se vuoi) a versione superiore
poi ancora

Codice: Seleziona tutto

shutdown compact
e fai sempre copie dei tuoi file
Ciao e grazie per la risposta.
La guida è molto interessante e ben fatta.
Nel mio caso, avendo un database esistente ho fatto la migrazione.
La comunicazione con il database sembra funzionare correttamente.
Prima di cantare vittoria però ho ancora qualche problema..
Una macro che uso per aprire un Form mi lancia il seguente errore:
Errore di runtime BASIC. Variabile dell'oggetto non impostata
proprio in corrispondenza del comando per aprire il form (ultima riga)..sembra non riconosca il nome del form.

Il codice che uso è questo:

Codice: Seleziona tutto

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())
Temo che utilizzando il database in multimode, le properties non vadano bene (in modalità standalone funzionava tutto correttamente).
Hai qualche idea in proposito ?!
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

strano non deve centrare con il db
quando hai fatto dezip c'è anche una cartella forms con dentro appunto i form.
se non toccato e se non apre il problema è un altro

controllato bene che non perso qualcosa per strada??
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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:strano non deve centrare con il db
quando hai fatto dezip c'è anche una cartella forms con dentro appunto i form.
se non toccato e se non apre il problema è un altro

controllato bene che non perso qualcosa per strada??
Ah ecco mi sa che qualcosa per strada l'ho perso..
Io dal file zip ho preso solo il contenuto della cartella "database", rinominando i file come descritto e copiandoli nella cartella che contiene il database originario.
Dove bisogna copiare la cartella forms ?!
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

non devi copiare la cartella forms ma con drag & drop trascinare il form nel db nuovo

Codice: Seleziona tutto

NOTE: The mydb.<file or server>.odb file is empty otherwise but it will eventually include any forms, queries, reports, or macros you create. You can also migrate these elements from another .odb file. Simply drag&drop each individual Form, Query and Report between two instances of Base running side-by-side as follows...
http://www.oooforum.org/forum/viewtopic ... 995#386995

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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:non devi copiare la cartella forms ma con drag & drop trascinare il form nel db nuovo

Codice: Seleziona tutto

NOTE: The mydb.<file or server>.odb file is empty otherwise but it will eventually include any forms, queries, reports, or macros you create. You can also migrate these elements from another .odb file. Simply drag&drop each individual Form, Query and Report between two instances of Base running side-by-side as follows...
http://www.oooforum.org/forum/viewtopic ... 995#386995

fai sapere grazie
Si si ho fatto così, ho aperto il db originale e trascinato ricerche, formulari e rapporti nel db nuovo.
Poi ho copiato ed incollato il codice delle macro (nella gestione macro).
Ho controllato anche tra i database registrati e ci sono entrambi: quello originale e quello nuovo (che è collegato all'originale tramite JDBC).

Io ho seguito questa guida:
http://www.oooforum.org/forum/viewtopic.phtml?t=94068
quella che hai postato tu è quasi uguale (l'ha scritto lo stesso utente se non sbaglio) io però NON ho installato il mydb.exe, pensi che il problema possa essere dovuto a questo ?!

Sento che manca veramente poco per arrivare alla soluzione..
:crazy:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

molto strano non capisco.
ora puoi provare a creare un form nuovo, collegare lui alla tua macro autoexec e vedere cosa succede?
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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:molto strano non capisco.
ora puoi provare a creare un form nuovo, collegare lui alla tua macro autoexec e vedere cosa succede?
grazie
Forse mi sono spiegato male...

Inizialmente ho creato una funzione che accetta come parametro un nome e apre il form con quel nome.

Ho associato all'apertura del file questa funzione passando come parametro il nome del form principale e funziona correttamente.

Dal form principale ho un bottone e alla pressione di questo bottone ho associato sempre la stessa funzione passando però come parametro il nome di un altro form.

Questa chiamata non funziona e mi restituisce quell'errore di cui parlavo.

Grazie a te !
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

probabile che manca un pezzo
prova a guardare qui
http://www.comunecampagnano.it/gnu/bibl ... #macroapri
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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:probabile che manca un pezzo
prova a guardare qui
http://www.comunecampagnano.it/gnu/bibl ... #macroapri
Bene,
grazie a questa tua osservazione ho riguardato e riscritto la macro per aprire il form e ho trovato l'errore...

Il database che stavo utilizzando, quello che si collegava al database originario in JDBC si chiamava in modo diverso.
Nella macro (copia e incolla) avevo lasciato fisso il nome del database..cambiandolo (sempre a livello di macro) si è messo a funzionare !

Non ho ben capito però utilizzando il database in modalità "multimode" quali risorse vengono utilizzate del database originario e quali del database "collegato"...sapresti dirmi qualcosa in proposito ?!

PS:
intanto grazie per l'aiuto se passi da Milano, birra gratis ;-)
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:probabile che manca un pezzo
prova a guardare qui
http://www.comunecampagnano.it/gnu/bibl ... #macroapri
Purtroppo devo rettificare per l'utilizzo del database da altri pc..

Ho copiato il database collegato in JDBC all'originale in una cartella sul server.
Se provo ad aprirlo da un pc (diverso dal mio) devo innanzitutto registrarlo, poi quando eseguo il file visualizzo il seguente errore:
Immagine

Ciò significa che per ciascun pc che dovrà utilizzare il db originario è necessario creare un database collegato all'originario in JDBC...?!

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

Re: eccezione apertura db

Messaggio da fulk »

fulk ha scritto:
vladko ha scritto:probabile che manca un pezzo
prova a guardare qui
http://www.comunecampagnano.it/gnu/bibl ... #macroapri
Purtroppo devo rettificare per l'utilizzo del database da altri pc..

Ho copiato il database collegato in JDBC all'originale in una cartella sul server.
Se provo ad aprirlo da un pc (diverso dal mio) devo innanzitutto registrarlo, poi quando eseguo il file visualizzo il seguente errore:
Immagine

Ciò significa che per ciascun pc che dovrà utilizzare il db originario è necessario creare un database collegato all'originario in JDBC...?!

sto impazzendo...
:crazy:
Ho capito,
su ogni pc che utilizzerà il database collegato all'originario sarà necessario impostare il runtime java e aggiungere il classpath di hsqldb.jar (entrambe come opzioni di openoffice)..
Un bel casotto..
OpenOffice 3.3.0 su Windows 7 Professional 64bit
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: eccezione apertura db

Messaggio da fulk »

Ragazzi non ci siamo proprio...

Il multimode sembra funzionare ma in realtà non funziona granchè..più utenti possono aprire il database tuttavia le modifiche effettuate non vengono viste in tempo reale da tutti e se chi le ha effettuate chiude il database PRIMA degli altri vengono irrimediabilmente perse...

Cerco di essere schematico per spiegare meglio cosa succede.
  • Database di partenza: db_dati.
  • Creo un database collegato in jdbc a db_dati e lo chiamo db.
  • Aggiungo a db ricerche, formulari e rapporti trascinando quelle di db_dati.
  • Aggiungo a db le macro copiando ed incollando quelle di db_dati.
  • Nelle macro di db sostituisco il nome db_dati con db.
  • db e db_dati si trovano in rete nella stessa cartella.
  • Diciamo che per fare le prove uso due pc; su entrambi accedo ad openoffice, registro i database db e db_dati, aggiungo nel classpath delle opzioni di java hsqldb.jar.
  • Apro db dai due pc (pc1 e pc2) e fin qui tutto bene.
  • Da pc1 inserisco un nuovo record che vedo correttamente.
  • pc2 non vede questo nuovo record.
  • In ordine chiudo db PRIMA da pc1 poi da pc2.
  • Ora, riaprendo db da qualsiasi pc il record aggiunto non si vede, come se non fosse stato salvato.
:crazy:
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

un momento quale stringa usi per collegarti?
c'è localhost o IP del server dentro?
http://www.oooforum.org/forum/viewtopic ... 826#432826
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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:un momento quale stringa usi per collegarti?
c'è localhost o IP del server dentro?
http://www.oooforum.org/forum/viewtopic ... 826#432826
I pc sono in un dominio aziendale.
In altre parole dai pc vedo dischi di rete G, H, Z, ecc. che corrispondono a cartelle del server su cui NON è neanche installato openoffice...sarà questo il problema ?!

I database di cui ho parlato sono in una cartella di questo server...
OpenOffice 3.3.0 su Windows 7 Professional 64bit
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: eccezione apertura db

Messaggio da vladko »

ora credo c'è una confusione e dipende da come hai fatto.
(5) Setup the clients computers for basic database-server access:
(5a) Install OpenOffice.org on each client and run the applicable installer while de-selecting both "new database" options. Also make sure you select any HSQLDB upgrades used on the server-host to ensure driver compatibility. If you're using HSQLDB 2.0, you can skip the basic installer (mydb.jar) and use hsqldb2_OOo.jar exclusively on each client.
(5b) Make a copy of your latest Base front-end file (.odb) and modify the connection setting (Base > Edit > Database > Properties... > Data-source URL) to reflect the IP address (or hostname) of the computer running the database engine (containing the database files and running HSQLDB in server mode). Here's where the detail of this post (step 3) comes in. Don't change the user name and don't check "Password required" just yet.
(5c) Run 'START.vbs' on the host computer and leave everything running.
(5d) Move the reconfigured front-end file (mydb.server.odb) to a client computer and open it in Base and click on Tables to begin testing.
Troubleshooting may involve host file-share settings, firewall-port settings, URL syntax, etc.
(6) Optionally, setup database access control; Adding user names & passwords, roles & privileges:
(6a) Setup users and passwords as desired using SQL (in Base > Tools > SQL...).
This could be a tutorial in and of itself, but suffice to say that you can create a user with default access to the entire database using:
CREATE USER <user name> PASSWORD <password>
(6b) You can then add that user name and check-off "require password" as necessary in the reconfigured front-end file (.odb) for client distribution (Base > Edit > Database > Properties... > User authentication).
(6c) You can assign USERS to ROLES with GRANT/REVOKE on a per Table/View or per Column basis.
...I'm more familar with H2 when it comes to fine-grain access control so we'll be learning this together as I experiment over the coming days with HSQLDB in this respect.

Final tweaking will include: removing ";shutdown=true" from the batch file (server.start.bat) on the host-server machine only; switching to an encrypted protocol (hsqls); perhaps encrypted database (HSQLDB 2.0 only); switching to MVCC as user concurrency grows (HSQLDB 2.0 only), etc.
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: eccezione apertura db

Messaggio da fulk »

Hmm niente da fare, altre prove hanno dato esito negativo.
Getto la spugna su questo fronte (il multimode che rimane comunque argomento molto interessante), in questa circostanza non ho la possibilità di intervenire sul server in questione.

Faccio quindi un up per la domanda iniziale (che avevamo un po' tralasciato nel cercare di mettere in piedi il multimode):

fulk ha scritto:[..]
Vorrei gestire quindi il caso in cui due utenti accedano nello stesso momento ad un database.
Quello che faccio attualmente è:

Codice: Seleziona tutto

dbContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = dbContext.GetByName("miodb")
oForms = oDataSource.DatabaseDocument.FormDocuments
oAConnection = oDataSource.getConnection("","")
e lo schianto (nel caso in cui un utente tenti di aprire il database già aperto da un altro) avviene nella getConnection.

Quello che farei è visualizzare una banale finestra (msgbox per esempio) con un messaggio "umano" dato che attualmente viene visualizzato il seguente messaggio di errore:
Errore di runtime BASIC.
Si è verificata un'eccezione
Type: com.sun.star.sdbc.SQLException
Message: Errore generale: org.hsqldb.lib.FileSystemRuntimeExceptions:
java.io.IOException: O:/OOO330/ooo/package/source/xtor/xstorage.cxx: :3332;
Grazie a chiunque risponda.

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

Re: eccezione apertura db

Messaggio da vladko »

non serve intervenire nel server
metti un XX-OOO (portable) da qualche parte e lascia la cartella nel server.
chiama lui a partire con hsqldb e sei a posto, certo meglio sarebbe nel servere ma se non si può, maometto...
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: eccezione apertura db

Messaggio da fulk »

vladko ha scritto:non serve intervenire nel server
metti un XX-OOO (portable) da qualche parte e lascia la cartella nel server.
chiama lui a partire con hsqldb e sei a posto, certo meglio sarebbe nel servere ma se non si può, maometto...
Ho provato ad aggiungere il classpath hsqldb.jar selezionandolo dalla cartella dell'oo portable copiato sul server ma si sta incasinando tutto sempre di più, errori su errori, non funziona niente...
:crazy:

Lascio come era prima, rinuncio definitivamente al multimode.
Mi rimane il "problema" di intercettare l'errore generato dalla getconnection nel caso in cui più di un utente acceda al db..
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Rispondi