Autore Topic: [risolto]Sqlite e Where  (Letto 4002 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[risolto]Sqlite e Where
« il: 07 Settembre 2010, 03:06:12 »
ciao raga

mi succede una cosa strana con sqlite3 e where
su due tabelle identiche, a parte i nomi dei campi, su una where funziona sull'altra no.
entrambe le tabelle vengono lette e scritte regolarmente, solo where non va, anche i campi di ricerca sono entrambi numerici.

Codice: [Seleziona]
Medi = MyRS!iddichiarazione
  
  sqlEL = "DELETE FROM detdic WHERE iddichia = " & Medi 'funziona
      MyRSEL = MODMain.MyConnpn.Exec(sqlel)
  
  sqlEL = "DELETE FROM controparti WHERE iddichia = " & Medi 'non funziona
      MyRSEL = MODMain.MyConnpn.Exec(sqlel)

le ho provate tutte ma non riesco a venirne a capo
« Ultima modifica: 08 Settembre 2010, 00:35:39 da dex »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Sqlite e Where
« Risposta #1 il: 07 Settembre 2010, 10:46:26 »
Sì, ma sono due tabelle diverse... i campi sono dello stesso tipo? I dati che ti aspetti sono presenti?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Sqlite e Where
« Risposta #2 il: 07 Settembre 2010, 19:19:02 »
può essere solo  un errore tuo, probabilmente una svista

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Sqlite e Where
« Risposta #3 il: 07 Settembre 2010, 23:17:35 »
A volte succede che, nel leggere i nomi delle colonne, si leggono non come sono veramente scritti, ma come sono stati scritti nella propria mente, pertanto non ci si accorge dell'errore. Se ancora non riesci, puoi postare il "create" delle due tabelle, così possiamo leggerli pure noi e farti risalire all'errore di scrittura.
Ciao.
:ciao:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Sqlite e Where
« Risposta #4 il: 07 Settembre 2010, 23:53:39 »
Sì, ma sono due tabelle diverse... i campi sono dello stesso tipo? I dati che ti aspetti sono presenti?

Entrambi i campi sono numerici
Entrambi i Campi hanno i dati inseriti (verificato con SqliteBrowser) inoltre come detto sopra i dati vengono regolarmente scritti e letti dal programma

questo è il codice con cui creo le tabelle.

prima tabella funzionante:
Codice: [Seleziona]
IF $hconn.Tables.Exist("detdic") = TRUE THEN 
                Message.info("la tabella detdic esiste")
            ELSE
             
          sql = "CREATE TABLE 'detdic' ( 'iddetdic' INTEGER PRIMARY KEY," &         
          "'iddichia' numeric(10) DEFAULT 0," &
          "'codcli' numeric(10) DEFAULT 0," &
          "'tipocli' VARCHAR(15) DEFAULT NULL," &         
          "'data' numeric(10) DEFAULT 0," &
          "'ndoc' VARCHAR(15) DEFAULT NULL," &         
          "'tipo' VARCHAR(15) DEFAULT NULL," &
          "'nome' VARCHAR(15) DEFAULT NULL," &             
          "'grfino' numeric(10) DEFAULT 0," &
          "'euro' numeric(10) DEFAULT 0);"
 
      hres = $hConn.EXEC(sql)
          $hConn.Commit
          Message.info("tabella detdic creata")
       
       ENDIF     

questo il codice della seconda tabella
Codice: [Seleziona]
IF $hconn.Tables.Exist("controparti") = TRUE THEN 
                Message.info("la tabella controparti esiste")
            ELSE
         
         sql = "CREATE TABLE 'controparti' ( 'idcontroparti' INTEGER PRIMARY KEY," &         
          "'iddichia' numeric(10) DEFAULT 0," &
          "'codcli' numeric(10) DEFAULT 0," &
          "'tipocli' VARCHAR(15) DEFAULT NULL);"       
                   
      hres = $hConn.EXEC(sql)
          $hConn.Commit
          Message.info("tabella controparti creata")
 
         
       ENDIF     

sulla seconda tabella ho provato a fare una query con where sul campo idcontroparti e funziona, è il campo iddichia che non và.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Sqlite e Where
« Risposta #5 il: 08 Settembre 2010, 00:27:37 »
raga ho trovato l'errore ma non riesco a capire come si crea.

in pratica inserendo un valore tipo 19, sulla prima tabella inserisce 19 (2 chr), sulla seconda inserisce 19(3 chr) al 19 aggiunge uno spazio vuoto, rimosso a mano dai record lo spazio ora where funziona.

La cosa strana è che scrivo entrambe le tabelle nella stessa sub ed in entrambe uso la stessa variabile di tipo integer per inserire i dati nel campo iddichia.

questo è il codice
Codice: [Seleziona]
DIM Medi AS Integer

Medi = MyRS!iddichiarazione

sqlri = "insert into detdic (iddichia,codcli,tipocli,data,ndoc,tipo,nome,grfino,euro)values( '" &
           Medi & "','" & cc & "','" & txc & "','" & Ndat2 & "','" & txd & " ','" &
           tip & " ','" & tno & " ','" & tgr & " ','" & tpe & "')"
   
           MyRSRI = MODMain.MyConnpn.Exec(sqlri)


sqlri = "insert into controparti (iddichia,codcli,tipocli)values( '" &
           Medi & " ','" & Cfo & " ','" & Nfo & "')"
   
           MyRSRI = MODMain.MyConnpn.Exec(sqlri)



Come potete vedere La stessa variabile "Medi" viene usata per entrambe ma sulla seconda tabella aggiunge uno spazio vuoto.   :hard: :hard:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Sqlite e Where
« Risposta #6 il: 08 Settembre 2010, 00:35:11 »
Raga rispondendo a voi ho trovato l'errore.

erano quei piccoli spazi sulla tabella controparti fra iddichia e Nfo.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #7 il: 08 Settembre 2010, 10:53:30 »
Rinnovo il mio appello nel fare attenzione a sqlite.

E' un database facile da usare, ma non dà certezze sui dati.

Inoltre, come da me appurato molto tempo fà, tutto viene memorizzato sotto forma di stringa, anche le date e i numeri, e non fà alcun controllo su quello che si inserisce. Questo deve essere fatto a programma!

Quindi attenzione raga!

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #8 il: 08 Settembre 2010, 21:46:02 »
@md9327

in effetti tocchi una nota dolente.
all'inizio del progetto ho scelto sqlite per la portabilità, mi spiego, il programma è installato su vari pc in sedi diverse e avevo la necessità giornalmente di dover effettuare dei backup da ogni singola sede per portarli alla sede centrale dove venivano visionati, scartai Mysql in quanto non riuscivo a creare questi file di backup da portare alla sede centrale.
all'inizio erano solo 2 pc e pochi dati, ora sono circa 10 pc e i dati sono diventati consistenti, già una volta durante un backup sqlite ha creato casino, più si va avanti più aumentano i dati e la mia preoccupazione.
Inoltre nei file ci sono dati sensibili che per la legge sulla privacy andrebbero protetti e come sappiamo sqlite non lo permette.

Su quale database più robusto e che offra la possibilità di poter salvare il tutto su un file di backup, posso migrare?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #9 il: 08 Settembre 2010, 22:32:16 »
Io salvo il file di backup di mysql con una semplice stringa da shell, lo faccio fare a gambas tutti i giorni in automatico mantenendo le ultime 10 copie.
Io mi trovo bene con mysql anche se ho letto in giro che molti utenti preferiscono PostgreSQL

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #10 il: 08 Settembre 2010, 22:36:43 »
Ciao Golia

non è solo per il file di backup ma devo avere poi la possibilità di leggere nella sede centrale quel backup.
con Mysql si può fare?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #11 il: 08 Settembre 2010, 22:42:53 »
Certo..almeno se ho capito. Io per esempio mi copio il file, lo porto a casa e lo carico nel pc di casa, è questo che devi fare?

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #12 il: 08 Settembre 2010, 23:06:57 »
esatto

come fai a caricarlo nel pc di casa?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #13 il: 08 Settembre 2010, 23:32:31 »
con la gui mysql-administrator, però sono sicuro che si può fare da shell, avevo trovato in rete la stringa ma non ricordo. Vedo se posso recuperarla

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]Sqlite e Where
« Risposta #14 il: 08 Settembre 2010, 23:45:25 »
Trovata e provata  ;)

per fare il backup



 
Codice: gambas [Seleziona]

DIM strexe AS String
DIM hbackup AS Process
 strexe = "mysqldump -uroot -p"
 strexe &= Global.t$Password ' tua password
 strexe &= " --opt "
 strexe &= Global.t$Name ' nome del database
 strexe &= " > " & Application.Path ' percorso
 strexe &= "/prova.sql" ' nome file output
 
 hbackup = SHELL (strexe)


per fare il restore

Codice: gambas [Seleziona]
DIM strexe AS String
DIM hbackup AS Process  
strexe = "mysql < /home/franco/prova.sql -u root -p"
strexe &= Global.t$Password 'tua password
hbackup = SHELL (strexe)


Prova, ma funziona ;)
« Ultima modifica: 08 Settembre 2010, 23:47:28 da Golia »