Autore Topic: [RISOLTO] Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup  (Letto 5471 volte)

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #15 il: 24 Agosto 2009, 19:49:40 »
ciao, mi potresti postare il tuo file db, con la tabella di backup già contenente i dati da passare alla tabella originale.
riguardando la query non ho visto errori, quindi il problema potrebbe essere il tipo di dati passati al db.
Attendo ansiosamente il file per provare l'INSERT.
Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #16 il: 24 Agosto 2009, 22:48:23 »
Citazione

Berserker79 ha scritto:
ciao, mi potresti postare il tuo file db, con la tabella di backup già contenente i dati da passare alla tabella originale.
riguardando la query non ho visto errori, quindi il problema potrebbe essere il tipo di dati passati al db.
Attendo ansiosamente il file per provare l'INSERT.
Ciao.

Ciao, spero di farcela. Non so come posso mandarti il file DB; provo ad allegarlo al presente post. Se riesci ad aprirlo, il DB si chiama ContFam_DB; le tabelle oggetto dell'attività di lettura ed insert sono rispettivamente: "piancont_via" e "PianCont"; la prima é quella di back-up contenente i dati da copiare sulla seconda ("PianCont"). Quest'ultima come puoi vedere nel codice di "CREATE TABLE" del mio precedente post é stata creata col nome contenente lettere maiuscole e minuscole, anche se nell'elenco delle tabelle del file DB lo trovi scritto tutto in minuscolo. Ho lasciato la tabella PianCont in modo che non hai bisogno di crearla. Tieni ancora presente che tutto il mio ambiente Gambas (programmi  e file DB) gira sotto Fedora 9.0.Spero tanto che riesca a provare felicemente l'INSERT.
A presto, ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #17 il: 25 Agosto 2009, 21:59:08 »
Ciao, allegato al post non ho trovato niente, se il file non è troppo grande mandamelo sulla mia email, la trovi cliccando sul mio nickname.
Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #18 il: 26 Agosto 2009, 22:43:33 »
Citazione

Berserker79 ha scritto:
Ciao, allegato al post non ho trovato niente, se il file non è troppo grande mandamelo sulla mia email, la trovi cliccando sul mio nickname.
Ciao.

