Newsgroup: it.comp.software.database
Titolo: Access - Filtro che agisce su una sottomaschera

Ciao a tutti ho realizzato un database formato da un'unica tabella
"ARCHIVIO" e da due maschere:
FOGLIODATI realizzata appunto con la struttura 'fogliodati' di access
ARCHIVIO realizzata con la struttura 'colonne' di access
Dentro la maschera ARCHIVIO ho inserito la sottomaschera FOGLIODATI.
Ora nella maschera principale ho aggiunto diverse caselle di testo con
affianco un bottone che dovrebbe permettere di filtrare i dati visualizzati
nella sottomaschera prendendo come filtro il testo scritto sulla casella di
testo.
Il codice VBA che ho scritto nel pulsante č:
Private Sub Comando20_Click()
    Parola = "Descrizione like '*" & Testo18.Value & "*'"
    DoCmd.ApplyFilter , Parola
    FOGLIODATI.Enabled = True
    Parola = "Descrizione like '*" & Testo18.Value & "*'"
    DoCmd.ApplyFilter , Parola
End Sub
dove testo18.value č il valore della casella di testo.
Solo che cosi facendo mi filtra i dati presenti nella maschera principale e
non quelli della sottomaschera. Io vorrei esattamente il contrario
Come devo fare?
Premetto che conosco molto poco di VB
Ringrazio tutti in anticipo
Ciao da Emiliano

 Ciao da Emiliano
Mi pare scontato che li devi applicare alla SubForm......!
Me.TuaSubForm.FilterOn=True
Me.TuaSubForm.Filter=Parola
@Alex.


Ciao ti ringrazio per la risposta ma non funziona ed avevo già provato: dopo
aver digitato il nome della SubForm non appare nell'elenco suggerito da VBA
la voce "FilterOn" quindi quando avvio il comando mi dice "Impossibile
trovare il metodo o il membro dei dati"
Probabilmente sbaglio nome della "SubForm" che però ho ricato dalla voce
"Nome elemento" delle proprietà che appaiono selezionando la subform in
modalità struttura: il suo nome è "FOGLIODATI".
Ciao da Emiliano

 ha scritto nel messaggio
news:3%I0a.142883$0v.40...@news1.tin.it...

OPS....!
Me.TuaSubForm.Form.FilterOn=True
Riprova....!
@Alex.

 @Alex.
Ok, funziona alla perfezione!
Non vorrei approfittarne ma non è che sai rispondermi anche all'altro
problema che ho postato qualche giorno fa?
Ti riporto il testo qui setto sperando e confidando nella tua pazienza:
Devo verificare se quando inserisco un dato all'interno di un campo di una
maschera è già presente nella tabella associata alla maschera.
Nella guida in linea ho trovato il seguente codice ma mi da errore in quanto
mi dice "Tipo definito dall'utente non valido"
Private Sub Codice_AfterUpdate()
    Dim a As String
    Dim rst As dao.Recordset '*****qui si genera l'errore
    Dim strNomeRicerca As String
    Set rst = Me.Recordset
    strNomeRicerca = Str(Me!Codice)
    MsgBox strNomeRicerca
    rst.FindFirst "Codice = " & strNomeRicerca
    If rst.NoMatch Then
        MsgBox "Record non trovato"
    Else
        MsgBox "Esiste gia!"
    End If
    rst.Close
End Sub
Nella riga in cui si genera l'errore in effetti se provo a scriverla
manualmente (cioè senza il copia-incolla dalla guida in linea) tra le scelte
che appaiono non esiste DAO......... ma solo RecordSet.
IL database è formato da un'unica semplice TABELLA chiamata "ARCHIVIO"
contenente cinque campi di cui quello da verificare è il campo "Codice"
Grazie ancora
Ciao da Emiliano

 ha scritto nel messaggio
news:B0U0a.146010$0v.41...@news1.tin.it...

Ma il campo che cerchi con :
rst.FindFirst "Codice = " & strNomeRicerca
presumo sia stringa...........!!
Allora l'errore è quì, essendo stringa servono i doppi apici......!
Qualcuno usa apice singolo, poi si lamenta che in caso di apici nella
stringa non va....!!!
 rst.FindFirst "Codice = " & chr(34) & strNomeRicerca & chr(34)
