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

Busca Em 2 Ou Mais Campos


Curinga

Pergunta

Pessoal,

Estou fazendo um programa, e surgiu uma dúvida na parte de busca.

Minha busca é feita em SQL, na busca a pessoa tem a opção de buscar pelo CÓDIGO do cliente ou pelo NOME, ou seja, dois Edits, então, eu gostaria de saber, tem como ser feita uma busca da seguinte forma: Ex:

No edit do CÓDIGO a pessoa digita. Ex: 1

No edit do NOME a pessoa digita. Ex: J

Então o programa busca TODOS que contenham 1 no CODIGO e todos que contenham J no NOME.

Tem como fazer isso?

Agradeço desde já a atenção de todos...

Obrigado.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Deu erro,

olha como tá a minha pesquisa

Query1.sql.add('select * from Tabela where Upper(Nome) Like Upper(' +#39+'%' +EdtNome.Text+ '%'+#39+ ')');

eu coloquei depois da dica assim

Query1.sql.add('select * from Tabela where Upper(Nome) Like Upper(' +#39+'%' +EdtNome.Text+ '%'+#39+ ') and CODIGO like (' +EdtCODIGO.Text +') ');

Compilo normal, mas deu erro na hora de testa, será que é porque o meu Nome é Alfanumérico e meu Código não?

Link para o comentário
Compartilhar em outros sites

  • 0
Deu erro,

olha como tá a minha pesquisa

Query1.sql.add('select * from Tabela where Upper(Nome) Like Upper(' +#39+'%' +EdtNome.Text+ '%'+#39+ ')');

eu coloquei depois da dica assim

Query1.sql.add('select * from Tabela where Upper(Nome) Like Upper(' +#39+'%' +EdtNome.Text+ '%'+#39+ ') and CODIGO like (' +EdtCODIGO.Text +') ');

Compilo normal, mas deu erro na hora de testa, será que é porque o meu Nome é Alfanumérico e meu Código não?

Sim, exatamente. O operador LIKE só pode ser usado com campos alfanuméricos. Para campos numéricos você terá que utilizar um dos operadores relacionais (=, <>, >, <, etc.). Ou ainda, transformar o valor em alfanumérico (com a função Str(), no caso do mecanismo Jet) e depois aplicar o LIKE. Qual banco de dados você está utilizando?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

eu to usando SQL como busca e minah tabela é do tipo PARADOX, então, como eu deveria fazer pra da certo?

Olha, eu qria que fosse da escolha da pessoa a busca, ex: Se ela qser buscar por Nome ou por Codigo, então independente se um dos campos ficar em branco, porque nesse caso eu vo precisa preencher os dois edits pra ele procura.

então vamos por parte.

Eu qria que ele buscasse todos os codigos que contenham o numero digitado, Ex. se ele digitar 1, ele busca: 11, 21, 110, 71.

Se ele digitar no Nome: D, ele busca: Joao Da Silva, amanDa.

E se caso um dos campos estiver em branco ele busque apenas naquele que esta preenchido. Será que tem como fazer?

deve ser dificil, mas eu acho q tem...

Se poder me ajudar eu fico grato...

Link para o comentário
Compartilhar em outros sites

  • 0

Se você quiser procurar por *qualquer um* dos campos, basta trocar o AND por OR. Todavia, dessa maneira ele *não vai olhar se ambas* as condições atendem ao critério. Ele vai olhar se *qualquer uma* delas atende. Alternativamente, você pode simplesmente acrescentar somente os critérios que foram preenchidos. Repare que todas as condições serão ligadas por um conectivo lógico, exceto a primeira. Então, para facilitar o trabalho, eu sempre coloco uma condição sempre verdadeira nela e as demais vão sendo preenchidas se for o caso. Um exemplo prático:

query1.sql.clear;
query1.sql.add('SELECT * FROM tabela WHERE 1=1');

if edtNome.text<>'' then
    query1.sql.add(' AND Upper(nome) LIKE Upper(' + quotedstr('%' + edtNome.text + '%') + ')');

if edtCodigo.text<>'' then
    query1.sql.add(' AND Str(codigo) LIKE ' + quotedstr('%' + edtCodigo.text + '%'));

{... e assim por diante.}

Note que a primeira condição (1=1) vai ser sempre verdadeira, portanto ignoramos. Isso é só um macete para não ter que decidir em qual deveremos colocar o AND na frente (lembrando que a primeira não o tem). Daí, somente se o nome estiver preenchido ele vai colocar a segunda condição. Se o código também estiver aí entrará a terceira condição. Se somente código estiver preenchido, este entrará como a segunda. Sacou? wink.gif Ah, e veja se o Str(codigo) vai funcionar para o Paradox. No Jet eu sei que funciona.

Qualquer dúvida, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Testei o código que você me passou, e no campo NOME, deu certo, mas no campo CÓDIGO deu erro, deu a seguinte mensagem: "Capability not supported".

Olha como eu to fazendo:

QrFisica.close;

QrFisica.sql.clear;

QrFisica.SQL.Add('Select * FROM TCPFisica Where 1=1');

if EdtNome.Text <> '' then

QrFisica.Sql.Add(' AND Upper(NOME) LIKE Upper(' + quotedstr('%' + EdtNome.Text + '%') + ')')

if EdtCodigo.Text <> '' then

QrFisica.Sql.Add(' AND Str(CODIGO) LIKE ' + quotedstr('%' + EdtCodigo.Text + '%'));

QrFisica.open;

já coloquei ELSE antes do segundo IF, mesmo assim não deu.

Tem algum erro?

valeu, mais uma vez...

Link para o comentário
Compartilhar em outros sites

  • 0
Testei o código que você me passou, e no campo NOME, deu certo, mas no campo CÓDIGO deu erro, deu a seguinte mensagem: "Capability not supported".

Olha como eu to fazendo:

QrFisica.close;

QrFisica.sql.clear;

QrFisica.SQL.Add('Select * FROM TCPFisica Where 1=1');

if EdtNome.Text <> '' then

QrFisica.Sql.Add(' AND Upper(NOME) LIKE Upper(' + quotedstr('%' + EdtNome.Text + '%') + ')')

if EdtCodigo.Text <> '' then

QrFisica.Sql.Add(' AND Str(CODIGO) LIKE ' + quotedstr('%' + EdtCodigo.Text + '%'));

QrFisica.open;

já coloquei ELSE antes do segundo IF, mesmo assim não deu.

Tem algum erro?

valeu, mais uma vez...

Sim, veja o que eu disse no final do outro post:

Ah, e veja se o Str(codigo) vai funcionar para o Paradox. No Jet eu sei que funciona.

Pelo visto o Paradox não pode (ou tem outra função para isso) converter um inteiro em uma string através da função Str().

E *não* vai ter um Else ali, uma vez que ambas as condições podem ser atendidas.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

se eu deixo o campo CODIGO em branco ele busca normal, agora se eu digito algum valor lá, ele da aquele erro que eu informei "Capability not supported".

Um campo numérico deveria ser procurado utilizando operadores como >, >=, =, <=, <, <>, etc. Você pode procurar tudo dentro de um intervalo, por exemplo, codigo>=5 and codigo<=10. Todavia, para procurar por um "1" no qual, 1, 10, 11, 21, 31, 41, etc. atendessem ao critério, exigiria a conversão para string (na qual você pode utilizar o operador LIKE para procura). Esse é que é problema no caso.

Ta dando erro, o que vem a ser esse JET?

É o mecanismo (engine) de banco de dados do Access. Ele é que lida diretamente com o banco de dados e responde às requisições feitas em SQL.

Abraços,

Graymalkin

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...