Ir ao conteúdo

Consulta Delphi


Hesodia

Posts recomendados

Postado

A dúvida agora é o seguinte. To usando o Filter para localizar as pessoas no DBGrid.

Dm.Table1.Filter := 'nome = ''' + EdtNome.Text + '''';
Dm.Table1.Filtered := True;

Dai eu coloco o nome da pessoa por exemplo Tonho dai ele mostra onde ta o Tonho. Até ai beleza. Ai digamos que tenha cadastrado no meu registro um Tonho da Lua, Tonho Laus, Tonho do Mato, dai queria saber como fazer para quando pesquisar por Tonho somente, ele não só mostrar o Tonho mas sim todos os Tonhos. Tentei usar o Like mas não dava certo.

  • Membro VIP
Postado

Olá!

Para começar, a propriedade filter, pelo padrão que segue, necessita que suas strings estejam entre aspas simples. O problema é que se utilizarmos aspas simples no delphi ele encerrará a string.

Para colocarmos uma string entre aspas simples utilizamos a função QuotedStr();

Para pesquisar utilizando o like, deveriamos colocar o wildcard % no lugar em que não soubessemos o que é.

Ficaria, então, assim:

Dm.Table1.Filter := 'nome LIKE '+QuotedStr(EdtNome.Text+'%');
Dm.Table1.Filtered := True;

Qualquer dúvida poste!

Abraços!

Postado
Olá!

Para começar, a propriedade filter, pelo padrão que segue, necessita que suas strings estejam entre aspas simples. O problema é que se utilizarmos aspas simples no delphi ele encerrará a string.

Para colocarmos uma string entre aspas simples utilizamos a função QuotedStr();

Para pesquisar utilizando o like, deveriamos colocar o wildcard % no lugar em que não soubessemos o que é.

Ficaria, então, assim:

Dm.Table1.Filter := 'nome LIKE '+QuotedStr(EdtNome.Text+'%');
Dm.Table1.Filtered := True;

Qualquer dúvida poste!

Abraços!

Quando coloco esse comando o programa copila mas quando vai fazer a consulta da erro. Ontem na aula o professor tinha até tentado fazer assim usando o Like só que ele falou que o Delphi não suportava o Like. Ai se tem outra forma de fazer.

Fiquei sabendo que o BDE não suporta o Like e então terei que usar o componente Query da aba BDE. O problema é que eu nunca usei o Query. Ai queria que alguem me desse uma ideia de como funciona o componente e como eu aplicaria para a aplicação que eu quero que é a consulta.

Postado

Então... estive mexendo neste componente... Ele é igual ao TTable que você usa a diferença está na propriedade SQL. É nela que você vai colocar o comando SQL para fazer a pesquisa no banco.

Fiz aqui um exemplo rápido para você entender um pouco este componente.

você configura a conexao dele normalmente como no TTable mas na propriedade SQL você coloca a linha SQL para pesquisar no banco.

No seu caso você vai colocar algo do tipo: select Campo1, Campo2, Campo3 from Tabela1 where Campo1 like :Campo1

Supondo que campo1 seja o campo q você vai pesquisar o nome.

O :Campo1 é o parametro q passamos para o sql.

Na propriedade Params do Query clique na redicencias "..." ele irá abrir uma janela com os parametros que usamos na linha sql no nosso caso Campo1.

Clique nele para selecionar.

Nas propriedades dele vamos colocar da seguinte forma:

DataType: ftString

ParamType: ptInput

DataType é o tipo do campo e ParamType indica que é um parametro de Input.

pronto... Já configuramos o param do Query.

Agora temos que colocar por exemplo em um evento onclick de um botão o seguinte comando:


query1.close; //Fecha a tabela
query1.params[0].AsString:= edit1.text + '%';
//Edit1 é onde o usuario coloca o nome para a pesquisa o % é usado para
//aceitar qualquer caracter depois do digitado exemplo: digite "Ra" e ele
//retona rafael, raquel, etc...
query1.open; //Abre a tabela

Espero que você tenha entendido... não sou muito bom pra explicar :P

Qualquer duvida post ai ^_^

Postado
;3820610']Então... estive mexendo neste componente... Ele é igual ao TTable que você usa a diferença está na propriedade SQL. É nela que você vai colocar o comando SQL para fazer a pesquisa no banco.

Fiz aqui um exemplo rápido para você entender um pouco este componente.

você configura a conexao dele normalmente como no TTable mas na propriedade SQL você coloca a linha SQL para pesquisar no banco.

No seu caso você vai colocar algo do tipo: select Campo1' date=' Campo2, Campo3 from Tabela1 where Campo1 like :Campo1

Supondo que campo1 seja o campo q você vai pesquisar o nome.

O :Campo1 é o parametro q passamos para o sql.

Na propriedade Params do Query clique na redicencias "..." ele irá abrir uma janela com os parametros que usamos na linha sql no nosso caso Campo1.

Clique nele para selecionar.

Nas propriedades dele vamos colocar da seguinte forma:

DataType: ftString

ParamType: ptInput

DataType é o tipo do campo e ParamType indica que é um parametro de Input.

pronto... Já configuramos o param do Query.

Agora temos que colocar por exemplo em um evento onclick de um botão o seguinte comando:


query1.close; //Fecha a tabela
query1.params[0].AsString:= edit1.text + '%';
//Edit1 é onde o usuario coloca o nome para a pesquisa o % é usado para
//aceitar qualquer caracter depois do digitado exemplo: digite "Ra" e ele
//retona rafael, raquel, etc...
query1.open; //Abre a tabela

Espero que você tenha entendido... não sou muito bom pra explicar :P

Qualquer duvida post ai ^_^[/quote']

Eu botei lá

Select Nome From Aluno Where Nome Like : Nome

Dai faço o resto das coisas e mando rodar ele não funciona. Quando dou 2 clicks no SQL pra adicionar os campos não acha nada. Ai eu dou um

Select * From Aluno

Dai aparece os campos da tabela. O erro que da é DataBase Engine Error - General SQL Error. Erro de Sintaxe na expressão de consulta 'Nome Like Pa_RaM000 Nome'.

Postado

Uhn... no parametro apareceu o nome certo?

você colocou :Nome certo??? os dois-pontos ":" deve está junto do nome se não, não vai funcionar

Os campos não apareceu porque deu erro de sintax e o unico problema q percebi é q os : não está junto do nome.

você fez assim mesmo?

Postado
;3821033']Uhn... no parametro apareceu o nome certo?

você colocou :Nome certo??? os dois-pontos ":" deve está junto do nome se não' date=' não vai funcionar

Os campos não apareceu porque deu erro de sintax e o unico problema q percebi é q os : não está junto do nome.

você fez assim mesmo?[/quote']

Ahh pensei que não tinha diferença entre os espaços dai eu coloquei tudo junto e quando fui em Params tava lá o campo nome. Dai quando eu coloco pra ativar o SQL da o mesmo erro.

Eu estou usando os componentes em um DataModule e conectando o o DataBase e a Table pelo evento OnCreate do Form

Dm.Database1.Connected := True;
Dm.Table1.Active := True;

E no OnDestroy

Dm.Table1.Active := False;
Dm.Database1.Connected := False;

Dai deixo os componentes como Connected = False.

Postado

você colocou desta forma?

Select Nome From Aluno Where Nome Like :Nome

e mesmo assim deu o erro???

você conseguiu mudar as propriedades do parametro nome???

Postado
;3821049']você colocou desta forma?

Select Nome From Aluno Where Nome Like :Nome

e mesmo assim deu o erro???

você conseguiu mudar as propriedades do parametro nome???

Botei assim

Select Nome From Aluno Where Nome Like:Nome

E consegui sim mudar as propriedades que você falou.

Postado

O problema ocorreu porque o like está junto com os dois-pontos

Deixe desta forma

Select Nome from Aluno where Nome Like :Nome

sempre dê um espaço depois do Like.

E sempre deixe os dois-pontos junto do parametro q você quer criar por q só assim ele entede q é um parametro.

agora deve funcionar ^_^

Postado
;3821069']O problema ocorreu porque o like está junto com os dois-pontos

Deixe desta forma

Select Nome from Aluno where Nome Like :Nome

sempre dê um espaço depois do Like.

E sempre deixe os dois-pontos junto do parametro q você quer criar por q só assim ele entede q é um parametro.

agora deve funcionar ^_^

Fiz como você falou e agora deu certo botei lá Active True e funcionou. Dai criei o botão botei o Edit e mandei rodar o programa. Dai boto o nome no Edit e clico no botão e não faz nada. Ativei o DataBase e a Table como True e tirei a conexão do OnCreate e do OnDestroy e tambem não faz nada a consulta.

Postado
;3821126']qual o codigo q você colocou no botão?

procedure TFrmAluno.Button1Click(Sender: TObject);
begin
DM.query1.close;
DM.query1.params[0].AsString:= Edit1.Text + '%';
DM.query1.open;
end;

Postado


procedure TFrmAluno.Button1Click(Sender: TObject);
begin
DM.query1.close;
DM.query1.params[0].AsString:= QuotedStr(Edit1.Text) + '%';
DM.query1.open;
end;

se passar para o valor X para edit.text ele irá sair dessa forma quando o sql for lido


select * from tabela where nome = X
//com isso ele irá entender que X ou é um inteiro ou
é um campo o que irá ocorrer erro de conversão ou campo não encontrado

se quiser passar uma string para dentro do sql que já é uma string deve-se usar a função QuotedStr

QuotedStr(X)

quando o SQL for lido ele irá enterpretar da seguinte forma


select * from tabela where nome = 'X'

Ou também você pode usar as '':

EX: SQL:= 'Select * from tabela where nome like ' ' A ' ' ';

As cores das ' são para ajudar à entender, pois pode parecer confuso esse tanto de ', tudo isso para falar que o que você está mandando para dentro do SQL é para ser lido como texto e não como valor

Postado

Não entendi muito bem a explicação Merephet. Tentei fazer já um monte de coisa fiz como o RP falou roda tranquilo dai quando clico no botão não faz nada. To endoidando já com isso.

Postado

Quando você deseja passar um texto para o SQL terá que usar a função QuotedStr.

EX:

Select * From tabela where nome = 'bola' //Esse é um sql comun para procurar um texto

Mas se fizer isso no Delphi:

SQL := 'Select * From tabela where nome = bola' //Lembre-se que o SQL é texto e você vai passar para ele procurar um texto, e ae que está o problema, pois bola e 'bola' é diferente no primeiro caso quando o SQL for lido ele irá entender que o você deseja procurar o texto bola no segundo será o campo bola.

Dai fica com esse detalhe em programação Delphi, pois como você irá passar um SQL que já é texto um texto para ele buscar.

Para testar faça um SQL simples e coloque o point break no SQL e rode o programa. Em seguida olhe o valor que ficará o SQL.

EX

Select * From Tabela Where Nome = ' + edit1.text;

Depois observe como irá ficar o resultado.

Postado
Quando você deseja passar um texto para o SQL terá que usar a função QuotedStr.

EX:

Select * From tabela where nome = 'bola' //Esse é um sql comun para procurar um texto

Mas se fizer isso no Delphi:

SQL := 'Select * From tabela where nome = bola' //Lembre-se que o SQL é texto e você vai passar para ele procurar um texto, e ae que está o problema, pois bola e 'bola' é diferente no primeiro caso quando o SQL for lido ele irá entender que o você deseja procurar o texto bola no segundo será o campo bola.

Dai fica com esse detalhe em programação Delphi, pois como você irá passar um SQL que já é texto um texto para ele buscar.

Para testar faça um SQL simples e coloque o point break no SQL e rode o programa. Em seguida olhe o valor que ficará o SQL.

EX

Select * From Tabela Where Nome = ' + edit1.text;

Depois observe como irá ficar o resultado.

Eu fiz como você falou só que ele não acha os campos com esse comando.

Postado

você roda pelo Delphi (F9) ou roda o .exe da sua aplicação?

E você sabe debugar? (que é colocar o pointbreak e ir vendo passo a passo o desenrolar da aplicação)

Se rodar pelo Delphi e não apresentar erro, deve ser porque o problema está no banco.

Postado
você roda pelo Delphi (F9) ou roda o .exe da sua aplicação?

E você sabe debugar? (que é colocar o pointbreak e ir vendo passo a passo o desenrolar da aplicação)

Se rodar pelo Delphi e não apresentar erro, deve ser porque o problema está no banco.

Rodo pelo F9. Eu coloco pra depurar(F4 pra marcar o pointbreak e depois F7 pra ir passando) ai deixo o cursor do mouse em cima do Edit1.Text pra ve se aparece o que digitei porém não aparece. To usando o banco do Access bem simples tem 4 campos: Nome, Matricula(PK), Gaveta e Situacao.

Postado


procedure TFrmAluno.Button1Click(Sender: TObject);
begin
DM.query1.close;
DM.query1.params[0].AsString:= [COLOR="RoyalBlue"]QuotedStr([/COLOR]Edit1.Text[COLOR="RoyalBlue"])[/COLOR] + '%';
DM.query1.open;
end;

Experimenta o que está de azul.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!