Scusa, ma non mi sono accorto che non potevo allegare il file nel suo formato originale. Ho provveduito a zippare il file che questa volta dovrei riuscire a farti avpervenire. Ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #19 il: 27 Agosto 2009, 05:53:25 »
Ciao, ho trovato l'errore che impediva l'insert.
Solo che mi sono accorto che quando il campo NomeRec_via!DtPrimoUso della tabella di backup è 0(nell'ultimo riga della tabella), in realtà mi viene letto come un numero negativo e in fase di insert mi viene sostituito con questo numero negativo.
Non riesco a capire come mai.
Il campo in questione che tipo di utilità ha???
Forse lo si può impostare diversamente per non imbattere in questo errore.
La cosa strana è che ho provato ad inserire nella tabella di backup un nuovo record, passando al campo DtPrimoUso il valore 0, e il record da me inserito viene letto in maniera corretta e inserito come 0 anche nella tabella originale.
La tabella di backup come la popoli, tramite result.update?
Ciao, credo che ormai siamo alla risoluzione, basta chiarire questo punto ed è fatta, resto in attesa di una tua risposta per rivedere eventualmente il codice dell'inert e poi lo posto.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #20 il: 27 Agosto 2009, 23:18:41 »
Citazione

Berserker79 ha scritto:
Ciao, ho trovato l'errore che impediva l'insert.
Solo che mi sono accorto che quando il campo NomeRec_via!DtPrimoUso della tabella di backup è 0(nell'ultimo riga della tabella), in realtà mi viene letto come un numero negativo e in fase di insert mi viene sostituito con questo numero negativo.
Non riesco a capire come mai.
Il campo in questione che tipo di utilità ha???
Forse lo si può impostare diversamente per non imbattere in questo errore.
La cosa strana è che ho provato ad inserire nella tabella di backup un nuovo record, passando al campo DtPrimoUso il valore 0, e il record da me inserito viene letto in maniera corretta e inserito come 0 anche nella tabella originale.
La tabella di backup come la popoli, tramite result.update?
Ciao, credo che ormai siamo alla risoluzione, basta chiarire questo punto ed è fatta, resto in attesa di una tua risposta per rivedere eventualmente il codice dell'inert e poi lo posto.


È strano quello che mi dici, perché, mettendo sotto controllo il programma, la colonna "campo NomeRec_via!DtPrimoUso" mi viene mostrata col contenuto "NULL" che é esattamente quello che ho caricato manualmente con "Sqliteman", cioé "Knoda" in tutti i record inseriti. Io non so come hai fatto per leggere il valore esatto di codesta colonna, né conosco la rappresentazione esadecimale di "NULL". La colonna incriminata dovrà contenere la data in cui viene usata per la prima volta in assoluto la voce contabile della stessa riga. Nella mia idea iniziale dovrebbe impedirmi la cancellazione del record qualora detto campo si trovi valorizzato con una data significativa. Ho provato a vivere la tua eseprienza positiva, modificando l'istruzione:
Citazione
DB_Connection.EXEC("INSERT INTO 'PianCont' VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', " & NomeRec_via!DtPrimoUso & ")")

con l'istruzione:
 
Codice: [Seleziona]
DB_Connection.EXEC("INSERT INTO 'PianCont' VALUES(" & NomeRec_via!NumVoce & "','" & NomeRec_via!NomeVoce & "','" & NomeRec_via!ContrPartSiNo & ")")


dove ho tolto la valorizzazione della colonna "DtPrimoUso". E il programma continua a non funzionare.
Lo stesso accade se cerco di forzare il valore zero in quella colonna:
Citazione
DB_Connection.EXEC("INSERT INTO 'PianCont' VALUES(" & NomeRec_via!NumVoce & "','" & NomeRec_via!NomeVoce & "','" & NomeRec_via!ContrPartSiNo & "','" & "0" & ")")


Scusa la domanda: ma tu hai provato il codice  così come l'ho scritto io? :-?  :-?
Ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #21 il: 28 Agosto 2009, 00:54:50 »
ciao, modifica il codice in questo modo:
Codice: [Seleziona]
NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_Via")
FOR EACH NomeRec_via
     IF NomeRec_via!DtPrimoUso = "" THEN
        DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', null)")    

     ELSE
        DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', " & NomeRec_via!DtPrimoUso & ")")
     ENDIF
NEXT


Come puoi vedere ho fatto sparire quei connection.begin,commit ecc.. che non servono.
Prima dell'istruzione insert, verifico il valore del campo DtPrimoUso per eseguire l'itruzione giusta.
Il valore del campo DtPrimoUso in che formato lo passi alla tabella di backup? Perchè se non è nel formato che lui si aspetta (integer) non vorrei che faccia qualche strana conversione e poi non ti ritrovi più i valori corretti.
Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #22 il: 28 Agosto 2009, 23:20:00 »
Citazione

Berserker79 ha scritto:
ciao, modifica il codice in questo modo:
Codice: [Seleziona]
NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_Via")
FOR EACH NomeRec_via
     IF NomeRec_via!DtPrimoUso = "" THEN
        DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', null)")    

     ELSE
        DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', " & NomeRec_via!DtPrimoUso & ")")
     ENDIF
NEXT


Come puoi vedere ho fatto sparire quei connection.begin,commit ecc.. che non servono.
Prima dell'istruzione insert, verifico il valore del campo DtPrimoUso per eseguire l'itruzione giusta.
Il valore del campo DtPrimoUso in che formato lo passi alla tabella di backup? Perchè se non è nel formato che lui si aspetta (integer) non vorrei che faccia qualche strana conversione e poi non ti ritrovi più i valori corretti.
Ciao.


Allo stato attuale esemplificherei l'esecuzione, togliendo l'if che mi hai proposto, perché la colonna "DtPrimoUso" contiene sempre e solamente null. Sicuramente sarà da aggiungere in secondo momento. Per ora l'importante é riuscire a fare funzionere sta benedetta o maledetta istruzione SQL; infatti ho riportato nel programma il gruppo di struzioni così come l'hai scritta tu (senza la if)
Codice: [Seleziona]
NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_Via")
FOR EACH NomeRec_via
        DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', null)")
NEXT

ma becco sempre l'errore fatale " Query failed: SQL error or missing database"
 :-(  :-?  :fuso:  :cry:

Non capisco perché la prova a te funziona ed a me no. Sono lì lì per abbandonare tutto. Mi dispiace per il tempo che ti sto portando via e ti chiedo scusa.
Ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #23 il: 29 Agosto 2009, 07:33:33 »
Che dire, ho ricopiato il codice da te postato senza l'IF e a me funziona.
Prova ad eseguire questo codice al posto del ciclo FOR EACH:
Codice: [Seleziona]
DB_Connection.EXEC("INSERT INTO PianCont VALUES(99999999, 'WWW','SSS', null)")

vedi se và a buon fine, e poi riprova con l'istruzione FOR EACH e quando ti dà l'errore vedi se riesci a postare la stringa sql che compone il programma da far eseguire alla connessione.
Cmq il mio codice è scritto con l'ultima versione la 2.15.2 su Ububtu 9.04, ti posto questo piccolo programma che non fà altro che copiare i dati dalla tabella backup a quella originale e ripulire la tabella originale. Il db utilizzato è quello che mi hai mandato tu, provalo e vedi se ti funziona.
Fammi sapere, ciao.
P.S.: non ti preoccupare del tempo che sto spendendo per aiutarti, lo faccio con piacere.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #24 il: 30 Agosto 2009, 23:25:55 »
Citazione

Berserker79 ha scritto:
Che dire, ho ricopiato il codice da te postato senza l'IF e a me funziona.
Prova ad eseguire questo codice al posto del ciclo FOR EACH:
Codice: [Seleziona]
DB_Connection.EXEC("INSERT INTO PianCont VALUES(99999999, 'WWW','SSS', null)")

vedi se và a buon fine, e poi riprova con l'istruzione FOR EACH e quando ti dà l'errore vedi se riesci a postare la stringa sql che compone il programma da far eseguire alla connessione.
Cmq il mio codice è scritto con l'ultima versione la 2.15.2 su Ububtu 9.04, ti posto questo piccolo programma che non fà altro che copiare i dati dalla tabella backup a quella originale e ripulire la tabella originale. Il db utilizzato è quello che mi hai mandato tu, provalo e vedi se ti funziona.
Fammi sapere, ciao.
P.S.: non ti preoccupare del tempo che sto spendendo per aiutarti, lo faccio con piacere.


Grazie anche per il programmino che mi hai gentilmente mandato. Andiamo con ordine:
1) il codice di prova fuori da ciclo "For each" funziona perfettamente;
2) ho riprovato il ciclo "For each" con diversi cambiamenti l'uno successivo all'altro, all'interno della riga
Citazione
DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', null)")
e continua a non funzionare;
3) Non posso postarti la stringa che mi hai richiesto perché non so come ottenerla (ammetto la mia ignoranza);
4) Ho eseguito una prova soltanto dela programmino che mi hai fatto pervenire, ma c'é qualche problema di path. Secondo me non conviene insistere in codesta nuova prova, salvo ad abbandonare per il momento la precedente.
5) Non so se il problema che incontro possa essere legato al fatto che adopero Gambas 2.9.0. Probabilmente può darci una mano qualche super esperto.

