Paolo Faverzani
2007-10-23 08:38:30 UTC
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
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
-----------------------------------------------------------------
-----------------------------------------------------------------
Ciao
Paolo
-----------------------------------------------------------------