Newsgroup: it.comp.appl.access
Titolo: Ordinare report in base ad un gruppo di opzioni

Salve a tutti.
Ho una maschera che utilizzo per dare i parametri in base ai quali stampare
dei report.
Il report che sto elaborando adesso è basato su di una query. Si tratta di
una stampa di anagrafiche. In un gruppo di opzioni ci ho messo la
possibilità di ordinare il report per ID o per RagioneSociale. Solo che non
so come fare per spiegargli che se è selezionato il primo (valore 1) deve
ordinare in base all'ID e se è selezionato il secondo (Valore 2) deve
ordinare in base alla Ragione Sociale.
Come si può sistemare?
Grazie
Stefano

 ha scritto nel messaggio 
news:452bb15f$0$25891$4faf...@reader1.news.tin.it...

Per prima cosa ti crei un modulo standard dove dichiari una variabile pubblica di tipo string, così 
può essere vista da tutto il db:
------------------------------
Option Compare Database (c'è già)
Option Explicit
Public CampoOrdine as String
----------------------------
E lo salvi.
Poi ti devi assicurare che la selezione di un'opzione escluda l'altra.
Usando due caselle di controllo non associate (non è necessario associarle) che chiamiamo OrdineID e 
OrdineRS, dovrai mettere su evento Caricamento della maschera che le contiene, il seguente codice, 
giusto per selezionare la prima e spegnere la seconda:
-------------------------
Private sub Form_Load
Me!OrdineID.value=True
CampoOrdine="IDcliente"
Me!OrdineRS.value=False
End Sub
--------------------------
Con questo stralcio spunti la prima casella, assegni alla variabile prima dichiarata la stringa 
"IDcliente" e ti assicuri che la seconda casella sia off.
Ora sempre sul modulo VBA della maschera, scrivi i seguenti eventi:
---------------------------------------
Private Sub OrdineID_AfterUpdate
if Me!OrdineID.value then
    CampoOrdine="IDcliente"
else
    CampoOrdine="Ragionesociale"
end if
Me!OrdineRS.value=not Me!OrdineID.value
End Sub
Private Sub OrdineRS_AfterUpdate
if Me!OrdineRS.value then
    CampoOrdine="Ragionesociale"
else
    CampoOrdine="IDcliente"
end if
Me!OrdineID.value=not Me!OrdineRS.value
End Sub
------------------------------------
Con questo hai che cambiando il valore di una delle due caselle, automaticamente comporta il 
cambiamento dell'altra e contemporaneamente l'assegnazione alla variabile CampoOrdine il nome del 
campo su cui si baserà l'ordine del report.
Ora devi aprire il report in modalità struttura, togliere qualsiasi gerarchia d'ordine da 
Ordinamento e raggruppamento (tasto destro); non ci deve essere alcun campo sennò non funziona 
niente.
Ora, su evento Apertura del report scriverai:
-----------------------------------
Private Sub Report_Open(Cancel As Integer)
Me.OrderBy = CampoOrdine
Me.OrderByOn = True
End Sub
-----------------------------------
Questo passa al report il campo da utilizzare come ordine, e attiva l'ordine su avvio.
Ovviamente, se apri il report senza prima aver apero la maschera che assegna alla variabile 
CampoOrdine un nome di campo, si verifica errore.
Prova un pò e fammi sapere se hai problemi.
Michele 

 ha scritto nel messaggio
news:452be0fa$0$5844$4faf...@reader3.news.tin.it...

Adesso funziona.
Ma spiegami una cosa.
Le caselle di controllo non mostrano l'evento Dopo Aggiornamento nelle
proprietà. Tu però hai richiamato questo evento.
Come mai?
Grazie per la dritta
Stefano


Io, nel mio Access XP (2002) ho l'evento dopo aggiornamento nella casella di controllo, e per la 
precisione è il secondo della lista. Ma sei sicuro che stiamo parlando dello stesso oggetto? 
Ovviamente stiamo parlando di casella di controllo su maschera, quelle che quando le selezioni si 
segnano con la "V".
Ad ogni modo, dici che tutto funziona. Ma se non hai l'evento Dopo Aggiornamento (AfterUpdate) che 
cosa hai usato?
Saluti
Michele