Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Buscar Código/mostrar Dados Nos Campos/gravar Dados N


mxvinicius

Pergunta

sistema1.gif

Prezados,

O campo Cod Prod é DBedit e grava dados na TPedido.

Mas gostaria de ao digitar o código que ele buscasse o na tabela TProd e mostrasse nos campos a sua frente no caso, Quantidade, Ud, Descrição, Preço Unit e calculasse o total e mostrasse no Label antes de gravar na TPedido.

Resumindo, digitei o código ele busca na tabela de produtos mostra dos dados dos produtos nos campos correspondentes, faz o cálculo mostra no Label e grava na tabela de pedido.

Poderiam por gentileza me ajudar?

Se desejarem posso enviar mais detalhes dos nomes dos bancos, dos campos e dos Table.

E a tabela é do tipo Paradox.

Grato,

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Olá Jovem.

Tente o seguinte...

os outros campos referentes ao código do produto são campos Edits Certo? tente o seguinte

No evento OnExit do DBEDIT CodProd voce pode fazer o seguinte :

if TProd.Locate('CODIGO', DBedit1.text, []) then begin
  Edit1.text := TprodNOME.asstring;
  Edit2.text := TProdquantidade.asstring;
end else begin
  SHOWMESSAGE('PRODUTO não ENCONTRADO');
end;

Funciona assim :

o if, procura na sua tabela de produtos o codigo do produto.

quando ele acha, ele preenche os campos edits, - que são os seus campos de quantidade, UD, descricao etc - e só.

é isso.. qualquer duvida, não exite em perguntar... estamos aí ! :) abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --MXVINICIUS --

Ok funcionou o filtro e os campos estão sendo mostrados, agora, como fazer o cálculo?

begin

if DataModule1.TProd.Locate('CODIGO',edit1.text, []) then begin

Edit2.text := DataModule1.TProdQuantidUC.asstring;

Edit3.text := DataModule1.TProdUD.AsString;

Edit4.Text := DataModule1.TprodDescricao.asstring;

Edit5.Text := DataModule1.TProdPreco.AsString;

Edit6.Text := Edit2.Text * Edit5.Text;

end else begin

SHOWMESSAGE('PRODUTO não ENCONTRADO');

end;

Esse cálculo está dando o erro abaixo:

[Error] U_Inicio.pas(869): Operator not applicable to this operand type

Link para o comentário
Compartilhar em outros sites

  • 0
begin
  if DataModule1.TProd.Locate('CODIGO',edit1.text, []) then begin
  Edit2.text := DataModule1.TProdQuantidUC.asstring;
  Edit3.text := DataModule1.TProdUD.AsString;
  Edit4.Text := DataModule1.TprodDescricao.asstring;
  Edit5.Text := DataModule1.TProdPreco.AsString;
  Edit6.Text := Edit2.Text * Edit5.Text;
end else begin
  SHOWMESSAGE('PRODUTO não ENCONTRADO');
end;

Esse cálculo está dando o erro abaixo:

[Error] U_Inicio.pas(869): Operator not applicable to this operand type

MXVINICIUS, não tenha dúvida que dará. Voce deve ter observado que está tentando fazer uma operação matemática utilizando texto como argumento.

Voce tem que converter o texto (números, é verdade) para um valor numérico (inteiro ou double) fazer a operação - isto resultará em um número! Então você converte este número para texto e mostra no edit.

<variavel_inteira> := StrToInt(<texto_numerico>); // a função converte texto para número inteiro

<variavel_double> := StrToFloat(<texto_numerico>); // a função converte texto para número com ponto flutuante

<texto> := IntToStr(<variavel_inteira>); // a função converte número inteiro para texto

<texto> := FloatToStr(<variavel_double>); // a função converte número com ponto flutuante para texto

é por aí o caminho.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Vinícius --

begin

if DataModule1.TProd.Locate('CODIGO',DBEdit74.text, []) then begin

DBEdit54.text := DataModule1.TProdQuantidUC.asstring;

DBEdit94.text := DataModule1.TProdUD.AsString;

DBEdit114.Text := DataModule1.TprodDescricao.asstring;

DBEdit134.Text := DataModule1.TProdPreco.AsString;

DBEdit181.Text := DateToStr(now);

DBEdit154.Text := DBEdit54.text * IntToStr(DBEdit134.Text);

