Delphi com POO, dúvidas em select no SQL do Query
Prezados, estou buscando aprender Delphi com POO, mas estou com um problema que até o momento não encontrei solução,
Tenho um banco de dados em MySQL com uma tabela chamada clientes, pois bem tenho uma tela em que tenho um botão para procurar um cliente pelo nome e também as classes clientes e clientesDAO.
tenho vários dados, mas apenas o Id do cliente é número inteiro os outros dados são strings.
Bom os códigos seguem abaixo:
-----em clientesDAO:
procedure TClientesDAO.Pesquisar(Clientes: TClientes);
begin
DataModule1.ZQuery.SQL.Clear;
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+':nome;');
DataModule1.ZQuery.Params.ParamValues['nome']:=clientes.Nome;
DataModule1.ZQuery.ExecSQL;
end;
----
no botão pesquisar do meu form
begin
DataModule1.ZTPessoas.Close;
clientes.Nome:=ENome.Text;
clientesDAO.Pesquisar(clientes);
//ShowMessage(clientes.Telefone); AQUI EU TESTO POR UMA SHOWMESSAGE SE ESTÁ LOCALIZANDO O CLIENTE MOSTRANDO SEU TELEFONE (MAS A CAIXA DE MENSAGEM APARECE EM BRANCO).
ECodigo.Text:=IntToStr(clientes.CodPessoa);
ETelefone.Text:=clientes.Telefone;
EOutroTelefone.Text:=clientes.OutroTelefone;
MEndereco.Text:=clientes.Endereco;
EEmail.Text:=clientes.Email;
ECpf.Text:=clientes.Cpf;
ERg.Text:=clientes.Rg;
CBSexo.Text:=clientes.Sexo;
CBEstadoCivil.Text:=clientes.EstadoCivil;
end;
Tenho um banco de dados em MySQL com uma tabela chamada clientes, pois bem tenho uma tela em que tenho um botão para procurar um cliente pelo nome e também as classes clientes e clientesDAO.
tenho vários dados, mas apenas o Id do cliente é número inteiro os outros dados são strings.
Bom os códigos seguem abaixo:
-----em clientesDAO:
procedure TClientesDAO.Pesquisar(Clientes: TClientes);
begin
DataModule1.ZQuery.SQL.Clear;
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+':nome;');
DataModule1.ZQuery.Params.ParamValues['nome']:=clientes.Nome;
DataModule1.ZQuery.ExecSQL;
end;
----
no botão pesquisar do meu form
begin
DataModule1.ZTPessoas.Close;
clientes.Nome:=ENome.Text;
clientesDAO.Pesquisar(clientes);
//ShowMessage(clientes.Telefone); AQUI EU TESTO POR UMA SHOWMESSAGE SE ESTÁ LOCALIZANDO O CLIENTE MOSTRANDO SEU TELEFONE (MAS A CAIXA DE MENSAGEM APARECE EM BRANCO).
ECodigo.Text:=IntToStr(clientes.CodPessoa);
ETelefone.Text:=clientes.Telefone;
EOutroTelefone.Text:=clientes.OutroTelefone;
MEndereco.Text:=clientes.Endereco;
EEmail.Text:=clientes.Email;
ECpf.Text:=clientes.Cpf;
ERg.Text:=clientes.Rg;
CBSexo.Text:=clientes.Sexo;
CBEstadoCivil.Text:=clientes.EstadoCivil;
end;
Raphael Schettino
Curtidas 0
Melhor post
Gabriel Baltazar
09/12/2015
Substitui
Por
Tira o ; do final da query, ele pode estar interferindo no parâmetro
Se não der certo, tira a cláusula where pra testar se o problema está na query.
DataModule1.ZQuery.Params.ParamValues['nome']:=clientes.Nome;
Por
DataModule1.ZQuery.Params.ParamValues['nome']:= QuotedStr ( '%' + clientes.Nome + '%' );
Tira o ; do final da query, ele pode estar interferindo no parâmetro
Se não der certo, tira a cláusula where pra testar se o problema está na query.
GOSTEI 1
Mais Respostas
Raphael Schettino
08/12/2015
Não funcionou em ambos os modos, estranho. Será que é meu ztable? Meu inserir, editar e excluir estão funcionando de boa.
GOSTEI 0
Raphael Schettino
08/12/2015
Baltazar, funcionou aqui, muito obrigado.
Você poderia me ajudar em outro detalhe?
É o seguinte, tenho alguns edits em um form e como havia mencionado nas postagens anteriores estou realizando uma pesquisa como cliente.nome de minha classe cliente utilizando minha classe DAO, enfim resumindo, eu gostaria de fazer com que quando eu digitar um nome no meu Edit (ENome.text) e clicasse em meu botão os meus campos da classe recebessem seus respectivos conteúdos baseados na pesquisa, por exemplo cliente alessandro então clientes.telefone:= o telefone do Alessandro.
Eu não estou sabendo como fazer com que por exemplo o meu clientes.Telefone receba o campo telefone de meu registro encontrado.
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+':nome;');
//na linha acima como eu poderia passar alguns parâmetros para receber conteúdo como
clientes.Telefone:= conteúdo da coluna telefone do cliente encontrado.
DataModule1.ZQuery.Params.ParamValues['nome']:=QuotedStr('%'+clientes.Nome+'%');
Você poderia me ajudar em outro detalhe?
É o seguinte, tenho alguns edits em um form e como havia mencionado nas postagens anteriores estou realizando uma pesquisa como cliente.nome de minha classe cliente utilizando minha classe DAO, enfim resumindo, eu gostaria de fazer com que quando eu digitar um nome no meu Edit (ENome.text) e clicasse em meu botão os meus campos da classe recebessem seus respectivos conteúdos baseados na pesquisa, por exemplo cliente alessandro então clientes.telefone:= o telefone do Alessandro.
Eu não estou sabendo como fazer com que por exemplo o meu clientes.Telefone receba o campo telefone de meu registro encontrado.
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+':nome;');
//na linha acima como eu poderia passar alguns parâmetros para receber conteúdo como
clientes.Telefone:= conteúdo da coluna telefone do cliente encontrado.
DataModule1.ZQuery.Params.ParamValues['nome']:=QuotedStr('%'+clientes.Nome+'%');
GOSTEI 0
Raphael Schettino
08/12/2015
consegui assim:
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+':nome'+';');
DataModule1.ZQuery.ParamByName('nome').Value:=clientes.Nome;
DataModule1.ZQuery.Open;
clientes.Telefone:=DataModule1.ZQuery.FieldByName('telefone').AsString;
ShowMessage(clientes.Telefone);// testando para ver se pegou o valor de alguma coluna específica
Mas não consegui fazer com que aparecessem todos os nomes parecidos, por exemplo João Paulo e José João quando eu digito apenas João.
desta maneira não funcionou
DataModule1.ZQuery.Params.ParamValues['nome']:=QuotedStr('%'+clientes.Nome+'%');
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+':nome'+';');
DataModule1.ZQuery.ParamByName('nome').Value:=clientes.Nome;
DataModule1.ZQuery.Open;
clientes.Telefone:=DataModule1.ZQuery.FieldByName('telefone').AsString;
ShowMessage(clientes.Telefone);// testando para ver se pegou o valor de alguma coluna específica
Mas não consegui fazer com que aparecessem todos os nomes parecidos, por exemplo João Paulo e José João quando eu digito apenas João.
desta maneira não funcionou
DataModule1.ZQuery.Params.ParamValues['nome']:=QuotedStr('%'+clientes.Nome+'%');
GOSTEI 0
Raphael Schettino
08/12/2015
Consegui pessoal fiz assim
Encontrado é uma String.
Encontrado:=(chr(39)+'%'+clientes.Nome+'%'+chr(39));
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+Encontrado+';');
ShowMessage(Encontrado);
Desse modo apenas fiz
clientes.Telefone:=DataModule1.ZQuery.FieldByName('telefone').AsString;
Encontrado é uma String.
Encontrado:=(chr(39)+'%'+clientes.Nome+'%'+chr(39));
DataModule1.ZQuery.SQL.Add('select * from clientes where nome like '+Encontrado+';');
ShowMessage(Encontrado);
Desse modo apenas fiz
clientes.Telefone:=DataModule1.ZQuery.FieldByName('telefone').AsString;
GOSTEI 0
Raphael Schettino
08/12/2015
De boa consegui tudo com sua ajuda.
Grato, Raphael.
Grato, Raphael.
GOSTEI 0