Preencher edit conforme o que estiver no combobox

04/06/2018

0

Tenho um combo box que puxa todos os produtos da tabela e os lista com o seguinte código:
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

Luiz Silva

Responder

Post mais votado

05/06/2018

Coloque no Onselect do combobox
Edbedit1.text:=combobox1.text;

Raimundo Pereira

Raimundo Pereira
Responder

Mais Posts

05/06/2018

Luiz Silva

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?
Responder

05/06/2018

Raimundo Pereira

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
Responder

05/06/2018

Luiz Silva

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
Responder

05/06/2018

Raimundo Pereira

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;


Responder

05/06/2018

Luiz Silva

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?
Responder

05/06/2018

Raimundo Pereira

Correto no onselect

if dm.suatabela.locate('NOME_PRODUTO',COMBOBOX.TEXT,[]) THEN
EDIT1.TEXT:=dm.suatabela.FIELBYNAME('CAMPO_VALOR').VALUE;
Responder

05/06/2018

Luiz Silva

Vc sabe como ficaria esse código usando o zeos? Acho que esse é do ADO né? Zquery?
Responder

05/06/2018

Luiz Silva

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!
Responder

05/06/2018

Raimundo Pereira

Add no skype
sac@p2tecnico.com.br

Assim que chegar em casa dou uma atenção melhor.
Abraço
Responder

05/06/2018

Luiz Silva

Ok amanhã 06/06 depois das 3 da tarde vc estará disponível? No skype?
Responder

05/06/2018

Alberto

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;

Responder

06/06/2018

Luiz Silva

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.
Responder

06/06/2018

Raimundo Pereira

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.
Responder

06/06/2018

Luiz Silva

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')+' , '+
...
Responder

08/06/2018

Alberto

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.
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