Infine ho scoperto, durante le ricerche fatte per uscire dal labirinto in cui sono finito, la seguente modalità di Select:
Codice: [Seleziona]
NomeRec_via = DB_Connection.Exec("SELECT * FROM piancont_Via ORDER BY NumVoce")
e l'ho provata; sonoriuscito così, molto semplicemente, ad ottenere una sequenza ordinata per "NumVoce" delle righe della tabella incriminata e probabilmente posso mandare alle ortiche tutte le modifiche certosine apportate al programma per mantenere le tabelle sempre ordinate. Penso piuttosto ad una utility che di tanto in tanto le riordini in base alla chiave primaria. Ciò significa che debbo in ogni caso uscire dal labirinto. Ma dov'é il filo della famosa Arianna? ... :-)
Ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #25 il: 31 Agosto 2009, 08:24:30 »
Ciao, per vedere la stringa che viene creata dal codice, basta che lo esegui e quando ti dà l'errore, senza chiudere il programma, seleziona con il mouse tutta la stringa sql partendo dalle virgole e finendo alle virgolette, ti si apre un baloon che ti dice il valora assunto in quel momento dalla variabile.
Se mi dici che l'inserimento singolo che hai provato funziona, significa che c'è un valore errato che viene passato alla stringa sql.
Oppure se vuoi, puoi passarmi l'intero progetto, e vedo cosa succede, eseguendolo.
magari c'è qualcosa a monte che crea problemi.
Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #26 il: 03 Settembre 2009, 23:17:16 »
Citazione

