codice:
Nella struttura della query di accodamento c'e' la possibilita' di inserire due criteri:
1)Criteri e qui puoi inserire il tuo criterio di ricerca per quel campo
2)Sotto trovi Oppure:qui scrivi Null cosi' il criterio vale anche se quel campo e 'null.
Quello che dici tu vale per ogni singolo criterio se il criterio viene direttamente inserito nella query di accomodamento.
Tuttavia è tragicamente noto che access (ho scritto anch'io un thread su questo argomento su più forum) non riesce a gestire i valori Null dei campi lasciati vuoti all'interno di una tabella . Per cui i criteri della query NON si devono mai mettere direttamente nella query ma bisogna passarli via codice altrimenti access canna il recordset.
Per questo motivo io faccio la seguente query di accomodamento (senza condizioni) come mi hai suggerito tu:
INSERT INTO Tabella_2
SELECT Tabella_1.*
FROM Tabella_1
Le condizioni WHERE (il numero di condizioni dipende da quello che l'utente cliccherà su una maschera di ricerca che contiene circa 30 criteri diversi) viene costruito con la seguente funzione in VBA:
Function FNCSearch(ArrSearch, Field, Parametro, strSQL, CondStart, CondEnd)
If Len(Trim(ArrSearch)) = 10 And InStr(ArrSearch, "/") Then ArrSearch = Format$(ArrSearch, "mm/dd/yyyy")
ArrSearch = Split(Trim(ArrSearch), ",")
Field = Split(Trim(Field), ",")
For k = 0 To UBound(Field)
For I = 0 To UBound(ArrSearch)
If k = 0 And I = 0 And Parametro <> 1 Then boleana = " (" Else If k = 0 And I = 0 And Parametro = 1 Then boleana = " AND (" Else boleana = " OR "
strSQL = strSQL & boleana & Field(k) & CondStart & Trim(ArrSearch(I)) & CondEnd
Next
Next
strSQL = strSQL & ")"
Parametro = 1
End Function
La funzione viene richiamata sul bottone chiamato "CERCA" nella maschera chiamata "RICERCA" che fa ciclare i parametri con il seguente codice:
For Each ctl In NomeForm.Controls
If Not IsNull(ctl) Or ctl <> "" Then Call FNCSearch(ctl , [ctl], Parametro, strSQL, " Like '*", "*'")
Next ctl
Il risultato delle condizioni può essere (per es) quello che segue:
(([Tabella_1].[cognome])="Pinco")) AND (([Tabella_1].[nome])="Pallino")) AND .... altri 1, 2 o 30 criteri a seconda di quello che l'utente vuole cercare.
Per il report il passaggio dei criteri viene fatto con il seguente comando:
DoCmd.OpenReport stDocName, acPreview, , strSQL
dove i criteri costruiti in VBA sono la stringa chiamata strSQL
Il problema è che io vorrei passare strSQL Non al report ma ad una query:
C'è un comando che mi permette di passare i criteri via codice alla query (Previo comando che ha eliminato tutti i dati precedentemente contenuti nella Tabella_2)?