Newsgroup: it.comp.appl.access
Titolo: Sostituire DSum

DB composto per ora da circa 5000 record che cresceranno con una media 
di circa 1000 al mese.
 
In una form ho 3 sottomaschere che mi visualizzano 3 query di 12 righe 
formate da mese-importo-totale progressivo.
 
Oltre a questre ne esistono altre 2 che sono il risultato delle 
differenza (tab3-tab1 e tab3-tab2)
 
I totali progressivi sono ottenuti con DSum che già rallentano un po'... 
lo so.
 
In locale può andare ... ma mettendo l'applicativo in una rete i tempi 
di attesa soprattutto per le ultime due form sono inaccettabili.
 
Come posso aggirare l'ostacolo ed eventualmente evitare i dsum?
Grazie
 
 
 

Zut explained on 29-06-15 :

Usa =Sum([NomeCampo]) nel Form Footer per sommare
i campi della scheda.
 
Bruno

 i campi della scheda.
 
Il problema è che mi serve un totale progressivo su ogni riga


se togli il dsum le maschere si aprono velocemente?
 
BFS

 Il problema è che mi serve un totale progressivo su ogni riga
 
Metti una TextBox non associata e, nell'Evento Format del Corpo, scrivi la somma progressiva...!
 
Me.NomeTxtBox.Value=Me.NomeTxtBox.Value + Me.NomeControllo.Value
 
Ovviamente vedrai tu bene quando serve AZZERARLA, se hai un Gruppo, sarà su Cambio Gruppo...
 
@Alex

@Alex explained :

Mettere il totale progressivo su ogni riga di Report
è un gioco da ragazzi.
Mentre metterlo su una riga di Form io non ci sono mai riuscito
in maniera soddisfacente.
 
Non ti stai confondendo? anche perché l'evento OnFormat nelle
Form io non lo vedo...
 
Bruno


Hai ragione... ho confuso con i Report.
 
Io feci un Demo per i SubTotali nelle Maschere... una robaccia ma tant'è...
 
http://forum.masterdrive.it/access-79/visualizzare-elenco-subtotali-in-maschera-continua-70895/
 
 
Saluti
@Alex

@Alex formulated on Monday :

Io credo che l'unica cosa decente, che però comporta dei sacrifici,
sia la seguente:
 
1 - inserire nella tabella alla quale è legata la scheda un campo
AutoNumber o comunque a valori unici (se già non esiste)
 
2 - creare una query (la debbo cercare fra i miei appunti, che al
momento non la ricordo bene) che definisce un totale riga per riga
come somma dei valori relativi ai record che hanno
un AutoNumber <= a quello corrente
 
3 - basare la scheda su detta query
 
4 - i record che appariranno sulla scheda saranno ordinati in base
all'AutoNumber sopra indicato.
Per esempio un elenco di fatture viene di solito ordinato nella scheda
per data di emissione ovvero per nome del cliente, con la procedura
sopra delineata ciò non sarà più possibile.
 
Bruno


 
Sia mai...
 
-- 
Ciao! :)
Maurizio

 se togli il dsum le maschere si aprono velocemente?
 
Sì.
E' una struttura a schede con varie sottomaschere.
E' tutte si aprono regolarmente e velocemente.
 
 

 sopra delineata ciò non sarà più possibile.
 
Scusa ma non credo di aver capito...
 
Io ho una query, frutto di altre query precedenti che mi genera 12 righe 
(da gennaio a dicembre) con a fianco dei valori
 
Gennaio -------N° ore ---- N° ore x 35 euro ------- tot_gennaio (orex35)
Febbraio ------N° ore ---- N° ore x 35 euro ------- tot_genn+tot_febb
...
 
Non riesco a capire come il metodo che suggerisci mi risolverebbe il dsum

 Non riesco a capire come il metodo che suggerisci mi risolverebbe il dsum
 
Ho provato comunque a fare così
www.donkarl.com/it/FAQ/FAQ3TabQuery.htm#3.11
 
 
considerando che nella query precedente come numero univoco ho il numero 
del mese (da 1 a 12) che posso sfruttare:
 
In una colonna della query ho inserito
 
Espr1: (Select Count (*) FROM [query_precedente] as Temp WHERE 
[Temp].[numero] < [query_precedente].[numero])+1
 
Ma quando provo a lanciare la query non mi dà nessun segno di vita.

 sopra delineata ciò non sarà più possibile.
 
Scusa ma non credo di aver capito...
 
Io ho una query, frutto di altre query precedenti che mi genera 12 righe 
(da gennaio a dicembre) con a fianco dei valori
 
Gennaio -------N° ore ---- N° ore x 35 euro ------- tot_gennaio (orex35)
Febbraio ------N° ore ---- N° ore x 35 euro ------- tot_genn+tot_febb
...
Un eventualmente numero univoco ce l'ho (il n_mese da 1 a 12)



la butto li...
 
se il totale ore di gennaio febbraio etc non varia mai una volta finito 
il mese potresti storicizzarti i totali di ogni mese in una tabella in 
modo tale da non dover ogni volta fare dei dsum inutili.
 
faresti il dsum solo del mese in corso e con una query di unione fondi i 
risultati con le righe con i totali storicizzati.
 
oppure passare a un altro database per i dati, tipo sqlserver
 
