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]
