Newsgroup: it.comp.appl.access
Titolo: Chiamata IIF con query

Ciao a tutto il NG, sto sviluppando un report con una query e ho raggiunto il limite di lunghezza
del numero deicaratteri. 
Per risolvere il problema ho pensato che, anzichè inserire il codice di una sottoquery  direttamente
nel codice della query potevo prima creare e salvare la sottoquery nello spazio dedicato agli
oggetti query e poi richiamarla nella query vera e propria. 
Per prima cosa ho creato questa sottoquery chiamandola QueryDetailRptRealOverdue:
SELECT Fatture.Scadenza FROM Fatture GROUP BY Fatture.Scadenza, Fatture.DataSituazione,
Fatture.CodiceCliente, Fatture.NumeroFattura HAVING (((Fatture.Scadenza)=[Scadenza]) AND
((Fatture.DataSituazione)=g()) AND ((Fatture.CodiceCliente)=[codicecliente]) AND
((Fatture.NumeroFattura)=[NumeroFattura]));
, l'ho salvata e poi ho creato la query che ho collegato al report. Quest'ultima contiente il campo
che calcola un numero di giorni in base a certe condizioni. Proprio in questo campo bisogna
richiamare la sottoquery. Il codice che ho usato per estrarre il dato è il seguente: 
A: IIf(Not
IsNull([DATACONTABILE]);[DataContabile]-[Scadenza];IIf(IsNull(["QueryDetailRptRealOverdue"]);0;G()-[scadenza]))
E' qui che si verifica il problema, perchè la sottoquery QueryDetailRptRealOverdue che vorrei
chiamare nella seconda IIF non viene chiamata. Con il codice così com'è il risultato non sarà mai
null perchè viene sempre restituita la stringa "QueryDetailRptRealOverdue". Dove sto sbagliando ? Ho
fatto qualche tentativo ma proprio non sono riuscito a chiamare la sottoquery correttamente per
ottenere il risultato che permette al programma di capire se restituire 0 o lanciare il calcolo
G()-[scadenza].
Qualcuno mi può aiutare ?
grazie a tutti
Stay alive !
Pio Pio 

 ha scritto nel messaggio
news:u64vi01fmr9lblldv...@4ax.com...

Ciao Pio Pio,
non ho ben capito cosa devi fare però per quel poco che credo di aver
intuito
penso che per risolvere il tuo problema tu debba fare una funzione in VBA a
cui passi i parametri necessari per l'esecuzione della sottoquery, che mi
pare siano la Scadenza, il numero di fattura e il codice del cliente e che
come risultato ritorni la data di scadenza della fattura oppure la stringa
vuota.
Tipo questa che scrivo qua sotto ( non garantisco che sia priva di errori,
l'ho buttata giù di getto...)
Function GetDataScadenza(scadenza as date, numFatt as integer, codCliente as
string) as string
 dim  qdef as dao.querydef
 dim rs as dao.recordset
set qdef = CurrentDB.Querydefs("QueryDetailRptRealOverdue")
qdef.parameters(0) = scadenza
qdef.parameters(1) = numFatt
qdef.parameters(2) = codCliente
set rs = qdef.execute
if not rs.eof then
    GetDataScadenza = rs.Fields(0)
else
    GetDataScadenza = ""
end if
rs.close
set rs = nothing
set qdef = nothing
end function
a questo punto  una volta verificato che la funzione restituisce quello che
vuoi la tua iif diventerà:
IIf(Not
IsNull([DATACONTABILE]);[DataContabile]-[Scadenza];IIf(IsNull(GetDataScadenz
a([Scadenza];[NumFattura];[CodCliente]);0;G()-[scadenza]))
PS: Forse la query potrebbe essere riscritta usando meno paramtri, in fondo
dvrebbe bastare conoscere il numero della fattura per sapere la sua
scadenza, ma non avendo tutti i dettagli  non insisto...
Spero di esserti stata d'aiuto
Saluti
Cinzia

 non ho ben capito cosa devi fare perň per quel poco che credo di aver
