Newsgroup: it.comp.appl.access
Titolo: Maschera di ricerca e apertura nuova maschera filtrata

Buonasera, 
lo scorso anno fa mi avevate aiutato a creare una nuova maschera di
ricerca per il mio database. Cliccando sul pulsante "cerca" della mia
maschera, mi si apre una nuova maschera in visualizzazione foglio di
dati che elenca tutti i risultati della ricerca in base ai criteri da
me impostati.
Doppio click e da questa maschera mi si apre la maschera principale
del db già filtrata su quel determinato record da me cliccato.
Quello che io ora vorrei fare è aggiungere un nuovo pulsante che salti
l'operazione di cui sopra e mi apra direttamente la maschera
principale già filtrata su tutti i record che corrispondono ai miei
criteri impostati.
Questo è il codice della ricerca:
===================================================
 Private Sub Cerca_Prodotto_1_Click()
Dim stDocName As String
Dim stLinkCriteria As String
Dim l As Integer
Dim NuovaData As String
    If IsNull(Me!CatalogueNr) And IsNull(Me!Titolo) And
IsNull(Me!Genere) _
    And IsNull(Me!Tipo) And IsNull(Me!Formato) And
IsNull(Me!TitoloOriginale) _
    And IsNull(Me!Appunti) And IsNull(Me!Titolo_Anime) And
IsNull(Me!Fornitore) Then
    MsgBox "Attenzione! La maschera di ricerca è vuota!!"
    End If
    If Not IsNull(Me!CatalogueNr) Or Not IsNull(Me!Titolo) Or Not
IsNull(Me!Genere) _
    Or Not IsNull(Me!Tipo) Or Not IsNull(Me!Formato) Or Not
IsNull(Me!TitoloOriginale) _
    Or Not IsNull(Me!Appunti) Or Not IsNull(Me!Titolo_Anime) Or Not
IsNull(Me!Fornitore) Then
    stDocName = "Sfr_Audio_Ricerca_Prodotto_1"    ' Nome del from che
voglio aprire
        If Len(Me.CatalogueNr) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([CatalogueNr]
like '*" & Replace(Me![CatalogueNr], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([CatalogueNr] like '*" &
Replace(Me![CatalogueNr], "'", "''") & "*')"
            End If
        End If
        If Len(Me.Titolo) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Title] like
'*" & Replace(Me![Titolo], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Title] like '*" &
Replace(Me![Titolo], "'", "''") & "*')"
            End If
        End If
         If Len(Me.Genere) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Des_Genere]
like '*" & Replace(Me![Genere], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Des_Genere] like '*" &
Replace(Me![Genere], "'", "''") & "*')"
            End If
        End If
            If Len(Me.Tipo) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Des_Tipo]
like '*" & Replace(Me![Tipo], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Des_Tipo] like '*" &
Replace(Me![Tipo], "'", "''") & "*')"
            End If
        End If
            If Len(Me.Formato) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Des_Formato]
like '*" & Replace(Me![Formato], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Des_Formato] like '*" &
Replace(Me![Formato], "'", "''") & "*')"
            End If
        End If
            If Len(Me.TitoloOriginale) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND
([TitoloOriginale] like '*" & Replace(Me![TitoloOriginale], "'", "''")
& "*')"
            Else
                 stLinkCriteria = " ([TitoloOriginale] like '*" &
Replace(Me![TitoloOriginale], "'", "''") & "*')"
            End If
        End If
            If Len(Me.Appunti) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Appunti]
like '*" & Replace(Me![Appunti], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Appunti] like '*" &
Replace(Me![Appunti], "'", "''") & "*')"
            End If
        End If
                     If Len(Me.Titolo_Anime) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Des_Titolo]
like '*" & Replace(Me![Titolo_Anime], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Des_Titolo] like '*" &
Replace(Me![Titolo_Anime], "'", "''") & "*')"
        End If
        End If
         If Len(Me.Fornitore) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND
([NomeFornitore] like '*" & Replace(Me![Fornitore], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([NomeFornitore] like '*" &
Replace(Me![Fornitore], "'", "''") & "*')"
        End If
        End If
 
       DoCmd.Echo False
 
        DoCmd.OpenForm stDocName, acFormDS, , stLinkCriteria 'Se non
ci sono risultati annulla l'azione di apertura
        If Forms(stDocName).RecordsetClone.EOF Then
        MsgBox ("Non ci sono risultati utili!")
        DoCmd.Close acForm, stDocName
        End If
Exit_Cerca_Prodotto_1_Click:
    DoCmd.Echo True
    Exit Sub
End If
End Sub
=============================================
Il problema è che funziona solo su una parte dei criteri di ricerca:
se i criteri sono in una casella di testo OK, se seleziono da una
casella combinata... mi richiede sempre "inserire parametro" e se
anche lo inserisco, non mi restituisce alcun risultato.
Il problema sono sicuramente le caselle combinate sulle due maschere
(sono caselle combinate sia nella maschera di ricerca che in quella
principale) e il fatto che io non so scrivere il codice appropriato. 
===================
            If Len(Me.Formato) > 0 Then
            If Len(stLinkCriteria) > 0 Then
                stLinkCriteria = stLinkCriteria & " AND ([Des_Formato]
like '*" & Replace(Me![Formato], "'", "''") & "*')"
            Else
                 stLinkCriteria = " ([Des_Formato] like '*" &
Replace(Me![Formato], "'", "''") & "*')"
            End If
        End If
====================
Sicuramente questo è sbagliato, ma come correggerlo.
L'origine del dato "formato"  per entrambe le maschere è una query
Qry_Sel_Audio_Formato
che contiene il campo
Cod_Formato (contatore)
Des_Formato
Su entrambe le maschere la colonna associata è il codice, anche se
ovviamente visualizzo la descrizione.
La maschera in visualizzazione foglio dati è basata su una query
(basata sulla tabella che dà origine alla maschera principale), mentre
la maschera principale è basata direttamente sulla tabella.
Se duplico la maschera principale, trasformo le caselle combinate in
caselle di testo e la baso sulla query (senza alterare null'altro)
tutto funziona perfettamente, ma non mi sembra corretto.
Avete qualche dritta da darmi, per favore?
Grazie
Erika

 Erika
Ciao Erika mi sono perso nei meandri del codice....!
Un suggerimento, che forse può snellire il codice.
Assegna ai controlli che fanno parte del Criterio lo stesso nome del
campo della
Tabella(oppure mettilo nella proprietà TAG) quindi nella proprietà
TAG metti "X".
A questo punto esegui un ciclo sull'insieme Controls filtrando i soli
Control con TAG<>0
Io per comodità uso il NomeControllo=NomeCampo
Dim ctl as Access.Control
Dim sSQL as string
For Each ctl in Me.Controls
    If ctl.TAG<>vbNullstring then
       If ctl.Value<>"" then
            sSQL= sSQL & BuildCriteria(ctl.Name,
Me.RecordsetClone.Fields(ctl.Name).Type, ctl) & " AND "
       End IF
    End If
Next
' Tolgo l'ultimo AND
sSQL= Mid$(sSQL,1,Len(sSQL)-5
sSQL="SELECT * FROM T1 WHERE " & sSQL
' Per verificare la stringa prima di mandarla in esecuzione
MsgBox sSQL
Verificala perchè l'ho buttata giù senza provarla, ma ti assicuro che
è funzionale
e funzionante(eventualmente devi correggere quache erorrino)
Ciao
@Alex

e funzionante(eventualmente devi correggere quache erorrino)
Non sarei sicuramente in grado di scriverla, ma penso di averla
capita,
Grazie!
Adesso provo subito.
Ciao
Erika

MsgBox sSQL
Funziona, ma solo se tolgo questo...
sSQL= Mid$(sSQL,1,Len(sSQL)-5
Ma arrivati a questo punto, come do il criterio di apertura alla
maschera???
Erika

 Erika
@Alex

TAG metti "X".
Adesso devo andare al lavoro, ma non demordo. Stasera appena rientro
rifaccio tutto.
Grazie ancora!
Erika

la parentesi alla fine...?
Rieccomi.
Ci ho provato per ore e ore, ma continuava a darmi errore (meno male
che S. Backup mi assisteva :)))
Alla fine ho rinunciato a percorrere questa strada.
Avrebbe sicuramente snellito il codice, però per il momento va al di
là delle mie (limitate) capacità con access.
Devo studiare di più.
Però a furia di googlare sono riuscita a trovare l'errore nel mio
codice originale e adesso funziona!
Dovrò riscrivere circa 26 queries e altrettanti reports, ma è la
giusta punizione per il... peccato originale ^_^
Grazie ancora per l'aiuto!!
Erika