Newsgroup: it.comp.appl.access
Titolo: criterio query su controlli maschere alternative

Salve a tutti.
Ho un report la cui origine dati ha come criterio il controllo
presente in una form.
Se però utilizzo una form alternativa con gli stessi controlli
dell'altra per aprire il report, vorrei che il criterio tenesse conto
solo del controllo della maschera chiamante.
Ho provato a mettere la condizione IIf ma quando apro il report dalla
form alternativa, mi chiede sempre il valore del controllo della prima
form.
Ciao Giuseppe.

 Ciao Giuseppe.
la iif valuta sempre entrambe le condizioni, se non lo sai, sappilo ;-{)
Non so come hai fatto la condizione e dove la hai messa ma presumo....
--
ac

 della prima form.
Puoi crearti una funzione in un modulo standard:
Public Function fctMioCriterio()
    If SysCmd(acSysCmdGetObjectState, acForm, "Maschera1") > 0 Then
        fctMioCriterio = Forms!Maschera1!Controllo1
    End If
    If SysCmd(acSysCmdGetObjectState, acForm, "Maschera2") > 0 Then
        fctMioCriterio = Forms!Maschera2!Controllo1
    End If
End Function
Poi nella query usa come criterio: fctMioCriterio()
Un altro metodo ho descritto qui:
http://groups.google.com/group/microsoft.public.it.office.access/browse_frm/thread/e2de8583293d900c
-- 
cu
Karl
*********
Access FAQ: 
www.donkarl.com/it
 


Fatto tutto e funziona.
Però nella query ho due campi con criteri IdAzienda e Data.
Sul primo il criterio è uguale, sull'altro è >=.
Ho duplicato la funzione chiamandola fctMioCriterio2() e ho sostituito
il nome del campo su cui c'è il secondo criterio.
Nella query, sul criterio del campo data ho messo >=fctMioCriterio2()
e su esecuzione della query mi dà il seguente messaggio:
"errore di runtime 424 - necessario oggetto"
Ciao Giuseppe.

 "errore di runtime 424 - necessario oggetto"
Hai controllato cosa ritorna la tua funzione?
p.e. con chiamarla nella finestra immediata con
?fctMioCriterio2()
e premere <Enter> nella stessa riga.
Se non trovi l'errore posta il tuo codice e la stringa SQL della query.


 Se non trovi l'errore posta il tuo codice e la stringa SQL della query.
SQL:  SELECT tblFatture.IDAzienda, tblAziende.NomeAzienda,
tblFatture.DataFattura, tblFatture.NFattura, tblFatture.NProtocollo,
tblFatture.NNotaCredito, tblFatture.IdCliente,
tblAnagrafica.ragionesociale1, tblAnagrafica.ragionesociale2,
tblFatture.[totale fattura], tblFatture.Imponibile,
Year([Datafattura]) AS Espr1, tblFatture.[stato saldo],
tblFatture.iva, tblFatture.[primo acconto], [totale fattura]-Nz([Primo
acconto],0)-Nz([secondo acconto],0) AS Saldo
FROM tblAziende INNER JOIN ((tblAnagrafica INNER JOIN tblClienti ON
tblAnagrafica.IdAnagrafica = tblClienti.IDAnagrafica) INNER JOIN
tblFatture ON tblClienti.IdCliente = tblFatture.IdCliente) ON
(tblAziende.IDAzienda = tblClienti.IdAzienda) AND
(tblAziende.IDAzienda = tblFatture.IDAzienda)
WHERE (((tblFatture.IDAzienda)=fctMioCriterio()) AND
((tblFatture.DataFattura)=fctMioCriterio2()) AND ((tblFatture.[stato
saldo])=0))
ORDER BY tblFatture.DataFattura, tblFatture.NFattura;
Funzione;
Public Function fctMioCriterio2()
    If SysCmd(acSysCmdGetObjectState, acForm, "variazione fatture") >
0 Then
        fctMioCriterio = Forms!variazione_fatture!Anno
    End If
    If SysCmd(acSysCmdGetObjectState, acForm, "frmparametricrediti") >
0 Then
        fctMioCriterio = Forms!frmparametricrediti!Anno
    End If
End Function
Ciao Giuseppe.

 fctMioCriterio = Forms!variazione_fatture!Anno
variazione fatture <> variazione_fatture


 variazione fatture <> variazione_fatture
Non ho capito dove e perchè ho sbagliato il nome della maschera e dove
mettere "variazione fatture <> variazione_fatture".
Comunque senza tener conto del punto 2), ho messo nella query come
criterio del campo datafattura >fctMioCriterio2() e adesso funziona.
Grazie Karl.
Giuseppe.

 ...
Ho citato e ricapitolato 2 righe del tuo codice dove secondo la
mia impressione hai scritto il nome della maschera una volta
senza trattino, l'altra con un trattino tra le due parti del nome.
Se invece si tratterebbe di 2 maschere diverse, il tuo sistema
di nominare gli oggetti sarebbe un disastro.
-- 
:-)


 >>> fctMioCriterio = Forms!variazione_fatture!Anno
ora
If SysCmd(acSysCmdGetObjectState, acForm, "variazione fatture")
fctMioCriterio = Forms[!variazione fatture]!Anno
Grazie.
Giuseppe.

 fctMioCriterio = Forms[!variazione fatture]!Anno
Giusto sarebbe: Forms![variazione fatture]!Anno
Buono sarebbe p.e.
Forms!frmVariazioneFatture!Anno
o
Forms!frm_Variazione_Fatture!Anno
Cio�, con un prefisso dichiarativo, senza spazi e con iniziali
maiuscoli ("camel case"). Vedi anche:
 Denominazioni
 
www.donkarl.com/it?FAQ1.5
-- 
Buona Domenica


 Access FAQ:
www.donkarl.com/it
Buona Domenica anche a te.
Ancora Grazie.
Giuseppe.