Newsgroup: it.comp.appl.access
Titolo: Query veloce ma listbox lenta

Ho un'applicazione Access 2000 che collega tabelle sia su SQL Server
2000 che MySQL.
Ho creato una query che recupera i dati in circa 2". Le condizioni di
WHERE sono fisse e non dipendono da nessun parametro esterno alla
query.
Se imposto questa query come RowSource di una listbox in una maschera,
dal momento dell'apertura ci vogliono circa 20" perché il controllo
venga popolato. Circa 10 volte il tempo necessario per la query che
alimenta il controllo.
La query è già stata ottimizzata: non è complessa ma collega 5 tabelle
di cui 4 su SQL Server e 1 su MySQL, impiega campi indicizzati per i
join e i WHERE sono espressi senza utilizzare clausole come LIKE che
potrebbero rallentarne l'esecuzione. Comunque se avessi problemi nella
query avrei un'esecuzione più lenta della stessa.
Ho trovato in rete indicazioni su come migliorare le performance di
Access (ad es disabilitare il flag "Tieni traccia delle informazioni
di correzione" nelle Opzioni, disabilitare la correzione automatica
etc) ma non sono valse a nulla. Il campo restituo dalla query è uno
solo e non ci sono campi calcolati o quant'altro sulla maschera che
possa rallentarne l'apertura.
Chi può aiutarmi ad avere non dico le stesse prestazioni nell'apertura
del form ma quantomeno qualcosa di accettabile?
TIA
-- Alessandro


l'sql fatta girare da sola è veloce?
se sì il problema è nella maschera o nella listbox
facci sapere
ciao

 se sì il problema è nella maschera o nella listbox
Penso anche io, ma non so cosa fare per individuare la causa.

Alessandro ha scritto:




fai questa prova:
maschera vuota con solo quella list box
controlla che nell'origine controllo non ci sia nulla
vedi cosa succede
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 controlla che nell'origine controllo non ci sia nulla
L'ho già provato, ma il risultato è lo stesso.
Ho creato una maschera vuota con un solo oggetto (listbox), del quale
valorizzo solamente la proprietà "RowSource" con la query in
questione. Niente: quando apro la maschera la listbox si popola dopo
più di 20" contro i 2" della query "pura".

Alessandro ha scritto:


la cosa mi sembra molto strana....
prova a fare un docmd.openquery e vedere quanto ci mette


 prova a fare un docmd.openquery e vedere quanto ci mette
Esattamente lo stesso tempo del lancio "puro" della query (2").

 Esattamente lo stesso tempo del lancio "puro" della query (2").
E quanta roba ritorna? Costruire l'oggetto listbox puo' richiedere un
po' di pensamento. Scarica il risultato della query su una Tab
temporanea locale e fai una select star su questa e verifica il tempo
di apertura/caricamento della lstbox

 di apertura/caricamento della lstbox
La query restituisce circa 50 record.
Ho convertito la query di selezione in query di creazione tabella. Una
volta lanciata, la creazione della tabella ha richiesto un po' di più
della semplice esecuzione della query (ma non quanto ci vuole per il
popolamento della listbox).
Se ora associo l'origine riga della listbox alla tabella anziché alla
query l'apertura della maschera è immediata (meno ancora
dell'esecuzione della query).
Probabilmente l'anomalia deriva da qualche proprietà grafica o
comunque qualcosa legato alla GUI e non alla query che rallenta
l'esecuzione, magari il dimensionamente delle colonne o chissà
cos'altro.
Non so più che pesci pigliare...


Ho provato ad effettuare una semplice prova per avvalorare la mia
ipotesi.
Ho aperto task manager e un monitor di rete, quindi ho lanciato
l'apertura della maschera.
Ebbene, nei primi 2" il traffico di rete è sostenuto, mentre nei
restanti 18" circa il traffico praticamente si azzera e il processo
MSACCESS.EXE "ciccia" costantemente il 90% della CPU. Quando la
maschera viene aperta e la casella valorizzata coi record il processo
torna al suo stato idle.
Appurato a questo punto che si tratta di un ritardo dovuto alla GUI,
cosa posso fare per ottimizzare la resa della casella di riepilogo?

 wrote:
Io ho lo stesso problema, anzi a me è peggio perché non si apre
proprio il form, il mouse è la clessidra, e ci vuole appunto quella
ventina di secondi perché si apra e la listbox sia piena (i record
perà non sono 50 ma circa 500).
Il BE è su un server.
Ho pensato che dipendesse dal form, che in verità è molto carico
(schede, check, textbox, buttons e chi più ne ha più ne metta....)
Io in verità mi era rassegnato, ma se esiste una soluzione ben
venga......
Ciao
Filippo

 Filippo
Ho fatto un ulteriore prova.
Ho ridotto il numero delle colonne restituite dalla query da 7 a 1
SENZA MODIFICARE le condizioni di WHERE.
Ebbene, ora la listbox viene visualizzata molto più velocemente.
Il problema è che ho bisogno di visualizzare le altre 6 colonne nella
listbox.
Come fare?