Funzione DSum con le date

venerdì 16 dicembre 2005 - 11.21

Leroybrown Profilo | Newbie

Salve a tutti,
sono nuovo del forum e, in aggiunta, sono pure un principiante in access.
Vi sottopongo un problema che mi impedisce di creare una query di selezione.
Disponendo di una tabella "Giornale" contenente i seguenti campi "ID; Data; Importo; Descrizione" tento di creare una query contenente un campo che calcola il saldo progressivo riga per riga.
Nella query ho dato al campo "Data" l'etichetta "QData" e al campo "ID" l'etichetta "QID"
Utilizzo la funzione Dsum("Importo";"Giornale";"[Data] <=" & [QData])... inutile dire che non mi calcola nulla...
se invece provo ad utilizzare il seguente criterio funziona
Dsum("Importo";"Giornale";"[ID] <=" & [QID])

Mi affido a qulache anima pia...
grazie

franco_44 Profilo | Newbie

Guarda qui ci dovrebbe essere la soluzione per te
Ciao
http://support.microsoft.com/?kbid=290136

franco

franco_44 Profilo | Newbie

Sarei riuscito a creare un esempio funzionante ma non so come fare a postartelo nel forum,
potrebbe servire anche a qualcun'altro.
Se poi riesci a darmi la tua e-mail magari te lo posso inviare
Ciao

franco

Leroybrown Profilo | Newbie

Ti ringrazio fin d'ora Franco 44.. molto gentile.
puoi inviarlo all'e-mail formata dal mio nome utente più @virgilio.it

Ciao

Leroybrown Profilo | Newbie

Eccomi di nuovo qua... nonostante l'aiuto del gentilissimo Franco non riesco a risolvere il problema..

Franco, la tua funzione TotProgrQry è perfetta, ma se la importo nel mio database inizio ad avere problemi.
sul codice "Dim RS As DAO.Recordset", ricevo la seguente segnalazione:
"Tipo definito dall'utente non definito"

Forse Access non vuole più la definizione DAO.. io ho provato ad utilizzare ADODB.Recordset, ma poi ho problemi nell'utilizzo del metodo Findfirst e nello stessa instruzione "Set RS = CurrentDb().OpenRecordset(NomeTabella, dbOpenDynaset)"..

Ancora grazie a chi mi può aiutare, e se qualcuno è a conoscenza di una guida online al linguaggio VBasic ben venga.. mi sembra di aver capito che non si va lontano in Access senza un pò di codice in VB.


franco_44 Profilo | Newbie

Ciao Leroybrown
ho visto il tuo post sul forum e l'errore che ti da; ciò è legato alla libreria DAO 3,6 mancante. Per ovviare prova a fare così: apri il Database e su maschere clicca sull'icona Codice sulla barra in alto poi su Strumenti e poi su Riferimenti; nell'elenco che ti appare vai ad attivare la libreria "Micrsoft DAO 3,6 Object Library".
Io ho provato a disattivarla nel mio e mi ha dato lo stesso errore che segnali tu; l'ho riattivata e tutto funziona regolarmente.
Fammi sapere se funziona
Ciao e di nuovo Buone Feste


franco

Leroybrown Profilo | Newbie

Buongiorno a tutti, e ovviamente un grazie ancora a Franco!
Seguendo le tue indicazioni sono riuscito ad importare il tuo codice nel mio database e tutto funziona.
Probabilmente, però, non sono riuscito a rendere chiaro all'inizio quello che volevo fare, così ora sono ancora al punto di partenza.
Allora...
ho una tabella contenente delle operazioni identificate da una chiave univoca numerica. La tabella è ordinata innanzitutto per data di registrazione, successivamente per chiave...
In questo modo posso inserire successivamente un'operazione con una data già superata da altre operazioni, ottenendo una tabella così:
ID DATA IMPORTO
1 01/01/01 +5
2 02/01/01 +7
4 02/01/01 -2
3 05/01/01 +4
5 06/01/01 -3
....

La tua funzione, Franco, funziona benissimo quando gli passo 1 criterio, a prescindere che sia l'ID o la DATA...
però dovrei riuscire a passare entrambi.
Io pensavo di fare così:
1- aggiungere alla definizione della funzione il parametro KeyData
2- all'interno del ciclo di somma aggiungere una IF Rs.Data <= KeyData then.....

Però non gli piace molto "Rs.Data"... come mai???

Grazie ancora
rinnovo gli auguri di buone feste...

franco_44 Profilo | Newbie

Ciao Leroybrown
se ho capito bene tu vorresti inserire dei movimenti con date antecedenti all'ultima inserita e vorresti che la tabella e la query fossero elencate secondo la data in modo crescente indipendentemente dal numero relativo alla Key. Se è cosi apri la tabella in modalità inserimento posizionati nel campo data e con la freccia seleziona l'ordine crescente ; esci e salva.
Per la query nel campo data e nel campo Key metti ordinamento crescente (il campo data deve essere prima del campo Key).
Per la maschera in origine record creati una query e metti al primo posto il campo data, poi il campo Key quindi gli altri
metti i primi 2 in ordine crescente.
Quando vai ad inserire un nuovo dato anche se è con data precedente a quelle già inserite esso viene ordinato secondo l'ordine di data. Se vuoi che ti appaia subito nella maschera devi fare un Refresh
Se ci sono problemi facci sapere
Ciao

franco

Leroybrown Profilo | Newbie

Ciao Franco,
ok, sono riuscito a rendere chiaro il problema. Con gli ordinamenti nella tabella e con la maschera input sono già a posto.
E' il progressivo che mi preoccupa... infatti, col codice che mi hai passato ma anche con i miei tentativi attraverso la funzione DSUM, ottengo il seguente risultato:
ID DATA IMPORTO PROGR. tramite ID PROGR. tramite Data
1 01/01/01 +5 +5 +5
2 02/01/01 +7 +12 +10
4 02/01/01 -2 +14 +10
3 05/01/01 +4 +16 +14
5 06/01/01 -3 +11 +11

A mio parere il ciclo di somma nella funzione dovrebbe contenere un if...
Grazie ancora

franco_44 Profilo | Newbie

Ciao
Scusa ma non ho capito quale dovrebbe essere il compito della funzione if.. Tale funzione è una condizione che tu indichi secondo ciò che vuoi tu. Secondo me non è possibile vedere contemporaneamente 2 totali progressivi diversi nella stessa query dando per ognuno una condizione diversa. Se invece vuoi avere la possibilità di vedere,alternativamente il totale progressivo, ordinato secondo le tue esigenze, o per l'ID numerica o per la Data progressiva, lo puoi fare ordinando alternativamente i 2 campi interessati. Se è questo il tuo scopo e lo vuoi vedere anche nella Maschera puoi farlo benissimo mettendo dando come origine la Query e mettendo tutti i campi della stessa .
Se non ho capito bene fammi pure sapere senza problemi; al limite se mi mandi un esempio di ciò che hai fatto posso vedere quel che posso fare.
Ciao

franco

Leroybrown Profilo | Newbie

Ciao,
se creo un totale progressivo che considera un solo parametro non ottengo un risultato valido sempre.
- considerando l'ID: ho problemi quando considero un inserimento successivo. L'ID alto mi include nella somma progressiva anche le date successive (ma con ID più basso)
- considerando la data: ho problemi quando considero date che hanno più record. Non riesco ad avere un progressivo diverso per ogni record di una stessa data..

è per questo che io pensavo ad una if..
Pensavo di calcolare il progressivo utilizzando l'ID, però nello stesso tempo devo selezionare tra tutti i record con ID precedente a quello considerato quelli con data inferiore o uguale a quella del record corrente...
Che ne pensi?


Ciao


Leroybrown Profilo | Newbie

Aggiornamento...
sarei riuscito a modificare la funzione in modo che consideri correttamente tutte le casistiche, solo che mi sembra ci sia un problema nella tabella.
Io credevo che access considerasse i record del db così come li avevo ordinati e come appaiono se apro la tabella (Data, ID). Invece sembra che non acceda ad eventuali record inseriti dopo (quindi con ID alto) ma ordinati in mezzo agli altri (perchè con data precedente all'ultima inserita)...
Vuol dire che, benchè io possa ordinare i record di una tabella come meglio credo, access continua ad accedervi utilizzando l'ordine in cui sono stati inseriti?


grazie

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5