Seleção de dados de um FORM para outro FORM
Boa noite,
estou aprendendo a criar um sistema de vendas simples, mas me deparei com um problema que não consigo achar uma resposta que me ajude.
Quero trazer o valor de um form para outro form, exatamente em 2 campos dbedit. no primeiro form1 criei um botão pra chamar o form2 que contém um dbgrid.
quero selecionar a informação do dbgrid com duplo click e logo após selecionar quero que feche o form2. Porém, quando o form2 fecha o valor selecionado não fica salvo no dbedit do form1.
estou usando esses códigos:
procedure Tform2.DBGrid1DblClick(Sender: TObject);
begin
form1.DBEdit5.Text := DBGrid1.Fields[0].AsString;
form1.DBEdit11.Text := DBGrid1.Fields[1].AsString;
close;
end;
estou aprendendo a criar um sistema de vendas simples, mas me deparei com um problema que não consigo achar uma resposta que me ajude.
Quero trazer o valor de um form para outro form, exatamente em 2 campos dbedit. no primeiro form1 criei um botão pra chamar o form2 que contém um dbgrid.
quero selecionar a informação do dbgrid com duplo click e logo após selecionar quero que feche o form2. Porém, quando o form2 fecha o valor selecionado não fica salvo no dbedit do form1.
estou usando esses códigos:
procedure Tform2.DBGrid1DblClick(Sender: TObject);
begin
form1.DBEdit5.Text := DBGrid1.Fields[0].AsString;
form1.DBEdit11.Text := DBGrid1.Fields[1].AsString;
close;
end;
Gilson
Curtidas 0
Melhor post
Hélio Devmedia
27/01/2019
Gilson, tudo bem?
é necessário mudar um pouco a lógica que você está utilizando.
A forma que você fez é muito clara mas os DBEdits não aceitam bem isso. o correto é
pra jogar o valor diretamente no Field do DataSet e não no texto somente do dbedit porque apaga...
Isso já deve resolver, mas para ajudar você nos seus próximos projetos, gostaria de dizer que também não é correto puxar os dados direto do dbgrid, a gente puxa direto do dataset que você colocou no Datasource do dbgrid:
A ultima coisa que eu gostaria de lhe informar é que existe uma forma baseada em melhores prática pra fazer isso que você quer...
O código acima diz que quando apertar o botão ele chama o form2. no duplo click do dbgrid para selecionar o registro, você ó manda fechar o formulário, só isso, mas sem fechar o dataSet. Então a programação volta para o código do botão, e no código do botão você chama os dados do formulário 2 que fechou mas ainda está na memória.
é necessário mudar um pouco a lógica que você está utilizando.
A forma que você fez é muito clara mas os DBEdits não aceitam bem isso. o correto é
procedure Tform2.DBGrid1DblClick(Sender: TObject); begin form1.DBEdit5.field.asstring := Dataset.fieldbyName('Nome do campo 1').AsString; form1.DBEdit11.field.asstring := Dataset.fieldbyName('Nome do campo 2').AsString close; end;
pra jogar o valor diretamente no Field do DataSet e não no texto somente do dbedit porque apaga...
Isso já deve resolver, mas para ajudar você nos seus próximos projetos, gostaria de dizer que também não é correto puxar os dados direto do dbgrid, a gente puxa direto do dataset que você colocou no Datasource do dbgrid:
procedure Tform2.DBGrid1DblClick(Sender: TObject); begin form1.DBEdit5.field.asstring := Dataset.fieldbyName('Nome do campo 1').AsString; form1.DBEdit11.field.asstring := Dataset.fieldbyName('Nome do campo 2').AsString close; end;
A ultima coisa que eu gostaria de lhe informar é que existe uma forma baseada em melhores prática pra fazer isso que você quer...
procedure Tform1.ButtonClick(Sender: TObject); begin frm2.showmodal; DBEdit5.field.asstring := frm2.Dataset.fieldbyName('Nome do campo 1').AsString; DBEdit11.field.asstring := frm2.Dataset.fieldbyName('Nome do campo 2').AsString end;
O código acima diz que quando apertar o botão ele chama o form2. no duplo click do dbgrid para selecionar o registro, você ó manda fechar o formulário, só isso, mas sem fechar o dataSet. Então a programação volta para o código do botão, e no código do botão você chama os dados do formulário 2 que fechou mas ainda está na memória.
GOSTEI 1
Mais Respostas
Gilson
27/01/2019
Gilson, tudo bem?
é necessário mudar um pouco a lógica que você está utilizando.
A forma que você fez é muito clara mas os DBEdits não aceitam bem isso. o correto é
pra jogar o valor diretamente no Field do DataSet e não no texto somente do dbedit porque apaga...
Isso já deve resolver, mas para ajudar você nos seus próximos projetos, gostaria de dizer que também não é correto puxar os dados direto do dbgrid, a gente puxa direto do dataset que você colocou no Datasource do dbgrid:
A ultima coisa que eu gostaria de lhe informar é que existe uma forma baseada em melhores prática pra fazer isso que você quer...
O código acima diz que quando apertar o botão ele chama o form2. no duplo click do dbgrid para selecionar o registro, você ó manda fechar o formulário, só isso, mas sem fechar o dataSet. Então a programação volta para o código do botão, e no código do botão você chama os dados do formulário 2 que fechou mas ainda está na memória.
é necessário mudar um pouco a lógica que você está utilizando.
A forma que você fez é muito clara mas os DBEdits não aceitam bem isso. o correto é
procedure Tform2.DBGrid1DblClick(Sender: TObject); begin form1.DBEdit5.field.asstring := Dataset.fieldbyName('Nome do campo 1').AsString; form1.DBEdit11.field.asstring := Dataset.fieldbyName('Nome do campo 2').AsString close; end;
pra jogar o valor diretamente no Field do DataSet e não no texto somente do dbedit porque apaga...
Isso já deve resolver, mas para ajudar você nos seus próximos projetos, gostaria de dizer que também não é correto puxar os dados direto do dbgrid, a gente puxa direto do dataset que você colocou no Datasource do dbgrid:
procedure Tform2.DBGrid1DblClick(Sender: TObject); begin form1.DBEdit5.field.asstring := Dataset.fieldbyName('Nome do campo 1').AsString; form1.DBEdit11.field.asstring := Dataset.fieldbyName('Nome do campo 2').AsString close; end;
A ultima coisa que eu gostaria de lhe informar é que existe uma forma baseada em melhores prática pra fazer isso que você quer...
procedure Tform1.ButtonClick(Sender: TObject); begin frm2.showmodal; DBEdit5.field.asstring := frm2.Dataset.fieldbyName('Nome do campo 1').AsString; DBEdit11.field.asstring := frm2.Dataset.fieldbyName('Nome do campo 2').AsString end;
O código acima diz que quando apertar o botão ele chama o form2. no duplo click do dbgrid para selecionar o registro, você ó manda fechar o formulário, só isso, mas sem fechar o dataSet. Então a programação volta para o código do botão, e no código do botão você chama os dados do formulário 2 que fechou mas ainda está na memória.
Hélio tudo bem?
Então tentei o que você falou, joguei o código em um botão:
procedure Tfvendas.Button3Click(Sender: TObject);
var frmPesqCli : Tfconprodutos;
begin
frmPesqCli := Tfconprodutos.Create(Application);
frmPesqCli.ShowModal;
DBEdit5.field.asstring:= frmPesqCli.ADOQuery1.fieldbyName('CODIGO').AsString;
DBEdit11.field.asstring:= frmPesqCli.ADOQuery1.fieldbyName('NOME').AsString;
FreeAndNil(frmPesqCli);
end;
ele abre o form2, aparece os dados no DBGRID, mas quando seleciono cliente que desejo ele não passa os dados para DBEdit do form 1.
DBGrid está conectado ao DataSource e um AdoQuery, verifica essa imagem pra você ver como eu quero que fique.
https://1drv.ms/u/s!AnhnCHSbQS3RlTdEYJXCMCLnys8F
Meu objetivo é criar um form de vendas ainda estou aprendendo, pretendo que quando eu clicar no botão localizar, ele abra um popup para procurar o cliente e quando encontra o cliente eu der um duplo clique ou apertar em botão para selecionar e jogar no form principal no DBEdit 5 e 11 pra que grave na tabela venda. E funcione apenas quando tiver no estado de insert e edit.
OBS.: Estou aprendendo, então se deixar o mais claro possível eu agradeço!
GOSTEI 0