Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisa VB 6


GilbertoB

Pergunta

o problema é o seguinte eu tenho um form de pesquisa que tem uma textbox onde digita o nome a ser procurado um commandbutton para acionar a pesquisa e uma listbox onde aparece o resultado até ai tudo bem, o problema é que quero digitar apenas o primeiro nome na textbox e aprensentar todos nomes que comecem com aqueles caracteres, por exemplo, eu digito Carlos na textbox e clico no commandbutton de pesquisa e apresenta todos Carlos na listbox, Carlos Gonzaga, Carlos Ferraz e por ai vai, sea que podem me ajudar ? Estou começando no ramo de programação então se poderem deixar bem esplicado eu agradeço.

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0

Ola Gilberto, tudo bem??

Bem vindo ao fórum...

Para fazer esse tipo de busca, você pode utilizar o MID....

no caso se você se conecta por sql, seria assim:

set rsdados = new adodb.recordset
rsdados.open "select * from TABELA where mid(COLUNA,0,len(txt1.text)) = '" & mid(txt1.text,0,len(txt1.text)) & "'"

Não testei, mas acredito que seja a partir dessa logica...

Abraços cara... se n der certo eu testo aqui....

Boa sorte :D

Link para o comentário
Compartilhar em outros sites

  • 0
Ola Gilberto, tudo bem??

Bem vindo ao fórum...

Para fazer esse tipo de busca, você pode utilizar o MID....

no caso se você se conecta por sql, seria assim:

set rsdados = new adodb.recordset
rsdados.open "select * from TABELA where mid(COLUNA,0,len(txt1.text)) = '" & mid(txt1.text,0,len(txt1.text)) & "'"

Não testei, mas acredito que seja a partir dessa logica...

Abraços cara... se n der certo eu testo aqui....

Boa sorte :D

Vlw pela resposta tenho um baco de dados no access fiz a tabela e salvei os nomes no campo tabela, não sei o que é MID :blush: mas vou pesquisar, vou ver se consigo seguir a logica pra fazer a pesquisa aki, depois posto pra falar se deu certo ^_^

Link para o comentário
Compartilhar em outros sites

  • 0

o mid ele meio que pega trechos, por exemplo, se eu colocar mid(txt1.text,1,3) e no meu txt1.text esteja escrito Matheus, ele pegara Mat, porque eu determinei q começa a partir do primeiro caracter os 3... ou outro exemplo, no meu text1.text esteja escrito Matheus novamente e eu fale mid(txt1.text,3,2) ele pegara th

Abraços :D

Link para o comentário
Compartilhar em outros sites

  • 0
o mid ele meio que pega trechos, por exemplo, se eu colocar mid(txt1.text,1,3) e no meu txt1.text esteja escrito Matheus, ele pegara Mat, porque eu determinei q começa a partir do primeiro caracter os 3... ou outro exemplo, no meu text1.text esteja escrito Matheus novamente e eu fale mid(txt1.text,3,2) ele pegara th

Abraços :D

vlw dinovo Matheus, entendi o que é mid, amanhã vou tentar fazer a pesquisa ^_^

Link para o comentário
Compartilhar em outros sites

  • 0

Bem Vindo GilbertoB !

Cara, eu utilizo a função "LIKE" do SQL... veja no exemplo abaixo, que faço uma filtragem no banco, segundo o que for digitado na Caixa de Texto "txt_fil":

Private Sub cmd_filtro_Click()
Dim FT As String    ' 1
Dim SQL As String   ' 2

FT = txt_fil.Text   ' 3
FT = FT & "%"       ' 4

SQL = "SELECT * FROM Clientes WHERE Nome LIKE '" & FT & "'"      ' 5

AFB   ' 6

Set Rs = New ADODB.Recordset   ' 7
Rs.Open SQL, Con, adOpenKeyset, adLockReadOnly   ' 8

Lst1.Clear   ' 9
Do Until Rs.EOF    ' 10
Lst1.AddItem Rs!Nome & vbTab & Rs!Cidade     ' 11
Rs.MoveNext    ' 12
Loop    ' 13

End Sub

Aqui vai comentário detalhado de cada linha do script (segundo meus conhecimentos :rolleyes: )

1-Declarei que FT é uma variavel do tipo STRING;

