Newsgroup: it.comp.lang.visual-basic
Titolo: caricare i dati di una sql nel modo + veloce possibile

Utilizzo SQLserver. Ho tutti i progetti in VB6 e utilizzo ADO. Ho la
necessità di
avere il risultato delle query nel modo + veloce possibile. Mi spiego:
apro un recordset (con CursorLocation=adUseServer, il server ritorna
300000-400000 righe). Ho ora la necessità di scorrere le righe. Se uso
il .movenext sono rovinato, ci mette una vita... Mi servirebbe una cosa
tipo i controlli di tipo bound: datagrid, combobox e varie, una volta
settata la proprietà datasource, carica le righe immediatamente... con
il movenext passa un tempo troppo lungo.
Come fanno i controlli bound a funzionare?
nn so se mi spiego...
grz
ciao

 ha scritto nel messaggio 
news:1102338812.8...@f14g2000cwb.googlegroups.com...




Secondo me quello che ti serve è una attenta analisi e revisione del
tuo programma.
Io non ci credo che tu abbia bisogno di far vedere all'operatore
tutta quella massa di righe.
Se è la tua procedura che parte e mostra tutta quella massa di righe
all'operatore aspettando che lui agisca indicandoti cosa fare hai
sbagliato prospettiva.
Con una massa di dati di quel tipo si presenta all'operatore una form
con i filtri e solo dopo si estraggono e mostrano i dati.
Se invece sono degli aggiornamenti da fare devi usare delle stored
procedure e non aprire dei recordset.
Se devi caricare i dati invece da file ascii o da altra fonte l'unica
soluzione è utilizzare il dts.
Qualsiasi altra soluzione (server, client) con la creazione di un
recordset che comprenda tutte le righe che hai indicato avrebbe sempre
delle pessime prestazioni.
=======================================================================
Se mi vuoi scrivere togli le maiuscole
cteniza...@hotmail.com
=======================================================================

Anzitutto, diciamo che quando io parlavo di 300000/400000 righe,
parlavo di righe già filtrate... in realtà sono molte ma molte di
più. Quindi, fatti gli opportuni filtri si arriva ad ottenere quella
mole di righe. Sono righe che mi occorre semplicemente far vedere... il
risultato di una query di selezione, insomma.
Non penso di essere l'unico a dover  operare su grosse quantità di
dati. In effetti io eviterei anche di utilizzare i recordset... la cosa
che mi serve è una struttura dati (recordset, collection, array....
???) in cui buttare dentro i dati e poterli scorrere. Io conosco solo i
recordset (appoggiandomi su stored procedure che mi restituisce le
righe in maniera veloce... anche se sono così tante)... il problema
dei recordset è lo scorrimento... movenext è troppo lento...
ciao

 mole di righe. Sono righe che mi occorre semplicemente far vedere... 
Vedere a video o stampare su carta?
C'e' comunque una domanda che sale spontanea: hai mai calcolato quanto 
tempo serve all'utente per scorrere le righe?
Poniamo che con un colpo d'occhio ne legga 10 alla volta senza distrarsi 
mai. Vogliamo dargli almeno mezzo secondo di tempo per capire cosa sta 
guardando?
Ora... 300ooo righe / 10 per ogni blocco fa 30ooo blocchi per 1/2
secondo ciascuno... totale 15ooo secondi.
Considerato che ci sono 3600 secondi in un'ora, il tuo utente passa
piu' mezza giornata lavorativa a guardarsele tutte...
-- 
ciao, hal

Io non ho mai detto che l'utente se li legge tutti, sono io che li devo
leggere tutti... SQLserver butta fuori le righe in un tempo ragionevole
(15-20 secondi), se utilizzo una grid (bound) il tempo di
visualizzazione è, dopo aver ottenuto il risultato della query, è
brevissimo. Ma siccome io non devo utilizzare una griglia ma mi serve
avere i dati disponibili da qualche parte... ripeto, c'è un modo? Come
mai i controlli bound "ragionano" così velocemente? Come mai .movenext
è così lento?
Insomma, lascia perdere il perchè ci sono dentro così tanti dati...
è così in quel programma da anni e basta... il problema è che è
lento.
ciao
davide

 lento.
E lo sara' sempre di piu' :-(
-- 
ciao, hal