Re: [utenti] [Base - HSQLDB] Esportare record in un file csv

2007-11-03 Per discussione Paolo Mantovani
Ciao,

Il sabato 3 novembre 2007 21:00:07 Jack © ha scritto:
> Paolo Mantovani wrote:
> > L'idea è questa:
>
> A me pero' sorge un ragionevole dubbio, esporto una tabella ma poi devo
> importare i dati contenuti in un' altra tabella presente nel DB, non e'
> che poi importo l' intera tabella esterna e me la ritrovo interna.

?? non ho capito...

>
> Con mysql mi sono servite solo poche righe di codice per fare ste cose
> ma mi sa che con HSQL mi sto incartando, ho scaricato un manuale HSQL ma
> non ho visto la possibilita' di fare Select into outfile...

Infatti anche a me pare che non ci sia questa possibilità.



>
> > 1. Fai la query per creare la tabella (esattamente come fai ora):
> >
> > oRecordSet = oStatement.executeQuery( _
> > "SELECT * INTO TEXT ""mytemptable"" FROM ""tabella1""")
>
> 1. I record da inserire sono frutto di un risultato di un 'altra query,
> quindi serve un modo per farlo in un colpo solo.

Di nuovo non capisco: Io ho abbreviato la tua query solo per semplificare, ma 
nulla ti vieta di aggiungere una clausola WHERE o anche altro.



>
> > 2. A questo punto, il file csv è stato creato e popolato con i dati.
> > Siccome si tratta di una tabella linkata al database, dovrai copiare o
> > appendere il contenuto in un altro file che avrai creato appositamente.
>
> 2. Pensavo semplicemente di rinominare il file :-) eh!! che dici.
>
> > 3. Ora è il momento di fare pulizia:
> >
> > oStatement.execute("DROP TABLE""mytemptable"" IF EXISTS")
>
> Ottimo, semplice, efficace.
>
> > In questo modo il file non è più linkato al database, ma comunque non è
> > stato eliminato dal file system, perciò dovrai farlo manualmente,
> > diversamente, la prossima volta che creerai la tabella si genererà un
> > errore.
> >
> > (esempio stupido):
> > kill "file:///home/paolo/mytemptable.csv"
>
> Se rinimino il file questo passaggio lo salto

Si, certamente.
Il mio era solo un esempio schematico, tanto per dare l'idea.

[...]
> Beh!! il path del documento ormai ho impararto a ricavarlo, se ne
> parlava qualche tempo fa' sul NG. Penso che mi servira' se rinomino il
> file.

si, ti serve in ogni caso.

[...]
> > Comunque, arrivato a questo punto il tuo DB è pulito e lindo come
> > all'inizio e sei pronto per una nuova operazione.
>
> Speremus, sta cosa mi sfava parecchio ( sfavare = piacere molto) dare la
> possibilita' di scambiarsi le ricette mi sembra una cosa utile e carina.

Beh, io ho fatto dei test con un database minimale e tutto ha funzionato, 

Comunque, anche se questa strada funziona ed è relativamente semplice, non è 
(a mio parere) la scelta ottimale.
Infatti, questa tecnica confida in alcune direttive SQL particolari e presenti 
solo nel motore HSQLDB.

Questo rende il tuo codice legato ad un tipo particolare di database con tutte 
le conseguenze del caso.
Non è un buon design per la tua applicazione (sempre a mio parere)

Se non fosse che hai scartato la possibilità "Calc" fin da subito, ti avrei 
suggerito proprio quella.
ma perchè Calc no?

Calc si può interfacciare direttamente al database, ovvero puoi assegnare il 
risultato di una query ad un range di celle, dopodiché hai un mondo di 
possibilità al prezzo di pochissime linee di codice:
Puoi esportare in csv ma anche formattare a tuo piacere ed esportare verso PDF 
o qualsiasi altro formato gestito da Calc.
Non mi pare poco.


Questo è un piccolo esempio:
Una versione più completa è qui:
http://codesnippets.services.openoffice.org/Calc/Calc.ImportDatabaseContent.snip

-8<--
Sub ImportDBData()

Globalscope.BasicLibraries.loadLibrary("Tools")
oCalcDoc = createNewDocument( "scalc" )
oSheet = oCalcDoc.Sheets(0)

