PROBLEMAS COM FILTRO EM RECORDSET

USUARIO.EXCLUIDOS 10/06/2005 16:08:54
#88285
Pessoal estou com a seguinte rotina:
With rst2
With .Fields
.Append "datref", adVariant
.Append "codfil", adVariant
.Append "tipven", adVariant
.Append "vlvend", adVariant
.Append "vlcust", adVariant
.Append "vlimpo", adVariant
.Append "vlcagr", adVariant
.Append "vlragr", adVariant
.Append "vllucb", adVariant
.Append "perlub", adVariant
.Append "qtdvei", adVariant
End With
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open , , adOpenDynamic, adLockOptimistic
End With

filtod = False
anager = True

While Not rst.EOF

If Not rst2.EOF Then
rst2.Filter = adFilterNone
rst2.Filter = "tipven = 'GER'"
End If
If rst2.EOF Then
rst2.AddNew
rst2!datref = rst!datref
rst2!codfil = IIf(filtod, 999, rst!codfil)
rst2!tipven = IIf(anager, "GER", rst!tipven)
rst2!vlvend = rst!vlvend
rst2!vlcust = rst!vlcust
rst2!vlimpo = rst!vlimpo
rst2!vlcagr = rst!vlcagr
rst2!vlragr = rst!vlragr
rst2!vllucb = rst!vllucb
rst2!perlub = rst!perlub
rst2!qtdvei = rst!qtdvei
rst2.Update
Else
'Totaliza regs
End If
rst.MoveNext
Wend

A questão é que qdo vou efetuar o filtro no recordset dinà¢mico dá o erro:
Run-time error '-2147217825' - O filtro não pode ser aberto... alguém sabe o q pode estar errado??? Por favor!!!
USUARIO.EXCLUIDOS 10/06/2005 16:24:02
#88291
O que você quer fazer com essa propriedade FILTER?
USUARIO.EXCLUIDOS 10/06/2005 16:28:10
#88293
Localizar o registro com tipven = "GER" em rst2 para somar os valores apurados em rst.
USUARIO.EXCLUIDOS 10/06/2005 16:53:26
#88300
Então troca pra:

While Not rst.EOF 

If rst2.RecordCount > 0 Then
rst2.MoveFirst
rst2.Find "tipven = 'GER'"
Endif

If not rst2.EOF Then
rst2.AddNew
rst2!datref = rst!datref
rst2!codfil = IIf(filtod, 999, rst!codfil)
rst2!tipven = IIf(anager, "GER", rst!tipven)
rst2!vlvend = rst!vlvend
rst2!vlcust = rst!vlcust
rst2!vlimpo = rst!vlimpo
rst2!vlcagr = rst!vlcagr
rst2!vlragr = rst!vlragr
rst2!vllucb = rst!vllucb
rst2!perlub = rst!perlub
rst2!qtdvei = rst!qtdvei
rst2.Update
Else
'Totaliza regs
End If
rst.MoveNext

Wend
USUARIO.EXCLUIDOS 10/06/2005 16:57:50
#88303
putz... só q tem situações q vou usar mais de um critério no FIND... e se não me engano o find não permite... ou estou errado??
Exemplo:
rst2.Find "tipven = 'GER' AND codfil = 1"

dá certo???
USUARIO.EXCLUIDOS 10/06/2005 17:45:35
#88315
Sem problemas! Na verdade, eu não recomendo fazer querys usando o FIND, pois decresce MUITO a performance da aplicação, sempre faço a busca usando o WHERE do SQL que é bem mais rápido, e retorna o registro da mesma forma, contribuindo para a melhora de velocidade da aplicação.

Pra resolver o problema do FIND, faz o seguinte: (Vou até postar na parte de dicas do Site)

1- Declare um recordset público com o nome de CLONE_RS assim:

Public clone_rs As ADODB.Recordset
   


2- Cole este código num módulo:

Public Sub Multi_Find( _
ByRef oRs As ADODB.Recordset, _
sCriteria As String)

Dim clone_rs As ADODB.Recordset
Set clone_rs = oRs.Clone

clone_rs.Filter = sCriteria

If clone_rs.EOF Or clone_rs.BOF Then
oRs.MoveLast
oRs.MoveNext
Else
oRs.Bookmark = clone_rs.Bookmark
End If

clone_rs.Close
Set clone_rs = Nothing

End Sub


4- Chame o MULTI_FIND assim:

Multi_Find rs, "state = 'RJ' AND city = 'Rio'"

If rs.EOF then
Msgbox "Não encontrado!"
Else
Msgbox "Encontrado!"
Endif

Entendeu?
Tópico encerrado , respostas não são mais permitidas