Newsgroup: it.comp.appl.access
Titolo: Aiutatemi a velocizzare il bradipo!! ;)

Ho un problema di velocità... (Access 97).
Sto sviluppando un gestionale. La mia azienda lavora su commessa, e ad 
ogni commessa è associato un ciclo di lavoro di 10 fasi. 
Ci sono diverse macchine, ed ognuna di esse può intervenire in una 
qualunque fase (quindi anche più volte nell'ambito dello stesso ciclo).
Ho n commesse, e devo trovare quante ore totali sono caricate su una 
data macchina.
La mia soluzione:
1) Creo una tabella con questa struttura:
	N° commessa (numerico)
	Fase 1 (testo) => nome della macchina che lavora nella fase 1
	Fase 2 (testo) => qnome della macchina che lavora nella fase 1
	.....
	Fase 10 (testo) => qui inserisco il nome della macchina che 
lavora nella fase 10
	Ore fase 1 (numerico) => ore di lavoro della macchina che 
lavora nella fase 1
	Ore fase 2 (numerico) => ore di lavoro della macchina che 
lavora nella fase 2
	.....
	Ore fase 10 (numerico) => ore di lavoro della macchina che 
lavora nella fase 10
2) Creo 10 query parametriche, molto simili fra loro. La prima, qry_1, 
ha questo enunciato SQL:
	SELECT Sum(tab_commesse.[Ore fase 1]) AS [SommaDiOre fase 1]
	FROM tab_commesse
	GROUP BY tab_commesse.[Fase 1];
in sostanza mi estrae la somma delle ore previste per la fase 1. Le 
altre nove query (qry_2, qry_3, ecc.) fanno lo stesso, per le altre 
fasi.
3) Utilizzo (in una maschera) la funzione DLookup, in questo modo:
    For i = 1 To 10
    esp = "[SommadiOre fase " & i & "]"      'Il campo del quale mi 
serve il valore
    dom = "qry_" & i                         'La query che costituisce 
il dominio
    crit = "[Fase " & i & "] = 'XYZ'"        'Il criterio: la macchina 
è la XYZ
    parz = DLookup(esp, dom, crit)
        If parz <> "" Then                   'Se DLookup 
restituisce "null", parz non si somma
        ore = ore + parz
        End If
    Next i
    Me![lblMacchina1].Value = ore
In sostanza, itero su tutte le 10 query, estraendo solo le ore che si 
riferiscono alla Macchina XYZ. Le sommo, ottenendo il totale. E ripeto 
questa iterazione per ognuna delle macchine (le labels ovviamente 
cambiano).
Per funzionare funziona, ma... ha la velocità di un Bradipo alle 3 del 
pomeriggio!! Infatti le macchine sono ben 18, quindi il codice è 
composto da 18 cicli.
Qualcuno saprebbe consigliarmi una soluzione più rapida? (Sospetto 
esista e sia semplicissima, del resto io sono abile a complicare le 
cose semplici...)
Thanks in advance! (E scusate per la lunghezza del post!).
--
Posted from 194.184.109.125 by way of 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:G1UCOQ$IIEavkLeVyMPL7uA3afXNS...@libero.it...
Ho un problema di velocità... (Access 97).
Sto sviluppando un gestionale. La mia azienda lavora su commessa, e ad
ogni commessa è associato un ciclo di lavoro di 10 fasi.
Ci sono diverse macchine, ed ognuna di esse può intervenire in una
qualunque fase (quindi anche più volte nell'ambito dello stesso ciclo).
Ho n commesse, e devo trovare quante ore totali sono caricate su una
data macchina.
La mia soluzione:
[cut]
Anche se sai gia' che vi saranno 10 interventi, il mio suggerimento e' di
cambiare proprio approccio al problema.
E' sempre sconsigliabile inserire una serie di dati analoghi (gli
interventi) in uno stesso record, e' meglio creare una tabella relazionata
col cliente che contiene gli interventi.
Questo per due motivi:
1.    Ti viene molto piu' facile fare calcoli (come ti serve fare)
2.    Nel caso si renda necessario l'undicesimo intervento non entri in
crisi.
Fai cosi':
TabClienti
IDCl    Nome ecc,ecc
TabInterventi
IDInt    IDCli    Descriz    OreLav    NumOrdineIntervento    ecc.ecc
In questo modo, ti basta fare una query che ti peschi gli interventi di un
cliente e' puoi sommare le ore senza alcuna difficolta'.
Ciao, Sib

 Ho un problema di velocità... (Access 97).
Hai male impostato il problema....
Hai due concetti: commesse (IDcommessa, cliente, ecc..) e macchine
(IDmacchina, ecc), ergo io farei due belle tabelle.
Poi c'e' quello su cui vuoi lavorare, e cioe' le ore lavorate. Qunidi fai
una tabella che relaziona le due precedenti (IDmacchina, IDcommessa,
oresvolte), relazione 1 a molti con entrambe.
Vedrai che andrai come un schggia!:-)
Saluti.
Luciano
(DOC)