Newsgroup: it.comp.appl.access
Titolo: Domanda su recordser ADO e filtraggio dati su lato client

Sto sviluppando un'applicativo ADP/SQL Server.
Quello che vorrei fare è:
aprire una form che mostra  i dati resituiti da una view su SQL Server (e lo
ho fatto)
poi voglio che l'utente possa filtrare i dati in locale, quindi senza
richiederlo gni volta al server.
Visto che i dati sono pochi (qualche migliaio di righe) mi sembra sensato
passarli tutti al client e poi farglieli filtrare in locale (piuttosto che
farli rifiltrare ogni volta al server, intasando server e rete).
Ho provato in 2 modi:
Modo 1) Ho provato ad imporre un filtro locale sulla maschera
Me.Filter = "((Ragione_Sociale) Like '%' + 'microsoft' + '%')"
Me.FilterOn = True
La cosa funziona, ma con mia grande sorpresa ho scoperto che ogni volta che
cambio la stringa del filtro i dati vengono richiesti al server.
Quindi questo modo è perfettamente inutile, perchè io voglio evitare di
richiedere i dati al server ogni volta.
Modo 2) Ho provato a lavorare direttamente con la proprietà Filter del
recordset della maschera
Dim rs As ADODB.Recordset
Set rs = Me.Recordset
rs.Filter = "(Ragione_Sociale Like '%microsoft%')"
Set Me.Recordset = rs
Set rs = Nothing
La cosa funziona, ed i dati vengono effettivamente filtrati sul client (non
viene generato altro traffico sulla rete, ne sul server)
Problema: E' giusta la sintassi che ho usato?
La mia paura è che mi resti aperto qualche recordset, o cose simili, che ad
ogni filtraggio potrebbero ocucpare risorse al sistema, senza mai più
liberarle.
Se faccio    Set rs = Me.Recordset
rs è un nuovo recordset?
oppure rs è un riferimento al recordset esistente associato alla maschera?
Propendo per la prima ipotesi, perchè se fosse un riferimento al recordset
esistente
rs.Filter = "(Ragione_Sociale Like '%microsoft%')"    mi dovrebbe filtrare
subito i dati, mentre invece i dati filtrati li vedo solo facendo
Set Me.Recordset = rs
Ma allora, se    Set rs = Me.Recordset   mi crea un nuovo recordset
filtrato, ed io lo vedo associandolo all amaschera... che fine fa (dopo ogni
filtraggio) il vecchio recordset della maschera? viene chiuso
automaticamente? (dubito)  succhia risorse e lascia aperte delle
connessioni?
Come stanno le cose?
grazie, max

 connessioni?
1°-Con l'istruzione Filter il RECORDSET rimane intero, quindi perchè ti
preoccupi di che fine fa il PRimo...???. Ovviamente lo PERDI
sostituendolo
con uno uguale(mi pare inutile...) al quale hai applicato un criterio
alla sua proprietà Filter.
2°-Ora con ADO non sono sicuro, ma hai provato a vedere se hai il
metodo RECORDSETCLONE, dal quale puoi accedere direttamente alla
Proprietà Filter, oppure meglio ancora direttamente dal Metodo
Recordset.
3°-Io solitamente quando Creo una Variabile Recordset oltre che
eseguire l'azzeramento con Nothing la chiudo: Rs.Close
4°-Per comporre il Criterio del Filtro in modo semplice e Dinamico
prova ad utilizzare Application.BuildCriteria(.......) non ti devi
preoccupare della tipologia dei dati.......!!!
Ciao.
Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 preoccupare della tipologia dei dati.......!!!
Questa non la conoscevo, me la andrò a guardare, grazie.
Ciao, Max