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:
 
  TotProgressivoQuery.zip (21Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.