Newsgroup: it.comp.lang.visual-basic
Titolo: filtro assurdo......

Ciao,
ho un db Access a cui accedo tramite DAO da VB6 SP5.
Eseguo una query di selezione e apro un recordset.
A questo punto applico la proprietà filter:
rcsMio.filter = "IDNome='a' OR IDNome='d' OR IDNome='h'"
apro un nuovo recorset con:
set rcsMioFlt = rcsMio.Openrecordset
e ottengo i primi tre record della tabella, senza alcuna attinenza con i 
criteri impostati... perchè?
Cosa sbaglio?
Grazie
Marco / iw2nzm

 criteri impostati... perchč?
Il filtro va applicato *dopo* che hai ottenuto i dati.
Ciao 

 Il filtro va applicato *dopo* che hai ottenuto i dati.
Sicuramente mi perdo in un bicchier d'acqua.
Ma se ricordo bene la procedura è:
1. apro un recordset tramite query sul database
2. imposto la proprietà filter
3. apro un nuovo recordset con i dati filtrati
Se è errata per favore potresti indicarmi quella corretta? A meno di 
clamorosi abbagli anche MSDN dice questo.
Ciao e grazie!
Marco / iw2nzm

 clamorosi abbagli anche MSDN dice questo.
Io con i db non ci vado molto d'accordo, ma che mi ricordi è:
- apro il recordset
- imposto la proprietà filter
Oppure, per mantenere il recordset originale:
- apro il recordset
- ne faccio un clone con rs.Clone
- imposto la proprietà filter sul clone (occhio che i dati puntati sono 
effettivamente gli stessi e non una copia!)
Nota: prima di impostare un nuovo filtro se non riapri il recordset annulla 
il filtro precendente.
Ciao 

 - imposto la proprietà filter
Scusa l'intromissione, ma questo vale per un recordset ADO, mentre quello di
Marco ha tutta l'aria di essere un DAO recordset. E quindi ha ragione lui.
Comunque, per Marco: prova a racchiudere tra parentesi ciascun termine
dell'espressione filter. Così:
rcsMio.filter = "(IDNome='a') OR (IDNome='d') OR (IDNome='h')"
Bye
Raf

 rcsMio.filter = "(IDNome='a') OR (IDNome='d') OR (IDNome='h')"
Ho provato e restituisce sempre i primi 3 elementi della tabella a 
prescindere dal valore del filtro. Ci sarà qualcosa di banale che mi 
sfugge perchè sono anni che li uso :)
Vediamo se riusciamo a capire cos'è:
datProd è un controllo data
rcsProdFlt è un recordset
datProd.RecordSource = "SELECT IDNome, Campo1 FROM miaTabella WHERE 
Campo1 = 'blabla')
datProd.Refresh
datProd.Recordset.Filter = "(IDNome='a') OR (IDNome='b')"
Set rcsProdFlt = datProd.Recordset.OpenRecordset
...
Uso un controllo data poichè ho dei controlli sul form che si appoggiano 
a lui per visualizzare i campi.


 a lui per visualizzare i campi.
Non so se ti sarò di grande aiuto, visto che uso esclusivamente ADO, però ho
fatto una prova analoga su un mio DB senza riscontrare problemi.
Ho usato DAO3.6 con un db Access2K, il datactl ha DefaultType=UseJet e
RecordsetType=Dynaset.
Per curiosità, cosa contengono i campi dei primi 3 record che ti vengono
restituiti?
Altre info: la tabella origine ha degli indici? Su quali campi?
Bye
Raf

anche io ho fatto una prova e ho funzionato
----
Private Sub Command1_Click()
Dim rcsProdFlt As Recordset
     DatProd.RecordSource = "SELECT IDNome, Campo1 FROM miaTabella WHERE 
Campo1 = 'blabla'"
     DatProd.Refresh
Debug.Print "*************************"
     With DatProd.Recordset
         Do Until .EOF
             Debug.Print .Fields(0).Value, .Fields(1).Value
             .MoveNext
         Loop
     End With
     DatProd.Recordset.Filter = "(IDNome='a') OR (IDNome='1') OR 
(IDNome='g')"
     Set rcsProdFlt = DatProd.Recordset.OpenRecordset
Debug.Print "========================="
     With rcsProdFlt
         Do Until .EOF
             Debug.Print .Fields(0).Value, .Fields(1).Value
             .MoveNext
         Loop
     End With
     rcsProdFlt.Close
End Sub
----
*************************
f             blabla
g             blabla
h             blabla
a             blabla
c             blabla
1             blabla
3             blabla
b             blabla
=========================
g             blabla
a             blabla
1             blabla
----
ci deve essere qualcosaltro sotto!
bye
r

 ci deve essere qualcosaltro sotto!
Boh! Ho provato a eliminare il controllo data, a cancellare le righe di 
codice e poi a riscriverle aggiungendo di nuovo il controllo... ora 
funziona :|
Sicuramente c'era qualche errore ma pur con tutta la pazienza non sono 
riuscito a scovarlo! Anche perché ho rimesso le cose come prima...
Meglio così comunque :)
Ciao e grazie a tutti!
Marco / iw2nzm