ciao
BFS
 
 
 

 Ma quando provo a lanciare la query non mi dà nessun segno di vita.
 
Ho ritrovato i miei appunti, che sono ordinati a cdc...
 
Hai una tabella T6 coi seguenti campi:
Mese-Competenza
PartitaIVA
Comm
Media
che in una Form ti appare ordinata per data.
 
Alla tabella aggiungi un campo:
n ---> AutoNumber
 
Crea una query con la griglia QBE, aggiungi la tabella T6 due volte;
ti appariranno: T6 e T6_1
JOIN: n di T6 con n di T6_1
da T6 scegli (Show) i 4 campi originali
 
crea un quinto campo:
TotalePrograssivo: (SELECT SUM([Comm]) From T6 WHERE T6.n <=T6_1.n)
 
Controlla in View che TotaleProgressivo funzioni a dovere
e poni questa nuova query nel Record Source della tua Form
alla quale aggiungerai il controllo TotaleProgressivo.
I dati ti appariranno ordinati secondo l'AutoNumber.
 
Ritengo che tutto ciò si applicabile anche alla tua
complicata query, però senza quella (e tutte le tabelle)
a portata di mano non mi è possibile asserirlo.
 
Bruno

 a portata di mano non mi è possibile asserirlo.
 
Ti ringrazio per il suggerimento!!
Funzionare funziona anche se non mi sembra di notare grossi 
miglioramenti di velocità. Non vorrei che dipendesse da altro.
 
A livello di velocità di esecuzione è meglio una sola query con tutti i 
campi calcolati che mi servono visualizzati poi in 3 sottomaschere o una 
query distinta per ogni sottomaschera?
 

 oppure passare a un altro database per i dati, tipo sqlserver
 
Grazie del suggeriemnto ...
Provo a riflettere ...
 

 a portata di mano non mi è possibile asserirlo.
 
Ti ringrazio per il suggerimento!!
Funzionare funziona. Mi è bastato aggiungere nelle mie query  una copia 
della query origine e sostituire i Dsum con il tuo select.
 
Funziona ... ma non mi sembra di notare grossi vantaggi in velocità. Non 
vorrei che dipendesse da altro.
 
A livello di velocità di esecuzione è meglio una sola query con tutti i 
campi calcolati che servono ... visualizzati poi in 3 sottomaschere 
diverse o una query distinta (più più piccola) per ogni sottomaschera?
 

 query distinta (più più piccola) per ogni sottomaschera?
 
Tu parli solo di query, come fossero l'ossatura più importante
del database. Ma tutte queste query da dove prendono i dati?
non è che vanno tutte a pescare in una tabella con 2000 record
e 400 campi per record... o giù di lì?
 
L'efficienza è funzione strettamente correlata con
la struttura del database, la quale struttura alla fin fine
è la cosa sicuramente più importante e complicata in un database
relazionale.
 
Comunque con informazioni parziali e disaggregate (inevitabilmente
tali per non avere il database sotto mano) io non so fare
considerazioni attendibili.
 
Bruno

 
 
Il db è formato praticamente da una tab principale formata da un migliaio scarso di record al mese (ora sono 4 mila) e ogni record ha 14 campi.
E' praticamente una tabella unica perchè i dati mi arrivano così da 35 fogli di excell ogni mese. E così deve essere ... purtroppo.
Io li carico nel mio tabellone e li elaboro attraverso un numero x di query.

lucian...@orienta2020.it
 brought next idea :

Immaginavo fosse una tabella unica... però è di dimensioni normali
(14 campi per record non sono un'esagerazione e 4000 record per
Access sono un'inezia).
 
Non so che dirti.
Bruno

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........


 
il risultato della query è :
 
 
mese      ore   imp.     progr.
gennaio   30   1000      1000
febbraio  18     500	1500
marzo      22    1000    2500
 
cosa dovrei mettere in tabella?

Il giorno Thu 02 Jul 2015 01:00:38p, *Zut* inviava su
it.comp.appl.access il messaggio news:mn35km$c62$
1...@speranza.aioe.org
.
Vediamo cosa scrisse: 

ohibò... metti i campi che ti servono in modo che quando vai a generare il 
report li hai lì belli pronti e già calcolcati, o al limite elabori pochi 
record, uno per mese, invede di tutti i dettagli
 
se non ho capito *io* cosa ti serve, allora ritiro tutto :)



 
stessa soluzione proposta da me-....storicizzare i totali visto che non 
ha senso ricalcolarli ogni volta
ma forse non abbiamo capito in due :-)
 
BFS

BFS brought next idea :

Secondo me - mi sbaglerò! - non avete capito in TRE.
Le operazioni che si debbono compiere sul database appaiono,
a quanto riferisce l'OP, molto semplici.
Ma sulle modalità di esecuzione di tali operazioni e più in
generale sulla struttura del database che cosa si può
arguire a distanza? senza avere il database a portata di mano...
 
L'OP dovrebbe condividere il database, dopodiché chi vuole
può esaminarlo, testarne eventuali modifiche ed esporre
più solide considerazioni.
 
Bruno

 
 
"parli come un libro stampato" ;)


 "parli come un libro stampato" ;)
 
Grazie, molto gentile, grazie!
Baci, abbracci e sangiovese di Romagna se passi dalle mie parti.
 
Bruno