Newsgroup: it.comp.appl.access
Titolo: Ordinamento casella di riepilogo

Ho una casella di riepilogo, con l'intestazione della colonna inclusa, che 
visualizza dati differenti in base ai filtri che seleziono dalla maschera 
nella quale si trova.
E' possibile ordinare i dati visualizzati nella casella di riepilogo in base 
ad una delle intestazioni delle colonne che posso scegliere da una casella 
combinata? Cioč tipo un "order by" che non fa riferimento alla tabella da 
cui provengono i dati, ma direttamente ai dati presenti in quel momento 
nella casella combinata. 

 ha scritto nel messaggio 
news:47f78a73$0$17947$5fc...@news.tiscali.it...

Certo che sě...con un po' di codice.
In pratica ti basta cambiare "al volo" l'origine riga della combo.
Per esempio:
SELECT DISTINCTROW Abi.ID, Abi.Abi, Abi.Descrizione FROM Abi;
(questo non č ordinato)
SELECT DISTINCTROW Abi.ID, Abi.Abi, Abi.Descrizione FROM Abi ORDER BY 
Abi.Abi;
(Questo lo č per Abi)
SELECT DISTINCTROW Abi.ID, Abi.Abi, Abi.Descrizione FROM Abi ORDER BY 
Abi.Descrizione;
(questo per Descrizione).
Passata l'origine riga fai un bel requery della combo e un bel 
Me.ComboName.DropDown
Ciao, Carlo

 Ciao, Carlo
Fosse stato così semplice lo avrei fatto già da tempo :-)
Il problema è che l'ordinamento nn lo devo fare partendo direttamente dalle 
righe della tabella, ma da quelle della casella di riepilogo, che cambiano 
in funzione dei filtri che seleziono all'interno della maschera, per questo 
mi servirebbe ordinare solo quelle righe.
Grazie cmq ;-) 

 ha scritto nel messaggio 
news:47f9e46b$0$29990$5fc...@news.tiscali.it...

Se non si conosce lo strumento le operazioni sono sempre difficili.
Nel tuo caso la procedura è la stessa per le caselle di riepilogo specie se 
operi da una combo.
Chi ha mai parlato di "righe della tabella"?
Per adattarlo al tuo caso cambia quello che ho scritto da:
"In pratica ti basta cambiare "al volo" l'origine riga della combo"
con
"In pratica ti basta cambiare "al volo" l'origine della casella di 
riepilogo".
Ciao, Carlo 

 riepilogo".
Il problema è che l'ordinamento deve essere successivo alle operazioni di 
filtraggio fatte dalla maschera.
Praticamente in base a dei filtri, nella casella combinata vengono caricati 
da una tabella i valori che soddisfano certi criteri. Una volta visualizzati 
devo poter ordinare i valori visualizzati scegliendo il tipo di ordinamento 
con una casella combinata nella quale c'è l'elenco dei campi della tabella, 
dunque l'ordinamento è una cosa che avviene successivamente, e devo poter 
scegliere a piacere il tipo di ordinamento, anche dopo aver caricato i dati 
nella casella di riepilogo. Ciò che dunque mi serve è un ordinamento sulle 
righe della casella di riepilogo. 

 mi serve è un ordinamento sulle righe della casella di riepilogo.
La casella di riepilogo o la combinata hanno tutte e due una "ORIGINE RIGA" 
che, nel tuo caso, cambi (almeno spero) in base a dei filtri.
Questi filtri fanno sì che sia la riepilogo che la combinata si popolano di 
certi dati. Giusto?
Tu conosci sempre l'origine riga dei due controlli. Ora supponiamo che tu 
scelga nella combo il campo "Descrizione" e che l'origine riga della 
riepilogo sia:
SELECT DISTINCTROW Abi.ID, Abi.Abi, Abi.Descrizione FROM Abi;
cosa cambia quando scegli di ordinare in base alla "descrizione"?
la nuova origine riga diventa:
SELECT DISTINCTROW Abi.ID, Abi.Abi, Abi.Descrizione FROM Abi ORDER BY 
Abi.Descrizione;
In pratica hai aggiunto alla stringa sql un ORDER BY NomeTabella.NomeCampo 
(che nel tuo caso è il valore scelto dalla combo).
E' chiaro che devi costruirti la stringa sql da codice...
leggi l'origine riga, la riformuli aggiungendo "ORDER BY", la passi alla 
riepilogo e fai un requery della stessa.
Come faccio a ricavare l'origine riga della riepilogo?
Per esempio così:
Dim MiaSql as string
MiaSql = Me.CasellaRiepilogoNome.RowSource
Come faccio ad aggiungere un ORDER BY?
Per esempio così:
Dim MiaSql As String
MiaSql = Me.CasellaRiepilogoNome.RowSource
MiaSql = Mid(MiaSql, 1, Len(MiaSql) - 1) & " ORDER BY Abi." & "Descrizione;"
Me.CasellaRiepilogoNome.RowSource = MiaSql
Me.CasellaRiepilogoNome.Requery
(con il Mid prendo tutta la stringa meno il ";" finale...che aggiungerò alla 
fine)
Aggiungerei una variabile globale per la "vecchia Origine Riga" perchè nel 
caso dovessi fare un altro ordinamento la partenza sarebbe sempre la stringa 
(origine riga) originaria.
Per esempio in un modulo pubblico:
Dim MiaSqlOriginaria as string
Sarà sempre questa la partenza per la generazione della nuova stringa SQL.
Dimmi che mi sono spiegato.
Ciao, Carlo