Gambas-it

Gambas3 => Programmazione => Topic aperto da: doublemm - 02 Aprile 2013, 17:18:13

Titolo: [RISOLTO] problema con query in sqlite
Inserito da: doublemm - 02 Aprile 2013, 17:18:13
Ciao ragazzi, mi scuso se ultimamente frequento poco il forum ma il lavoro mi lascia poco tempo (oserei dire per fortuna visti i tempi che corrono). Mi trovo con un problema che non riesco a risolvere. Già da tempo uso un software gestionale da me creato in gambas. Su di un pc lo sto usando da tempo senza problemi, ma su un portatile acquistato da poco il gestionale parte mi mostra le schermate ma non carica i dati di alcune tabelle. Sono andato ad eseguire il codice passo passo ripoto di seguito una parte di codice:
Codice: [Seleziona]
sql = "SELECT*FROM data_day WHERE data LIKE '" & Format$(MiaData.Value, "yyyy-mm-dd 00:00:00") & "';" 
  Print sql
  Risultato = Conn.Exec(sql)
  
  If Risultato.Available Then

Risultato.Available mi risulta FALSE quando dovrebbe essere TRUE
infatti se copio da terminale print sql e lo incollo in SQLITEMAN la query funziona e mi restituisce un risultato esatto.

In altre parti del gestionale eseguo altre query sulla stessa connessione e il software mi restituisce i dati richiesti in maniera corretta, quindi escluderei problemi di librerie. Una differenza che ho notato tra i due computer è la versione di gb.sqlite3 più recente sul notebook dove il gestionale da problemi, ma escludo dipendi da questo perchè credo non dovrebbe funzionare mai.

Grazie per l'aiuto
Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 02 Aprile 2013, 19:17:06
Hai provato anche Format al posto di Format$?     Non dovrebbe darti differenze ma ... non si sa mai.
 :ciao:
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 02 Aprile 2013, 19:26:34
Ho provato ma non cambia nulla
Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 03 Aprile 2013, 00:11:39
la formula prevista per il formato data, riportata nella documentazione di Gambas3, è scritta così:
Citazione
PRINT Format$(Now, "yyyy-mm-dd hh-nn-ss)
e non "yyyy-mm-dd 00:00:00"
 :ciao:
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 03 Aprile 2013, 07:43:29
Comunque non funziona. Se uso il formato che dici tu non funziona nemmeno con sqliteman infatti sul database le date sono archiviate così:
2013-04-03 07:43:00
Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 03 Aprile 2013, 12:08:01
Temo di non poterti aiutare più di tanto, perchè io uso le date solamente nel formato stringa senza l'indicazione dell'orario ("AAAmmGG"), allo scopo di lasciarle leggibili anche con Sqliteman, ma cercando comunque di contenere l'impegno di spazio su disco. Non ho perciò la tua casistica.

Se già il tuo software funziona bene in pc desktop con Gambas3 installato, allora il programma non dovrebbe avere nessuna responsabilità. La versione di Gambas installata sul notebook è la stessa di quella installata sul pc Desktop?
 :ciao:
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 04 Aprile 2013, 19:49:07
sul dove on funziona ho la 3.4.1 sull'altro pc 3.4.0. La cosa strana è che su un altro pezzo di programma c'è una query simile sulla stessa tabella e funziona ?!?
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 04 Aprile 2013, 20:58:09
altro pc sempre con 3.4.1 stesso problema è cambiato qualcosa sulla sintassi delle query?
Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 05 Aprile 2013, 00:17:13
altro pc sempre con 3.4.1 stesso problema è cambiato qualcosa sulla sintassi delle query?
Io dispongo della verione 3.4.0 che ha sostituito purtroppo la precedente a seguito di un aggiornamento automatico di software in fedora. Non so pertanto se è cambiato qualcosa nella 3.4.1. Tutte le mie vecchie query continuano a funzionare benissimo anche con la 3.4.0. Non disponendo di pc notebook non posso dirti altro.

Consideriamo però una cosa: se le altre query funzionano occorrerebbe capire, secondo me,  perchè la stringa formattata  non permette l'accoppiamento coi record corrispondenti del DB.
Prova a fare il print di Format$(MiaData.Value, "yyyy-mm-dd 00:00:00") subito prima della query, in modo da renderti conto del suo effettivo contenuto dopo averlo formattato.
Titolo: Re: problema con query in sqlite
Inserito da: fsurfing - 05 Aprile 2013, 12:58:29
Prova a togliere 00:00:00 dalla stringa di formattazione
Titolo: Re: problema con query in sqlite
Inserito da: Berserker79 - 05 Aprile 2013, 20:13:31
Ciao, non so se sia necessario, ma credo tu debba aggiungere il carattere % all'inizio e alla fine della stringa che intendi cercare con il LIKE.
prova quindi con questa sintassi:
sql = "SELECT * FROM data_day WHERE data LIKE '%" & Format$(MiaData.Value, "yyyy-mm-dd 00:00:00") & "%';"
  Print sql
  Risultato = Conn.Exec(sql)
 
  If Risultato.Available Then
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 08 Aprile 2013, 15:06:57
Ho provato tutte le vostre soluzioni ma non cambia nulla. La cosa strana è che sullo stesso programma un po di linee più avanti c'è una query simile sulla stessa tabella e funziona

Codice: [Seleziona]
For i = 0 To 30
    DescrizioneY.Add(i)
    LineData = Date(Now) - i
    Sql = "SELECT " & Periodo & " as 'importo' FROM data_day WHERE data = '" & Format$(LineData, "yyyy-mm-dd 00:00:00") & "';"
    Risultato1 = Conn.Exec(Sql)
    If Risultato1.Available Then
      LineDati.Add(Risultato1!importo)
    Endif
  Next

il print della variabile sql copiato e incollato in un programma esterno di gestore dei db sqlite funziona e restituisce un risultato valido. non capisco perchè la non debba funzionare. Ho provato anche a sostituire a format....... un risultato fisso tipo 2013-03-16 00:00:00 ma non cambia nulla il risultato è sempre false.

@Picavbg il print mi restituisce
2013-03-24 00:00:00
SELECT*FROM data_day WHERE data = '2013-03-24 00:00:00';

ho provato anche a sostituire = con < in modo da allargare il campo ma non trova nulla
Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 08 Aprile 2013, 15:29:47
Scusa la domanda banale:
Prima della query hai eseguito la Open del DB?
 :ciao:
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 08 Aprile 2013, 15:31:28
si ho controllato anche con un print comunque mi avrebbe dato errore in risultato = conn.exec se non fosse aperta
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 08 Aprile 2013, 15:35:47
ho fatto un'altra prova, ho messo sql="SELECT*FROM data_day;" e Risult1.Available è sempre false. Deduco che l'attenzione non debba nadare sulla composizione di sql o sul Format$...... ma deve esserci qualche altro problema di connessione al database o sulla variabile result

Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 08 Aprile 2013, 16:55:54
si ho controllato anche con un print comunque mi avrebbe dato errore in risultato = conn.exec se non fosse aperta
Ho fatto la domanda perchè a me è capitato in una query organizzata come la seguente
Codice: [Seleziona]
 sql = "SELECT * FROM prestmom"
RecQuery = ApriDB.DB_Connection.Exec(sql)
  If RecQuery.Available
    For Each RecQuery
'    ----- bla ----- bla ----- bla -----     
   Next
 Endif
che il DB in quel passo risultava "Close"  e non veniva provocato alcun errore. Veniva però prodotto un RecQuery.Available=False
 L'ho scoperto inserendo un breakpoint all'altezza della IF e doppio click su RecQuery al momento dello stop di programma, quando, all'apertura della finestra di riferimento alla Query, ho potuto constatare lo status "Closed".
Ho pensato perciò che anche tu stessi vivendo una condizione uguale alla mia.

D'altronde, se la stessa query altrove funziona, sono d'accordo con te a non insistere nel cercare errori di scrittura nei parametri di lettura del DB. Deve esserci necessariamente qualche anomalia che si verifica in quella query e solamente in essa, di non immediata individuazione. Occorre insistere e capire quale sia la condizione di errore che vi si manifesti.

Altra domanda: A che ti serve il ";" alla fine della query? Io non lo uso mai.
 :ciao:
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 08 Aprile 2013, 17:25:26
anch'io non lo usavo mai ma poi mi è stato detto che sarebbe più corretto usarlo da linguaggio sqlite e allora l'ho messo.
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 08 Aprile 2013, 18:00:39
trovato il problema. La nuova versione di gambas non accetta più
Codice: [Seleziona]
sql = "SELECT*FROM mioDB"

ma vuole
Codice: [Seleziona]
sql = "SELECT * FROM mioDB"
Titolo: Re: problema con query in sqlite
Inserito da: Picavbg - 08 Aprile 2013, 19:06:15
Se ci sei arrivato dall'esempio che ti ho fornito, puoi farmi un bonifico di 0,0000010000 Euro.  ;D
 :ciao:
Titolo: Re: problema con query in sqlite
Inserito da: doublemm - 08 Aprile 2013, 19:20:01
sinceramente non l'avevo notato nel tuo esempio ma se mi dai l'iban te lo faccio  :ciao:
Titolo: Re: [RISOLTO] problema con query in sqlite
Inserito da: Picavbg - 08 Aprile 2013, 23:24:52
 :rotfl: