Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: andy60 - 03 Ottobre 2010, 11:16:27

Titolo: SQL di ricerca record fra due date
Inserito da: andy60 - 03 Ottobre 2010, 11:16:27
-le date di riferimento le prendo da due textbox aventi il formato 2010-10-01 00:00:00, cosi' come viene memorizzato nel database (campo data)
-l'sql di ricerca è del tipo
Codice: [Seleziona]
mysql = "select * from tbNutrition where GMA between '2010-10-01 00:00:00' and '2010-10-05 00:00:00'"
e funziona benissimo


sara' il 'rincoglionimento' ma non riesco a mandare i parametri alla stringa di ricerca:

questa non funziona:
Codice: [Seleziona]
myset = myconn.Exec("select * from tbNutrition where GMA between &1 and &2", current_data1.text, current_data2.text)

e nemmeno questa:
Codice: [Seleziona]
myset = myconn.Exec("select * from tbNutrition where GMA between '" & cdate(val(textbox1.text)) & "' and '" & cdate(val(textbox2.text)) & "'"
Titolo: Re: SQL di ricerca record fra due date
Inserito da: milio - 03 Ottobre 2010, 12:02:41
se la data ha già il formato giusto devi aggiungere solamente gli apici alla tua query:

Codice: [Seleziona]
myset = myconn.Exec("select * from tbNutrition where GMA between '&1' and '&2'", current_data1.text, current_data2.text)

Titolo: Re: SQL di ricerca record fra due date
Inserito da: andy60 - 03 Ottobre 2010, 14:22:35
funziona:

Codice: [Seleziona]
'"select * from tbNutrition where GMA between '2010-10-01 00:00:00' and '2010-10-05 00:00:00'"
 
non funziona e sinceramente non capisco:
 
Codice: [Seleziona]
'"select * from tbNutrition where GMA between '" & current_data1.text & "' and '" & current_data1.text & "'"

current_data1.text è
Codice: [Seleziona]
2010-10-04 00:00:00
mentre l'altro è
Codice: [Seleziona]
2010-10-10 00:00:00
la data del db è
Codice: [Seleziona]
2010-10-07 00:00:00
Titolo: Re: SQL di ricerca record fra due date
Inserito da: milio - 03 Ottobre 2010, 15:01:12
guarda che fai riferimento alle due date con lo stesso oggetto: current_data1.text   :)
Titolo: Re: SQL di ricerca record fra due date
Inserito da: andy60 - 03 Ottobre 2010, 16:55:52
guarda che fai riferimento alle due date con lo stesso oggetto: current_data1.text   :)

nel codice è giusta la data
Titolo: Re: SQL di ricerca record fra due date
Inserito da: milio - 03 Ottobre 2010, 17:01:57
Io, se posso, ti do un consiglio: quando una query comprende concatenazioni di varie stringhe, come nel tuo caso, e non mi funzionano, subito dopo la creazione di questa query, do un bel Print <query>, dove <query> e' la stringa che la contiene, e ne esamino gli errori nella consolle di Gambas....

Se anche tu fai in questo modo, potresti postarmi il risultato e vediamo che si puo' fare ;)
Titolo: Re: SQL di ricerca record fra due date
Inserito da: Ceskho - 03 Ottobre 2010, 17:04:36
Io, se posso, ti do un consiglio: quando una query comprende concatenazioni di varie stringhe, come nel tuo caso, e non mi funzionano, subito dopo la creazione di questa query, do un bel Print <query>, dove <query> e' la stringa che la contiene, e ne esamino gli errori nella consolle di Gambas....

Se anche tu fai in questo modo, potresti postarmi il risultato e vediamo che si puo' fare ;)


Bravissimo milio....un ottimo consiglio.   ;)

Molto spesso diamo per scontato che l'errore sia nella logica mentre invece non ci si rende conto che le concatenazioni possono portare a errori banali. Stampare le concatenazioni serve a farti capire come gambas "vede" ciò che gli dici e magari aiuta a trovare errori.

È una cosa che dovrebbe diventare un abitudine...il debug è molto sottovalutato.
Titolo: Re: SQL di ricerca record fra due date
Inserito da: andy60 - 03 Ottobre 2010, 17:11:46
@milio

ecco il risultato di PRINT:

Codice: [Seleziona]
select * from tbNutrition where GMA between '2010-10-04 00:00:00' and '2010-10-04 00:00:00'

mi cospargo il capo di cenere :-\ :P :ok: :ok: :ok: :ok: :ok:
Titolo: Re: SQL di ricerca record fra due date
Inserito da: milio - 03 Ottobre 2010, 18:46:45
Sai quante ore ho perso io per problemi come questi...   :evil: