Preencher edit conforme o que estiver no combobox
Tenho um combo box que puxa todos os produtos da tabela e os lista com o seguinte código:
Quero que quando a pessoa escolha um produto no combo box o valor unitário desse produto que esta na tabela seja recebido no edit correspondente.
Preciso de ajuda!
procedure Tformitens.FormShow(Sender: TObject); begin with formitens do Zacao.Close; Zacao.SQL.Clear; Zacao.SQL.Add('SELECT CODIGO, NOME, VALOR_UNIT FROM CAD_PRODUTOS ORDER BY CODIGO;'); Zacao.Open; Zacao.First; While not Zacao.Eof do begin combo_produtos.items.add(Zacao.FieldByName('CODIGO').AsString +' - '+ Zacao.FieldByName('NOME').Asstring); Zacao.Next; end; end;
Quero que quando a pessoa escolha um produto no combo box o valor unitário desse produto que esta na tabela seja recebido no edit correspondente.
Preciso de ajuda!
Luiz Silva
Curtidas 0
Melhor post
Raimundo Pereira
05/06/2018
Coloque no Onselect do combobox
Edbedit1.text:=combobox1.text;
Edbedit1.text:=combobox1.text;
GOSTEI 1
Mais Respostas
Luiz Silva
04/06/2018
Olá P2 técnico obrigado pela sua resposta, me ajude por favor. Na verdade preciso que o valor unitário do produto selecionado no combo box seja atribuido no edit. Pode me ajudar?
GOSTEI 0
Raimundo Pereira
04/06/2018
Supondo que você realmente está usando os componentes
edit e não um dbedit
combobox e não um dblockupcombobox
Veja o exemplo que eu fiz:
https://uploaddeimagens.com.br/imagens/result-jpg-b3187d3a-4e38-4ac4-8f3a-fc4c51373135
edit e não um dbedit
combobox e não um dblockupcombobox
Veja o exemplo que eu fiz:
https://uploaddeimagens.com.br/imagens/result-jpg-b3187d3a-4e38-4ac4-8f3a-fc4c51373135
GOSTEI 0
Luiz Silva
04/06/2018
Ok, mas o meu problema não é especificamente esse, é a questão do banco de dados. O valor unitário não está no COMBOBOX e sim o nome do produto. Queria que quando a pessoa selecionasse O NOME DO produto, O VALOR UNITÁRIO DESSE PRODUTO seja recebido em um edit. Essa coluna esta na mesma tabela do nome do produto. Preciso muito de ajuda. TCC para 27/06
GOSTEI 0
Raimundo Pereira
04/06/2018
Combobox ou dblockoop?
Se combobox você precisará realizar um locate na descrição e retonar o campo que contem o valor.
if dm.suatabela.locate('NOME_PRODUTO',COMBOBOX.TEXT,[]) THEN
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
Se dblockoop
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
Se combobox você precisará realizar um locate na descrição e retonar o campo que contem o valor.
if dm.suatabela.locate('NOME_PRODUTO',COMBOBOX.TEXT,[]) THEN
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
Se dblockoop
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
GOSTEI 0
Luiz Silva
04/06/2018
Eu uso um combo box normal e o zeos para ligar no banco e faço as consultas com o zquery. Como ficaria o código? Esse código vai no onselect do combo?
GOSTEI 0
Raimundo Pereira
04/06/2018
Correto no onselect
if dm.suatabela.locate('NOME_PRODUTO',COMBOBOX.TEXT,[]) THEN
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
if dm.suatabela.locate('NOME_PRODUTO',COMBOBOX.TEXT,[]) THEN
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
GOSTEI 0
Luiz Silva
04/06/2018
Vc sabe como ficaria esse código usando o zeos? Acho que esse é do ADO né? Zquery?
GOSTEI 0
Luiz Silva
04/06/2018
Amigo, aqui nao funcionou, não sei se você percebeu mas o select que alimenta o meu combo box está no form no evento onshow. Será que tenho que colocar lá? Coloquei de acordo com a lógica que me pareceu certa mas não apareceu. Preciso muito de sua ajuda!
GOSTEI 0
Raimundo Pereira
04/06/2018
Add no skype
sac@p2tecnico.com.br
Assim que chegar em casa dou uma atenção melhor.
Abraço
sac@p2tecnico.com.br
Assim que chegar em casa dou uma atenção melhor.
Abraço
GOSTEI 0
Luiz Silva
04/06/2018
Ok amanhã 06/06 depois das 3 da tarde vc estará disponível? No skype?
GOSTEI 0
Alberto
04/06/2018
O melhor a fazer seria vc trocar o componente combobox por um dbloockupcombobox
sete as propriedades:
ListSource = tabela
ListField = campo_que_tem_o_nome_do_produto
KeyField = campo_que_tem_o_codigo_do_produto
.
Nesse ponto vc já tem a lista de produtos SEM ter que fazer o loop que vc estava fazendo para preencher a lista.
.
no evento onCloseUp e no evento onKeyPress faça sua rotina usando o campo_VALOR da tabela
que já vai estar no registro correto, escolhido pelo usuario.
.
Nao esqueca de no evento onKeyPress fazer o:
IF Key = #13 Then Begin
...
End;
sete as propriedades:
ListSource = tabela
ListField = campo_que_tem_o_nome_do_produto
KeyField = campo_que_tem_o_codigo_do_produto
.
Nesse ponto vc já tem a lista de produtos SEM ter que fazer o loop que vc estava fazendo para preencher a lista.
.
no evento onCloseUp e no evento onKeyPress faça sua rotina usando o campo_VALOR da tabela
que já vai estar no registro correto, escolhido pelo usuario.
.
Nao esqueca de no evento onKeyPress fazer o:
IF Key = #13 Then Begin
...
End;
GOSTEI 1
Luiz Silva
04/06/2018
Olá, eu fiz usando o dbcombobox mas eu preciso que nele apareça tanto o nome do produto quanto o id, os dois campo no combo. Fui e cadastrei um produto e depois de salvo voltei no dbcombo box mas nao atualizou. Precisei fechar e compilar de novo para aparecer. Como resolver isso? E também vc pode me explicar com mais detalhes o que fazer nos eventos que vc disse oncloseup e onkeypress para aparecer o valor unitario no edit? Se vc puder me ajudar eu te agradeceria muito, preciso de ajuda.
GOSTEI 0
Raimundo Pereira
04/06/2018
Se não me engano na propriedade keyfield, você pode mostrar varios campos da tabela, basta separar por virgula ou ponto e virgula, não me recordo bem.
GOSTEI 0
Luiz Silva
04/06/2018
Ok, mas ele nao tem a propriedade .text ai como faço para salvar no banco? Por exemplo
exec: 'INSERT INTO (NOME, ..) VALUES'+
Quotedstr('DBCOMBOBOX.TEXT')+' , '+
...
exec: 'INSERT INTO (NOME, ..) VALUES'+
Quotedstr('DBCOMBOBOX.TEXT')+' , '+
...
GOSTEI 0
Alberto
04/06/2018
vc usa o dbcombobox quando quer gravar num campo da MESMA tabela um dos items de uma lista FIXA e pre-determinada, que esta na propriedade ITEMS:
Exemplo: Na tabela clientes vc tem um campo "TIPO" varchar(20) e nele voce quer gravar somente 1 de duas opcoes: ("amigo", "desconhecido"), entao vc coloca essas duas opcoes na propriedade ITEMS do dbcombobox, e nas propriedades: DataSource -> CLIENTES, e DATAFIELD -> TIPO, ao selecionar uma das opcoes o dbcombobox ja grava o valor no campo da tabela.
//
vc usa o dblookupcombobox quando quer:
1º = gravar na tabela A o valor de um campo contido na tabela B
2º = obter o valor de um campo na tabela B sem necessariamente gravá-lo (automaticamente atraves do componente) na tabela A
//
Na opcao 1 vc deve informar as propriedades da tabela B em
ListSource = tabela B
ListField = campos da tabela a aparecer na lista, separados por ;
keyField = campo chave da tabela B
e da tabela A em:
DataSource = tabela A
DataField = campo chave da tabela A
Nesse caso vc grava somente o campo CHAVE (que seria o codigo ou ID)
//
Na opcao 2 vc deve informar as propriedades da tabela B em
ListSource = tabela B
ListField = campos da tabela a aparecer na lista, separados por ;
keyField = campo chave da tabela B
Nesse caso vc usa o componente somente para POSICIONAR no registro
correto (escolhido pelo usuario) na tabela B
Apartir dai vc deve fazer o que quer fazer na "UNHA"
Exemplo:
1 - Quero que o valor do produto na tabela B seja mostrado num TEDIT
meuedit.text := tabela_B.FieldbyName('VALOR').AsString;
2 - Quero que o valor do produto na tabela B seja gravado num campo da tabela A
Tabela_A.FieldbyName('VALOR_PRODUTO').Value := tabela_B.FieldbyName('VALOR').Value;
.
Para fazer o que vc quer da maneira mais facil é trocar o componente dbcombobox pelo dblookupcombobox, sei que na programacao existem várias maneiras de fazer a mesma coisa,
mas, ilustrando, nesse caso, é como querer varrer o chao com o rodo ao inves da vassoura.
.
Espero que tenha entendido.
Exemplo: Na tabela clientes vc tem um campo "TIPO" varchar(20) e nele voce quer gravar somente 1 de duas opcoes: ("amigo", "desconhecido"), entao vc coloca essas duas opcoes na propriedade ITEMS do dbcombobox, e nas propriedades: DataSource -> CLIENTES, e DATAFIELD -> TIPO, ao selecionar uma das opcoes o dbcombobox ja grava o valor no campo da tabela.
//
vc usa o dblookupcombobox quando quer:
1º = gravar na tabela A o valor de um campo contido na tabela B
2º = obter o valor de um campo na tabela B sem necessariamente gravá-lo (automaticamente atraves do componente) na tabela A
//
Na opcao 1 vc deve informar as propriedades da tabela B em
ListSource = tabela B
ListField = campos da tabela a aparecer na lista, separados por ;
keyField = campo chave da tabela B
e da tabela A em:
DataSource = tabela A
DataField = campo chave da tabela A
Nesse caso vc grava somente o campo CHAVE (que seria o codigo ou ID)
//
Na opcao 2 vc deve informar as propriedades da tabela B em
ListSource = tabela B
ListField = campos da tabela a aparecer na lista, separados por ;
keyField = campo chave da tabela B
Nesse caso vc usa o componente somente para POSICIONAR no registro
correto (escolhido pelo usuario) na tabela B
Apartir dai vc deve fazer o que quer fazer na "UNHA"
Exemplo:
1 - Quero que o valor do produto na tabela B seja mostrado num TEDIT
meuedit.text := tabela_B.FieldbyName('VALOR').AsString;
2 - Quero que o valor do produto na tabela B seja gravado num campo da tabela A
Tabela_A.FieldbyName('VALOR_PRODUTO').Value := tabela_B.FieldbyName('VALOR').Value;
.
Para fazer o que vc quer da maneira mais facil é trocar o componente dbcombobox pelo dblookupcombobox, sei que na programacao existem várias maneiras de fazer a mesma coisa,
mas, ilustrando, nesse caso, é como querer varrer o chao com o rodo ao inves da vassoura.
.
Espero que tenha entendido.
GOSTEI 0
Luiz Silva
04/06/2018
Pessoal, desculpe a demora em responder mas consegui resolver o problema! Não sei se vcs perceberam mas no meu código estava ostrando o codigo (numero) e o nome do produto ai atraves de uma função pegava o que era número e colocava no campo idproduto e o nome outra função pegaletras para inserir no nome do produto na tabela de itens. Por estar mostrando os dois não se por cargas da água o valor unitario nao era trazido mas resolvi da seguinte forma:
No evento onchange do combo adicionei o codigo e coloquei a query que chamei de Zvalorunit:
begin
Zvalorunit.close;
Zvalorunit.SQL.Clear;
Zvalorunit.SQL.Add('SELECT DISTINCT codigo, valor_unit FROM cad_produtos WHERE nome ='''+(combo_produtos.text)+'''');
Zvalorunit.Open;
edit_valorunt.Text:=(Zvalorunit.fieldbyname('VALOR_UNIT').Asstring);
Zvalorunit.Next;
end;
Isso faz com que os produtos sejam selcionados e colocados no edit conforme nome do produto.
Dai para inserir o codigo do produto achei na internet uma solução onde se usa objetos, sei lá isso eu não conhecia: Post muito didático!
http://delphiparainiciantes.com.br/como-manipular-objetos-utilizando-combobox-no-delphi/
Obrigado pela ajuda! Tenho mais uma dúvida que já vou publicar!
No evento onchange do combo adicionei o codigo e coloquei a query que chamei de Zvalorunit:
begin
Zvalorunit.close;
Zvalorunit.SQL.Clear;
Zvalorunit.SQL.Add('SELECT DISTINCT codigo, valor_unit FROM cad_produtos WHERE nome ='''+(combo_produtos.text)+'''');
Zvalorunit.Open;
edit_valorunt.Text:=(Zvalorunit.fieldbyname('VALOR_UNIT').Asstring);
Zvalorunit.Next;
end;
Isso faz com que os produtos sejam selcionados e colocados no edit conforme nome do produto.
Dai para inserir o codigo do produto achei na internet uma solução onde se usa objetos, sei lá isso eu não conhecia: Post muito didático!
http://delphiparainiciantes.com.br/como-manipular-objetos-utilizando-combobox-no-delphi/
Obrigado pela ajuda! Tenho mais uma dúvida que já vou publicar!
GOSTEI 0
Luiz Silva
04/06/2018
Segue minha dúvida :-( https://www.devmedia.com.br/forum/tcc-para-dia-27-06-socorro-delphi-e-mysql-valor-monetario/594914
GOSTEI 0