Realizar Consultas

Delphi

30/01/2007

Garela boa tarde.

Estou com problema e espero q alguem me ajude,

Amigos tenho um cadastro de Clientes, e quero fazer uma pesquisa de clientes q ja estão cadastrados, quero usar o codigo de cadastro para fazer isso, como faço?

Os campos q estou usando e Edits Comuns, e não DbEdits.


De ja agradeço a resposta.


Jarabeucp

Jarabeucp

Curtidas 0

Respostas

Marcosrocha

Marcosrocha

30/01/2007

Você pode criar seu próprio formulário de pesquisas e adicionar um DBGrid ou um StringGrid (que é mais fácil de controlar) aí faça um select numa query e mande todos os dados pro StringGrid com um While
  StringGrid.RowCount := 2; // como se limpasse o Grid
  DM.QRPesq.SQL.Clear;
  DM.QRPesq.SQL.Add(´Select * from Clientes´);
  DM.QRPesq.SQL.Add(´Order by cli_nome´);
  DM.QRPesq.Open;
  if not DM.QRPesq.IsEmpty then
    while not DM.QRPesq.Eof do
    begin
      // antes de inserir os dados, limpa as colunas
      StringGrid.Cells[1,StringGrid.RowCount - 1] := ´´;
      StringGrid.Cells[2,StringGrid.RowCount - 1] := ´´;
      // entao insere
      StringGrid.Cells[1, StringGrid.RowCount - 1] := DM.QRPesq.FieldByName(´cad_codigo´).asString;
      StringGrid.Cells[2, StringGrid.RowCount - 1] := DM.QRPesq.FieldByName(´cad_nome´).asString;
      // se nao for o ultimo registro, entao adiciona mais uma linha
      if not DM.QRPesq.Eof then
        StringGrid.RowCount -1 := StringGrid.RowCount + 1;
      DM.QRPesq.Next;
    end;



GOSTEI 0
Jarabeucp

Jarabeucp

30/01/2007

Você pode criar seu próprio formulário de pesquisas e adicionar um DBGrid ou um StringGrid (que é mais fácil de controlar) aí faça um select numa query e mande todos os dados pro StringGrid com um While
  StringGrid.RowCount := 2; // como se limpasse o Grid
  DM.QRPesq.SQL.Clear;
  DM.QRPesq.SQL.Add(´Select * from Clientes´);
  DM.QRPesq.SQL.Add(´Order by cli_nome´);
  DM.QRPesq.Open;
  if not DM.QRPesq.IsEmpty then
    while not DM.QRPesq.Eof do
    begin
      // antes de inserir os dados, limpa as colunas
      StringGrid.Cells[1,StringGrid.RowCount - 1] := ´´;

      StringGrid.Cells[2,StringGrid.RowCount - 1] := ´´;
      // entao insere
      StringGrid.Cells[1, StringGrid.RowCount - 1] := DM.QRPesq.FieldByName(´cad_codigo´).asString;
      StringGrid.Cells[2, StringGrid.RowCount - 1] := DM.QRPesq.FieldByName(´cad_nome´).asString;
      // se nao for o ultimo registro, entao adiciona mais uma linha
      if not DM.QRPesq.Eof then
        StringGrid.RowCount -1 := StringGrid.RowCount + 1;
      DM.QRPesq.Next;
    end;


Amigo muito boa a dica, so que eu não quero ezibir meus dados em outro componente, quero q meus dados sejam ezibidos nos campos Edits do meu form.

entende?


GOSTEI 0
Marcosrocha

Marcosrocha

30/01/2007

Caríssimo [b:a335d15988]jarabeucp[/b:a335d15988] é só pensar um pouco,
procedure ProximoAnterior(const Acao: ShortString);
begin
  DM.QRPesq.SQL.Clear;
  DM.QRPesq.SQL.Add(´Select cad_codigo from Cadastro´);
  DM.QRPesq.SQL.Add(´Where cad_tipo = 1´);
  DM.QRPesq.SQL.Add(´Order by cad_codigo´);
  if Acao = ´<´ then
    DM.QRExec.SQL.Add(´Desc´);
  DM.QRExec.Open;
  while not DM.QRExec.Eof do
  begin
    if (Trim(MaskEdit1.Text) = DM.QRPesq.FieldByName(´cad_codigo´).asString) then
    begin
      DM.QRPesq.Next;
      MaskEdit1.Text := DM.QRPesq.FieldByName(´cad_codigo´).asString;
      Edit1.Text     := DM.QRPesq.FieldByName(´cad_nome´).asString;
      Break;
    end;
    DM.QRPesq.Next;
  end;
end;



GOSTEI 0
Jarabeucp

Jarabeucp

30/01/2007

Caríssimo [b:1ffcf7349f]jarabeucp[/b:1ffcf7349f] é só pensar um pouco,
procedure ProximoAnterior(const Acao: ShortString);
begin
  DM.QRPesq.SQL.Clear;
  DM.QRPesq.SQL.Add(´Select cad_codigo from Cadastro´);
  DM.QRPesq.SQL.Add(´Where cad_tipo = 1´);
  DM.QRPesq.SQL.Add(´Order by cad_codigo´);
  if Acao = ´<´ then
    DM.QRExec.SQL.Add(´Desc´);
  DM.QRExec.Open;
  while not DM.QRExec.Eof do
  begin
    if (Trim(MaskEdit1.Text) = DM.QRPesq.FieldByName(´cad_codigo´).asString) then
    begin
      DM.QRPesq.Next;
      MaskEdit1.Text := DM.QRPesq.FieldByName(´cad_codigo´).asString;
      Edit1.Text     := DM.QRPesq.FieldByName(´cad_nome´).asString;
      Break;
    end;
    DM.QRPesq.Next;
  end;
end;



Amigo sou iniciante em Delphi, desculpe mais não entendi muito bem o codigo, precizo de algo detalhado entende.

obrigado.


GOSTEI 0
Marcosrocha

Marcosrocha

30/01/2007

procedure TFrmCad.ProximoAnterior(const Acao: ShortString); 
begin
  // esta procedure permite que passe para o próximo ou o registro anterior
  // primeiro faz-se um select trazendo os clientes por ordem de código
  DM.QRPesq.SQL.Clear; 
  DM.QRPesq.SQL.Add(´Select cad_codigo from Cadastro´); 
  DM.QRPesq.SQL.Add(´Where cad_tipo = 1´); 
  DM.QRPesq.SQL.Add(´Order by cad_codigo´); 
  if Acao = ´<´ then // se Acao for < entao está procurando o codigo anterior
    DM.QRExec.SQL.Add(´Desc´); 
  DM.QRExec.Open; 
  while not DM.QRExec.Eof do 
  begin 
    if (Trim(MaskEdit1.Text) = DM.QRPesq.FieldByName(´cad_codigo´).asString) then // se o codigo da query for o igual ao meu código
    begin 
      DM.QRPesq.Next; // pega o proximo registro
      MaskEdit1.Text := DM.QRPesq.FieldByName(´cad_codigo´).asString; 
      Edit1.Text     := DM.QRPesq.FieldByName(´cad_nome´).asString; 
      Break; // parar o while
    end; 
    DM.QRPesq.Next; // proximo registro
  end; 
end;

Para chamar a função basta:
procedure TFrmCad.BitBtn1Click(Sender: TObject);
begin
  ProximoAnterior(´>´); // proximo registro
end;

procedure TFrmCad.BitBtn2Click(Sender: TObject);
begin
  ProximoAnterior(´<´); // registro anterior
end;



GOSTEI 0
Martins

Martins

30/01/2007

Jarabe, a dica do amigo [b:5eaae699e4]mcblade[/b:5eaae699e4] é muito boa, as informações q te passei por MSN sintetizam bem o q vc precisa fazer para consegui atingir seus resultados, é só uma questão de analise das linhas de código e comparação com o q vc já escreveu.


GOSTEI 0
Marcosrocha

Marcosrocha

30/01/2007

É que na verdade Martins eu não trabalho com DBEdits e todos aqueles componentes... Talvez por isso essa minha rotina esteja tão ´CRUA´... uso ela raramente em alguns casos.
A propósito... se você ajudou o Jarabe por MSN eu acharia muito interessante se postasse a resolução do problema aqui no fórum para ajudar a todos como diz sua assinatura... Caso contrário você estará entrando em contradição com você mesmo... =P :lol:


GOSTEI 0
Jarabeucp

Jarabeucp

30/01/2007

Amigo MCBLADE eu e o Martins somos grandes amigos já passamos horas matando
cabeça com código, por isso ele me deu a solução via msn, mais já q é bom
p a galera saber a resposta ai vai o Código, é a dicas q ele me deu já adaptado por mim.

procedure TF_Parentesco.ECodigoExit(Sender: TObject);
begin // Verifica se o Código existe
if Dm_Agep.TParen.Locate(´Codigo´,ECodigo.Text,[])then
begin
// Se existir a tabela entra em Edição e me exibe os dados
Dm_Agep.TParen.Edit;
EDescricao.Text := Dm_agep.TParen.FieldByName(´Descricao´).AsString;
ECodigo.Enabled := False
end
else
ShowMessage(´Resgitro não Cadastrado´)
end;
=========================
F_Parentesco = Form
ECodigo = Campo do Form
EDescricao = Campo do Form
Dm_Agep = Data Module
TParen = Componente Table
Descricao = Campo da Tabela

Espero q a dica possa ajudar a todos.


GOSTEI 0
POSTAR