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

Vinicius David

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

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