Newsgroup: it.comp.appl.access
Titolo: Criterio query variabile a seconda di form aperta

Buongiorno a tutti,
č possibile creare una sola query (che sarą poi l'origine di una 
sottomaschera) che filtri un campo a seconda della form principale aperta?
Attualmente ne ho create 3 distinte e inserito manualmente il criterio per 
ciascuna....ma mi sembra macchinoso e ingombrante.
Attendo consigli migliori.
Grazie mille.
Giorgia 

 ciascuna....ma mi sembra macchinoso e ingombrante.
Ciao!
Potresti, nella query, indicare un criterio fasullo del tipo
SELECT * FROM TuaTabella WHERE ([CondizioneVariabileMaschera]);
Poi, nell'evento di apertura della subform assegnerai il recordsource
della subform con
me.recordsource=replace$
(currentdb.querydefs("MiaQueryVariabile").sql,"[CondizioneVariabileMaschera]"," ....
")
mettendo al posto di " ... " l'espressione filtro completa.
HTH
Popi

 Giorgia
Poniamo che la maschera principale corrisponda ai Clienti, e la
sottomaschera agli ordini dei Clienti. La tabella Clienti avrà un
campo con il codice del Cliente, naturalmente. Idem la tabella Ordini.
La maschera principale ha come origine la tabella Clienti, la
sottomaschera la tabella Ordini. Apri la maschera principale in
struttura, e inserisci la sottomaschera.
Tra maschera principale e secondaria puoi stabilire una relazione
attraverso i campi secondari e i campi master.
Nella struttura della sottomaschera (al PRIMO click che fai sulla
stessa, NON al SECONDO) trovi "Collega campi secondari" e "Collega
campi master". Sul primo ci va il campo Cliente della tabella Ordini,
nel secondo il campo Cliente della tabella Clienti. Se provi con la
creazione guidata è ancora più semplice. Shalom! ; )
Ciao Francesco ho già collegato il campo primario e secondario ma ho bisogno 
di filtrare ulteriormente i risultati ottenuti con un terzo campo.....
Giorgia 

 ciascuna....ma mi sembra macchinoso e ingombrante.
Ciao!
Potresti, nella query, indicare un criterio fasullo del tipo
SELECT * FROM TuaTabella WHERE ([CondizioneVariabileMaschera]);
Poi, nell'evento di apertura della subform assegnerai il recordsource
della subform con
me.recordsource=replace$
(currentdb.querydefs("MiaQueryVariabile").sql,"[CondizioneVariabileMaschera]"," 
....
")
mettendo al posto di " ... " l'espressione filtro completa.
HTH
Popi
Grazie Popi,
ora provo, secondo te si puņ adattare anche ad una maschera che si apre su 
evento click da pulsante di un'altra maschera?
Giorgia 

 evento click da pulsante di un'altra maschera?
Assolutamente sì (e, per inciso, e' un meccanismo che uso di frequente
nei miei applicativi), perche' il trucco sta tutto nell'impostare il
recordsource nell'evento di apertura della maschera.
Solo in alcuni casi mi e' toccato scrivere il codice che compone la
condizione WHERE nell'evento che scatena la maschera (as es il click
da te citato).
In quei casi passo la condizione tramite il parametro openargs della
openform ma, come vedi, si ritorna sempre all'evento di apertura della
form.
Popi

 ha scritto nel messaggio 
news:678c098c-04f4-4db9...@a19g2000prj.googlegroups.com...

