Ci sono anche le queries Parametriche... "queste sconosciute"... da non confondere con il passaggio del Criterio...
I Parametri sono oggetti...
In modo Visuale si definiscono i Parametri dal Menù, in alto a DX si trova l'Icona [Parametri] nell'ultima TAB del Ribbon.
PARAMETERS start Date, end Date;
SELECT T1.*
FROM T1
WHERE (((T1.ID) Between [start] And [end]));
Questa Query va valorizzata da codice...!
Sub paramTest()
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("TuaQuery")
qdf!start = Me!DataInizio
qdf!end = Me!DataFine
set rs=qdf.OpenRecordset
Set qdf = Nothing
' Ora con il RS si può fare quello che si vuole anche assegnarlo ad una Form o ListBox...
End Sub
Ovviamente se si vule gestire una ACTION Query, non si aprirà il recordset ma si userà il Metodo EXECUTE di QueryDef.
Per i più attenti... la grande differenza è che nella costruzione delle Query OnTheFly serve convertire la data in Accezione anglosassone, cosa che mi pare abbiate dimenticato tutti sopra...
Dim sSQL As String
sSQL="SELECT T1.* FROM T1"
sSQL= sSQL & "WHERE (((T1.ID) Between " & clng([Forms!NomeForm!start]) & " And " & clng([Form!NomeForm!end])));
Usare clng(Data) equivale a convertire in formato anglosassone con Format(TuaData,"mm/dd/yyyy"), tagliando il TIME, se si vuole il TIME serve convertire in DOUBLE ed instrodurre la conversione del decimale in relazione alle impostazioni del sistema usando:
Str(cDbl(TuaData))
Questo non risulta necessario se si usa la risoluzione IMPLICITA del motore...
[Code]
SELECT T1.*
FROM T1
WHERE (((T1.ID) Between [Forms!NomeForm!start] And [Form!NomeForm!end]));
Verificare se, usando i PARAMETERS serve la conversione facendo qualche considerazione....