// DataModule1.TPedido.append;

DataModule1.TPedidoCodProd.Value := DataModule1.TProdCodigo.Value;

DataModule1.TPedidoUd.Value := DataModule1.TProdUD.Value;

DataModule1.TPedidoDescri.Value := DataModule1.TProdDescricao.Value;

DataModule1.TPedidoPrecUn.Value := DataModule1.TProdPreco.Value;

DataModule1.TPedidoData.Value := StrToDate(DBEdit181.text);

// DataModule1.TPedido.Post;

end else begin

SHOWMESSAGE('PRODUTO não ENCONTRADO');

Mostra a seguinte mensagem de erro:

O meu delphi é 5:

[Error] U_Inicio.pas(765): There is no overloaded version of 'IntToStr' that can be called with these arguments

Link para o comentário
Compartilhar em outros sites

  • 0
begin

if DataModule1.TProd.Locate('CODIGO',DBEdit74.text, []) then begin

DBEdit54.text := DataModule1.TProdQuantidUC.asstring;

DBEdit94.text := DataModule1.TProdUD.AsString;

DBEdit114.Text := DataModule1.TprodDescricao.asstring;

DBEdit134.Text := DataModule1.TProdPreco.AsString;

DBEdit181.Text := DateToStr(now);

DBEdit154.Text := DBEdit54.text * IntToStr(DBEdit134.Text);

// DataModule1.TPedido.append;

DataModule1.TPedidoCodProd.Value := DataModule1.TProdCodigo.Value;

DataModule1.TPedidoUd.Value := DataModule1.TProdUD.Value;

DataModule1.TPedidoDescri.Value := DataModule1.TProdDescricao.Value;

DataModule1.TPedidoPrecUn.Value := DataModule1.TProdPreco.Value;

DataModule1.TPedidoData.Value := StrToDate(DBEdit181.text);

// DataModule1.TPedido.Post;

end else begin

SHOWMESSAGE('PRODUTO não ENCONTRADO');

Mostra a seguinte mensagem de erro:

O meu delphi é 5:

[Error] U_Inicio.pas(765): There is no overloaded version of 'IntToStr' that can be called with these arguments

Vinícius, acho que você não entendeu nada do que eu disse. <_<

Se você ler com atenção, vai ver que ao invés de usar a linha:

DBEdit154.Text := DBEdit54.text * IntToStr(DBEdit134.Text); (IntToStr em um texto? :blink: - fora a falta de conversão dos outros campos...)

Deveria ter feito algo como:

DBEdit154.Text := IntToStr((StrToInt(DBEdit54.text) * StrToInt(DBEdit134.Text));

ou

DBEdit154.Text := FloatToStr((StrToInt(DBEdit54.text) * StrToInt(DBEdit134.Text));

Quando você utiliza a referência a um datamódule, como a que você fez, para simplificar o código você pode utilizar with <object ou record> do.

Mas, agora que você exemplificou utilizando TDBEdit's a minha sugestão é que você utilize os campos do seu dataset na operação - Vai facilitar muito!!!

Vamos supor que seu:

- DBEdit154 esteja se referindo ao campo Preço Total do item do pedido -> DataModule1.TPedidoPrecTotal.Value;

- DBEdit54 esteja se referindo ao campo Quantidade do item do pedido -> DataModule1.TPedidoQtd.Value;

- DBEdit134 esteja se referindo ao campo Preço Unitário do item do pedido -> DataModule1.TPedidoPrecUn.Value;

Então, toda a operação realizada com os DBEdit's seria substituida por:

with DataModule1 do
begin
  ...  // outros códigos antes da operação
  TPedidoPrecTotal.Value := TPedidoQtd.Value * TPedidoPrecUn.Value;
  ...  // resto do código
end;

Veja como simplifica as coisas!

Então, vai uma dica: SEMPRE que você tiver os campos do seu dataset no seu projeto, utilize eles nas operações. Não os TDBEdit's!!!

Os DBEdits, automaticamente receberão os valores destes campos - não há o que se preocupar. ;)

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --MXVinicius --

Parceiro realmente eu sou uma mula ambulante, mas juro que testei o código quase como você passou, só não percebi que podia ter um parênteses reconvertendo tudo tipo FloatToStr(StrToFloat(edit.text)*StrToFloat(edit2.text))

Mas tentei o código que você passou e vi um erro '"x,xx" is not valid float point value;

Então aplicando o que você me informou como mais correto, li o que estava no campo da tabela e converti a saída dele gravando em variável.

O código então ficou assim:

var

preço: real;

quant: real;

begin

preço:= DataModule1.TProdPreco.AsFloat;

quant:= StrToFloat(dbedit54.text);

DBEdit154.Text := FloatToStr((quant) * (preço));

end;

Ainda estou desenvolvendo esse formulário de pedidos e surgiu uma questão sobre a melhor forma de fazê-lo.

Por exemplo tenho os campos CODPEDIDO, CODVENDEDOR, CODCLIENTE, CODPROD, QUANT, DESCRI, UD, VLRUN, TOTAL,

TRANSPORTADORA, CONDPAGAMENTO, VLRENTRADA, QUANTPARCEL, DOC COMPRA, DESCAVISTA, LOCAL ENTREGA, DATAHOJE E PRAZOENTREGA.

Mas os campos que são adicionados sequêncialmente são: CODPROD, QUANT, DESCRI, UD, VLRUN, TOTAL.

Então imagino que devo ter uma tabela com CODPEDIDO, CODVENDEDOR, CODCLIENTE, CODPROD e TRANSPORTADORA, CONDPAGAMENTO, VLRENTRADA, QUANTPARCEL, DOC COMPRA, DESCAVISTA, LOCAL ENTREGA, DATAHOJE E PRAZOENTREGA.

E vincular as duas tabelas pelo CODPEDIDO E DATAHOJE por exemplo.

Minha rotina estaria correta?

Veja a imagem:

sistema2.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --MXVinícius --

Como faço para manter a variável cheia?

Estou usando variáveis para fazer com que o cliente não redigite dados ao ir incluindo os produtos do pedido.

Mas ao "passar" pela segunda vez o código é apagado e o edit está recebendo "0" como valor.

Lembrando que declarei as variáveis como globais (não sei se isso está correto).

Seguem os códigos:

procedure TForm1.DBEdit54Exit(Sender: TObject);

var

preço: real;

quant: real;

begin

with DataModule1 do

begin

preço:= TProdPreco.AsFloat;

quant:= StrToFloat(dbedit54.text);

DBEdit154.Text := FloatToStr((quant) * (preço));

//--

pedido:= TPedidoCodNeg.AsInteger;

vendedor:= TPedidoCodVend.AsInteger;

cliente:= TPedidoCodCli.AsInteger;

end;

end;

------------------------------------------------------------------------

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

with DataModule1 do

begin

TPedido.Insert;

DBEdit51.text:= IntToStr(pedido);

pedido:= TPedidoCodNeg.AsInteger;

DBEdit52.text:= IntToStr(vendedor);

vendedor:= TPedidoCodVend.AsInteger;

DBEdit53.text:= IntToStr(cliente);

cliente:= TPedidoCodCli.AsInteger;

DBEdit74.SetFocus;

end;

end;

end.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --MXVinícius --

Já resolvi, não usei variáveis.

Ficou assim:

procedure TForm1.DBEdit54Exit(Sender: TObject);

var

preço: real;

quant: real;

begin

with DataModule1 do

begin

preço:= TProdPreco.AsFloat;

quant:= StrToFloat(dbedit54.text);

DBEdit154.Text := FloatToStr((quant) * (preço));

//--

Edit51.text:= DBedit51.text;

Edit52.text:= DBedit52.text;

Edit53.text:= DBedit53.text;

//pedido:= TPedidoCodNeg.AsInteger;

//vendedor:= TPedidoCodVend.AsInteger;

//cliente:= TPedidoCodCli.AsInteger;

end;

end;

-----------------------------------------------------------

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

with DataModule1 do

begin

TPedido.Insert;

//Edit51.text:= IntToStr(pedido);

DBEdit51.text:= Edit51.text;

// pedido:= StrToInt(Edit51.text);

//Edit52.text:= IntToStr(vendedor);

DBEdit52.text:= Edit52.text;

// vendedor:= StrToInt(Edit52.text);

//Edit53.text:= IntToStr(cliente);

DBEdit53.text:= Edit53.text;

// cliente:= StrToInt(Edit53.text);

DBEdit74.SetFocus;

end;

end;

end.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...