Devo fare una query parametrica che estragga solo alcuni record ma non trovo la sintassi da usare per le date. Esempio banale:
dim miasql as string
miasql="SELECT * FROM nometabella WHERE campodata='12/02/08'"
in questo formato la query mi da' errore
I parametri delle query ai metodi EXEC, FIND, ecc.. degli oggetti CONNECTION non vanno mai passati tal quali nella query stessa ma vanno usati sempre gli argomenti.
Così la tua query deve diventare:
DIM Connessione as NEW CONNECTION
DIM Risultato AS RESULT
Connessione.Name = ....
Connessione.Type = ....
Connessione.OPEN
Risultato = Connessione.Find ("SELECT * FROM nometabella WHERE campodata= &1", DataOperazione)
attenzione...trovata l'alchimia: e funziona
SELECT campodata FROM nometabella WHERE datetime(campodata) = '2008-02-15 00:00:00'
io per abitudine preferisco costruire la stringa sql e poi mandarla in pasto alla conenssione
In effetti sto realizzando un software misto (nutrizionale+gestione attività sportiva) e quindi mi sono imbattuto nel problema. In particolare mi fa piacere mettere a disposizione di tutti gli amici questo codice:
PUBLIC Currdate as String
PUBLIC SUB DateChooser1_Change()
'============================================
'Info: formatta la data corrente nel modo
' corretto per essere inserita nella
' query di lettura dei dati.
' Es. di formato accettato:
' 2008-02-12 00:00:00
'============================================
Currdate = Str(Year(DateChooser1.Value)) & "- "
Currdate=Currdate & "Format$(Month(DateChooser1.Value), "0#") & "- "
Currdate=Currdate & Str$(Day(DateChooser1.Value)) & " 00:00:00"
........... altro codice .............
END
da notare che il mese è formattato con lo zero davanti quindi il mese di Febbraio è trattato come '02' e non '2'. Es. di stringa sql:
sql="SELECT * FROM nometabella WHERE datetime(campodata) = '" & currdate & "' "
Buona Domenica :-)
Torno un attimo sul problema delle date e di SQLite3.
Vorrei invitarvi ad usare i parametri nelle query, a discapito magari di un'abitudine personale.
Questo perché Gambas "traduce" nel corretto formato i parametri prima di comporre la query in SQL da passare al DB.
Come ho scritto, usando
Connessione.EXEC("SELECT * FROM nome_tabella WHERE campo_data = &1", Data)
si ottiene il risultato voluto senza codici extra di conversione.
Per quanto concerne il tuo problema, Andy: forse c'entra qualcosa il fuso orario del tuo sistema con Linux?
Linux ha un sistema di gestione del tempo molto complesso: infatti, in fase di installazione di qualunque distro, viene chiesto sempre se l'orologio interno funziona con il tempo universale o con l'ora locale. Mi viene da pensare che ci sia nel tuo sistema qualcosa di conflittuale che fa sbagliare DateChooser.
Penso a questo perché anch'io uso il componente DateChooser con Date(Now) e non ho di questi problemi.
Non hai un limite sul n° dei parametri.
Esempio:
Connessione.EXEC("SELECT * FROM nome_tabella WHERE CAMPO1 = &1 AND CAMPO2 = &2 AND CAMPO3 = &3 ORDER BY &4", Dato1, Dato2, Dato3, Dato4)
Per la questione orologio, dando "date" da terminale cosa ottieni?
questo tipo di utilizzo funziona anche per i comandi sql UPDATE e INSERT? Ancora, se funziona con il comando INSERT, come devo trattare la variabile che va ad aggiornare un campo stringa?
es.
dim res as result
res= mMAIN.$con.Exec("UPDATE tabella SET campotesto=&1",textBOX1.text)
oppure
res= mMAIN.$con.Exec("UPDATE tabella SET campotesto='&1'",textBOX1.text)
Con questo tipo di comando ho problemi