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]

Rispondere a