Dim mImportDesc(2) As New com.sun.star.beans.PropertyValue
mImportDesc(0).Name  = "DatabaseName"
mImportDesc(0).Value = "nuovoDB"
mImportDesc(1).Name  = "SourceType"
mImportDesc(1).Value = com.sun.star.sheet.DataImportMode.SQL
mImportDesc(2).Name  = "SourceObject"
mImportDesc(2).Value = "SELECT * FROM ""tabella1"""

oSheet.getCellRangeByName("A1").doImport(mImportDesc())

End Sub
-8<--

ciao
Paolo M

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [utenti] [Base - HSQLDB] Esportare record in un file csv

2007-11-03 Per discussione Jack ©

Paolo Mantovani wrote:

L'idea è questa:


A me pero' sorge un ragionevole dubbio, esporto una tabella ma poi devo 
importare i dati contenuti in un' altra tabella presente nel DB, non e' 
che poi importo l' intera tabella esterna e me la ritrovo interna.


Con mysql mi sono servite solo poche righe di codice per fare ste cose 
ma mi sa che con HSQL mi sto incartando, ho scaricato un manuale HSQL ma 
non ho visto la possibilita' di fare Select into outfile...



1. Fai la query per creare la tabella (esattamente come fai ora):

oRecordSet = oStatement.executeQuery( _
"SELECT * INTO TEXT ""mytemptable"" FROM ""tabella1""")



1. I record da inserire sono frutto di un risultato di un 'altra query, 
   quindi serve un modo per farlo in un colpo solo.



2. A questo punto, il file csv è stato creato e popolato con i dati.
Siccome si tratta di una tabella linkata al database, dovrai copiare o 
appendere il contenuto in un altro file che avrai creato appositamente.


2. Pensavo semplicemente di rinominare il file :-) eh!! che dici.


3. Ora è il momento di fare pulizia:

oStatement.execute("DROP TABLE""mytemptable"" IF EXISTS")


Ottimo, semplice, efficace.

In questo modo il file non è più linkato al database, ma comunque non è stato 
eliminato dal file system, perciò dovrai farlo manualmente, diversamente, la 
prossima volta che creerai la tabella si genererà un errore.


(esempio stupido):
kill "file:///home/paolo/mytemptable.csv"


Se rinimino il file questo passaggio lo salto

Ovviamente tu dovrai eliminare il file in un modo più intelligente, in 
particolare dovrai ricavare il path del file csv dal path del documento Base 
e magari fare anche un controllo di esistenza del file prima di eliminarlo.


Beh!! il path del documento ormai ho impararto a ricavarlo, se ne
parlava qualche tempo fa' sul NG. Penso che mi servira' se rinomino il file.

Ricorda che il nome del file creato non è sempre identico al nome usato nella 
query (nome nuova tabella), in particolare, il file è sempre in minuscolo, 
anche se il nome della nova tabella contiene maiuscole, inoltre, tutti i 
caratteri non alfanumerici nel nome della tabella vengono tradotti come 
sottotratti (_)


Ad esempio, la query:
SELECT * INTO TEXT "My Temp-Table" ... eccetera

crea il file: my_temp_table.csv


Buono a sapersi.

Comunque, arrivato a questo punto il tuo DB è pulito e lindo come all'inizio e 
sei pronto per una nuova operazione.


Speremus, sta cosa mi sfava parecchio ( sfavare = piacere molto) dare la
possibilita' di scambiarsi le ricette mi sembra una cosa utile e carina.


spero di essere stato aiutevole


Che dire, essenziale e' dire poco visto che in questi anni gli inghippi
me li hai risolti tu.

Molte grazie Jack



--
Email.it, the professional e-mail, gratis per te: http://www.email.it/f

Sponsor:
Pubblicita' con l'email marketing a soli 250 Euro! Prova il servizio di 
Email.it gli specialisti del settore
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=7179&d=3-11

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [utenti] problema disinstallazione pacchetto open office 2.2

2007-11-03 Per discussione Renato Ferrari
Il 08:23, sabato 3 novembre 2007, beppe ha scritto:
> in questo modo dopo il riavvio del PC ti dovrebbe permette di accedere 
> come Administrator.
> Poi accedi al registro di Xp con regedit (dopo un backup) cerchi tutte 
> le chiavi con
> OpenOffice e le rimuovi e riavvii, fai la pulizia con cleanup e speriamo 
> bene...
> potrebbe succedere che alcune chiavi non vogliano essere rimosse, devi 
> vedere le policy del sistema in Strumenti di Amministrazione,
> se Xp l'hai installato tu sai dove andare a cercare, se e' installato 
> con il disco di ripristino della casa
> e' un casino perche' sono state bloccate alcune chiavi del registro di 
> sistema e non vuole fartele cancellare,

