Newsgroup: it.comp.appl.access
Titolo: prestazioni cristal report e report access

ho confrontato un programma credo realizzato in vb che usa cristal report e 
apre un report che fà in teoria gli stessi calcoli del mio report in access 
ma quel report ci mette molto meno ad aprirsi in anteprima del mio
nel codice del report vengono elencati i prodotti e per ogni rpodtto vengono 
eseguiti dei dsum per ottenere la giacenza
che voi sapppiate esiste una forte differenza di prestazioni da report 
access a cristal report, oppure devo pensare che i calcoli non sono gli 
stessi?
N.B. non posso verificare che calcoli vengono eseguiti nel report cristal 
report ma solo vedere l'anteprima di stampa
Grazie. 

"Nicolas" <

Le prestazioni di un Report dipendono essenzialmente da quello che c'è
"dietro": origine dati SQL, campi calcolati.
Se sta roba è sviluppata dignitosamente le performances saranno istantanee
(Access, Crystal Report o qualunque altro GOODROOM tu utilizzi), in caso
contrario faranno invariabilmente schifo.
Ora, possibile che dopo tanti anni d'esperienza (Marco Tosto, Simba883, etc)
tu ancora non sappia che una funzione di aggregazione di Domini come DSUM,
applicata a tutti i records di un elenco ("prodotti" nel caso tuo) rallenta
mostruosamente le performances?
Devi ottenere le giacenze a livello di origine dati SQL del Report, con una
sola lettura, come senz'altro opererà il "Crystal Report" che hai visto.
Ciao, Oscar

 Ciao, Oscar
riporto qui sotto il codice in modo che tu possa segnalarmi eventuali motivi 
di rallentamento
e grazie in anticipo in ogni caso.
cosa intendi con questa frase?
Devi ottenere le giacenze a livello di origine dati SQL del Report
****** MIO CODE ***********
    Dim ricarichi As Variant
    Dim caricop, scaricop, resop, scartop, ricaricop As Variant
    Me.carichi = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & 
"' and tipomovimento='Carico' and data>=#" & Forms![movimenti]![dal] & "# 
and data<=#" & Forms![movimenti]![AL] & "#"), 0)
    Me.scarichi = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & 
"' and tipomovimento='Scarico' and data>=#" & Forms![movimenti]![dal] & "# 
and data<=#" & Forms![movimenti]![AL] & "#"), 0)
    Me.resi = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & "' 
and tipomovimento='reso' and data>=#" & Forms![movimenti]![dal] & "# and 
data<=#" & Forms![movimenti]![AL] & "#"), 0)
    Me.scarti = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & "' 
and tipomovimento='scarto' and data>=#" & Forms![movimenti]![dal] & "# and 
data<=#" & Forms![movimenti]![AL] & "#"), 0)
    ricarichi = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & "' 
and tipomovimento='ricarico' and data>=#" & Forms![movimenti]![dal] & "# and 
data<=#" & Forms![movimenti]![AL] & "#"), 0)
    If Forms![movimenti]![dal] = DMin("data", "movimenti") Then
        Me.iniziale = 0
    ElseIf Forms![movimenti]![dal] > DMin("data", "movimenti") Then
        caricop = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & 
"' and tipomovimento='Carico' and data<#" & Forms![movimenti]![dal] & "#"), 
0)
        scaricop = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & 
"' and tipomovimento='Scarico' and data<#" & Forms![movimenti]![dal] & "#"), 
0)
        resop = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & "' 
and tipomovimento='Reso' and data<#" & Forms![movimenti]![dal] & "#"), 0)
        scartop = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice & 
"' and tipomovimento='Scarto' and data<#" & Forms![movimenti]![dal] & "#"), 
0)
        ricaricop = Nz(DSum("quantita", "movimenti", "codice='" & Me.Codice 
& "' and tipomovimento='Ricarico' and data<#" & Forms![movimenti]![dal] & 
"#"), 0)
        Me.iniziale = caricop - scaricop + resop - scartop + ricaricop
    End If
    Me.finale = Me.iniziale + Me.carichi - Me.scarichi + Me.resi - Me.scarti 
+ ricarichi
******  FINE MIO CODE **********************


intendi che devo ottenere i valori dalla query origine del report e non 
calcolarli nella
sezione format del report? ho capito bene?

 sezione format del report? ho capito bene?
E' certo che hai capito bene, e se le tabelle nel tuo DB sono normalizzate
decentemente non avrai problemi a farlo.
La strategia che hai usato è lenta (per ogni record viene eseguita una
query) in monoutenza, inaccettabile in rete...
Ciao, Oscar


Vi chiedo un consiglio per quanto segue
ho una tabella articoli con codice, descrizione
    e una tabella movimenti con codice, idmovimento, idriga, data, tipo, qta 
TIPO può essere carico,scarico,reso, ricarico,scarto
le due tabelle sono relazione 1 a mollti da articoli a movimenti con 
integrità refenziale
devo ottenere un report cosi strutturato
elenco di tutti gli articoli, anche quelli con movimenti a zero
codice    descrizione     iniziale    carichi        scarichi    resi 
scarti     finale
--------------------------------------------------------------------------------------------------------------------
codice1
...........
...........
codiceN
i ricarichi vengono conteggiati ma in stampa non compaiono
l'operatore può impostare 2 filtri il TIPOMOVIMENTO e la data "DAL AL" se 
non imposta nulla visualizzerà tutti i movimenti.
il campo INIZIALE vale 0 se non mette le date e vale la somma algebrica dei 
movimenti (carichi-scarichi+ricarichi+resi-scarti) fino al giorno prima 
della data inserita DAL
il campo FINALE  vale INIZIALE+carichi-scarichi+resi-scarti+ricarichi
i carichi sono la somma algebrica dei carichi di quell'articolo dalla data 
alla data
idem scarichi
idem resi
idem scarti
Io sono già riuscito a creare il report ma non è per nulla performante, 
praticamente nel format del report ad ogni prodotto calcolo i vari DSUM ma è 
molto lento richiede circa 10 secondi prima dell'apertura
Voi come strutturereste la query di origine del report?
Grazie  a tutti.

 Voi come strutturereste la query di origine del report?
Per quale ragione non puoi ottenere con una normalissima query tra le due
tabelle con criteri di raggruppamento (Group By) le somme delle giacenze per
gli articoli?
Comunque, se ti fosse ostico ottenere a livello di codice SQL quei
risultati, potresti pur sempre lavorare a livello di report, giocando con le
somme parziali/totali sulle caselle di testo: è una soluzione più rozza ma
accettabile.
Di certo il metodo che hai scelto è il meno performante.
Essere più precisi è impossibile
Ciao, Oscar

Ti faccio sapere, grazie intanto.