Berserker79 ha scritto:
Ciao, per vedere la stringa che viene creata dal codice, basta che lo esegui e quando ti dà l'errore, senza chiudere il programma, seleziona con il mouse tutta la stringa sql partendo dalle virgole e finendo alle virgolette, ti si apre un baloon che ti dice il valora assunto in quel momento dalla variabile.
Se mi dici che l'inserimento singolo che hai provato funziona, significa che c'è un valore errato che viene passato alla stringa sql.
Oppure se vuoi, puoi passarmi l'intero progetto, e vedo cosa succede, eseguendolo.
magari c'è qualcosa a monte che crea problemi.
Ciao.


Grazie per l'indicazione; non lo sapevo. la stringa che viene passata é:
Citazione
"INSERT INTO PianCont VALUES(10000000, ATTIVO, n, )"

La stringa a me sembra corretta, perciò ho pensato di realizzare un programmino che fa la stessa operazione di copia tabella a scelta dell'operatore, in modo da concentrare l'indagine al solo codice che nel, mio progetto da problemi e verificare così se, fuori dal contesto progettuale di origine, la funzione di duplica tabella funziona. A fine prova, ahimé il problema persiste inesorabile. Allego perciò, come da tuo invito detto programmino.
Ciao.
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #27 il: 04 Settembre 2009, 23:36:23 »
Ciao, guardando la stringa vedo due errori.
Il primo è che manca il quarto valore da passare al campo DtPrimoUso.
Il secondo è che i valori stringa vanno passati inseriti fra gli apici.
La stringa corretta dovrebbe essere la seguente:
"INSERT INTO PianCont VALUES(10000000, 'ATTIVO', 'n', null)"

Ho provato il programmino che mi hai allegato, ho apportato delle modifiche alla parte di codice inerente l'insert e a me funziona.
P.S.: ho modificato il percorso del db facendolo puntare nella mia home, ricordati di rimettere il tuo percorso prima di provarlo.
Ciao.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #28 il: 05 Settembre 2009, 17:00:00 »
Citazione

Berserker79 ha scritto:
Ciao, guardando la stringa vedo due errori.
Il primo è che manca il quarto valore da passare al campo DtPrimoUso.
Il secondo è che i valori stringa vanno passati inseriti fra gli apici.
La stringa corretta dovrebbe essere la seguente:
"INSERT INTO PianCont VALUES(10000000, 'ATTIVO', 'n', null)"

Ho provato il programmino che mi hai allegato, ho apportato delle modifiche alla parte di codice inerente l'insert e a me funziona.
P.S.: ho modificato il percorso del db facendolo puntare nella mia home, ricordati di rimettere il tuo percorso prima di provarlo.
Ciao.

 :eh:
Ciao. Non ho capito dove starebbe l'errore commesso da me. La stringa che ti ho evidenziato nel mio precedente post é quella che viene formata in automatico dall'istruzione SQL seguente:
Codice: [Seleziona]
DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", " & NomeRec_via!NomeVoce & ", " & NomeRec_via!ContrPartSiNo & ", " & NULL & ")")
; quindi, credo  che, se errore ho commesso, é sicuramente di sintassi internamente all'istruzione.
Tuttavia ho guardatato il file che hai allegato al tuo post ed ho notato che mi hai rispedito il mio programmino, vale a dire, senza le tue correzioni, quindi non ho potuto verificare alcunché.

 :ciao:
:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Sqlite3: scrittura nuova tabella coi dati di una tabella dibackup
« Risposta #29 il: 05 Settembre 2009, 20:20:22 »
Questa è la riga di codice da te postata:
Codice: [Seleziona]
DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", " & NomeRec_via!NomeVoce & ", " & NomeRec_via!ContrPartSiNo & ", " & NULL & ")")

Cambiala con questa:
Codice: [Seleziona]
DB_Connection.EXEC("INSERT INTO PianCont VALUES(" & NomeRec_via!NumVoce & ", '" & NomeRec_via!NomeVoce & "', '" & NomeRec_via!ContrPartSiNo & "', NULL)")

Ho allegato il tuo programma con le correzioni.
Non ho cambiato niente, solo la sintassi dell'istruzione INSERT che era incorretta
Cmq basta solo cambiare la sintassi con quella che ti ho postato.
Ciao.