Newsgroup: it.comp.appl.access
Titolo: utilizzare funzione con parametri in query

Ciao a tutti, attraverso una gogolata sui post precedenti ho trovato un
paio di funzioni relative al calcolo della mediana.
Ecco io non ho mai usato delle funzioni nelle query, e siccome non mi
funzionano (mi viene chiesto il parametro della tabella di origine)
volevo capire il funzionamento delle funzioni all'interno delle query,
o viceversa attraverso i controlli calcolati.
posto la funzione giusto per esaustività del discorso:
Public Function fctnMedian(strTable As String, strField As String) As
Variant
'Code sample from Accessory 
http://www22.brinkster.com/accessory
    Dim dbs As DAO.Database, rst As DAO.Recordset, booEven As Boolean
'You must add a reference to the DAO Object Library too
    Set dbs = DBEngine(0)(0)
    'Set rst = dbs.OpenRecordset("SELECT * FROM " & strTable & " ORDER
BY " & strField)
    Set rst = dbs.OpenRecordset("SELECT * FROM Risposta1 ORDER BY " &
strField)
    If rst.EOF = False Then
        rst.MoveLast
        booEven = (rst.RecordCount Mod 2 = 0) 'Is there an even number
of records in the recordset?
        rst.PercentPosition = 50 'Rounds down if there is an even
number of records...
        fctnMedian = rst.Fields(strField)
        If booEven Then
            rst.MoveNext
            fctnMedian = (fctnMedian + rst.Fields(strField)) / 2 '...so
take the average of the this and the next value up
        End If
    End If
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
End Function
Se inserisco in una query : SELECT fctnMedian([risposta1],[risposta])
AS Espr1
FROM Risposta1;
mi chiede il parametro risposta1 (che è il nome della query)

ciroteo ha scritto:

che ahimè conteneva valori pari a zero e mi restituiva errore ...
sembra funzionare bene su valori > di zero.

 mi chiede il parametro risposta1 (che è il nome della query)
Passato così non è il nome di una Query che dovrebbe essere un
parametro fisso di tipo stringa, ma un riferimento ad un campo, che
ovviamente non trova:
Prova così, sperando che [risposta] sia un campo della Query...!
SELECT fctnMedian("risposta1";[risposta]) AS Espr1
FROM Risposta1;
Ho un dubbio sull'uso del ";" al posto della ","......
@Alex

mi chiede il parametro risposta1 (che è il nome della query)
Ciao Ciroteo,
dal codice della funzione si può comprendere che i parametri di ingresso
sono il nome della tabella/Query e il nome di un campo di essa.
quindi anche se ha poco senso la sintassi è questa.
----
SELECT fctnMedian("risposta1","risposta") AS Espr1
FROM Risposta1
----
ha poco senso perchè questa query rende tante righe quante sono quelle di
Resposta1 e tutte con lo stesso valore.
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

giorgio rancati ha scritto:

infatti questo è il problema che sto affrontando adesso.
se vuoi sorprendermi con una fantastica funzione mediana sai che sono
pronto a tutto!!!
:-)

:-)
ciao Ciroteo,
la funzione mi sembra Ok, è il modo in cui tu la utilizzi che non ha senso.
Dovresti prima chiarire cosa hai bisogno con un esempio di dati a
disposizione e il risultato che vuoi ottenere.
:-)


giorgio rancati ha scritto:

Scusa Giorgio, non avevo visto la risposta.
Sto utilizzando Google ed ho poca dimestichezza.
La funzione ora funziona, solo che resta il problema di come
generalizzarla, (vedi nuovo post sull'argomento) Purtroppo essendo
stata creata con due parametri rischio di non poterla utilizzare sempre
in tutte le query o report che voglio.
Grazie intanto x l'attenzione.