2-O mesmo para a variavel SQL;

3-Na variavel "FT", aloquei o que foi digitado na TextBox "txt_fil";

4-Concatenei o sinal "%" ao que foi digitado no TextBox, este simbolo serve como wildcards

(letras que faltam para completar a palavra);

5-Na variavel SQL aloquei a string de consulta ao Banco de Dados:

"Selecionar tudo da Tabela Clientes onde na Coluna Nome contenha " FT " (sua filtragem)"

traduzindo dá +/- isso :D

6-"AFB" é a Função que uso para abrir o Banco de Dados...tipo Con.ConnectionString = "Provider...ststststtsststt

7-Estou setando o RecordSet, dizendo que a variavel "Rs" é um novo objeto RecordSet do tipo ADO

8-"RS.Open" = Estou a abrir o Rs (RecordSet);

"Con" = estou fazendo a conexão com o banco;

"adOpenKeyset" = Abre um cursor do tipo keyset, que não permite visualizar registros excluidos ou alterados por outro usuário, caso use umBanco de Dados multi-usuario;

"adLockReadOnly" = Configura o Cursor como modo de leitura;

O "adOpenKeyset" e o "adLockReadOnly" uso apenas por segurança, não sei se é o seu caso...qualquer coisa, pule esta parte :)

9-Tenho uma ListBox (Lst1) onde sempre a esvazio (Lst1.Clear) antes de povoá-la com os dados do RecordSet;

10-Aqui faço a rotina de ciclo no banco:

Fazer até que o RecordSet chegue ao fim

traduzindo dá +/- isso <_<

11-Os conteúdos dos Campos "Nome" e "Cidade" são adicionados ao ListBox;

12-Movendo o ponteiro do RecordSet para o proximo registro;

13-Fechando a rotina do ciclo.

OBS:

No exemplo, estou a carregar os dados dos campos "Nome" e "Cidade"...se quiser adicionar mais campos basta usar a lógica do exemplo:

a cada campo colocar " & vbTab & "

Tipo:

Lst1.AddItem Rs!Nome & vbTab & Rs!Cidade & vbTab & Rs!Endereco & vbTab & Rs!CEP ...

Utilizei a forma de indexação dos campos com o sinal de Exclamação "!", mas pode ser feito também com Parênteses e Aspas:

Lst1.AddItem Rs("Nome") & vbTab & Rs("Cidade") & vbTab & Rs("Endereco") & vbTab & Rs("CEP")

Funciona de ambas maneiras ;)

GilbertoB, expliquei detalhadamente pois não sei o seu nível de conhecimento...então me baseei por mim, que ralei um pouco para assimilar "RecordSets, ConnectionsStrings, Funções SQL's" <_<...e ainda ralo pra KCT :)...

foi preciso muita paciência do pessoal do fórum e também do Matheus-vb6 (trocamos diálogos pelo MSN) para absorver partes do conteúdo.

Boa Sorte e qualquer coisa tamos aê na medida do possível ! :rolleyes:

Editado por Danleonhart
Link para o comentário
Compartilhar em outros sites

  • 0
Bem Vindo GilbertoB !

Cara, eu utilizo a função "LIKE" do SQL... veja no exemplo abaixo, que faço uma filtragem no banco, segundo o que for digitado na Caixa de Texto "txt_fil":

Private Sub cmd_filtro_Click()
Dim FT As String    ' 1
Dim SQL As String   ' 2

FT = txt_fil.Text   ' 3
FT = FT & "%"       ' 4

SQL = "SELECT * FROM Clientes WHERE Nome LIKE '" & FT & "'"      ' 5

AFB   ' 6

Set Rs = New ADODB.Recordset   ' 7
Rs.Open SQL, Con, adOpenKeyset, adLockReadOnly   ' 8

Lst1.Clear   ' 9
Do Until Rs.EOF    ' 10
Lst1.AddItem Rs!Nome & vbTab & Rs!Cidade     ' 11
Rs.MoveNext    ' 12
Loop    ' 13

End Sub

Aqui vai comentário detalhado de cada linha do script (segundo meus conhecimentos :rolleyes: )

1-Declarei que FT é uma variavel do tipo STRING;

2-O mesmo para a variavel SQL;

3-Na variavel "FT", aloquei o que foi digitado na TextBox "txt_fil";

4-Concatenei o sinal "%" ao que foi digitado no TextBox, este simbolo serve como wildcards

(letras que faltam para completar a palavra);

5-Na variavel SQL aloquei a string de consulta ao Banco de Dados:

"Selecionar tudo da Tabela Clientes onde na Coluna Nome contenha " FT " (sua filtragem)"

traduzindo dá +/- isso :D

6-"AFB" é a Função que uso para abrir o Banco de Dados...tipo Con.ConnectionString = "Provider...ststststtsststt

7-Estou setando o RecordSet, dizendo que a variavel "Rs" é um novo objeto RecordSet do tipo ADO

8-"RS.Open" = Estou a abrir o Rs (RecordSet);

"Con" = estou fazendo a conexão com o banco;

"adOpenKeyset" = Abre um cursor do tipo keyset, que não permite visualizar registros excluidos ou alterados por outro usuário, caso use umBanco de Dados multi-usuario;

"adLockReadOnly" = Configura o Cursor como modo de leitura;

O "adOpenKeyset" e o "adLockReadOnly" uso apenas por segurança, não sei se é o seu caso...qualquer coisa, pule esta parte :)

9-Tenho uma ListBox (Lst1) onde sempre a esvazio (Lst1.Clear) antes de povoá-la com os dados do RecordSet;

10-Aqui faço a rotina de ciclo no banco:

Fazer até que o RecordSet chegue ao fim

traduzindo dá +/- isso <_<

11-Os conteúdos dos Campos "Nome" e "Cidade" são adicionados ao ListBox;

12-Movendo o ponteiro do RecordSet para o proximo registro;

13-Fechando a rotina do ciclo.

OBS:

No exemplo, estou a carregar os dados dos campos "Nome" e "Cidade"...se quiser adicionar mais campos basta usar a lógica do exemplo:

a cada campo colocar " & vbTab & "

Tipo:

Lst1.AddItem Rs!Nome & vbTab & Rs!Cidade & vbTab & Rs!Endereco & vbTab & Rs!CEP ...

Utilizei a forma de indexação dos campos com o sinal de Exclamação "!", mas pode ser feito também com Parênteses e Aspas:

Lst1.AddItem Rs("Nome") & vbTab & Rs("Cidade") & vbTab & Rs("Endereco") & vbTab & Rs("CEP")

Funciona de ambas maneiras ;)

GilbertoB, expliquei detalhadamente pois não sei o seu nível de conhecimento...então me baseei por mim, que ralei um pouco para assimilar "RecordSets, ConnectionsStrings, Funções SQL's" <_<...e ainda ralo pra KCT :)...

foi preciso muita paciência do pessoal do fórum e também do Matheus-vb6 (trocamos diálogos pelo MSN) para absorver partes do conteúdo.

Boa Sorte e qualquer coisa tamos aê na medida do possível ! :rolleyes:

Eu não consegui usa porque não sei usar esse AFB se podesse me explicar essa parte melhor ficaria grato é a unica parte que não sei porque nunca usei SQL estive evintado usar até agora mas parece que não tem jeito, me desculpe se estou dando trabalho é que estou começando a programar agora e o curso que fiz era muito ruim, por isso peço um poco de paciencia :) e obrigodo ao Matheus e a você pelo bem vindo ao forum :D

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigo !

Pare de se desculpar...estamos aqui para compartilhar, e compreendo se tem dificuldade, pois também tive e ainda tenho :D.

Agora, quando falei "SQL" não quis dizer propriamente o SQL Server...mas sim a base dele...

Veja aqui !

AFB é uma função que criei onde fica a configuração da abertura e conexão do Banco de Dados:

Public Function AFB()
Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\BData.mdb;Persist Security Info=False"
End Function
Então, para não ficar digitando sempre nas Sub's a configuração da string de conexão, cria-se uma função contendo isso...para evitar script's repetitivos O mesmo vale se for colocado no lugar do AFB o conteúdo:
Set Con = New ADODB.Connection
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\BData.mdb;Persist Security Info=False"
Agora imagine, sempre que for abrir a base de dados ficar digitando, ou até mesmo copiando e colando...dá um trabalhinho hein ! Outra coisa, você pode ver que estou usando uma variável para alocar o Objeto de Conexão, neste caso o "Con"...então é importante declará-lo, quer seja no módulo (que é o meu caso) ou no Form... No Form fica assim:
Public Con As ADODB.Connection
No Módulo pode ser do mesmo jeito, ou assim:
Global Con As ADODB.Connection

