Newsgroup: it.comp.appl.access
Titolo: Parametri Query da Function

Se nei criteri di una Query metto:
870 Or 871 Or 875
la Query mi estrae i record relativi ai tre parametri. Se perï¿œ l'identica
stringa ï¿œ passata da un'apposita Function, la Query non funziona, o per
meglio dire funziona solo se passa un unico parametro, ad esempio
870
ovvero sembra non digerire l'operatore Or se questo viene passato in
stringa dalla Function.
Dove sbaglio?
Giï¿œ chiedo scusa se il questito si rivelerï¿œ banale ...
-- 
E.Delacroix
_  _
o  o;
@--

 Dove sbaglio?
Da nessuna parte. ;-)
Di solito il problema si risolve con creare tutta la stringa SQL
nel codice e poi assegnare la stringa alla propriet� SQL di una
query salvata.
Se non vuoi usare la soluzione standard, un altra via sarebbe
l'uso della funzione Eval(). Cio�, la tua funzione deve ritornare
una stringa divisa di comma:
870, 871, 875
e nella query crei un campo calcolato:
Eval([NomeCampo] & ' In(' & NomeFunzione() & ')')
con il criterio:
True
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 stringa dalla Function.
... Non capisco.
Ogni query e' in realta' una stringa del tipo
"select " & qualcosa & " where " & condizioni
Supponiamo che la tua sia :
"select * from Tabella where tabella.numero =  " & X
dove X = "870 or 871 or 875;" e' il "pezzo" di query che
gli passa la funzione.
"dovrebbe" funzionare ! Perche' a te non funziona ?
In che modo gli passi quella stringa ?

 stringa dalla Function.
... Non capisco.
Ogni query e' in realta' una stringa del tipo
"select " & qualcosa & " where " & condizioni
Supponiamo che la tua sia :
"select * from Tabella where tabella.numero =  " & X
dove X = "870 or 871 or 875;" e' il "pezzo" di query che
gli passa la funzione.
"dovrebbe" funzionare ! Perche' a te non funziona ?
In che modo gli passi quella stringa ?
-----------------------
Perch� Or � un operatore e non una stringa di testo.
Ciao, Carlo

 wrote:
'> Perchè Or è un operatore e non una stringa di testo.
'Certo,
'ma tu la query la puoi scrivere ad esempio benissimo cosi' :
public sun tasto_click()
  dim X as string
  dim Qs as string
  X = "reddito = 10.000 or reddito = 5.000"
  Qs = Q(X)
end sub
public function Q(X) as string
   dim RC as new adodb.recordset
   rc.open "select * from anagrafica where " & X
   if rc.eof and rc.bof then
      Q = ""
   else
       Q = "select * from anagrafica where " & X
   endif
end function
' ed in questo modo funziona.
' O mi sfugge qualcosa ?

' O mi sfugge qualcosa ?
se scrivi 
SELECT Qualcosa FROM Qualcosa WHERE X=800 OR 700 OR 1200
non funzioner� mai......
SELECT Qualcosa FROM Qualcosa WHERE X=800 OR X=700 OR X=1200
cos� funziona......
-- 

 
 Se ho capito bene dovrei far costruire alla Funcion Crea_Stringa()  tutta
la stringa SQL (che per inciso ï¿œ quella qui di sotto, funzionante) e
sostituirla a quella generica di una Query salvata tramite chiamata della
Function?
Cioï¿œ cancello l'SQL ed al suo posto metto
 =Crea_Stringa()
?
SELECT Mid([F1],11,1) AS Dir, CDate(Mid([F1],16,2) & "/" & Mid([F1],14,2) &
"/" & Mid([f1],12,2)) AS Data, Mid([F1],18,2) & "." & Mid([F1],20,2) & "."
& Mid([F1],22,2) AS Ora,
Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))) AS Tessera
FROM MOVIMENTI
WHERE (((CDate(Mid([F1],16,2) & "/" & Mid([F1],14,2) & "/" &
Mid([f1],12,2))) Between [Forms].[Gettoni Polo].[Calendar11].[Value] And
[Forms].[Gettoni Polo].[Calendar12].[Value]) AND
((Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=750 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=751 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=752 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=753 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=754 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=755 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=756 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=757 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=758 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=759 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=815 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=816 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=850 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=851 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=852 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=853 Or
(Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=854) AND
((Left([F1],2))="05" Or (Left([F1],2))="07" Or (Left([F1],2))="06" Or
(Left([F1],2))="08"))
ORDER BY Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))),
Mid([f1],14,2) & Mid([f1],16,2),
Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6)));


 così funziona......
Si si si ! :D
Certo ... Errore di distrazione fu. Ma il concetto non cambia.

 (Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))=854)
con
((Val(IIf(Left([F1],2)="05",Mid([F1],32,6),Mid([F1],44,6))))
 In(750, 751, 752, 753, ecc.))
Cos� basta riempire i valori nelle parentesi dell'operatore In()
invece di 17 OR.


 invece di 17 OR.
Così ho fatto. L'operatore "In" neanche lo conoscevo (sono un utente Access
maccheronico) ... debbo dire però che la virgola si comporta come l' "Or",
ovvero se scrivo nei criteri:
In (750,751, ..., 846) 
la Query funziona, se passo la stessa proposizione tramite una funzione, la
Query non funziona; per contro funziona se il numero è uno solo.
Bisogna quindi passare tramite:
Currentdb.QueryDefs("NomeDellaTuaQuery").SQL = strSQL 
tutto l'SQL .... misteri!
Grazie ancora. 
