skipperdan ha scritto:
Mentre ci lavoravo ho compreso l'inghippo. Non era un problema di codice ma di conflitto del campo IDEsemplare. La query ad origine della maschera, prendeva infatti il campo IDEsemplare da due tabelle. Eliminando il campo diciamo - "superfluo" - il problema è stato risolto.
Ma a proposito di ciò che mi suggerivi, Alex, ossia:
"Se vuoi cercare si usa FindFirst sul recordsetclone
Se vuoi filtrare si usa Filter e non si modifica il RecordSource anche se genera un risultato confrontabile... ma per diversi motivi è meglio usare filter..."
Mi spiegheresti come inserire quei parametri nel mio codice, la differenza tra i due e cosa non va bene nel mio che comunque funziona bene? mi piacerebbe imparare qualcosa di più.
Grazie.
La questione non è così semplice da far comprendere, perchè come hai già anticipato tu... il metodo del RecordSource funziona...!
Quindi per capire i motivi dell'opportunità di buona tecnica, serve avere una visione del progetto più ampia e completa.
FILTRARE
Ti faccio alcune osservazioni più semplici...
Le Query Salvate e compilate sono più efficienti, flessibili in quanto modificabili dall'esterno del Codice che applichi con il VBA al RecordSource.
Queste osservazioni, per chi ha la visione dello sviluppo casalilngo non hanno un senso... in realtà il senso è estremamente importante per chi magari sviluppa applicativi rivolti ad utenti.
Altra osservazione... modificare il RecrodSource via VBA sulle Form/SubForm riduce la flessibilità, anzi complica molto la gestione nella fas di Stampa Report coerenti con i dati di maschera.
Ipotizza di stampare un Report allineato con i Criteri che hai usato per Costruire il RecordSource... devi ricostruirli e passarli...
L'uso del Filtro è estremamente più Flessibile, richiede codice più STANDARD... esempio del tuo codice
Private Sub Comando12_Click()
Me.Filter="(Genus like '" & strText & "*') or (Subgenus like '" & strText & "*')"
Me.FilterOn=True
End Sub
Se devi stampare, basta passare al Parametro WHERE di OpenReport... Me.Filter
CERCARE
Per cercare significa che NON si altera l'origine Dati, quindi se hai 2000Record tieni tutti, ma cerchi uno specifico Record che soddisfa il criterio e sposti il Bookmark della Maschera su quello.
Per cercare in una maschera si usa FindFirst:
https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao
With Me.RecordsetClone
.FindFirst "Genus like '" & strText & "*') or (Subgenus like '" & strText & "*'"
If .NoMatch then
msgbox "Non Trovato"
Else
Me.Bookmark=.Bookmark
End If
End With
Saluti