Re: [utenti] [Base - HSQLDB] Esportare record in un file csv
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
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
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
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]