Excluindo um produto de uma DBGrid
17/03/2021
0
Boa noite pessoal,
tudo bem?
Estou com uma situação no Delphi 7 e precisava de um auxilio.
Estou criando um sistema de vendas de produtos, onde ao bipar o produto em um Edit, tenho um evento no OnChange conforme segue:
var
vTextoCodigo, vCodigoProduto: string;
vValor, vPeso, vPrecoKG: Currency;
begin
EdCodigo.Text := '000000';
EdPeso.Text := '0,000';
EdValor.Text := '0,00';
vTextoCodigo := EdCodigoProduto.Text;
vPrecoKG := dtsproduto['VALOR_VENDA'];
if (Length(vTextoCodigo)=13) and (vTextoCodigo[1]='2') then
begin
vValor := StrToFloat(Copy(vTextoCodigo,8,5))/100;
vCodigoProduto := Copy(vTextoCodigo,2,6);
EdCodigo.Text := FormatFloat('000000',StrToFloat(vCodigoProduto));
dtsproduto.Locate('CODACESSO',EdCodigo.Text,[loPartialKey]);
EdPeso.Text := FormatFloat(',0.000',vValor/dtsproduto['VALOR_VENDA']);
EdValor.Text := FormatFloat(',0.00', vValor);
end
else
dtsproduto.Locate('CODACESSO',EdCodigoProduto.Text,[loPartialKey]);
EdCodigo.Text := dtsproduto['CODACESSO'];
EdPeso.Text := FormatFloat(',0.000',1);
EdValor.Text := FormatFloat(',0.00', dtsproduto['VALOR_VENDA'] * EdPeso.Text );
end;
Nesse trecho primeiro ele faz uma verificação se o código do produto começa com o dígito 2 e possuí 13 dígitos, para puxar os produtos de balança.
Caso não cair nessas condições o sistema vai para o Else onde ele pega diretamente o código do produto na tabela do banco (Firebird).
Até ai tudo bem. Ele identifica o produto e retorna os valores de venda e quantidade do pacote que estão cadastrados no banco de dados normalmente e são inseridas as informações na DBGrid dos Itens.
Pois bem...
Meu problema maior está depois no momento que tento excluir algum item que foi bipado errado.... segue os comandos que realizo para exclusão do item na DBGrid, quando aperto em um button de exclusão:
dtsItem.delete;
dtsitem.close;
dtsitem.open;
qrytotal.Close;
qrytotal.ParamByName('cod').AsInteger := dtsvenda.FieldValues['venda_pk'];
qrytotal.open;
dtsvenda.FieldValues['total']:= qrytotal['sum'];
EdCodigoProduto.SetFocus;
O produto é excluído... só que ai vou tentar bipar novamente o produto no edit EdCodigoProduto.Text e o sistema só aceita o primeiro algarismo do código e retorna um erro conforme segue:
Could not convert variant of type (Null) into type (String).
E quando vou verificar o sistema não está retornando o código do produto nem no campo EdCodigoProduto.Text (que é o edit que eu bipo o código de barras.... e nesse campo só está retornando o primeiro dígito do código de barras.... no caso o dígito 7 e como não tenho nenhum produto cadastrado com esse código, da erro....) e nem no campo EdCodigo.Text (que é um dbedit que busca o código do produto na tabela de cadastro de produtos).
Alguém poderia me ajudar?
Desde já agradeço.
tudo bem?
Estou com uma situação no Delphi 7 e precisava de um auxilio.
Estou criando um sistema de vendas de produtos, onde ao bipar o produto em um Edit, tenho um evento no OnChange conforme segue:
var
vTextoCodigo, vCodigoProduto: string;
vValor, vPeso, vPrecoKG: Currency;
begin
EdCodigo.Text := '000000';
EdPeso.Text := '0,000';
EdValor.Text := '0,00';
vTextoCodigo := EdCodigoProduto.Text;
vPrecoKG := dtsproduto['VALOR_VENDA'];
if (Length(vTextoCodigo)=13) and (vTextoCodigo[1]='2') then
begin
vValor := StrToFloat(Copy(vTextoCodigo,8,5))/100;
vCodigoProduto := Copy(vTextoCodigo,2,6);
EdCodigo.Text := FormatFloat('000000',StrToFloat(vCodigoProduto));
dtsproduto.Locate('CODACESSO',EdCodigo.Text,[loPartialKey]);
EdPeso.Text := FormatFloat(',0.000',vValor/dtsproduto['VALOR_VENDA']);
EdValor.Text := FormatFloat(',0.00', vValor);
end
else
dtsproduto.Locate('CODACESSO',EdCodigoProduto.Text,[loPartialKey]);
EdCodigo.Text := dtsproduto['CODACESSO'];
EdPeso.Text := FormatFloat(',0.000',1);
EdValor.Text := FormatFloat(',0.00', dtsproduto['VALOR_VENDA'] * EdPeso.Text );
end;
Nesse trecho primeiro ele faz uma verificação se o código do produto começa com o dígito 2 e possuí 13 dígitos, para puxar os produtos de balança.
Caso não cair nessas condições o sistema vai para o Else onde ele pega diretamente o código do produto na tabela do banco (Firebird).
Até ai tudo bem. Ele identifica o produto e retorna os valores de venda e quantidade do pacote que estão cadastrados no banco de dados normalmente e são inseridas as informações na DBGrid dos Itens.
Pois bem...
Meu problema maior está depois no momento que tento excluir algum item que foi bipado errado.... segue os comandos que realizo para exclusão do item na DBGrid, quando aperto em um button de exclusão:
dtsItem.delete;
dtsitem.close;
dtsitem.open;
qrytotal.Close;
qrytotal.ParamByName('cod').AsInteger := dtsvenda.FieldValues['venda_pk'];
qrytotal.open;
dtsvenda.FieldValues['total']:= qrytotal['sum'];
EdCodigoProduto.SetFocus;
O produto é excluído... só que ai vou tentar bipar novamente o produto no edit EdCodigoProduto.Text e o sistema só aceita o primeiro algarismo do código e retorna um erro conforme segue:
Could not convert variant of type (Null) into type (String).
E quando vou verificar o sistema não está retornando o código do produto nem no campo EdCodigoProduto.Text (que é o edit que eu bipo o código de barras.... e nesse campo só está retornando o primeiro dígito do código de barras.... no caso o dígito 7 e como não tenho nenhum produto cadastrado com esse código, da erro....) e nem no campo EdCodigo.Text (que é um dbedit que busca o código do produto na tabela de cadastro de produtos).
Alguém poderia me ajudar?
Desde já agradeço.
Vinicius David
Curtir tópico
+ 0
Responder
Posts
18/03/2021
Emerson Nascimento
se EdCodigo é um dbEdit porque você atribui conteúdo a ele? Você deveria fazer isso somente numa manutenção, não numa consulta.
var vCodigoProduto: string; vPeso, vPrecoKG: Currency; begin vCodigoProduto := EdCodigoProduto.Text; if (Length(vCodigoProduto)=13) and (vCodigoProduto[1]='2') then vCodigoProduto := Copy(vCodigoProduto,2,6); if dtsproduto.Locate('CODACESSO',vCodigoProduto,[loPartialKey]) then begin vPrecoKG := dtsproduto['VALOR_VENDA']; EdPeso.Text := FormatFloat(',0.000',1); end else begin vPrecoKG := 0; EdPeso.Text := '0,000'; // exiba uma mensagem para o usuário end; vPeso := StrToFloatDef(EdPeso.Text, 0); EdValor.Text := FormatFloat(',0.00', vPrecoKG * vPeso); end;
Responder
Clique aqui para fazer login e interagir na Comunidade :)