|
Postada em 28/02/2006 15:21 hs
Pessoal to com uma bomba aki que parecia ser facil mas esta dando erro , eu tenho um listview com as seguintes colunas abaixo uma delas "Proprietario do Imovel" nesta coluna eu pego o Nome de um certo Proprietario de um produto , gostaria de filtrar esse listview atraves dessa consulta atraves do inputBox eu escreveria um NOme Qualquer e seria filtrado no listview todos que tivesse o Mesmo Nome, mas numa coisa tao simples nao funciona, da erro ,eu nunca vi esse erro na vida e pelo que me parece nao fiz nada de errado alguem poderia dar uma olhada no codigo pra ver se acha alguma falha minha obrigado pessoal conto com a ajuda de vcs erro "ADO nao pode encontrar o objeto na colecao correspondente ao nome ou a referencia ordinal solicitada pelo aplicativo " 'no form load
Set rsB = New ADODB.Recordset ListView1.ColumnHeaders.Clear ListView1.ColumnHeaders.Add , , "", 0 ListView1.ColumnHeaders.Add , , "Tipo", 1700 ListView1.ColumnHeaders.Add , , "Código", 0 ListView1.ColumnHeaders.Add , , "Proprietário do Imovel", 3000 ListView1.ColumnHeaders.Add , , "Código do Imóvel", 1800 ListView1.ColumnHeaders.Add , , "Nome do Inquilino", 3000 o botao para consultar Private Sub Command4_Click() STRBUSCA = InputBox("Digite o Nome do Cliente...", "Localizar dados") If STRBUSCA = Empty Then Exit Sub 'filtrando os dados rsB.Filter = "Nome LIKE '" & STRBUSCA & "%'" Call VerificaNome End Sub Public Sub VerificaNome() 'seto recordset
Set rsB = New adodb.Recordset rsB.Open "SELECT Codigo, Nome " & _ "FROM Tbl_Proprietarios ORDER BY Nome ", cnBd, adOpenKeyset, adLockPessimistic 'Limpando os valores atuais da lista ListView1.ListItems.Clear Dim Lst As ListItem Do While Not rsB.EOF Set Lst = ListView1.ListItems.Add With Lst .Text = rsB(0) 'CODIGO .SubItems(3) = rsB(3) ' aki da o erro , nessa linha End With rsB.MoveNext Loop
Set Lst = Nothing End Sub
|
|
|
|
|
Postada em 01/03/2006 07:26 hs
Esse Filter não funciona muito bem com ADO. O negócio é reinstanciar o recordset e preencher o grid de novo.
|
|
|
Korn
|
SAO PAULO SP - BRASIL
|
|
Postada em 01/03/2006 15:18 hs
Muito obrigado Kerplunk Ae pessoal com a ajuda do amigo kerplunk me ajudou a fazer isso tipo assim No botao Consulta
Dim rsB1 As New ADODB.Recordset Set rsB1 = New ADODB.Recordset STRBUSCA = InputBox("Digite o Nome do Cliente...", "Localizar Dados") If STRBUSCA = Empty Then Exit Sub rsB1.Open "select * from Tbl_Proprietarios where Nome = '" & Nome & "'", cnBd, adOpenKeyset, adLockPessimistic Call VerificaNome
e na public sub Set rsB1 = New ADODB.Recordset rsB1.Open "select * from Tbl_Proprietarios where Nome = '" & Nome & "'", cnBd, adOpenKeyset, adLockPessimistic ListView1.ListItems.Clear Dim Lst As ListItem Do While Not rsB1.EOF Set Lst = ListView1.ListItems.Add With Lst .Text = rsB1(0) .SubItems(3) = rsB1(3) End With rsB1.MoveNext Loop Set Lst = Nothing mas agora pessoal nao acontece nada liga eu faço a pesquisa pelo nome tipo Lucia Andrade , e mesmo se tiver resultado o listview fica em branco entende , nao aparece nada , alguem pode me ajudar mais essa vez ai , valew
Jesus Cristo é O Senhor!!!
|
|
|
|
Postada em 02/03/2006 07:37 hs
Korn, vou te falar o porque do primeiro erro: presta atençao nessa linha: rsB.Open "SELECT Codigo, Nome FROM Tbl_Proprietarios ORDER BY Nome " (...) Ai vc ta abrindo o recorset com apenas 2 colunas (Codigo e Nome) mas na linha abaixo vc ta pedindo a coluna de indice 3 (quarta coluna)... .SubItems(3) = rsB(3) ' aki da o erro , nessa linha Posso estar enganado, mas acho q o q vc queria era o seguinte: .SubItems(3) = rsB(1) ' aki da o erro , nessa linha Quando a segunda questao, de nao estar retornando nenhuma linha na pesquisa, coloca um * depois do nome na consulta, e troca o = por LIKE... Sem ver a situação-problema de perto, nao da pra garantir qual o erro, mas pode ser isso... rsB1.Open "select * from Tbl_Proprietarios where Nome LIKE '" & Nome & "*'" Vou explicar: 1) o operador = é comparação binaria... já o LIKE vai fazer a comparação por aproximação (o correto para comparar strings)... 2) O * no final do nome não é obrigatorio, mas na minha opniao é muito util, pois permite fazer a pesquisa apenas pelo inicio do nome, dando mais flexibilidade...
Elieser Carlos Topassi Analista de Sistemas - Desenvolvedor VB/ASP/.Net
e-mail/msn: elieser_topassi@yahoo.com.br
São José do Rio Preto,SP - Brasil _____________________________________________________ "O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)
|
|
|
Korn
|
SAO PAULO SP - BRASIL
|
|
Postada em 02/03/2006 09:32 hs
Blz Elieser mas o negocio é q eu mudei pro jeito que vc falou mas continua nao voltando nada para o listview veja como ficou Public Sub VerificaNome() Set rsB1 = New adodb.Recordset rsB1.Open "select * from Tbl_Proprietarios where Nome LIKE '" & Nome & "*'", cnBd, adOpenKeyset, adLockPessimistic ListView1.ListItems.Clear Dim Lst As ListItem Do While Not rsB1.EOF Set Lst = ListView1.ListItems.Add With Lst .Text = rsB1(0) .SubItems(1) = rsB1(1) .SubItems(2) = rsB1(2) .SubItems(3) = rsB1(3) .SubItems(4) = rsB1(4) .SubItems(5) = rsB1(5) .SubItems(6) = rsB1(6) .SubItems(7) = rsB1(7) .SubItems(8) = rsB1(8) .SubItems(9) = rsB1(9) .SubItems(10) = rsB1(10) .SubItems(11) = rsB1(11) .SubItems(12) = rsB1(12) .SubItems(13) = rsB1(13) .SubItems(14) = rsB1(14) .SubItems(15) = rsB1(15) .SubItems(16) = rsB1(16) .SubItems(17) = rsB1(17) End With rsB1.MoveNext Loop Set Lst = Nothing End Sub
Jesus Cristo é O Senhor!!!
|
|
|
|
Postada em 02/03/2006 09:37 hs
No like se for Dao seria * mas no ADO se usa %
|
|
|
|