perchè (per sentito dire, eh!) il dio onnipotente di windows xp NON è 
Administrator, ma System

-- 
Linux Registered User #219791
Linux Registered Machine #104061
[EMAIL PROTECTED]

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [utenti] [Base - HSQLDB] Esportare record in un file csv

2007-11-03 Per discussione Paolo Mantovani
Ciao Jack,

Il venerdì 2 novembre 2007 13:06:36 Jack © ha scritto:
[]

Ok ora il problema è chiaro.
Siccome sono una schiappa in sql mi sono andato a vedere un po' di reference 
sul sito di hsqldb:
http://hsqldb.org/doc/guide/ch09.html

Confesso che non è stato semplicissimo, ho dovuto fare un po' di prove, ma 
alla fine credo di aver capito come stanno le cose.

Riepilogando:
a)
HSQLDB è in grado di gestire vari tipi di tabelle:
MEMORY, CACHED, TEMPORARY, TEMP, TEXT

CACHED è il tipo di tabella di default usato in OOoBase. questo tipo di 
tabelle viene poi salvata al'inetrno del file ODB

TEXT è una tabella in formato testo (csv) che viene mantenuta all'esterno del 
file ODB, ma si tratta pur sempre di una vera e propria tabella del database, 
per cui se viene cancellata accidentalmente, all'avvio del database viene 
ricreata (vuota)

b)
quando nella tua macro dai il comando (ho semplificato per fare l'esempio):
sQuery = "SELECT * INTO TEXT ""filecsv"" FROM ""tabella1"""
oRS = oStatement.executeQuery(sQuery)

in effetti, HSQLDB crea una nuova tabella di tipo TEXT e ci riversa i dati che 
risultano dalla query.

A differenza del comando "SELECT <> INTO OUTFILE ..." di MySQL quindi, in 
questo caso non abbiamo un'esportazione di dati ma la creazione di una nuova 
tabella esterna in formato testo-csv che è "linkata" al database.

Infatti, se dopo aver dato il comando di cui sopra aprirai il file ODB potrai 
vedere le la nuova tabella elencata tra le altre (ma con un'icona diversa)

Se non è visibile, dovrebbe essere sufficiente fare:
   menu Visualizza->Aggiorna tabelle

c)
tutto questo premesso, credo di poter dire che il problema da te riscontrato 
non è dovuto ad un malfunzionamento ma ad un uso improprio di una funzionalità 
peculiare offerta da HSQLDB

d)
Ho elaborato una possibile soluzione.
L'idea è questa:

1. Fai la query per creare la tabella (esattamente come fai ora):

oRecordSet = oStatement.executeQuery( _
"SELECT * INTO TEXT ""mytemptable"" FROM ""tabella1""")

2. A questo punto, il file csv è stato creato e popolato con i dati.
Siccome si tratta di una tabella linkata al database, dovrai copiare o 
appendere il contenuto in un altro file che avrai creato appositamente.

Non ti metto nessun esempio di codice perchè immagino che tu sappia come fare, 
però in caso di dubbi: sine qua non - siamo qua noi (come dicevano al Bar 
Sport ;-)


3. Ora è il momento di fare pulizia:

oStatement.execute("DROP TABLE""mytemptable"" IF EXISTS")

In questo modo il file non è più linkato al database, ma comunque non è stato 
eliminato dal file system, perciò dovrai farlo manualmente, diversamente, la 
prossima volta che creerai la tabella si genererà un errore.

(esempio stupido):
kill "file:///home/paolo/mytemptable.csv"

Ovviamente tu dovrai eliminare il file in un modo più intelligente, in 
particolare dovrai ricavare il path del file csv dal path del documento Base 
e magari fare anche un controllo di esistenza del file prima di eliminarlo.
Ricorda che il nome del file creato non è sempre identico al nome usato nella 
query (nome nuova tabella), in particolare, il file è sempre in minuscolo, 
anche se il nome della nova tabella contiene maiuscole, inoltre, tutti i 
caratteri non alfanumerici nel nome della tabella vengono tradotti come 
sottotratti (_)

Ad esempio, la query:
SELECT * INTO TEXT "My Temp-Table" ... eccetera

crea il file: my_temp_table.csv


Comunque, arrivato a questo punto il tuo DB è pulito e lindo come all'inizio e 
sei pronto per una nuova operazione.



spero di essere stato aiutevole
ciao
Paolo M










-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]