Ajuda com Chave Estrangeira

05/03/2013

0

Tenho o seguinte problema, tenho uma tabela com nome de recebidos nessa tabela contem o campo ID_CLIENTE e o Campo NOME_CLIENTE, o ID_CLIENTE ELE é do tipo Chave Estrangeira, vamos lá preciso que no meu formulario recebidos que contem esses dois campos no campo ID_CLIENTE se eu colocar alguma valor tipo Codigo 1 e apertar enter ele pegue e me mostre o nome do Cliente no campo NOME_CLIENTE, outra coisa se ele estiver vazio quando eu apertar enter ele vá até um formulario de pesquisa.


Bom estou programando em Delphi 2010, banco de dados Firebird, uso SQLConnection, TSQLQuery, DATASetprovider, Clientdataset.

segue o link com a imagem da meu Formulário: http://img7.imageshack.us/img7/5092/semttulowpl.jpg


Desde já Muito Obrigado..
Francielio Medeiros

Francielio Medeiros

Responder

Posts

05/03/2013

Perivaldo Martins

Tenho o seguinte problema, tenho uma tabela com nome de recebidos nessa tabela contem o campo ID_CLIENTE e o Campo NOME_CLIENTE, o ID_CLIENTE ELE é do tipo Chave Estrangeira, vamos lá preciso que no meu formulario recebidos que contem esses dois campos no campo ID_CLIENTE se eu colocar alguma valor tipo Codigo 1 e apertar enter ele pegue e me mostre o nome do Cliente no campo NOME_CLIENTE, outra coisa se ele estiver vazio quando eu apertar enter ele vá até um formulario de pesquisa.


Bom estou programando em Delphi 2010, banco de dados Firebird, uso SQLConnection, TSQLQuery, DATASetprovider, Clientdataset.

segue o link com a imagem da meu Formulário: http://img7.imageshack.us/img7/5092/semttulowpl.jpg


Desde já Muito Obrigado..


Supondo que o colega vá usar ENTER para mudar o foco nos campos, coloque então a verificação do campo código no OnExit.
 if DBEditx.Text = EmptyStr then
  {Abre o formulário de pesquisa}
 else
  {Vai buscar o nome do cliente vinculado ao código informado}


Boa sorte e bons códigos!
Responder

05/03/2013

Francielio Medeiros

Tenho o seguinte problema, tenho uma tabela com nome de recebidos nessa tabela contem o campo ID_CLIENTE e o Campo NOME_CLIENTE, o ID_CLIENTE ELE é do tipo Chave Estrangeira, vamos lá preciso que no meu formulario recebidos que contem esses dois campos no campo ID_CLIENTE se eu colocar alguma valor tipo Codigo 1 e apertar enter ele pegue e me mostre o nome do Cliente no campo NOME_CLIENTE, outra coisa se ele estiver vazio quando eu apertar enter ele vá até um formulario de pesquisa.


Bom estou programando em Delphi 2010, banco de dados Firebird, uso SQLConnection, TSQLQuery, DATASetprovider, Clientdataset.

segue o link com a imagem da meu Formulário: http://img7.imageshack.us/img7/5092/semttulowpl.jpg


Desde já Muito Obrigado..





Supondo que o colega vá usar ENTER para mudar o foco nos campos, coloque então a verificação do campo código no OnExit.
 if DBEditx.Text = EmptyStr then
  {Abre o formulário de pesquisa}
 else
  {Vai buscar o nome do cliente vinculado ao código informado}


Boa sorte e bons códigos!





Amigo como ficaria esse codigo eu comecei mais como sou iniciante ta aqui o meu:


procedure TF_Recebimentos.DBEdit4Exit(Sender: TObject);
begin
if DBEdit4.Text = EmptyStr then
F_PesqCliente.Show;
else

end;
Responder

19/03/2013

Francielio Medeiros

Ainda Sem Solução Alguém pode me Ajudar ???
Responder

19/03/2013

Douglas

Olá Francielo,

desculpa a demora estou sem tempo e ta brabo. Mas

vamos ao que interessa solucionar o seu problema !

No evento OnKeyPress do edit, implemte o código abaixo:

  
  // Caso esteja vazio ele tenta abrir o forumlário de pesquisa.
  //Senão pesquisa o cliente trazendo o resultado.
  if EditCodigo.Text = EmptyStr then
  begin
    try 
      Application.CreateForm(TFrmPesquisa, FrmPesquisa);
      FrmPesquisa.ShowModal;
    except
      on E: exception do
      begin
	  Application.MessageBox('Ocorreu um erro ao abrir a tela de pesquisa','Atenção', MB_OK);
      end;
    end;
  end
  else
  begin
  	 //NESTE MOMENTO VOCÊ IRÁ PESQUISAR O CÓDIDO EM SUA QUERY
  	 SQLQuery1.Close;
  	 SQLQuery1.SQL.Clear;
  	 SQLQuery1.SQL.Add('SELECT * FROM CLIENTE');
  	 SQLQuery1.SQL.Add('WHERE COD_CLI = :CODCLI');
  	 SQLQuery1.ParamByName('CODCLI').AsString := EditCodigo.Text;
  	 SQLQuery1.Open;
  
  	//FEITO ISTO, PREENCHER TODOS OS SEUS DBEDITS COM O RESULTADO DA SUA QUERY
  	//COMO O EXEMPLO ABAIXO
  	if not SQLQuery1.IsEmpty then 
	begin
  	  EdtCodigo.text := SQLQuery1.FieldByName('COD_CLI').AsInteger;
  	  EdtNDocumento.text := SQLQuery1.FieldByName('N_Doc').AsString;
  	  // E assim por diante para os próximos
	end
        else
          Application.MessageBox('O código digitado não foi encontrado.', 'Atencao', MB_OK);	
  end;



Obs: Verifique o nome de seus edits, pois o código acima é só um exemplo.

Espero ter ajudado amigo.
Responder

20/03/2013

Douglas

Olá Francielo,

desculpa a demora estou sem tempo e ta brabo. Mas

vamos ao que interessa solucionar o seu problema !

No evento OnKeyPress do edit, implemte o código abaixo:

  
  // Caso esteja vazio ele tenta abrir o forumlário de pesquisa.
  //Senão pesquisa o cliente trazendo o resultado.
  if EditCodigo.Text = EmptyStr then
  begin
    try 
      Application.CreateForm(TFrmPesquisa, FrmPesquisa);
      FrmPesquisa.ShowModal;
    except
      on E: exception do
      begin
	  Application.MessageBox('Ocorreu um erro ao abrir a tela de pesquisa','Atenção', MB_OK);
      end;
    end;
  end
  else
  begin
  	 //NESTE MOMENTO VOCÊ IRÁ PESQUISAR O CÓDIDO EM SUA QUERY
  	 SQLQuery1.Close;
  	 SQLQuery1.SQL.Clear;
  	 SQLQuery1.SQL.Add('SELECT * FROM CLIENTE');
  	 SQLQuery1.SQL.Add('WHERE COD_CLI = :CODCLI');
  	 SQLQuery1.ParamByName('CODCLI').AsString := EditCodigo.Text;
  	 SQLQuery1.Open;
  
  	//FEITO ISTO, PREENCHER TODOS OS SEUS DBEDITS COM O RESULTADO DA SUA QUERY
  	//COMO O EXEMPLO ABAIXO
  	if not SQLQuery1.IsEmpty then 
	begin
  	  EdtCodigo.text := SQLQuery1.FieldByName('COD_CLI').AsInteger;
  	  EdtNDocumento.text := SQLQuery1.FieldByName('N_Doc').AsString;
  	  // E assim por diante para os próximos
	end
        else
          Application.MessageBox('O código digitado não foi encontrado.', 'Atencao', MB_OK);	
  end;



Obs: Verifique o nome de seus edits, pois o código acima é só um exemplo.

Espero ter ajudado amigo.
Responder

24/03/2013

Francielio Medeiros

Douglas vou te enviar um email com meu projeto pra vc olhar o problema que ta acontecendo.
Responder

25/03/2013

Douglas

Francielio,

você implementou o código no evento OnKeyPress do Edit.

Outra coisa ele só vai chamar outra tela no momento que você pressionar a tecla "ENTER".
Responder

25/03/2013

Francielio Medeiros

Olhe como ficou o meu codigo no DBEdit


procedure TF_Recebimentos.DBEdit4KeyPress(Sender: TObject; var Key: Char);
begin
// Caso esteja vazio ele tenta abrir o forumlário de pesquisa.
//Senão pesquisa o cliente trazendo o resultado.
if DBEdit4.Text = EmptyStr then
begin
try
Application.CreateForm(TF_PesqCliente, F_PesqCliente);
F_PesqCliente.ShowModal;
except
on E: exception do
begin
Application.MessageBox('Ocorreu um erro ao abrir a tela de pesquisa','Atenção', MB_OK);
end;
end;
end
else
begin
//NESTE MOMENTO VOCÊ IRÁ PESQUISAR O CÓDIDO EM SUA QUERY
DM.Q_CLIENTE.Close;
DM.Q_CLIENTE.SQL.Clear;
DM.Q_CLIENTE.SQL.Add('SELECT * FROM CLIENTE');
DM.Q_CLIENTE.SQL.Add('WHERE ID_CLIENTE = :ID_CLIENTE');
DM.Q_CLIENTE.ParamByName('ID_CLIENTE').AsString := DBEdit4.Text;
DM.Q_CLIENTE.Open;

//FEITO ISTO, PREENCHER TODOS OS SEUS DBEDITS COM O RESULTADO DA SUA QUERY
//COMO O EXEMPLO ABAIXO
if not DM.Q_CLIENTE.IsEmpty then
begin
DBEdit4.text := DM.Q_CLIENTE.FieldByName('ID_CLIENTE').AsString;
DBEdit5.text := DM.Q_CLIENTE.FieldByName('NOME_CLIENTE').AsString;
// E assim por diante para os próximos
end
else
Application.MessageBox('O código digitado não foi encontrado.', 'Atencao', MB_OK);
end;
end;
Responder

26/03/2013

Francielio Medeiros

Só que se eu digitar qualquer valor ele Abre a consulta.
Responder

26/03/2013

Douglas

Só que se eu digitar qualquer valor ele Abre a consulta.


Franciélio,

faça o passo do código abaixo,

no envento OnKeyPress mesmo.

if Key = #13 then
begin
  if dbedit4.text = emptyStr then
  begin
    Ponha a continuação do seu código...
  end;

end;


OBS: Depois dê o seu feedback
Responder

27/03/2013

Francielio Medeiros

ta dando erro de conversao de string
Responder

27/03/2013

Francielio Medeiros

Porque Será isso??
Responder

29/03/2013

Francielio Medeiros

Olhe como ficou meu codigo:

procedure TF_Recebimentos.DBEdit4KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
// Caso esteja vazio ele tenta abrir o forumlário de pesquisa.
//Senão pesquisa o cliente trazendo o resultado.
if DBEdit4.Text = EmptyStr then
begin
try
Application.CreateForm(TF_PesqCliente, F_PesqCliente);
F_PesqCliente.ShowModal;
except
on E: exception do
begin
Application.MessageBox('Ocorreu um erro ao abrir a tela de pesquisa','Atenção', MB_OK);
end;
end;
end;
end
else
begin
//NESTE MOMENTO VOCÊ IRÁ PESQUISAR O CÓDIDO EM SUA QUERY
DM.Q_CLIENTE.Close;
DM.Q_CLIENTE.SQL.Clear;
DM.Q_CLIENTE.SQL.Add('SELECT * FROM CLIENTE');
DM.Q_CLIENTE.SQL.Add('WHERE ID_CLIENTE = :ID_CLIENTE');
DM.Q_CLIENTE.ParamByName('ID_CLIENTE').AsString := DBEdit4.Text;
DM.Q_CLIENTE.Open;

//FEITO ISTO, PREENCHER TODOS OS SEUS DBEDITS COM O RESULTADO DA SUA QUERY
//COMO O EXEMPLO ABAIXO
if not DM.Q_CLIENTE.IsEmpty then
begin
DBEdit4.text := DM.Q_CLIENTE.FieldByName('ID_CLIENTE').AsString;
DBEdit5.text := DM.Q_CLIENTE.FieldByName('NOME_CLIENTE').AsString;
// E assim por diante para os próximos
end
else
Application.MessageBox('O código digitado não foi encontrado.', 'Atencao', MB_OK);
end;
end;
Responder

29/03/2013

Douglas

Beleza,

mais em qual linha erro é gerado ?
Responder

01/04/2013

Francielio Medeiros

Algumas Informações que acho que são importantes, Meu Banco é Firebird o Campo está como Integer.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar