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:
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
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
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
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
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:
trovato il problema. La nuova versione di gambas non accetta più
sql = "SELECT*FROM mioDB"
ma vuole
sql = "SELECT * FROM mioDB"