Assim estou declarando que "Con" é um Objeto de conexão do tipo "AdoDB", em ambos se é colocado no "Generals Declaration", que fica acima de todo código que foi ou vai ser digitado:

82934972.png

Espero ter ajudado, e não complicado mais ;)

VALEU !

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw pela ajuda ta bem esplicado entendi tudo perfeitamente :D

só tem um problema é que eu nunca abri uma conexão com base de dados

Public Function AFB()

Set Con = New ADODB.Connection

Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\BData.mdb;Persist Security Info=False"

nessa ultima linha o que significa o primeiro Data ? e BData eu coloquei meu banco de dados do acces ta certo ?

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte...

Você pode colocar no 1º Data, que é "Data Source" (Traduzindo: Fonte de Dados), o caminho onde está seu arquivo de Banco de Dados...que no caso do Access, tem formato ".MDB"...

No meu caso, sempre coloco o arquivo .MDB na mesma pasta da aplicação, ou seja, onde fica o executável do aplicativo, e no caso de ainda está desenvolvendo a aplicação, na pasta do projeto ;).

Então, se você tem um Banco de dados Access no caminho: "C:\Teste\Banco.mdb", você pode colocar assim na string de conexão:

Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Teste\Banco.mdb;Persist Security Info=False"
Se optar por fazer como eu, em deixar o arquivo .MDB na mesma pasta da aplicação/projeto, então utilize o "App.Path" que serve para indicar o diretório da aplicação como referência.
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Banco.mdb;Persist Security Info=False"

OBS:

Perguto: Você fez referência a biblioteca (".DLL") Microsoft ActiveX Data Objects ?

para esta conexão é preciso referenciá-la...

Se não fez, basta seguir estas orientações:

Clique na aba PROJECT > REFERENCES...

Na lista que será apresentada, procure por "Microsoft ActiveX Data Objects 2.8 Library".

Serão apresentadas outras versões desta biblioteca (2.7, 2.6...) escolha a mais recente...pelo que sei, é a versão 2.8.

Qualquer coisa só falar...se eu souber, respondo :D

VALEU !

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz tudo certo mas quando vou realizar a pesquisa da o seguinte erro " O mecanismo de banco de dados Microsoft jet não encontrou a tabela de entrada ou consulta 'Clientes'. Certifique-se de que ela existe e de que seu nome está digitado corretamente."

eu use essa linha e preenchi com os dados do banco de dados aki

Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Teste\Banco.mdb;Persist Security Info=False"

mas parece que ele não encontrou o banco de dados

Link para o comentário
Compartilhar em outros sites

  • 0

Veja estes pontos:

- Qual versão do Access que você está usando ?

- Existe realmente a Tabela Clientes ? ela está salva com este nome mesmo ? não use caracteres especiais (tipo:"-", "_", "ç" ,"^"), quando for dá nomes a Tabelas ou Campos da Tabela...sempre que "tentei" deu erro <_< ;

- O endereço do banco é mesmo: "C:\Teste\Banco.mdb" ? istó é, você o colocou neste diretório do computador ? pois ví que tá exatamente como postei como exemplo...

Veja esses pontos e nos dê um retorno ;).

Valeu !

Link para o comentário
Compartilhar em outros sites

  • 0

Eu coloquei tudo certo por conhecidencia minha tabela chama Cadastro e o campo Codigo coloquei o diretorio corretamente o erro na verdade não esta nessa linha quando cliko em debug ele seleciona essa linha imagino que o problema seja nela, eu colkei pra abri o banco de dados pelo general que nem você fez e coloquei AFB ai deu o seguinte erro ' Os argumentos são incorretos, estão fora do intervalo aceitavel ou estão em conflito. ' nessa linha

Rs.Open SQL, Con, adOpenKeyset, adLockReadOnly

ela fica selecionada deve ser nela o erro mas nem sei como consertar :blush:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...