MEU BOTÃO DE EDIÇÃO NÃO FUNCIONA CORRETAMENTE!

Delphi

08/08/2020

Pessoal, tenho um botão de editar em um formulário que nao esta salvando corretamente.
Se por exemplo eu salvar um valor de R$ 13,35 e tentar editar esse valor para R$13,65 ele edita somente R$ 13,00.
outro exemplo se eu salvar R$ 20,98 e editar para R$ 30,35 ele arredonda pra R$ 30,00. me ajudem!

procedure TfrmOferta.btnEditarClick(Sender: TObject);
begin
if (cbMes.Text <> '') and (edtValor.Text <> '') then
begin
associarCampos;
dm.tb_ofertas.Edit;

dm.query_ofertas.Close;
dm.query_ofertas.SQL.Clear;
dm.query_ofertas.SQL.Add('update entradas_ofertas set movimento = :movimento, valor = :valor, referente = :referente where id = :id');
dm.query_ofertas.ParamByName('movimento').Value := edtMovimento.Text;
dm.query_ofertas.ParamByName('valor').Value := edtValor.Text;
dm.query_ofertas.ParamByName('referente').Value := cbMes.Text;

dm.query_ofertas.ParamByName('id').Value := edtCodigo.Text;
dm.query_ofertas.ExecSql;

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

dm.query_movimentacoes.Close;
dm.query_movimentacoes.SQL.Clear;
dm.query_movimentacoes.SQL.Add('update movimentacoes set valor = :valor, referente = :referente where id_movimento = :id and tipo = "OFERTA"');
dm.query_movimentacoes.ParamByName('valor').Value := edtValor.Text;
dm.query_movimentacoes.ParamByName('referente').Value := cbMes.Text;
dm.query_movimentacoes.ParamByName('id').Value := edtCodigo.Text;
dm.query_movimentacoes.ExecSql;
buscarData;
desabilitarCampos;
btnSalvar.Enabled := false;
btnEditar.Enabled := false;
btnDeletar.Enabled := false;
btnNovo.Enabled := true;
end
else
begin
MessageDlg('Preencha os Campos', mtInformation, mbOKCancel, 0);
end;
end;
Quilson Lira

Quilson Lira

Curtidas 0

Respostas

Leandro Carvalho

Leandro Carvalho

08/08/2020

Pessoal, tenho um botão de editar em um formulário que nao esta salvando corretamente.
Se por exemplo eu salvar um valor de R$ 13,35 e tentar editar esse valor para R$13,65 ele edita somente R$ 13,00.
outro exemplo se eu salvar R$ 20,98 e editar para R$ 30,35 ele arredonda pra R$ 30,00. me ajudem!

procedure TfrmOferta.btnEditarClick(Sender: TObject);
begin
if (cbMes.Text <> '') and (edtValor.Text <> '') then
begin
associarCampos;
dm.tb_ofertas.Edit;

dm.query_ofertas.Close;
dm.query_ofertas.SQL.Clear;
dm.query_ofertas.SQL.Add('update entradas_ofertas set movimento = :movimento, valor = :valor, referente = :referente where id = :id');
dm.query_ofertas.ParamByName('movimento').Value := edtMovimento.Text;
dm.query_ofertas.ParamByName('valor').Value := edtValor.Text;
dm.query_ofertas.ParamByName('referente').Value := cbMes.Text;

dm.query_ofertas.ParamByName('id').Value := edtCodigo.Text;
dm.query_ofertas.ExecSql;

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

dm.query_movimentacoes.Close;
dm.query_movimentacoes.SQL.Clear;
dm.query_movimentacoes.SQL.Add('update movimentacoes set valor = :valor, referente = :referente where id_movimento = :id and tipo = "OFERTA"');
dm.query_movimentacoes.ParamByName('valor').Value := edtValor.Text;
dm.query_movimentacoes.ParamByName('referente').Value := cbMes.Text;
dm.query_movimentacoes.ParamByName('id').Value := edtCodigo.Text;
dm.query_movimentacoes.ExecSql;
buscarData;
desabilitarCampos;
btnSalvar.Enabled := false;
btnEditar.Enabled := false;
btnDeletar.Enabled := false;
btnNovo.Enabled := true;
end
else
begin
MessageDlg('Preencha os Campos', mtInformation, mbOKCancel, 0);
end;
end;


pega o retorno da query antes do execsql:
declare clipbrd
Clipboard.astext := dm.query_movimentacoes.sql.text;

e cole no sql do seu banco para ver como esta indo.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

08/08/2020

talvez o problema esteja na forma como os dados estão sendo enviados ao componente.
tente assim:
procedure TfrmOferta.btnEditarClick(Sender: TObject);
begin
	if (cbMes.Text <> '') and (edtValor.Text <> '') then
	begin
		associarCampos;
		dm.tb_ofertas.Edit;

		dm.query_ofertas.Close;
		dm.query_ofertas.SQL.Clear;
		dm.query_ofertas.SQL.Add('update entradas_ofertas set movimento = :movimento, valor = :valor, referente = :referente where id = :id');
		dm.query_ofertas.ParamByName('movimento').AsString := edtMovimento.Text; // não consegui identificar, deixei como texto
		dm.query_ofertas.ParamByName('valor').AsFloat := StrToFloat(edtValor.Text);
		dm.query_ofertas.ParamByName('referente').AsString := cbMes.Text;
		dm.query_ofertas.ParamByName('id').AsString := edtCodigo.Text;
		dm.query_ofertas.ExecSql;

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

		dm.query_movimentacoes.Close;
		dm.query_movimentacoes.SQL.Clear;
		dm.query_movimentacoes.SQL.Add('update movimentacoes set valor = :valor, referente = :referente where id_movimento = :id and tipo = "OFERTA"');
		dm.query_movimentacoes.ParamByName('valor').AsFloat := StrToFloat(edtValor.Text);
		dm.query_movimentacoes.ParamByName('referente').AsString := cbMes.Text;
		dm.query_movimentacoes.ParamByName('id').AsInteger := StrToInt(edtCodigo.Text);
		dm.query_movimentacoes.ExecSql;

		buscarData;
		desabilitarCampos;

		btnSalvar.Enabled := false;
		btnEditar.Enabled := false;
		btnDeletar.Enabled := false;
		btnNovo.Enabled := true;
	end
	else
	begin
		MessageDlg('Preencha os Campos', mtInformation, mbOKCancel, 0);
	end;
end;
o que fiz foi 'tipar' os parâmetros e utilizar as funções pertinentes para transformar o conteúdo digitado no tipo correto.
GOSTEI 0
POSTAR