Newsgroup: it.comp.lang.visual-basic
Titolo: Sort con DBgrib - problema di overflow

Salve a tutti, ho il seguente problema:
una form, un oggetto data con collegato un oggetto DBgrid. faccio
caricare un database Access 2000. Tutto funziona perfetto.
Necessita': effettuare il sort della colonna al click
dell'intestazione. Trovo la soluzione nell'NG (grazie) e procedo:
Private Sub ClientiGrid_HeadClick(ByVal ColIndex As Integer)
ClientiDB.Recordset.Sort = "[" &
ClientiGrid.Columns(ColIndex).DataField & "]"
Set ClientiDB.Recordset = ClientiDB.Recordset.OpenRecordset
End Sub
(Ho saltato una riga per comando se il wordwrap vi spezza le righe)
Tutto questo funziona ma..... Quando clicco credo intorno alla
trentina di volte sullei intestazioni, per voler ordinare, mi va in
runtime error 3037 "Impossibile aprire altre  tabelle o query"
Non sono ferrato in VB, ma mi ritengo un buon programmatore, e deduco
che in pratica nella fuzione precedente continuo ad aprire nuove
tabelle, senza chiuderle, ed esaurisco i puntatori. Ora, spero che
l'utente finale non stia li' a giocare col mouse, ma diventa anche una
questione di principio, e non mi piace rilasciare un programma bacato,
quindi continuo con le prove. Alla fine un accrocchio che funziona dal
punto di vista sintattico e' il seguente:
Private Sub ClientiGrid_HeadClick(ByVal ColIndex As Integer)
Dim Temp As Recordset
Set Temp = ClientiDB.Recordset
ClientiDB.Recordset.Sort = "[" &
ClientiGrid.Columns(ColIndex).DataField & "]"
Set ClientiDB.Recordset = ClientiDB.Recordset.OpenRecordset
Temp.Close
End Sub
In pratica salvo prima il puntatore del recordset aperto, e una volta
aperto quello nuovo chiudo il vecchio (se lo faccio prima mi arriva un
errore dal sort). Come dicevo funziona, ma continua a darmi il
run-time error. A questo punto chiedo: esiste un modo per risolvere la
cosa?
Grazie in anticipo

Set ClientiDB.Recordset = ClientiDB.Recordset.OpenRecordset
Questo comando mi lascia perplesso.
Preciso che non uso datacontrol di nessun genere, quindi posso dire
delle bestialita', pero' non capisco perche' riassegni un nuovo recordset
al controllo (senza chiudere il precedente, tra l' altro).
L' api reference di ADO dice, a proposito del metodo Sort del Recordset:
The sort operation is efficient because data is not physically rearranged, 
but is simply accessed in the order specified by the index.
Setting the Sort property to an empty string will reset the rows to their original order 
and delete temporary indexes. Existing indexes will not be deleted.
Quindi mi pare di capire che vengano creati degli indici temporanei
e non occorra riaprire il recordset.
hth, hal

 ha scritto nel messaggio
news:ovrhrtc3f6e2ov4i8...@4ax.com...


end if
A me non funziona... L'unico dubbio che posso avere, scusate
l'ignoranza, e' se il recordset che apro e' di una classe adodb... E'
un file access collegato direttamente (dalle proprieta') ad un oggetto
data.

e non occorra riaprire il recordset.
Eppure senza riaprirlo non mi funziona...

qualche modo dire alla tabella di rileggerli....
Ah, se vuoi fare un refresh allora forse ti conviene cambiare
la select sotto il cu10 al recordset.
Magari prova cosi':
1. disconnetti il recordset dalla griglia;
2. chiudi il recordset;
3. assegna la nuova select al recordset;
4. riaprilo ed assegnalo alla griglia;
hth, hal