PDA

View Full Version : [vb6]SQL per ricerca in un intervallo di date con RecordSet


motogpdesmo16
01-08-2005, 21:35
salve a tutti. Mi sono incasinato con una stringa per effettuare la ricerca in un database.
Ho due combobox in cui c'è il mese (gennaio, febbraio, marzo...) e l'anno.
Per salvare l'anno e il mese ho fatto così:


anno = cboAnno.Text
mesenum = cboMese.Text
Select Case mesenum
Case "Gennaio"
mm = "1"
Case "Febbraio"
mm = "2"
Case "Marzo"
mm = "3"
Case "Aprile"
mm = "4"
Case "Maggio"
mm = "5"
Case "Giugno"
mm = "6"
Case "Luglio"
mm = "7"
Case "Agosto"
mm = "8"
Case "Settembre"
mm = "9"
Case "Ottobre"
mm = "10"
Case "Novembre"
mm = "11"
Case "Dicembre"
mm = "12"
End Select

adesso dovrei effettuare la ricerca dal 01/mese/anno al 31/mese/anno in una tabella in cui c'è il campo Data_fattura proprio in formato gg/mm/aaaa.

Ho provato a scrivere questa stringa sql ma temo di essermi incasinato con apici (') e virgolette (").
Rs.Open "SELECT * FROM Fattura WHERE Data
BETWEEN 01'" /& mm & "'/ & anno And 31 '" & mm & "'/ & anno & "

qualcuno saprebbe darmi una mano per riscrivere correttamente la stringa??

grazie.

motogpdesmo16
01-08-2005, 22:41
Nel caso qualcuno abbia lo stesso mio problema, ho risolto nella seguente maniera:


anno = cboAnno.Text
mm = cboMese.ListIndex + 1
gg = Day(DateSerial(anno, mm + 1, 0))

Rs.Open "SELECT * FROM Fattura WHERE Data
BETWEEN #" & mm & "/01/" & anno & "#
AND #" & mm & "/" & gg & "/" & anno & "#"

il fatto di aver messo mm/gg/aaaa non è un errore poichè access interpreta così le date.
copio/incollo la spiegazione di un utente di un altro forumNon hai avuto problemi perche' il primo gennaio (1/1) e il trentuno gennaio (31/1) non possono essere equivocati e il motore del db ne tiene conto. Ma nel caso di date ambigue (pensa al 10 dicembre o al 5 giugno ...) il db deve decidere qual e' il giorno e quale il mese; se scrivi all'italiana 10/12, il sistema che opera con il formato americano decidera' che hai indicato 12 ottobre; nell'altro caso, tu intenderai 5/6 e il sistema lo comprenderà come 6 maggio ....