Newsgroup: it.comp.lang.visual-basic
Titolo: ADO e Query con Date

Domanda semplice semplice.
Ho una Query che invio ad un DB per per ottenere dei record. (Qualcuno dirà:
sul serio? Si.)
Eccovi il codice:
strRS = "SELECT tabTipoVeli.TipoVeli, tabVolo.IDVolo, tabVolo.DataPart,
tabVolo.AeroPart, tabVolo.AeroArri, tabVolo.Durata, tabVolo.PaxTot,
    tabScop.ScopCort, tabVoloPers.IMCR, tabVoloPers.IMCS, tabVoloPers.Nott,
tabRepa.RepaCort FROM tabScop INNER JOIN (tabTipoVeli INNER
    JOIN (((tabRepa INNER JOIN tabVeli ON tabRepa.IDRepa = tabVeli.lngRepa)
INNER JOIN tabVolo ON tabVeli.IDVeli = tabVolo.strVeli) INNER JOIN
    tabVoloPers ON tabVolo.IDVolo = tabVoloPers.lngVolo) ON
tabTipoVeli.IDTipoVeli = tabVeli.lngTipoVeli) ON tabScop.IDScopo =
tabVolo.lngScop
    WHERE tabRepa.RepaCort='" & frmModulistica.cboGrup.Text & "' ORDER BY
tabVolo.IDVolo"
lngTot = funApriMOD(strRS)
La funzione
funApriMOD(strRS as String) as Long
apre il Recordset e restituisce il numero di elementi trovati.
La selezione dei record prevede nel caso particolare che i record prelevati
siano quelli con il campo tabRepa.RepaCort=frmmodulistica.cboGrupp.text
In realtà a me servirebbe prelevare di questi record solo quelli con il
campo tabVolo.DataPart compreso in un intervallo di date.
Il DB che uso è AccessXP. Il campo tabVolo.DataPart è un tipo Date.
Ora Le due date di riferimento (ossia quelle con gli estremi di validità)
sono impostate in due textbox: txtDataInizio e txtDataFine.
Ho provate la seguente Query:
strRS="SELECT tabTipoVeli.TipoVeli, tabVolo.IDVolo, tabVolo.DataPart,
tabVolo.AeroPart, tabVolo.AeroArri, tabVolo.Durata, tabVolo.PaxTot,
    tabScop.ScopCort, tabVoloPers.IMCR, tabVoloPers.IMCS, tabVoloPers.Nott,
tabRepa.RepaCort FROM (tabTipoVeli INNER JOIN (tabRepa INNER
    JOIN tabVeli ON tabRepa.IDRepa = tabVeli.lngRepa) ON
tabTipoVeli.IDTipoVeli = tabVeli.lngTipoVeli) INNER JOIN (tabScop INNER JOIN
(tabVolo
    INNER JOIN tabVoloPers ON tabVolo.IDVolo = tabVoloPers.lngVolo) ON
tabScop.IDScopo = tabVolo.lngScop) ON tabVeli.IDVeli = tabVolo.strVeli
    WHERE (((tabVolo.DataPart)>='" &
DateValue(frmModulistica.txtDataInizio.Text) & "' And (tabVolo.DataPart)<='"
& DateValue
    (frmModulistica.txtDataFine.Text) & "') AND ((tabRepa.RepaCort)='" &
frmModulistica.cboGrup.Text & "')) ORDER BY tabVolo.IDVolo"
Purtroppo non mi restituisce alcun record, mentre so che esistono.
Ho provato inserendo i valori numerici dei giorni in questione e la quesry
sotto Acces funziona, ma se metto DateValue sembra che non venga trasformato
il giorno in valore long e quindi Acces non trova campi che rispettino
questi tre requisiti.
Sapete dirmi come posso fare?
Attualmente prelevo senza controllare la data e poi lo faccio via codice in
VB, ma per ora questa soluzione può ndare bene, ma tra 4-5 anni sicuramente
rallenterà l'esecuzine in maniera trascendentale. Ogni anno infatti vengono
aggiunti 1800-2000 record e va da se che se devo sfogliare 10'000 record per
trovarne poi appena 200 che rispettino la finestra temporale.......
So che potrei ordinare i record con il campo data e quindi trovare molto
elocemnte il primo e l'ultimo record che soddisfa tale finestra temporale,
ma questa non è che una soluzione tampone.
Avete qualche idea?
Mi ricordo che esiste una funzione che trasforma una data scritta in un
valore numerico, ma diamine non sono stato capace di trovarla. Pensavo fosse
DateValue, ma restituisce una variant e se provo a stamparla mi da il
classico dd/mm/yy, non il valore numerico intero della data.
--
--------
Ciao da Spieg
UIN 27730515

 classico dd/mm/yy, non il valore numerico intero della data.
Prova a scrivere una cosa del tipo:
dim b as date
b = "19/02/2003"
debug.print clong(b)
Salutoni
Sergio

 campi che rispettino questi tre requisiti.
Il valore non deve essere un long, bensì una stringa, visto che stai facendo
una concatenazione di stringhe.
Per cui, devi utilizzare la sintassi Access per le date:
"#" & Format$(Variabile_Data,"mm/dd/yyyy") & "#"
Come operatore, probabilmente Between è quello che fa per te.
Considera, però, che se la data è scritta in un textbox, devi anche
accertarti che possa essere correttamente convertita in variabile_data.
Ciao
Alberto

 ha scritto nel messaggio
news:JvH4a.133800$ZE.38...@twister2.libero.it...


 ha scritto nel messaggio
news:b2vg6t$1gailk$1...@ID-173193.news.dfncis.de...


 campi in formato USA?
Nei textbox fai quello che vuoi. E' nella stringa SQL che devi usare il
formato Usa.
Alberto

Grazie mille, ora capisco perfettamente.
Quindi per Acces sempre formato USA quando confronto.
Grazie mille.