Mailman ha scritto:
@Alex ha scritto:
Spesso si EVITA di costruire una Query con parametro, perchè per ottenere tutti i Records devi fornire sempre un parametro JOLLY.
....
Domanda per Alex per mia curiosita' personale perche' uso spesso query con parametri: se costruisco una query filtrante che senso avrebbe la necessita' di ottenere tutti i records?
Intanto serve sempre sapere cosa si sta facendo, non esiste una soluzione che va bene per tutto.
Tuttavia se sai che c'è la possibilità di dover visualizzare TUTTI i records, in caso di ASSENZA di criteri... potresti trovarti inquesta situazione:
Ipotizza di avere 10 criteri di filtro, nessuno valorizzato, in questo caso vuoi vedere TUTTI, sei costretto ad avere una Query simile:
SELECT * FRON T1
WHERE fld1 LIKE '*' AND fld2 LIKE '*' AND fld3 LIKE '*' AND .... fld10 LIKE '*'
Questa Query è decisamente poco prestazionale, dovresti analizzare i piani di esecuzione delle Query per vedere quante volte per ogni record viene eseguita l'applicazione del criterio.
L'uso della proprietà Filter che opera al bisogno e, dal DRIVER in caso di RDBMS, viene eseguita ServerSide, offre qualche vantaggio in più... validare i criteri ed applicare SOLO quelli valorizzati se ci sono... es:
Dim sWHR As String
If Len(Me!CampoCriterio1 & vbNullstring)>0 Then sWHR="Campo1 LIKE '*" & Me!CampoCriterio1 & "*' AND "
If Len(Me!CampoCriterio2 & vbNullstring)>0 Then sWHR=sWHR & "Campo1 LIKE '*" & Me!CampoCriterio2 & "*' AND "
If Len(Me!CampoCriterio3 & vbNullstring)>0 Then sWHR=sWHR & "Campo1 LIKE '*" & Me!CampoCriterio3 & "*' AND "
If Len(Me!CampoCriterio4 & vbNullstring)>0 Then sWHR=sWHR & "Campo1 LIKE '*" & Me!CampoCriterio4 & "*' AND "
....
If Len(Me!CampoCriterio10 & vbNullstring)>0 Then sWHR=sWHR & "Campo1 LIKE '*" & Me!CampoCriterio10 & "*' AND "
If Len(sWHR)>0 Then
Me.Filter=sWHR
Me.FilterOn=True
Else
Me.FilterOn=False
End If
Se serve il criterio viene applicato se non serve no... e non impatta.
Altro vantaggio è sull'eventuale apertura di Maschere Correlate o Report, per le quali basta passare la Proprietà FILTER alla WHERECONDITION della funzione OPENFORM per filtrare i dati...
DoCmd.OpenReport "NomeReport", acViewPreview, , Me.Filter
ecc...
Ovviamente se non serve non si usa, ma di base questo è il metodo più comodo e funzionale.