Newsgroup: it.comp.appl.access
Titolo: Velocizzare sistema fe/be

buongiorno a tutti.
Ho un sistema aziendale composto da 6 postazioni fe che fanno capo a un be.
E' successo che a un collega, ovviamente uno dei client, è stato dato un pc nuovo di zecca ed è successo un vero miracolo.
Accedendo con lo stesso infatti access "vola" e permette di operare con una velocità incredibile.
Chiaramente il pc nuovo ha tutti i registri e i temporanei "vergini" ma ciò non toglie che sicuramente nel sistema (e penso sopratutto all'interno di access) si generano diversi file temporanei che ne rallentano (e di molto) l'operatività.
Preciso infine che in fase di chiusura ho previsto la funzione "compatta e ripristina database".
 
Qualcuno mi può gentilmente spiegare se è possibile utilizzare altre finezze, tipo azzerare i file temporanei o altro per poter velocizzare il sistema e renderlo così il più efficente possibile ?
 
grazie infinite per l'attenzione.

Ci sono moltissimi accorgimenti...
1) Tenere aperta una CONNESSIONE FANTASMA... quindi un Recordset su una Tabella Vuota creata appositamente.
2) Usare Queries ottimizzate(non Grouped=  per Chiavi, Indici e predicato...(SELECT * FROM...) è da evitare... se servono 3 CAMPI, meglio evitare [*] ed esplicitare i campi
3) Evitare i Riferimenti Impliciti nei predicati, obbliga JET a risolverli ed è un lavoro che compie ad ogni Verifica(il che può accadere più volte per ogni Record)
   Esempio    "SELECT * FROM T1 WHERE ID=Forms!NomeForm!NomeControllo"
   Preferire  "SELECT * FROM T1 WHERE ID=" & Forms!NomeForm!NomeControllo
   Preferire i Parametri da passare con QueryDefs
 
4) Nelle Queries evitare CRITERI NON UTILI...
   Una Query con un sacco di CRITERI ByPassabili con [*] obbliga all'elaborazione del criterio 2 volte... se un Criterio non serve non lo si mette...!
 
5) Evitare DOMAIN Function(Dlookup e fratelli vari), basta scriversi una Funzione basata sui RS
6) Distruggere sempre Oggetti
7) Usare RS di tipo Dynaset
8) Evitare troppi Oggetti DATABOUND in una Form, evitare troppe Subform/ListBox/Combo
9) Poi si passa all'ottimizzazione del codice con il CASTING dei dati preventivo
10) Uso di SELECT CASE o IF..END IF... non in modo discriminato ma mirato
11) Uso di Long al posto di Integer in Cicli in quanto è più performante
12) Evitare Object o Variant
 
@Alex

ignazio.pilone ha scritto :

Buongiorno Ignazio.
Sul nuovo PC avete un SO diverso?
Te lo chiedo perché noi abbiamo notato lo stesso enorme miglioramento 
con il primo PC con Win7 rispetto agli altri che avevano XP.
Se fosse così non credo che sia una questione di file temporanei ma 
semplicemente una (decisamente) migliore gestione della rete da parte 
del nuovo SO.
Purtroppo non so dirti altro.
 
Grazie.
 
Ciao.


 
 
cambiare BE :-)
BFS

Non serve a molto se poi non si hanno le basi di come far lavorare SERVER_SIDE i dati.
 
Alessandro

 ha scritto nel messaggio 
news:5a717d78-22b6-43ad...@googlegroups.com...

Beh, formattare i pc più spesso!   ;-)
 
Stavo scherzando, i consigli più efficaci li trovi qua:
 
http://www.granite.ab.ca/access/performancefaq.htm
 
 
Questo soprattutto (documentato anche nell'Help di Access, comunque): 
http://www.granite.ab.ca/access/performanceldblocking.htm
 
 
 

Grazie infinite a tutti per il corale e poderoso aiuto.
@Alex scusami se ti rompo ma mi potresti spiegare meglio, se hai tempo:
 
 "Tenere aperta una CONNESSIONE FANTASMA... quindi un Recordset su una Tabella Vuota creata appositamente"
 
Intendi una tabella mirror sullo stesso db dove memorizzi i dati, su un altro db
oppure qualcosa che non comprendo ?
grazie di cuore.
 
 


Nulla di grave, è una cosa banale, ed è quello che trovi descritto nel 2° LINK che ti ha suggerito Simone... 
In sostanza il POOL delle connessioni viene regolarmente vuotato quando non esiste più una connessione aperta verso il BE, credo sia compito del GARBAGE COLLECTOR, sistema che ottimizza la memoria.
Ne consegue che al primo tentativo di riaprire una Connessione, sia un Recordset, sia l'apertura di una Maschera(che poi è sempre un Recordset), sia una ComboBox ma anche una semplice Funzione di Aggregazione sui DOMINI(Dlookup)... prima di processare l'estrazione dati, viene instaurata una NUOVA CONNESSIONE e messa nel POOL... una volta che questa è attiva le successive sono estremamente più veloci.
Quindi si è usi mantenere aperta una CONNESSIONE inutile, o Vuota, solo per non far chiudere il POOL.
 
Ciao
@Alex

Mi pareva di aver fatto un DEMO... forse è questo:
http://mirror.masterdrive.it/alessandrobaraldi/DettaglioFaq.asp%3FIdFAQ=277.html
 
 
Se vuoi, devi scaricarlo, poi rinominarlo con Estensione ZIP.
Dentro mi pare ci sia un BE ed un FE con un'interfaccia di test....
All'interno c'è la tecnica del RS aperto, forse con Form Hidden ma non ricordo più... 
 
Ciao
@Alex