Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Diminuire accesso al disco, ma con continue query al DB...

Salve a tutti !!!
Scusate.. ma sono in un problema dal quale non so tirarmi fuori.. e spero
che qualcuno possa avere un idea per aiutarmi, dunque :
Ho 2 tabelle. Una é completamente vuota, l'altra contiene dei dati composti
in questo modo :
Il primo campo contiene dei valori di testo
Il secondo campo contiene dei valori numerici da 1 a 3 e indicano la
priorità
Cosa devo fare : Devo copiare questi dati nella tabella vuota, in ordine di
priorità, cioé :
- Inserire il primo dato che trova (che esso sia di priorità 1 , 2 o 3)
- Quando trova un altro dato con lo stesso valore di testo, deve controllare
la priorità, e  :
     - Se uguale o inferiore passare al prossimo
     - Se maggiore , sovrascrivere il vecchio valore
- Continuare con il resto dei dati fino alla fine del recordset della
tabella sorgente (.movenext)
Al momento questo sono riuscito a farlo, ma praticamente all'interno del
Do..Loop continuo ad aprire e chiudere il database che inizialmente é
vuoto,e questo lo faccio perché ogni volta che un dato viene inserito devo
rieseguire la query per controllare,nel passo successivo,se questo dato ora
esiste oppure no.
Inutile dire che questa operazione é Tremendamente lenta...argh... per
spostare 5000 dati ci mette all'incirca 10 minuti su un Pentium 233Mhz, e
penso che la causa sia proprio questo continuo accesso al disco per eseguire
le query e cercare se esiste il dato,controllare la priorità, ecc...ecc...
Accidenti.... qualcuno sa se c'é un altra soluzione a questo problema ?
Grazie mille per qualsiasi , anche piccolo, consiglio !!
DaVe
--
"The truth is out there"

 tabella sorgente (.movenext)
in sostanza alla fine dell'elaborazione nella tabella vuota
ci devono essere solo i valori di testo con priorità piu' alta
per ogni valore di testo incontrato ?
forse si puo' fare il tutto utilizzando una query di sql del tipo Insert
Into () select ....
pero' bisognerebbe avere qualche informazione + precisa...
ciao
Enrico

 tabella sorgente (.movenext)
Ciao,
chiudo un occhio, anzi tutti e due, sulla soluzione che stai adottando :o(
prova ad eseguire una query di creazione come questa:
SELECT [Descrizione], max([Priorità]) AS [Max_priorità]
INTO [NuovaTabella]
FROM [Tabella]
GROUP BY [Descrizione];
se ho ben capito il tuo problema dovrebbe funzionare.
Ciao.
--
Princi, 
princ...@programmer.net
--------------------------------------------------------------------------
"Tutti sanno che una cosa è impossibile da realizzare,
finché arriva uno sprovveduto che non lo sa e la inventa." A.E.

Spesso si capisce meglio se riporti esattamente i dati in questione, se ho
capito bene hai una tabella di questo genere
Stringa         Priorità
AAAA        2
AAAA        1
AAAA        3
BBBB         1
BBBB         3
La nuova tabella deve essere questa (A)
AAAA        1
AAAA        2
AAAA        3
BBBB         1
BBBB         3
oppure    (B)
AAAA        3
BBBB         3
Comunque il problema si risolve con una sola istruzione SQL:
INSERT INTO TabellaDestinazione SELECT Stringa, Priorità FROM ..........
Quale SELECT Per creare la tabella (A) ?
La priorità é 1,2,3 oppure 3,2,1 nel primo caso ordini i record con:
SELECT  Stringa, Priorità FROM NomeTabella ORDER BY Stringa, Priorità
nel secondo caso:
SELECT  Stringa, Priorità FROM NomeTabella ORDER BY Stringa, Priorità DESC
Per Creare la Tabella (B)
La priorità é 1,2,3 oppure 3,2,1 nel primo caso estrai il valore massimo:
SELECT  Stringa, Max(Priorità) FROM NomeTabella GROUP BY Stringa ORDER BY
Stringa;
 nel secondo il valore minimo:
SELECT  Stringa, Min(Priorità) FROM NomeTabella GROUP BY Stringa ORDER BY
Stringa;
Ciao, Fortunato
-> Dave <- <da...@hate.spam> wrote in message
8p2vs8$sgn$1...@bw107zhb.bluewin.ch...
