Ovviamente con una Query le cose sono semplici, ma anche poco flessibili
a meno di non riscrivere la sintassi SQL come hai giustamente evidenziato.
In ogni caso nella SELECT.....ORDER BY...." puoi scrivere anche solo un
criterio
e non obbligatoriamente tutti.
Tieni presente che la Form ha una proprietà chiamata OrderBy.
Questa può essere impostata Runtime:
Supponi di avere un OptionButton con le 3 Opzioni:
NOME_LIBRO=1
ANNO=2
MESE=3
Select case OptButton
Case 1
Me.OrderBy="NOME_LIBRO"
Case 2
Me.OrderBy="ANNO"
Case 3
Me.OrderBy="MESE"
End Select
Me.OrderByOn=True
Ovviamente se le vuoi Decrescenti inserisci "DESC"
Ciao.
@Alex.
>Quando parlavo di Select via VBA intendevo la
proprietà "RecordSource" cioè volevo utilizzare i dati di
una tabella tramite "LIBRI_LETTI = "Select * from
ELENCO_LIBRI_LETTI", pertanto se in questo caso avessi
voluto ordinare i campi di cui sopra non sarebbe stato
sufficiente scrivere "Select * from ELENCO_LIBRI_LETTI",
ma avrei dovuto riportare almeno quei campi che sono da
ordinare anziché usare l'asterisco. Poi considera che ho
necessità che tutti e tre i campi (Nome_LIBRO, ANNO,
MESE) siano ordinati contemporaneamente (in una query
potrei metterli in progressione con l'impostazione ORDERBY.
L'ideale, ripeto, sarebbe poterlo fare tramite VBA con
RecordSource, ma ho timore che per farlo debbo riportare
nella Select tutti i campi della tabella e non limitarmi
all'asterisco. E' così Alex?
Ciao
Non condivido il concetto di Ideale che applichi.
Secondo me così come vuoi fare tu è estremamente più
lento e poco pratico.
Perchè devi forzatamente ricorrere alla modifica del Recordsource
di Form quando ti spiegavo che ti basta usare la proprietà
OrderBy di Form....????
Con questa proprietà ci fai quello che vuoi anche 10 criteri di ordinamento
se credi.
Vantaggio:
Non tocchi il RecordSource che può essere pure la Tabella.
On devi riaggiornare tutto il Recordset di Form con conseguente
perdita di tempo inutile.
Flessibilità estrema nell'applicazione con VBA.
BOH.....!
In ogni caso la risposta alla tua ultima domanda è si, devi specificarli
uno per volta.
Ciao.
@Alex.
Dimmi un'altra cosa:
Volevo metterli in riga, tipo:
me.orderby=nome_libro,Anno,Mese
ma mi dà errore
Ciao
[CUT]
.Alex tu hai ragione, ma fra me e te c'è un gap abissale.
va bene in questo modo?
Me.RecordSource = Elenco......
Me.OrderBy=Nome_Libro
Me.OrderBy = ANNO
Me.OrderBy = MESE
Dimmi un'altra cosa:
Volevo metterli in riga, tipo:
me.orderby=nome_libro,Anno,Mese
ma mi dà errore
Ciao
Allora il RecordSource ti conviene non impostarlo da Codice
per evitare di dover ricaricare il Recordset dopo il Load.
Imposta la stringa direttamente aiutandoti con l'autocomposizione
dalla Form proprietà di Maschera e cliccando il Pulsantino a destra
della riga OrigineRecord, quì hai il modo di comporre la stringa
SQL in modo visuale(ritengo sia il metodo più comodo).
Poi per gestire la proproetà OrderBy devi anche dare un'occhiata
all'Help, e vedrai che si tratta di una proprietà che richiede una stringa.
Me.OrderBy=Nome_Libro
Me.OrderBy = ANNO
Me.OrderBy = MESE
In questo modo annulli sempre la precedente, quindi sarà vera solo l'ultima
anche se la sintassi è sbagliata:
Me.OrderBy = "MESE"
Dimmi un'altra cosa:
Volevo metterli in riga, tipo:
me.orderby=nome_libro,Anno,Mese
ma mi dà errore
Questo è il modo corretto, ma per quanto spiegato prima è ovviamente
da rivedere la sintassi:
me.orderby="nome_libro,Anno,Mese"
me.OrderByOn=True
Non dimenticare l'ultima riga altrimenti non ha effetto.
Spero di averti chiarito meglio.
@Alex.