Discussione:
Query Somma progressiva
(troppo vecchio per rispondere)
Paolo Faverzani
2007-10-23 08:38:30 UTC
Permalink
Ho utilizzato l' esempio sul sito comune per calcolare
totali progressivi in una query e funziona a patto che
la query sia fissa. Io avrei la necessità di richiedere
il valore di un criterio.
ho utiizzato l' esempio che fa uso della funzione vba.

Option Compare Database
Option Explicit

Function TotProgrQry(KeyName As String, KeyValue, _
FieldNameToGet As String, NomeTabella As String)
Dim RS As DAO.Recordset
On Error GoTo Err_TotProgrQry
TotProgrQry = 0
Set RS = CurrentDb().OpenRecordset(NomeTabella, dbOpenDynaset)

' Trova il record corrente
Select Case RS.Fields(KeyName).Type
' La chiave è Numerica?
Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
DB_DOUBLE, DB_BYTE
RS.FindFirst "[" & KeyName & "] = " & KeyValue
' La chiave è di tipo Data/ora?
Case DB_DATE
RS.FindFirst "[" & KeyName & "] = #" & Format(KeyValue,
"mm/dd/yyyy") & "#"
' La chiave è di tipo Testo?
Case DB_TEXT
RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
Case Else
MsgBox "ERRORE: Tipo dati della chiave non valido!"
Exit Function
End Select

Do Until RS.BOF
TotProgrQry = TotProgrQry + RS(FieldNameToGet)
RS.MovePrevious
Loop
Set RS = Nothing
Bye_TotProgrQry:
Exit Function
Err_TotProgrQry:
Resume Bye_TotProgrQry
End Function

questa la query

SELECT [Incassi Apparecchi].[Data Incasso], [Incassi Apparecchi].[Codice
Identificativo], [Incassi Apparecchi].[Incasso Totale],
CDbl(TotProgrQry("ID",[ID],"Incasso Totale","Progressivo")) AS [Totale
Incassi], [Incassi Apparecchi].[Vincite Pagate],
CDbl(TotProgrQry("ID",[ID],"Vincite Pagate","Progressivo")) AS [Totale
Vincite], [Incassi Apparecchi].ID
FROM [Incassi Apparecchi]
WHERE ((([Incassi Apparecchi].[Codice Identificativo])="C00162453HO"))
ORDER BY [Incassi Apparecchi].[Data Incasso];

se modifico la query in questo modo non funziona più
WHERE ((([Incassi Apparecchi].[Codice Identificativo])=[Identificativo]))

si può oviare a questo inconveniente ?
in effetti si ottiene un errore sulla SET RS= ecc ecc
--
-----------------------------------------------------------------
Ciao
Paolo
-----------------------------------------------------------------
giorgio rancati
2007-10-24 13:30:01 UTC
Permalink
Post by Paolo Faverzani
Ho utilizzato l' esempio sul sito comune per calcolare
totali progressivi in una query e funziona a patto che
la query sia fissa. Io avrei la necessità di richiedere
il valore di un criterio.
ho utiizzato l' esempio che fa uso della funzione vba.
Option Compare Database
Option Explicit
Function TotProgrQry(KeyName As String, KeyValue, _
FieldNameToGet As String, NomeTabella As String)
Dim RS As DAO.Recordset
On Error GoTo Err_TotProgrQry
TotProgrQry = 0
Set RS = CurrentDb().OpenRecordset(NomeTabella, dbOpenDynaset)
[CUT]
Post by Paolo Faverzani
questa la query
SELECT [Incassi Apparecchi].[Data Incasso], [Incassi Apparecchi].[Codice
Identificativo], [Incassi Apparecchi].[Incasso Totale],
CDbl(TotProgrQry("ID",[ID],"Incasso Totale","Progressivo")) AS [Totale
Incassi], [Incassi Apparecchi].[Vincite Pagate],
CDbl(TotProgrQry("ID",[ID],"Vincite Pagate","Progressivo")) AS [Totale
Vincite], [Incassi Apparecchi].ID
FROM [Incassi Apparecchi]
WHERE ((([Incassi Apparecchi].[Codice Identificativo])="C00162453HO"))
ORDER BY [Incassi Apparecchi].[Data Incasso];
se modifico la query in questo modo non funziona più
WHERE ((([Incassi Apparecchi].[Codice Identificativo])=[Identificativo]))
si può oviare a questo inconveniente ?
in effetti si ottiene un errore sulla SET RS= ecc ecc
io calcolerei i saldi direttamente nella query, comunque puoi fare così:
----
...
...
Dim RS As DAO.Recordset
Dim Qdf As DAO.QueryDef
On Error GoTo Err_TotProgrQry
TotProgrQry = 0
Set Qdf=CurrentDb.QueryDefs(NomeTabella)
Qdf.Parameters("[Identificativo]")="C00162453HO"
Set RS = Qdf.OpenRecordset(dbOpenDynaset)
...
...
ecc ecc
----
dove NomeTabella è in realtà il nome della tua query parametrica.
Eventualmete puoi passare alla funzione anche il parametro.

Ciao
--
Giorgio Rancati
[Office Access MVP]
Paolo Faverzani
2007-10-24 14:30:52 UTC
Permalink
Post by Paolo Faverzani
Post by Paolo Faverzani
Ho utilizzato l' esempio sul sito comune per calcolare
totali progressivi in una query e funziona a patto che
la query sia fissa. Io avrei la necessità di richiedere
il valore di un criterio.
ho utiizzato l' esempio che fa uso della funzione vba.
----
...
...
Dim RS As DAO.Recordset
Dim Qdf As DAO.QueryDef
On Error GoTo Err_TotProgrQry
TotProgrQry = 0
Set Qdf=CurrentDb.QueryDefs(NomeTabella)
Qdf.Parameters("[Identificativo]")="C00162453HO"
Set RS = Qdf.OpenRecordset(dbOpenDynaset)
...
...
ecc ecc
----
dove NomeTabella è in realtà il nome della tua query parametrica.
Eventualmete puoi passare alla funzione anche il parametro.
Ciao
Ciao Giorgio e grazie.

Ho risolto inserendo nel campo criterio
della query una funzione vba che mi passa
il codice in una variabile globale dove ho
precedentemente memorizzato il codice
da filtrare.

WHERE ((([Incassi Apparecchi].[Codice Identificativo])=getid()))

Option Compare Database
Option Explicit

Function getid() As String
getid = Identificativo_p
End Function

Identificativo_p è la variabile publica
dove ho memorizzato il codice da filtrare.
--
-----------------------------------------------------------------
Ciao
Paolo
-----------------------------------------------------------------
Continua a leggere su narkive:
Loading...