Newsgroup: it.comp.appl.access
Titolo: Ricerca in sottomaschera

Sto cercando come suggeritomi da Roberto di adattare alle mie esigenze la
FAQ "Filtrare una maschera in base al valore contenuto in una sua
sottomaschera",
Basandomi sull'esempio scaricato
Ho quindi realizzato tre tabelle
ttblFilm:  campo contatore IdFilm, titoloFilm  campo testo
tblRegia: campo contatore IdRegia, IdFilm campo numerico , IdAttore numerico
, Regista campo testo
Queste in relazione uno a molti.
tblAttore: campo contatore  Id Attore, NomeAttore campo testo
Una query unione (Query1):
SELECT 0 As IdAttore, "<Tutti>" As NomeAttore FROM tblAttore UNION SELECT
tblAttore.IdAttore, tblAttore.NomeAttore FROM tblAttore;
Una maschera  ("Maschera") con nell'inetstazione una casella combinata:
attore, origine riga query1.
In questa vi è una sottomaschera  nome  ed , riferendomi sempre all'oggetto
suddetto,  ha come oggetto origine una maschera nome Sottomaschera (che
fantasia),, visualizzazione maschere continue, realizzata sulla tabella
regia.
il controllo  IdAttore l'ho sostituito con una casella di controllo che ha
come origine riga :
SELECT tblAttore.IdAttore, tblAttore.NomeAttore FROM tblAttore;
Eccomi al dunque, in dopo aggiornamento della casella combinata della
"Maschera" ho inserito il seguente codice:
Private Sub Attore_AfterUpdate()
Dim db As DAO.Database, rst As DAO.Recordset
Dim strAttore As String, gstr As String
gstr = ""
If Me!Attore <> 0 Then
    strAttore = "[IdAttore]=" & Me!Attore
        gstr = "[IdFilm] IN(Select IdFilm From tblRegia Where" & strAttore &
")"
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCTROW" & _
"tblFilm.IdFilm" & _
"FROM tblFilm" & _
"WHERE" & gstr & ";")
If rst.RecordCount = 0 Then
    MsgBox "Non ci sono attori che soddisfano i criteri", vbExclamation,
"Esito ricerca negativa"
    gstr = ""
    rst.Close
    Exit Sub
End If
rst.Close
End If
If Me!Attore = 0 Then
DoCmd.Close acForm, Me.Name
End If
DoCmd.OpenForm FormName:="Maschera", WhereCondition:=gstr
End Sub
 Solo che non funziona, mi da il seguente errore:
Errore 3075
Errore di sintassi 8operatore mancante) nell'espressioner della query
'DISTINCTROWtblFilm.IdFilmFROMtblFilmWHERE[IdFilm]IN(Select IdFilm From
tblRegia Where[IdAttore]=3")'
Riferimento DAO 3.6 Object Library
Dove è che sbaglio
Grazie Franco

 ")"
debba diventare (ho aggiunto anche qualche spazio):
 If Me!Attore <> 0 Then
    strAttore = "tblRegia.[IdAttore]= " & Me!Attore
        gstr = "[tblFilm.IdFilm] IN (Select tblRegia.IdFilm From tblRegia 
Where" & strAttore &
 ")"
(spero di avere ricostruito la giusta provenienza dei campi).
a questo punto, se non manca qualche parentesi, dovrebbe funzionare.
-- 
... spero di esserti stato d'aiuto,
 Ivan   (facci sapere ...)

 Grazie Ivan
Era un problema di spazi separatori.
Ora avendo una maschera principale basata sulla tblFilm con controlli
Tutolo, Durata, Genere, Trama e in questa una sottomaschera basata sulla
tblRegia nella quale assegno gli attori.
Una maschera di ricerca con vari controlli nei quali inserisco i dati per
una ricerca combinata ed un pulsante con il quale apro una maschera con
recordsource basato su una query parametrica nella quale visualizzo i record
trovati.
Chiedo come posso eseguire una ricerca combinata ad esempio per Genere,
durata e attore (che si trova nella sottomaschera)?
Franco


Ciao Franco,
creati una query dove trascini le due tabelle, le relazioni al punto giusto, 
componi la query inserendo un criterio su ogni campo necessario, poi ti copy 
la sintassi dell' SQL  e lo incolli nell'editor di VBA. A questo punto basta 
sostituire i criteri con i valori variabili volta a volta e inserire tutto 
in una variabile da passare come argomento Recordsource di una maschera 
adHoc o quella che hai già. (meglio adHoc, per non creare rimpalli visto che 
quella che hai magari la stai già usando filtrata .... e così via).
