Ajuda com Chave Estrangeira
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..
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
Curtidas 0
Respostas
Perivaldo Martins
05/03/2013
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..
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!
GOSTEI 0
Francielio Medeiros
05/03/2013
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..
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;
GOSTEI 0
Francielio Medeiros
05/03/2013
Ainda Sem Solução Alguém pode me Ajudar ???
GOSTEI 0
Douglas
05/03/2013
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:
Obs: Verifique o nome de seus edits, pois o código acima é só um exemplo.
Espero ter ajudado amigo.
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.
GOSTEI 0
Douglas
05/03/2013
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:
Obs: Verifique o nome de seus edits, pois o código acima é só um exemplo.
Espero ter ajudado amigo.
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.
GOSTEI 0
Francielio Medeiros
05/03/2013
Douglas vou te enviar um email com meu projeto pra vc olhar o problema que ta acontecendo.
GOSTEI 0
Douglas
05/03/2013
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".
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".
GOSTEI 0
Francielio Medeiros
05/03/2013
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;
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;
GOSTEI 0
Francielio Medeiros
05/03/2013
Só que se eu digitar qualquer valor ele Abre a consulta.
GOSTEI 0
Douglas
05/03/2013
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
GOSTEI 0
Francielio Medeiros
05/03/2013
ta dando erro de conversao de string
GOSTEI 0
Francielio Medeiros
05/03/2013
Porque Será isso??
GOSTEI 0
Francielio Medeiros
05/03/2013
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;
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;
GOSTEI 0
Douglas
05/03/2013
Beleza,
mais em qual linha erro é gerado ?
mais em qual linha erro é gerado ?
GOSTEI 0
Francielio Medeiros
05/03/2013
Algumas Informações que acho que são importantes, Meu Banco é Firebird o Campo está como Integer.
GOSTEI 0