Como Excluir um registro selecionado no DBGrid

27/10/2019

0

Ola Galera do Fórum!!!

Bom pessoal, estou tendo dificuldades em excluir um registro ao clicar no DBGrid, quando clico na linha do DBGrid para
deletar aquele registro ele ta excluindo apenas o registro que acabei de cadastrar, não exclui qualquer registro que eu selecionar no DBGrid.
a linha de comando do botão se encontra abaixo.

=================FORMULÁRIO DE PRODUTOS========================================================

procedure TFrmEntradaDeProdutos.BtnExcluirClick(Sender: TObject);
begin
if MessageDlg(''Deseja Excluir o registro?'', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
DM.TabEntradas_Produtos.Delete;

//ATUALIZAR O ESTOQUE
//RECUPERAR O ESTOQUE ATUAL
dm.QryTabProdutos.Close;
dm.QryTabProdutos.SQL.Clear;
dm.QryTabProdutos.SQL.Add(''select * from produtos where id = :id'');
dm.QryTabProdutos.ParamByName(''id'').Value := idProdutoEst;
dm.QryTabProdutos.Open;

if not DM.QryTabProdutos.isEmpty then
begin
EstoqueProduto := DM.QryTabProdutos[''estoque''];
end;
Estoque := EstoqueProduto - strToFloat(EdtQuantidade.Text);

DM.QryTabProdutos.Close;
DM.QryTabProdutos.SQL.Clear;
DM.QryTabProdutos.SQL.Add(''UPDATE produtos set estoque = :estoque where id = :id'');
DM.QryTabProdutos.ParamByName(''estoque'').Value := Estoque;
DM.QryTabProdutos.ParamByName(''id'').Value := idProduto;
DM.QryTabProdutos.Execute;

MessageDlg(''Deletado com Sucesso!!'', mtInformation, mbOKCancel, 0);
ListarCampos;

//AÇÕES DOS BOTÕES
BtnNovo.Enabled := true;
BtnExcluir.Enabled := false;
end;
end;
========================== FIM DO COMANDO DO BOTÃO EXCLUIR ==========================

Se eu colocar desta forma:

==============FORMULÁRIO DE FORNECEDORES=========================

procedure TFrmCadFornecedores.BtnExcluirClick(Sender: TObject);
begin
if MessageDlg(''Deseja Excluir o Registro?'', mtConfirmation, [mbYes, mbNo], 0) = mrYes then

MessageDlg(''Deletado com Sucesso!!'', mtInformation, mbOKCancel, 0);
LimparCampos;
DesabilitarCampos;

DM.QryTabFornecedores.Close;
DM.QryTabFornecedores.SQL.Clear;
DM.QryTabFornecedores.SQL.Add(''DELETE from fornecedores where id = :id'');
DM.QryTabFornecedores.ParamByName(''id'').Value := id;
DM.QryTabFornecedores.Execute;
Listarcampos;

//AÇÕES DOS BOTÕES
BtnEditar.Enabled := false;
BtnExcluir.Enabled := false;
BtnSalvar.Enabled := false;
BtnNovo.Enabled := true;
BtnCancelar.Enabled := false;
end;

======================FIM DO COMANDO DO FORMULÁRIO DE FORNECEDORES================================================

Ele exclui o registro que selecionei, porem se eu clicar no botão de NÃO excluir ele exclui o registro mesmo assim.

Já pesquisei na web varias formar de como excluir um registro selecionado no DBGrid, mas não tive exito, Alguém poderia me da uma diga
de como excluir um registro selecionado no DBGrid?

OBS.: NO FORMULÁRIO DE PRODUTOS AO EXCLUIR UM ITEM SELECIONADO NO DBGRID O VALOR TERÁ QUE VOLTAR PRO ESTOQUE.
José Soares

José Soares

Responder

Posts

28/10/2019

Emerson Nascimento

código do botão de exclusão de entrada de produtos:
=================FORMULÁRIO DE PRODUTOS========================================================

procedure TFrmEntradaDeProdutos.BtnExcluirClick(Sender: TObject);
var
	QtdEntrada: float;
begin
	if MessageDlg('Deseja Excluir o registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
	begin
		idProduto := DM.TabEntradas_Produtos.FieldByName('idProduto').AsFloat; // obtém o produto que está sendo manupilado (aqui você põe o campo correto)
		QtdEntrada := DM.TabEntradas_Produtos.FieldByName('Quantidade').AsFloat; // obtém a quantidade movimentada (aqui você põe o campo correto)
		DM.TabEntradas_Produtos.Delete; // Apaga a movimentação de entrada

		//ATUALIZAR O ESTOQUE
		// O cálculo deve ser feito diretamente na instrução, a partir da quantidade que você está movimentando.
		// NUNCA efetue o cálculo pra mandar pra tabela porque podem estar acontecendo movimentações simultâneas,
		// que podem - e irão - prejudicar o resultado se você fizer o cálculo antecipadamente.
		DM.QryTabProdutos.Close;		// aqui você usa o mesmo objeto que usa pra listar o produto? deveria ser execução
		DM.QryTabProdutos.SQL.Clear;	// direta na conexão do banco de dados, visto que você não precisa de resultset.
		DM.QryTabProdutos.SQL.Add('UPDATE produtos set estoque = estoque - :qtd where id = :id');
		DM.QryTabProdutos.ParamByName('qtd').Value := QtdEntrada;
		DM.QryTabProdutos.ParamByName('id').Value := idProduto;
		DM.QryTabProdutos.Execute;

		MessageDlg('Deletado com Sucesso!!', mtInformation, mbOKCancel, 0);

		ListarCampos;

		//AÇÕES DOS BOTÕES
		BtnNovo.Enabled := true;
		BtnExcluir.Enabled := false;
	end;
end;
========================== FIM DO COMANDO DO BOTÃO EXCLUIR ==========================

código do botão de exclusão de fornecedor (faltava o begin...end):
==============FORMULÁRIO DE FORNECEDORES=========================

procedure TFrmCadFornecedores.BtnExcluirClick(Sender: TObject);
begin
	if MessageDlg('Deseja Excluir o Registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
	begin
		LimparCampos;
		DesabilitarCampos;

		DM.QryTabFornecedores.Close;
		DM.QryTabFornecedores.SQL.Clear;
		DM.QryTabFornecedores.SQL.Add('DELETE from fornecedores where id = :id');
		DM.QryTabFornecedores.ParamByName('id').Value := id;
		DM.QryTabFornecedores.Execute;
		Listarcampos;
		MessageDlg('Deletado com Sucesso!!', mtInformation, mbOKCancel, 0);

		//AÇÕES DOS BOTÕES
		BtnEditar.Enabled := false;
		BtnExcluir.Enabled := false;
		BtnSalvar.Enabled := false;
		BtnNovo.Enabled := true;
		BtnCancelar.Enabled := false;
	end;
end;

======================FIM DO COMANDO DO FORMULÁRIO DE FORNECEDORES================================================

Responder

29/10/2019

José Soares

código do botão de exclusão de entrada de produtos:
=================FORMULÁRIO DE PRODUTOS========================================================

procedure TFrmEntradaDeProdutos.BtnExcluirClick(Sender: TObject);
var
	QtdEntrada: float;
begin
	if MessageDlg('Deseja Excluir o registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
	begin
		idProduto := DM.TabEntradas_Produtos.FieldByName('idProduto').AsFloat; // obtém o produto que está sendo manupilado (aqui você põe o campo correto)
		QtdEntrada := DM.TabEntradas_Produtos.FieldByName('Quantidade').AsFloat; // obtém a quantidade movimentada (aqui você põe o campo correto)
		DM.TabEntradas_Produtos.Delete; // Apaga a movimentação de entrada

		//ATUALIZAR O ESTOQUE
		// O cálculo deve ser feito diretamente na instrução, a partir da quantidade que você está movimentando.
		// NUNCA efetue o cálculo pra mandar pra tabela porque podem estar acontecendo movimentações simultâneas,
		// que podem - e irão - prejudicar o resultado se você fizer o cálculo antecipadamente.
		DM.QryTabProdutos.Close;		// aqui você usa o mesmo objeto que usa pra listar o produto? deveria ser execução
		DM.QryTabProdutos.SQL.Clear;	// direta na conexão do banco de dados, visto que você não precisa de resultset.
		DM.QryTabProdutos.SQL.Add('UPDATE produtos set estoque = estoque - :qtd where id = :id');
		DM.QryTabProdutos.ParamByName('qtd').Value := QtdEntrada;
		DM.QryTabProdutos.ParamByName('id').Value := idProduto;
		DM.QryTabProdutos.Execute;

		MessageDlg('Deletado com Sucesso!!', mtInformation, mbOKCancel, 0);

		ListarCampos;

		//AÇÕES DOS BOTÕES
		BtnNovo.Enabled := true;
		BtnExcluir.Enabled := false;
	end;
end;
========================== FIM DO COMANDO DO BOTÃO EXCLUIR ==========================

código do botão de exclusão de fornecedor (faltava o begin...end):
==============FORMULÁRIO DE FORNECEDORES=========================

procedure TFrmCadFornecedores.BtnExcluirClick(Sender: TObject);
begin
	if MessageDlg('Deseja Excluir o Registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
	begin
		LimparCampos;
		DesabilitarCampos;

		DM.QryTabFornecedores.Close;
		DM.QryTabFornecedores.SQL.Clear;
		DM.QryTabFornecedores.SQL.Add('DELETE from fornecedores where id = :id');
		DM.QryTabFornecedores.ParamByName('id').Value := id;
		DM.QryTabFornecedores.Execute;
		Listarcampos;
		MessageDlg('Deletado com Sucesso!!', mtInformation, mbOKCancel, 0);

		//AÇÕES DOS BOTÕES
		BtnEditar.Enabled := false;
		BtnExcluir.Enabled := false;
		BtnSalvar.Enabled := false;
		BtnNovo.Enabled := true;
		BtnCancelar.Enabled := false;
	end;
end;

======================FIM DO COMANDO DO FORMULÁRIO DE FORNECEDORES================================================

MUITO OBRIGADO PELA AJUDA AMIGO, DEU TUDO CERTO.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar