Newsgroup: it.comp.appl.access
Titolo: aprire una porzione di recordset

Dato un criterio di ordinamento (ORDER BY Campo1, Campo2, Campo3), esiste
un'istruzione SQL che permetta di aprire un recordset contenente i records
di una tabella che vanno dalla posizione X alla posizione X + 100.
ad esempio dal 1101 al 1200.
Con l'istruzione "TOP 100" riesco ad ottenere solo i primi e gli ultimi 100
records della tabella.

 ha scritto nel messaggio
news:0TW0d.239791$OR2.10...@news3.tin.it...


 ha scritto nel messaggio
news:0TW0d.239791$OR2.10...@news3.tin.it...

Ciao Giorgio,
potresti fare cosě
--------------
SELECT TOP 100 T1.*
FROM Tabella T1
  LEFT JOIN (SELECT TOP 1100 Campo1,Campo2,Campo3
                    FROM Tabella
                    ORDER BY Campo1,Campo2,Campo3) T2
          ON T1.Campo1= T2.Campo1 AND
                 T1.Campo2= T2.Campo2 AND
                 T1.Campo3= T2.Campo3
WHERE T2.Campo1 IS NULL AND
               T2.Campo2 IS NULL AND
               T2.Campo3 IS NULL
ORDER BY T1.Campo1,T1.Campo2,T1.Campo3
-------------
Ciao Giorgio


Cercherò di spiegarmi meglio.
In sostanza devo trovare il sistema più veloce per estrarre un range di 100
records (ad es dalla posizione 1.000.001 al 1.000.100) da una tabella di
grosse dimensioni (circa 2.000.000  di records), la tabella possiede un
indice con i tre campi e va ordinata per i tre campi (ORDER BY campo1,
campo2, campo3)
Per adesso l'unico modo che ho trovato per individuare i 100 records
richiesti e questo:
''''''''''''''''''''''''''''''''''''''''''''''''
'Apro l'intero recordset
Dim sSql as String
Dim Rs as Recordset
Dim Db as DataBase
Set Db = OpenDatabase("MioDb.mdb")
sSql="SELECT * FROM Tab1 ORDER BY Campo1, Campo2, Campo3"
set  Rs=Db.OpenRecordset(sSql)
'Mi Posiziono sul record 1.000.001
Rs.Move(1.000.001 )  'Circa 7 secondi
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Ovviamente se i 100 records sono i primi 100 non c'e problema basta eseguire
"SELECT TOP 100 * FROM Tab1 ORDER BY campo1, campo2, campo3"
e i tempi sono istantanei.
Ma come faccio ad ottenere i successivi 100 e ad avere tempi accettabili?

 ha scritto nel messaggio
news:L3%0d.241127$OR2.10...@news3.tin.it...


 ha scritto nel messaggio
news:ci2fch$ge3$1...@atlantis.cu.mi.it...

Ciao Megasoft, la tua preparazione è notevole, ti chiederei di rispettare il
quoting, come faccio io scrivendo di seguito al tuo messaggio, in questo
modo anche gli altri potranno seguire correttamente l'andamento della
discussione!
non me ne volere, sono le semplici regole del gruppo!

 Ma come faccio ad ottenere i successivi 100 e ad avere tempi accettabili?
non ho mai provato su tanti record così, né ho fatto mai provato ma prova 
però Rs.AbsolutePosition
Ciauz
--
'gnurant come una cucuzza
Inviato da 
www.mynewsgate.net

 non me ne volere, sono le semplici regole del gruppo!
La regola dice di riportare una porzione significativa del msg cui si
replica e non 30 Kb per aggiungere 2 righe in calce.
Saluti.
Luciano

 non funziona correttamente.
Non c'entra che siano chiave o meno.  Non funziona perche' metti la
condizione anche su campo2 e campo3
Saluti.
Luciano

 non me ne volere, sono le semplici regole del gruppo!
Scusa. Sono un pò sbadato.
Ciao.


Scusa, riflettendo bene la prima soluzione che ti ho dato č errata.
L'unica cosa che puoi fare sarebbe quella di numerare con un progressivo che
segue l'ordine dei campi come ti ho nella seconda soluzione.
Scusa per la disattenzione.
Ciao.