| Queries |
| 2.11 Come si può ottenere il totale progressivo di un campo in una query? |
| Roberto |
In un modulo del database memorizzare la seguente funzione:
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
Nella query crea un campo calcolato nel modo seguente:
Totale: CDbl(TotProgrQry("IDMovimento";[IDMovimento];"Quantità";"Query1"))
dove IDMovimento è la chiave primaria della tabella che contiene i dati, Quantità è il nome del campo di cui si vuole il totale progressivo e Query1 è il nome della query.La funzione di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se usi una versione di Access successiva ad Access 97, devi aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Library. Download: |