@Alex.


Ciao Alex,
ti ringrazio ancora una volta per la tua disponibilità, è probabile che tu
abbia individuato un errore, ma la parte di codice errata (a detta del
DEBUG) è:
Dim rst As dao.Recordset
l'errore che appare è "Tipo definito dall'utente non valido".
Ti giuro che stò impazzendo, ho provato su più computer con versioni diverse
di ACCESS, ma niente, sempre lo stesso errore.
Quello che ho notato, se può esserti utile è che se digito
Dim rst As .................... dopo l'As appare un elenco a tendina dove
non c'è "Ado..........." ma c'è solo "Recordset" che comunque non funziona
lo stesso.
Spero che con questi ulteriori dati tu possa aiutarmi altrimenti è meglio
che rinuncio....
Ciao e grazie da Emiliano.


Nei Riferimenti hai verificato che ci sia DAO....???
Ti serve anche ADO...??
Se non ti serve togli ADO e lascia DAO.
@Alex.


Ciao Alex,
effettivamente hai trovato il problema!! Non sapevo che bisognasse caricare
DAO tra i riferimenti di VBA.
Questo denota ovviamente la mia inesperienza.
Ora però l'errore si è spostato in una riga di codice in cui pensavo fosse
tutto a posto!
rst.FindFirst "Codice = " & chr(34) & strNomeRicerca & chr(34)
il debug mi dice "Azione eliminata da un oggetto associato", ho premuto il
"?" ma la guida in linea risulta essere bianca.
Ti riporto l'intero codice:
Private Sub Codice_AfterUpdate()
    Dim a As String
    Dim rst As DAO.Recordset
    Dim strNomeRicerca As String
    Set rst = Me.Recordset
    strNomeRicerca = Str(Me!Codice)
    MsgBox strNomeRicerca
    rst.FindFirst "Codice = " & Chr(34) & strNomeRicerca & Chr(34)
    If rst.NoMatch Then
        MsgBox "Record non trovato"
    End If
    rst.Close
End Sub
Spero sia l'ultima volta che ti disturbo ma come vedi il problema è sempre
lo stesso, cioè riuscire a controllare se un record esiste o no.
Ormai non so più come ringraziarti sia per la tua disponibilità che per la
tua competenza!!
Ciao da Emiliano

Opps ho risolto.... o quasi
l'errore si è corretto sostituendo la scritta:
Set rst = Me.Recordset
in
Set rst = Me.RecordsetClone
ma purtroppo non è finita! sigh...
La macro mi dice sempre che il record  non è presente anche se questo c'è!
Non ce la faccio più!
Ti riporto l'ultimo codice che ho scritto:
Private Sub Codice_AfterUpdate()
    Dim a As String
    Dim rst As DAO.Recordset
    Dim strNomeRicerca As String
    Set rst = Me.RecordsetClone
    strNomeRicerca = Me!Codice
    rst.FindFirst "Codice = " & chr(34) & strNomeRicerca & chr(34)
    If rst.NoMatch Then
        MsgBox "Record non trovato"
    Else
        MsgBox "Il record è già presente!!", vbInformation
    End If
    'rst.Close
End Sub
Se mi risolvi anche questo problema non so proprio come ringraziarti!!
Forse una cena di pesce virtuale...... :-))
Ciao da Emiliano

ho risolto modificando del tutto il codice prendendolo dalla guida in linea
dopo ore di ricerche:
    Dim dbs As Database, rst As DAO.Recordset
    Dim strCriteria As String
    Set dbs = CurrentDb
    strCriteria = "[Codice] = '" & Me!Codice & "'"
    Set rst = dbs.OpenRecordset("ARCHIVIO", dbOpenDynaset)
    rst.FindFirst strCriteria
    If rst.NoMatch = False Then
        MsgBox "ATTENZIONE: Il codice inserito è già presente nel
database.", vbExclamation
    End If
    rst.Close
    Set dbs = Nothing
Ora funziona tutto alla perfezione, anche se non ho capito perchè.
Ti ringrazio nuovamente per la tua grandissima disponibilità.
Ciao da Emiliano