Ir para conteúdo

POWERED BY:

Arquivado

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

josuel

[Resolvido] Consulta sql por código, nome ou data

Recommended Posts

Olá pessoal do forum!

 

Sou iniciante em delphi e estou sem saber efutuar um consulta na minha tabela de clientes, a principio estou utilizando os componentes das abas Interbase e DataAccess são eles: IBQuery e DataSource.

 

Gostaria que o usuario escolhece em um form por qual campo pesquisar, dentre as opções existentes que são: Codigo do cliente, nome do cliente e data de cadastro.

O formulario já criei mas não consigo desevolver o código da pesquisa para retorna os dados.

 

Desde já agradeço a possivel ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

josuel,

 

É simples. Fica algo assim:

 

  IBQuery1.SQL.Text :=
    'SELECT CODIGO';
  IfThen(EditNome.Text <> '', IBQuery1.SQL.Text+', NOME ');
  IfThen(EditDataCadastro.Text <> '', IBQuery1.SQL.Text+', DATACADASTRO ');

  IBQuery1.SQL.Text := IBQuery1.SQL.Text + 
    'FROM CLIENTES WHERE ALGUMA_COISA ';

Coloquei o campo CODIGO fixo na sql porquê normalmente você sempre precisa do código do registro. Também ajuda a simplificar o código, pois assim não vai ter problema com a vírgula.

 

Só, por favor, não use o nome da query de "IBQuery1". Isso é coisa de amador preguiçoso. :) Use sempre uma padronização para os componentes. Sugiro assim: ibqSql.

 

Espero que tenha ajudado.

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal se alguem poder me indicar um tutorial, onde ensine fazer pesquisas detalhandas com o delphi no banco firebird. Ficarei muito grato!!

 

Lucascolferai Vou testa aqui e ver se consigo emplementa corretamente o código.

 

Obs.: desculpa pela postagem anterior não tinha visto a sua resposta.

 

Lucascolferai Acho que me expressei mal na criação do topico, o que eu estou precisando é mais ou menos o código que está abaixo. Ou seja quando o usuario quiser pesquisar pelo código é digitar o código do cliente o sql fique assim:

 

SELECT * FROM TBL_Cliente WHERE CODIGO = 'o codigo digitado';

Só não estou consegindo colocar o que foi digitado após o sinal de igualdade da clausa Where (= ALGUMA_COISA)

 

sqlConCliente.Close;
sqlConCliente.SQL.Text := 
    'SELECT * FROM TBL_Cliente WHERE ';
  IfThen(EditCodigo.Text <> '', sqlConCliente.SQL.Text+', CODIGO '); 
  IfThen(EditNome.Text <> '', sqlConCliente.SQL.Text+', NOME '); 
  IfThen(EditDataCadastro.Text <> '', sqlConCliente.SQL.Text+', DATACADASTRO '); 
 
  sqlConCliente.SQL.Text := sqlConCliente.SQL.Text +  
    '= ALGUMA_COISA ';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Josuel,

 

Entendi. O esquema é o mesmo, veja abaixo:

 

  sqlConCliente.SQL.Text := 
    'SELECT * FROM TBL_Cliente ';

  IfThen(EditCodigo.Text <> '', sqlConCliente.SQL.Text+' WHERE (CODIGO = '+EditCodigo.Text+') ');
  IfThen(EditNome.Text <> '', sqlConCliente.SQL.Text+' WHERE (NOME LIKE '+EditNome.Text+') ');
  IfThen(EditDataCadastro.Text <> '', sqlConCliente.SQL.Text+' WHERE (DATACADASTRO = '+EditDataCadastro.Text+') ');

Claro, vão aparecer uns ajustes a fazer (no caso da comparação com o nome do cliente e com a data), mas a idéia é a mesma.

 

Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucascolferai,

 

O comando sqlConCliente.SQL.Text não está sendo reconhecido dentro da função IfThen, no delphi está funcionando normal, mais na hora de pesquisar vem o erro dizendo que o sql está errado.

Estava prestando atenção no código e percebi que ele só está reconhecendo está parte do mesmo

sqlConCheque.SQL.Text :=
          'SELECT * FROM TBL_Clientes WHERE ';
A outra parte complementar que ta na função ele não reconhece. Exemplo
IfThen(Codigo.Text <> '', sqlConClientes.SQL.Text+'(CODIGO = '+Codigo.Text+') ');

Eu não estou conseguindo entender o por que está acontecendo isso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

josuel,

 

Veja se não é algum problema com o IfThen. A unit do form tem que usar a biblioteca "MathStrUtilsor".

 

Flw

 

Lucascolferai,

 

Mais a biblioteca do delphi 7 não tem essa classe "MathStrUtilsor" ele só passa com a classe StrUtils para retornar string. Será que tenho que instalar a classe "MathStrUtilsor".

 

Usuando "StrUtils" ele só funcionou declarando uma variavel do tipo string para receber o retorno da função IfThen() tipo:

sqlComp :=IfThen(EditNome.Text <> '', '(Nome LIKE "'+EditNome.Text+'%")');
Só não sei se essa é a melhor solução por que assim teria que delcarar uma variavel para cada teste IfThen(). E depois eu não saberia juntar uma varial dessa de cada vez para fazer sa pesquisa.

Ou se a melhor solução é instalar a classe "MathStrUtilsor". Se for onde encontro ela para instalar.

 

Obs.: Realmente estou tendo problema com o uso do Like, executando a pesquisa ela só retorna os campos da tabela vazio. O que poderia está acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal do forum!

 

Sou iniciante em delphi e estou sem saber efutuar um consulta na minha tabela de clientes, a principio estou utilizando os componentes das abas Interbase e DataAccess são eles: IBQuery e DataSource.

 

Gostaria que o usuario escolhece em um form por qual campo pesquisar, dentre as opções existentes que são: Codigo do cliente, nome do cliente e data de cadastro.

O formulario já criei mas não consigo desevolver o código da pesquisa para retorna os dados.

 

Desde já agradeço a possivel ajuda!

 

Bom, vou explicar..

 

Coloque no seu projeto 1 RadioGroup 1 Edit da paleta Standard e 1 um BitBtn da paleta additional

e tbm um DBGrid da Data Controls e os componentes de base de dados IBQuery da paleta Interbase

e DataSource da paleta Data Access.

 

 

Ligue os componentes de Base de dados, Query com DataSource e DataSource com DBGrid

 

 

Na propriedade Itens do RadioGroup você adiciona os tipos de buscas

Ex: Código

Data de Cadastro

Nome

 

Um em cada linha, como no exemplo acima

Renomeie o BitBtn1 para btBuscar e o Edit1 para dtBusca

 

no Evento onKeyPress do dtBusca coloque o seguinte código

 

procedure TForm1.dtBuscaKeyPress(Sender: TObject; var Key: Char);
begin

Case RadioGroup1.ItemIndex of
 0 : begin
     //-- Define o tamanho maxímo de caracteres para 9
     dtBusca.MaxLength:= 9;

     //-- Permite e digitação de apenas números
     if (key<>#13) and (key<>#27) and (key<>#8) then
        begin
        if (key in [#48..#57]) then
           else
           key:=#07;
        end;
     end;

 1 : begin
     //-- Define o tamanho para data
     dtBusca.MaxLength:= 10;
     end;

 2 : begin
     //-- Define o tamanho para nome
     dtBusca.MaxLength:= 50;
     end;
end;
end;

no evente OnClick do RadioGroup1 coloque

 

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
dtBusca.Clear;
dtBusca.SetFocus;
end;

e no evento OnClick do btBuscar

 

procedure TForm1.btBuscarClick(Sender: TObject);
begin
if Trim(dtBusca.Text) = '' then
   begin
   ShowMessage('Preencha o campo busca!');
   dtBusca.SetFocus;
   Exit;
   end;

//--- Inicia a busca
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT I_CODIGO,D_DATA,A_NOME');
IBQuery1.SQL.Add('FROM CLIENTE');
IBQuery1.SQL.Add('WHERE');

//--- Verifica o tipo de busca selecionado
Case RadioGroup1.ItemIndex of
 0 : IBQuery1.SQL.Add('I_CODIGO='+dtBusca.Text);
 1 : IBQuery1.SQL.Add('D_DATA="'+dtBusca.Text+'"');
 2 : IBQuery1.SQL.Add('A_NOME LIKE "'+dtBusca.Text+'%"');
end;

IBQuery1.Open;

if not IBQuery1.IsEmpty then
   DBGrid1.SetFocus
   else
   begin
   ShowMessage('Sua busca não retornou resultados!');
   dtBusca.SetFocus;
   Exit;
   end;

end;

Bom acredito que é só.. caso falte alguma coisa acho que será capaz de completar..

não testei o código, qualquer erro com relação a algo que escrevi é só postar que eu irei ajudar.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geovane Velmer,

 

O codigo está quase funcionando no delphi ele passou beleza, mais na hora de realizar a pesquisa por nome do cliente ele mostra um erro com a mensagem abaixo:

 

'Dynamic SQL error SQL error code = -206
Column unknown
JOSUEL%'

Acredito que o erro esteja nessa linha, mais ainda não conseguir resolver.

 

2 : sqlConCheque.SQL.Add('NomeCliente LIKE "'+texto+'%"')

 

Será que está linha tem algun erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geovane Velmer,

 

O codigo está quase funcionando no delphi ele passou beleza, mais na hora de realizar a pesquisa por nome do cliente ele mostra um erro com a mensagem abaixo:

 

'Dynamic SQL error SQL error code = -206
Column unknown
JOSUEL%'

Acredito que o erro esteja nessa linha, mais ainda não conseguir resolver.

 

2 : sqlConCheque.SQL.Add('NomeCliente LIKE "'+texto+'%"')

 

Tenta trocar essa linha por isso

 

2 : sqlConCheque.SQL.Add('NomeCliente LIKE "'+QuotedStr(texto)+'%"');

 

Não esqueça de finalizar com ponto e virgula as linhas de comando.

 

Tente ai, qualquer coisa poste denovo, terei prazer em ajudar!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal Conseguir fazer a busca corretamente.

 

Obrigado a todos!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.