Newsgroup: it.comp.appl.access
Titolo: Funzione CHOOSE funziona solo a metà!

Ciao,
in una query ho scritto il seguente codice sql:
SELECT tblFatture.forn, tblFatture.nfatt, tblFatture.imponibile, 
tblFatture.datascad, tblFatture.descr
FROM tblFatture
ORDER BY 
Choose(Forms!frmFatture!opzOrdina,tblFatture.forn,tblFatture.nfatt,tblFatture.datascad);
per poter scegliere l'ordinamento in base alla scelta da un gruppo di 
opzioni (opzOrdina=1,2,3).
Funziona con l'opzione 1 (ordina secondo tblFatture.forn che ï¿œ testo)
Le opzioni 2 e 3 (dovrebbero ordinare secondo tblFatture.nfatt numerico 
e tblFatture.datascad data) non funzionano per nulla... anzi per quanto 
riguarda la data ho notato che viene ordinato il giorno non 
anno/mese/giorno... cioï¿œ le prime due cifre (rappresentano il giorno) 
sono in ordine crescente.
Ho provato ad usare la funz Val(Forms!frmFatture!opzOrdina) per 
assicurarmi che ritornasse un valore numerico ma non ï¿œ quello; ho 
provato a convertire in variant tblFatture.nfatt e tblFatture.datascad 
con CVar() ma nemmeno quello ï¿œ il problema!
Cosa ne dite?
Grazie mille!
Marco

 Marco
Funziona perfettamente con "nfatt" numerico e "datascad" data in
cifre...su questa macchina Access2003..
--
sv
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 cifre...su questa macchina Access2003..
Sulla mia con A2003, se il campo non � testo, non funziona... ho provato 
  anche con un'altra che avevo scritto praticamente uguale ma su altra 
maschera e su altra tabella!
Ordina i giorni (cio� le prime due cifre) della data.
Sar� mica qualche impostazione di windows per la data?
Per� anche i valori numerici non vengono ordinati in modo crescente... 
sono in ordine giusto fino ad un certo record e poi ripartono a casaccio!
Acch!!!!

 in ordine crescente.
Ciao Marco,
La funzione Choose che hai messo nella order by ha 3 tipi di dato diversi, 
Testo, Numerico, Data/Ora
Il query optimizer pu� assegnare un solo tipo di dato a ci� che viene 
restituito dalla funzione choose, quindi quale � il tipo di dato che pu� 
rappresentare i tre tipi diversi posti nel suo paramarry ?
Ovviamente Testo perch� un numero pu� essere convertito in testo lo stesso 
vale per la data.
Quando selezioni l'opzione 2 o 3 il tuo ordinamento non funziona come 
vorresti perch� sia datascad che nfatt vengono convertite in testo.
per risolvere fai cos�
----
SELECT tblFatture.forn, tblFatture.nfatt, tblFatture.imponibile,
tblFatture.datascad, tblFatture.descr
FROM tblFatture
ORDER BY
Iif(Forms!frmFatture!opzOrdina=1,tblFatture.forn,NULL),
Iif(Forms!frmFatture!opzOrdina=2,tblFatture.nfatt,NULL),
Iif(Forms!frmFatture!opzOrdina=3,tblFatture.datascad,NULL)
----
in questo modo hai tre ordinamenti, ognuno con il suo tipo di dato corretto, 
dei tre solo uno influenza l'ordinamento perch� gli altri due restituiscono 
lo stesso valore NULL.
Ciao
Giorgio Rancati

 Acch!!!!


 lo stesso valore NULL.
Perfetto!
Funziona a meraviglia!
Quindi se ho ben capito, la CHOOSE deve essere usata solo quando i tipi 
di dato inclusi sono dello stesso tipo... altrimenti bisogna usare IIF!
Giusto?
Se i dati da mettere in IIF fossero piï¿œ di 2, ï¿œ d'obbligo fare come mi 
hai indicato (n-IIF) oppure si puï¿œ scrivere una IIF che li include tutti?
Grazie mille per l'aiuto!
Marco

 tblFatture.nfatt,4),tblFatture.datascad);
Addirittura... come i vecchi windows in cui i file con nomi numerici 
dovevano avere lo stesso numero di cifre altrimenti il conteggio 
riprendeva dall'ordine di grandezza precedente!!!
Grazie mille del suggerimento!
Marco

 Grazie mille per l'aiuto!
prego, ciao
Giorgio Rancati 

 Marco
Se vuoi usare la choose devi riportare in formato uguale tutti i campi, 
ovvero testo cosi':
SELECT tblFatture.forn, tblFatture.nfatt, tblFatture.imponibile,
tblFatture.datascad, tblFatture.descr
FROM tblFatture
ORDER BY
Choose(Forms!frmFatture!opzOrdina,tblFatture.forn, 
Format(tblFatture.nfatt,"00000000"), 
Format(tblFatture.datascad,"yyyymmdd"));
Enrico :o) 

 Enrico :o) 
Grazie Enrico,
trovo piï¿œ comoda la choose piuttosto che tante IIF!
Cosï¿œ ï¿œ un'ottima soluzione!
Grazie
Marco