Assolutamente sě (e, per inciso, e' un meccanismo che uso di frequente
nei miei applicativi), perche' il trucco sta tutto nell'impostare il
recordsource nell'evento di apertura della maschera.
Solo in alcuni casi mi e' toccato scrivere il codice che compone la
condizione WHERE nell'evento che scatena la maschera (as es il click
da te citato).
In quei casi passo la condizione tramite il parametro openargs della
openform ma, come vedi, si ritorna sempre all'evento di apertura della
form.
Popi
Provando e riprovando ti posso dire che per la form aperta da pulsante, mi č 
bastato aggiungere una relazione tra le tabelle che compongono la query 
d'origine a apparentemente sembra risolto. Dico apparentemente perchč mi 
capita una cosa strana ovvero, su visualizzazione maschere continue viene 
correttamente filtrato il record che richiedo se passo a visualizzaz. foglio 
dati questa relazione non viene rispettata.....
Invece, applicando il tuo suggerimento sull'apertura della subform in 
questione mi da' sempre errore di riga quando riporto l'intera espressione 
filtro (intendi l'intero sql della query?)
Giorgia 

 filtro (intendi l'intero sql della query?)
Non so dirti per il cambio di visualizzazione, anche perche' dichiaro
sempre la modalita' di apertura delle mie maschere e disabilito la
possibilita' di cambiarla al volo una volta aperte.
Che errore ti da sull'apertura? E cosa intendi con "intera" per
l'espressione filtro?
Io vado secondo necessita': a volte passo tutto il codice sql, altre
volte passo solo la clausola WHERE.
Un suggerimento potrebbe essere quello di verificare in debug quello
che ti ritrovi come espressione sql che cerchi di assegnare alla
recordsource (se e' quello il punto in cui si verifica il problema).
Popi

 filtro (intendi l'intero sql della query?)
Non so dirti per il cambio di visualizzazione, anche perche' dichiaro
sempre la modalita' di apertura delle mie maschere e disabilito la
possibilita' di cambiarla al volo una volta aperte.
Che errore ti da sull'apertura? E cosa intendi con "intera" per
l'espressione filtro?
mi riferivo a quando mi hai scritto questo:
mettendo al posto di " ... " l'espressione filtro completa
cosa intendevi?
Per es nel mio caso la mia clausola WHERE è il campo ORIGINE e l'ho indicata 
come 'CondizionevaribileMascher', devo riportarla anche dopo tra le 
virgolette?
Mi riferisco all'apertura di una maschera da evento click che ha come 
origine una query.
Grazie.
Giorgia


 ha scritto nel messaggio 
news:678c098c-04f4-4db9...@a19g2000prj.googlegroups.com...

Assolutamente sě (e, per inciso, e' un meccanismo che uso di frequente
nei miei applicativi), perche' il trucco sta tutto nell'impostare il
recordsource nell'evento di apertura della maschera.
Solo in alcuni casi mi e' toccato scrivere il codice che compone la
condizione WHERE nell'evento che scatena la maschera (as es il click
da te citato).
In quei casi passo la condizione tramite il parametro openargs della
openform ma, come vedi, si ritorna sempre all'evento di apertura della
form.
Popi
Magari č una scemenza.....ma non si riesce a inserire qui in stlinkcriteria 
il filtro per il campo [origine]?
 Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "PAGAMENTO"
    stLinkCriteria = "[PROTOCOLLO NUMERICO]=" & Me![PROTOCOLLO]
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Giorgia 

     DoCmd.OpenForm stDocName, , , stLinkCriteria
Certo, ma quale delle seguenti sarebbe (nel tuo caso!) la condizione
giusta?
DoCmd.OpenForm "PAGAMENTO", , ,"[PROTOCOLLO NUMERICO]=" & Me!
[PROTOCOLLO] & " AND TuoCampoNellaTabella='" & [origine] & "'"
DoCmd.OpenForm "PAGAMENTO", , ,"[PROTOCOLLO NUMERICO]=" & Me!
[PROTOCOLLO] & " OR TuoCampoNellaTabella='" & [origine] & "'"
DoCmd.OpenForm "PAGAMENTO", , ,""TuoCampoNellaTabella='" & [origine] &
"'"
E quanto sopra a prescindere dal formato di TuoCampoNellaTabella, che
ha bisogno degli ' solo se di tipo testo.
Popi

 ha scritto nel messaggio 
news:e31bfe7e-112d-4f6b...@dn9g2000vbb.googlegroups.com...






Popi
Fantastico grazie, ho ancora un po' di problemi a scrivere la sintassi 
corretta.
Ho impostato
stLinkCriteria = "[PROTOCOLLO NUMERICO]=" & Me![PROTOCOLLO] & " AND 
TuoCampoNellaTabella='" & [origine] & "'"
Grazie mille, buona giornata!
Giorgia