Newsgroup: it.comp.appl.access
Titolo: Funzione richiamata da una query ... errore :(

E' da 2 giorni che sto combattendo con questo problema ma non trovo
vie d'uscita (uso Access 2000)..
In pratica ho una query di selezione in cui uno dei campi e' un campo
calcolato (su campi presenti nella query). Semplificando posso dire
che la query mi ritorna questi campi: A, B, C, f(A,B,C).
Dove A, B e C sono dei campi normali, che passo come parametri alla
mia funzione f.
La f() l'ho messa in un modulo.
Ora, il problema e' che quando lancio la query, mi si pianta con un
errore "tipo non corrispondente" sulla riga:
"Set rcdst = .OpenRecordset(dbOpenSnapshot)" della mia funzione (che
in collo in fondo).
Qualcuno sa darmi una mano?
Se servono altre info saro' ben lieto di darle.
Grazie 1000,
Luca
Segue funzione:
Function DeltaF(data_inizio As String, data_fine As String, IDCond As
Integer) As Integer
    Dim query As QueryDef
    Dim querystring As String
    Dim dbs As Database
    Dim rcdst As Recordset
    Dim delta As Integer
 
    Set dbs = CurrentDb
 
    delta = 0
    querystring = "SELECT Delta.IDCondomino, Delta.DeltaF,
Delta.DeltaC " & _
                  "FROM delta " & _
                  "WHERE (((Delta.IDCondomino)=" & IDCond & ") AND
((Delta.DataDelta)>=#" & data_inizio & "# And (Delta.DataDelta)<=#" &
data_fine & "#));"
    Set query = dbs.CreateQueryDef("", querystring)
 
    With query
        Set rcdst = .OpenRecordset(dbOpenSnapshot)
          If Not rcdst.EOF Then
            With rcdst
                Do While Not .EOF
                    delta = delta + rcdst.Fields(1)
                    .MoveNext
                Loop
            End With
         End If
       rcdst.Close
    End With
 
    DeltaF = delta
 
End Function

 ha scritto nel messaggio
news:3cda8889...@news.iperbole.bologna.it...

Vado per tentativi ho notato due cose inerenti l'errore generato, 1 le date
che passi alla funzione sono di tipo string (forse dovresti metterle di tipo
data), 2 l'istruzione Set rcdst = .OpenRecordset(dbOpenSnapshot) secondo me
dovrebbe essere cosě: Set rcdst = .OpenRecordse() o al limite cosě: Set
rcdst = .OpenRecordset( , dbOpenSnapshot)
perchč non l'hai fatta cosě la funzione:
 Function DeltaF(data_inizio As String, data_fine As String, IDCond As
 Integer) As Integer
     Dim querystring As String
     Dim dbs As Database
     Dim rcdst As Recordset
     Dim delta As Integer
     Set dbs = CurrentDb
     delta = 0
     querystring = "SELECT Delta.IDCondomino, Delta.DeltaF,
 Delta.DeltaC " & _
                   "FROM delta " & _
                   "WHERE (((Delta.IDCondomino)=" & IDCond & ") AND
 ((Delta.DataDelta)>=#" & data_inizio & "# And (Delta.DataDelta)<=#" &
 data_fine & "#));"
     Set rcdst = dbs.OpenRecordset(querystring, dbOpenSnapshot)
     With rcdst
                 Do While Not .EOF
                     delta = delta + .Fields(1)
                     .MoveNext
                 Loop
                  .Close
     End With
     DeltaF = delta
     set rcdst = nothing
 End Function
Ciao Roberto - Syd

rcdst = .OpenRecordset( , dbOpenSnapshot)
Grazie per l'interessamento! Ora almeno mi pare di avere una spalla su
cui piangere :]
Purtroppo pero' anche mettendo il tipo di dato a "date" anziche'
"string" mi da lo stesso errore, e lo stesso errore lo ottengo usando
la tua funzione :(((
L'unica cosa che ho notato e' che se assegno a rcdst il tipo variant
anziche' recordset, non mi da piu' errore, pero' non mi calcola quello
che voglio, cioe' non entra mai dentro al "do" come se il recordset
fosse sempre vuoto.
Ho controllato la query ed e' corretta: se anziche' crearla
temporanea, la creo veramente e la lancio e' corretta e mi ritorna
quello che gli chiedo.
ARGH!!!
Se vuoi e se posso posso mandarti anche le 2-3 tabelle e query che sto
usando ... 
Comunque grazie!
Luca



Prova a mandare quello che serve per provare.
Ciao Roberto - Syd