Newsgroup: it.comp.lang.visual-basic
Titolo: SQL e DataGrid

Mi sto avventurando sul mondo del sistema client/server,
sto ancora valutando un po' di prodotti e di driver
(InterBase 6.0, DBMaker, Apollo Database Server ecc.. ecc..),
ma su tutti ho un problema, quindi mi viene il dubbio che sia sbagliata la
mia tecnica
di programmazione.
La cosa è semplicissima:
devo aprire una tabella (senza ORDER BY e senza WHERE) che
però contiene circa 30.000 record per un totale di circa 6.5 Mb
e visualizzare il tutto su una datagrid (o altro tipo di griglia dati).
Aprire la tabella ed estrarre i primi 20 record per visualizzarli a video
dovrebbe
essere abbastanza veloce, però, perchè la griglia
possa funzionare, devo impostare la proprietà CursorLocation = adUseClient
altrimenti la griglia dati non visualizza niente.
Questo perchè la griglia dati gestisce i record con la proprietà Bookmark
che
il Recordset non ha se aperto in modo adUseServer.
Ma impostando il cursore come adUseClient, tutti i record del mio database
vengono inviati al client PRIMA che la griglia cominci a visualizzare i
dati,
per cui il tempo di attesa è inaccettabile.
Ho limitato il tempo ponendo SELECT CAMPO1,CAMPO2,CAMPO3
invece che SELECT * ma il tempo non è diminuito molto.
C'è una soluzione a tutto ciò ?
C'è un motore SQL che mi gestisca i Bookmark anche sul lato Server ???
Grazie
Sergio

E RISPONDETE A STO' POVERO
DISGRAZIATO.............................................
Sergio

 ha scritto nel messaggio
news:8us1nl$quf$1...@fe1.cs.interbusiness.it...


 L'istruzione è TOP N (se non ricordo male).
Per esistere esiste, ma (qui attendo smentite) non credo che sia
implementata da tutti i database. Ce l' hanno sql server 7 e msaccess,
mentre mi sembra di ricordare che sql anywhere non la supporti. Mi pare che
nemmeno oracle la usi.
Ciao
Aldo


 nemmeno oracle la usi.
Infatti non c'è su tutti i dialetti SQL.
Tra l'altro non posso usarla comunque perchè il mio utente deve avere la
possibilità di scorrere la grid.
Sembra strano, ma in DAO funziona che è una meraviglia.
Con tabelle da 100 o da 100.000 record, aprire la tabella con
OpenRecordset(.....,dbOpenDynaset)
la velocità è sempre quella, perchè DAO apre semplicemente il file ed estrae
solo i primi N record
che devono andare sulla griglia. Mano a mano che l'utente si sposta vengono
letti anche gli altri
record.
Perchè ADO non fa così ???? Mah......................
Ciao e grazie
Sirjo

 wrote in message
news:8v2v0f$ipi$1...@fe1.cs.interbusiness.it...

Alt ! Se usi ADO dovresti riuscire ad usare la proprieta' MaxRecords (o giu'
di li') dell' oggetto Recordset. Con slq server funziona.
Ciao
Aldo

 di li') dell' oggetto Recordset. Con slq server funziona.
Grazie Aldo, ora provo.............
Ciao
Sirjo

 Aldo
Eh, purtroppo anche la proprietà MaxRecords dipende dal provider
OLEDB..........
Tu non hai la necessità di visualizzare tanti record in una griglia ?
Pensi che dovrei prima chiedere al cliente che filtro di ricerca vuole
usare per limitare subito il numero di record ?
Poichè uso la griglia TrueDBGrid, avevo pensato a questo:
Apro il recordset con CursorLocation = adUseClient ed estraggo solo
il campo primary key
SELECT CODICE FROM TABELLA
Anche se sono tanti record è abbastanza veloce
Ora, sull'evento della griglia che scrive ogni riga a video,
eseguo una SELECT CAMPO1, CAMPO2, CAMPO3 FROM TABELLA WHERE CODICE='codice
che cerco'
e i dati li visualizzo sulle colonne mancanti.
Ho notato però che eseguire 30 select per i primi 30 record, la cosa non è
così veloce.
C'è un modo in ADO di aprire la tabella, settare l'indice, ed usare un bel
Seek come
si faceva su DAO ??
Devo aprire la tabella in modo adTableDirect ??
Anche con linguaggi SQL server tipo Interbase ??
Troppe domande ???
Tu che database-engine usi ?
Ciao
Sirjo

 Sirjo
Capisco che non ti ho risolto un gran che, pero' ... e' gia' qualcosa non
sentirsi soli ! ;-)
Ciao
Aldo

 Aldo
Ciao
Sirjo


