Newsgroup: it.comp.appl.access
Titolo: IIF e query ADO

Ci riprovo postandovi le puntate precedenti
Rispondetemi almeno per dirmi se ho posto male la domanda, se è troppo
semplice o se non vi vengono soluzioni.
Io:
Ciao a tutti.
Access02 Win2000 - vorrei ordinare una maschera continua secondo un campo
calcolato originato da
campo4 =IIF(campo1 > 0; campo2 * campo1; campo3)
ora essendo l'origine della maschera una funzione non mi permette o non
riesco ad ordinare la maschera secondo il campo4, ho pensato quindi di far
fare il calcolo alla funzione(query) ma non saprei come inserire IIF perchè
inserendolo nei criteri mi dice funzione IIF non riconosciuta.
Bisio:
L'origine della maschera una funzione?!?
Caso mai una tabella o una query sulla tabella.
A quel punto nella query ci metti anche il campo calcolato e ordini per quel
campo
Io:
Il mio problema è proprio come eventualmente inserire il campo calcolato
nella query, perchè nei criteri non mi riconosce IIF e non so in quale altro
modo inserire
campo4 =IIF(campo1 > 0; campo2 * campo1; campo3)
Bisio:
Perchè nei criteri?
Tu lo devi mettere nella riga dei campi scelti.
Scrivi pure campo4 se vuoi chiamarlo così, altrimenti ti ci mette lui Espr1
Sarà
Campo4: iif(campo1>0;campo2*campo1;campo3)
dove campo1 2 e 3 devono essere campi della tabella.
Quindi nella maschera associerai ad un controllo il campo calcolato campo4
Io:
Il problema è che me lo trasforma in testo e non mi accetta la sintassi che
uso
'Espr1:
(IIf([Fd_Prz_Conf]>0;[Fd_Prz_Conf]/[Fd_Conf_Prod];[Fd_Prz_Prod])/[Fd_QProd_C
ont]*1000)' As Prz_Unit
- le virgolette me le mette Access perchè non riconosce la funzione -
è possibile che sia legato al fatto che si tratta di una funzione di un
proggetto .adp e non di una query di un .mdb???
ho provato ad inserire l'espressione nel campo colonna come mi ha detto
Bisio.
Togliendo le virgolette di testo nella SQL mi dice:
ERRORE ADO sintassi non corretta in prossimità di ':'
se tolgo i due punti e anche Espr1 mi trova l'errore in prossimità di '>'
Ho provato sostituendo i nomi dei campi con gli alias, scrivendoli per
intero dbo.Nometabella.Nomecampo, con e senza parentesi....
Aiuto........
Grazie a chiunque mi aiuti, Valerio.

 di '>'
IIF non è supportata da SQL, quindi non puoi utilizzaral come
funzione in un campo calcolato.
Sto guardando se trovo un'alternativa...
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPVp1Psg6j/rIOLofEQIXkQCZAVX1mTczpIvu1+Apvn5ikYmqjr0AnR4R
8g2GoBQNsQqjU/mFSjDnyKJq
=+aYU
-----END PGP SIGNATURE-----

 Matteo Palmieri - Cybercreations
Come t'avevo detto, Valerio, devi continuare a ripostarla fino a quando qlc
non ti risponde.
So tutto io;-)
Ciao. Fabrizio.
p.s. basta vado a casa: ho fatto anche gli straordinari ( a rompere la
palle ).


Intanto grazie, almeno ora so che IIF non è supportato da SQL.
Ciao Valerio

 ont]*1000)' As Prz_Unit
Hai provato con
Prz_Unit:
IIf([Fd_Prz_Conf]>0;[Fd_Prz_Conf]/[Fd_Conf_Prod];[Fd_Prz_Prod])/[Fd_QProd_Co
nt]*1000)
Se hai Access in Inglese dovrai sostituire i ; con ,
HTH.
Alessandro

 ha scritto nel messaggio
news:uWu69.210574$Jj7.4...@news1.tin.it...

In aggiunta al suggerimento di Antonio, puoi provare con le funzioni
cint/cdbl (vedi help):
Es.
'------------
Campo4: cint(iif(campo1>0;campo2*campo1;campo3))
'------------
Ciao.
--
Sergio MAZZA

 So tutto io;-)
Se non ci fossero quelli come te che seguono i NG magari da meno ma molto
più spesso aggiornandoci con consigli che la vecchiaia ci ha fatto
dimenticare, noi che entriamo modello lurcker di rado faremmo molte più
figure di M...A di quanto già non riusciamo a fare così.
Quindi grazie.


 nt]*1000)
Odia tutto quello che scrivi con due punti dopo.


 ha scritto nel messaggio
news:YWv69.210927$Jj7.4...@news1.tin.it...

Non sono ancora a casa: aproposito era ironia quella? e chi è 'lurcker'( ho
dovuto fare copia/incolla perchè neanche riesco a scriverlo )?
Ciao. Fabrizio.
p.s. perchè non sono ancora a casa? perchè mi aspettano due figli
"bellissimi". :-)

> Intanto grazie, almeno ora so che IIF non è supportato da SQL.
Veramente a me funziona, ma io uso Access97: hanno tolto il supporto di IIf
nelle query in Access02?
Alessandro


Ho il timore che come ha detto Matteo Palmieri SQL non sopporti proprio IIF.
Grazie comunque, a proposito qualcuno sà dirmi dove trovo un elenco di
funzioni supportate da SQL.
Ciao Valerio.

 Ciao Valerio.
Ci hai almeno provato? Non morde mica SQL...
Ciao.
--
Sergio MAZZA


Era forse non tanto ovviamente riferito a quelli come me che invece di
seguire regolarmente il NG si presentano una tantum con un quesito e poi
scompaiono per due anni.
Ciao Valerio.

 ha scritto nel messaggio
news:aje1qf$5al$1...@newsreader1.mclink.it...

Credo, per quanto ho capito che IIF e molto altro sia supportato dalle Query
di Access nel suo SQL ma non dall'SQL vero e proprio e quindi non
utilizzando ADO.
A tal proposito stavo per iniziare un nuovo post ma visto che me ne dai
l'occasione chiedo a tutti dove trovo un help che mi spieghi cosa supportano
le Query di Access e cosa invece supporta SQL SERVER.
Ciao Valerio.

 ha scritto nel messaggio
news:aje2lf$e0o$1...@canarie.caspur.it...

Ora c'ho provato, purtroppo con scarsi risultati. Unica nota positiva:
effettivamente non morde......
Grazie ancora Valerio.


Se non sbaglio nell'help in linea c'è qualcosa...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:z6w69.210973$Jj7.4...@news1.tin.it...

L'hai sottoscritto l'NG non c'hai mica giurato e non hai fatto nessun patto
di sangue, quindi non devi scusarti.
Ciao. Fabrizio.
p.s. chi è 'lurcker'?

 Grazie ancora Valerio.
Neanche Mazza morde :-)
Ciao. Fabrizio.


Ho capito! Ma se po' sape' che c'hai scritto nel campo calcolato o č un
segreto di stato?
Ciao.
P.S. Ora vado a mangiare; č sě anche i programmatori mangiano. Anzi no, si
nutrono...
Ciao.
--
Sergio MAZZA


Un lurcker, e non sono tanto sicuro della sintassi - sono un po arruginito -
è tradotto colui che succhia informazioni senza mai darne. Quindi il
problema non è tanto se ho fatto un giuramento, ma quanto do al NG rispetto
alle cose che prendo e seppur non con l'intenzione di approfittarne ma per
il poco tempo che posso dedicare alla programmazione finisco per prendere
più cose di quante ne do.
Ciao Valerio.

 ha scritto nel messaggio
news:Tmw69.211033$Jj7.4...@news1.tin.it...

AZZ sei uno che ha studiato :-)
Ciao. Fabrizio.

 metodi OrderBy ma non li accetta.
Dunque, spulciando un po' qua e là ho trovato la funzione CASE che
dovrebbe fare al caso tuo. Prima di spiegare ti consiglio di
scaricarti da Microsoft la documentazione di SQL Server (ti metto il
link che dovrai pazientemente ricomporre):
http://download.microsoft.com/download/SQLSVR2000/2kBOL/2000/WIN98MeXP
/IT/sqlbolsetup.cab
Son quasi 40 mega ma vale la pena.
Tieni presente che utilizzando la funzione CASE non puoi visualizzare
graficamente la query... devi scriverti tutto a manoni! La sintassi è
questa:
SELECT 'Prz_Unit' =
  CASE
    WHEN [Fd_Prz_Conf]>0 THEN [Fd_Prz_Conf]/[Fd_Conf_Prod]
    ELSE [Fd_Prz_Prod]/[Fd_QProd_Cont]*1000
  END
FROM TuaTabella
Ovviamente devi aggiungere tutta l'altra roba che qui manca perchè
non so cos'altro devi selezionare. Quello che non ho capito dalla
documentazione (e che adesso non ho assolutamente il tempo di
provare) è se funzioni l'ordinamento in base al campo 'Prz_Unit'. Ai
posteri l'ardua sentenza.
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPVqFzMg6j/rIOLofEQIukgCfa1RhhpoGclp7xsPUwKJspNQARTEAoNuu
90Q32ISwcVPPNMmMNtwJ9R8z
=NQne
-----END PGP SIGNATURE-----


Buon appetito.
Ciao Valerio.


Bene due ottime informazioni, penso che ne avrò per pò.
I 40 MB non mi preoccupano per lo scarico ma per quante cose nuove ci trovo.
Scrivere SQL a manina mi piace molto l'idea, poi posso sempre usare la parte
che ho già composto graficamente e modificarla. Ho un vantaggio su voi, non
devo consegnare nulla, quello che non funziona lo vedo solo io e quasi mai
inizio cose nuove se mi servono con urgenza.
Quindi direi che nei prossimi 20gg, e probabilmente molti di più, so come
occupare i ritagli di tempo e come ho già detto a Fabrizio non mi è quasi
mai successo che in questo NG non mi si indichi la strada da seguire.
Grazie ancora e se potrò cercherò di continuare a seguirvi.
Ciao Valerio.


Prova un po qui....
http://www.microsoft.com/sql/techinfo/productdoc/2000/default.asp
 ;)
Ciao

 
www.cybercreations.it
Te lo devo dire, non proprio con copia incolla ma quasi, successo totale al
primo colpo.
Documentazione in linea potentissima che anche senza studiarla ma solo
cercando funzioni ed esempi di volta in volta permette di procedere con
facilità.
GRAZIE!!!!!
Ciao Valerio.

 
www.cybercreations.it
Ciao Valerio.


Ultima notazione nella SELECT CASE non puoi usare Alias risultati di
funzioni utilizzate in precedenza nella SELECT. Ovvero:
il prezzo della confezione di prodotto era indicato nella SELECT come segue:
AVG(dbo.Tb_Acquisti.Fd_Prz_Conf) AS Prz_Conf
nel prosiego della SELECT arrivo a CASE con una clausola WHEN
non funziona:
WHEN Prz_Conf > 0
funziona:
WHEN AVG(dbo.Tb_Acquisti.Fd_Prz_Conf) > 0
Spero queste indicazioni possano servire a qualcuno.
Grazie ancora Valerio.

 > ont]*1000)' As Prz_Unit
Io ho sempre usato la funzione IIF in quasi tutti  i miei database (A2k it)
, non riesco a capire cosa non possa andare, forse sbagli sintassi.
Ti riporto un piccolo esempio di query che ho appena provato
SELECT ID, campo1, IIf([campo1]>0,[campo2]*[campo3],[campo4]) AS [Campo
Calcolato] FROM Tabella1;
nella query in visualizzazione SQL della query devi nominare il campo
calcolato con la clausola As dopo la funzione IIF, mentre in visualizzazione
struttura devi inserire il nome (senza quadre) seguito dai due punti e poi
dalla funzione:
Campo Calcolato: IIf([campo1]>0,[campo2]*[campo3],[campo4])
omnitow


Per quel poco che capisco l'SQL di A2k non è vero SQL, ma un linguaggio
molto più potente di Microsoft, mentre l'SQL che si usa con ADO è quasi SQL
standard e quindi molto più utilizzabile con DB diversi ma anche molto meno
potente.
Ciao Valerio.

 ha scritto nel messaggio
news:rPI69.212940$Jj7.4...@news1.tin.it...

Torna utile, lo vedi che non sei un lurker ( o quella roba lì),
ma tornava utile anche la tua domanda e le risposte, ma tornava utile anche
la sola domanda.
Peccato che ho lasciato a casa il mio libro su SQL, volevo controllare la
sintassi e poi provarla sta' cosa.
Ciao. Grazie. Fabrizio.

 diversi ma anche molto meno potente.
Non è del tutto vero. Se ci pensi con il linguaggio T-SQL (quello
utilizzato da SQL Server) riesci poi a fare le stesse cose che fai
con Jet-SQL (quello utilizzato da Access). Ciò che cambia sono le
funzioni supportate e un po' (poco) la sintassi. Senza considerare
che T-SQL supporta delle 'cose' che Jet-SQL si sogna, Stored
Procedure e Trigger per citarne un paio...
Sul fatto poi che il dialetto T-SQL sia utilizzabile su DBMS diversi
penso che ci sarebbero diverse migliaia di persone che avrebbero
qualcosa da dirti... in un occhio! ;-)
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPVyQF8g6j/rIOLofEQKBfwCfVwuRHyOYeLLOV47bAVuJvCiyCSEAoOIq
CcG3tPs/AkCzxVdfGrQSVpOV
=3APX
-----END PGP SIGNATURE-----


L'ordinamento lo fai nella query che associ alla maschera; la stessa query
che ha il campo calcolato (e ordinato) con l'iif().
Il valore dell'iif() se è trasformato in stringa lo ritrasformi in numerico
con cint() (se deve essere intero); un problema potrebbe nascere se in
alcuni campi ci sono valori nulli, ma lo risolvi con la funzione nz().
Ricapitolando:
- query (da associare alla form) con campo calcolato/ordinato;
- il campo calcolato ha come origine la funzione:
    nomeCampoCalcolato:
cint(IIf(nz([Fd_Prz_Conf];0)>0;[Fd_Prz_Conf]/nz([Fd_Conf_Prod];0);nz([Fd_Prz
_Prod];0))/nz([Fd_QProd_Cont];0)*1000))
Ciao.
--
Sergio MAZZA


Ci credo sulla parola!!!!
Quello che volevo dire "con parole mie" era che J-SQL a grandi linee è più
integrato ad AC nel senso che anche chi come me utilizza sporadicamente AC
tra grafica e funzioni è facile da usare e immediato da capire, mentre T-SQL
ha funzioni e potenzialità più vicine all'SQL standard.
Ma una spiegazione seria sulle "vere" differenze tra i due SQL e a loro
volta con SQL ANSI sarebbe gradita.
Ciao Valerio.


Sergio, ma ti sei letto un centimetro del tread oltre a questo? :)
E' già risolto, il problema era che T-SQL per ADO non sopporta IIF, quindi
ovunque lo mettessi non funzionava. Era proprio il mio tentativo iniziale
quello di inserire IIF nella query. Matteo Palmieri mi ha trovato la
funzione CASE con cui sono riuscito a costruire la mia query.
Ciao Valerio.

 Ciao Valerio.
Ciao.
--
Sergio MAZZA

 funzione in un campo calcolato.
Mi spieghi che significa la tua affermazione?
Antonio

 Mi spieghi che significa la tua affermazione?
Scusa, con quel 'SQL' buttato lì intendevo dire 'T-SQL', ovvero il
dialetto SQL utilizzato da SQL Server. In tale dialetto non esiste la
funzione IIF e quindi non è utilizzabile da nessuna parte.
Mea culpa...
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: Cybercreations
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPWDMqcg6j/rIOLofEQKbLwCgnZSEr9/tDaaY0+T9yyqAaaF1V7sAn1gQ
+9gUR/eXescSeQy8veJyUmfB
=G1tl
-----END PGP SIGNATURE-----

 Mea culpa...
Ah, ecco...
ci doveva essere qualcosa di grosso che non andava...
Antonio
P.S.
Come disse il campione mondiale di stitichezza...
he ehe ehe he hehe