update no firedac
21/10/2017
0
FDQuery.Active := False;
FDQuery.Close;
FDQuery.SQL.Clear;
FDQuery.SQL.Add('update produtos_ou set qtde = :qtde where (codigo_interno = :codigo_interno)');
FDQuery.SQL.Add('value (:qtde)');
FDQuery.Prepare;
FDQuery.ParamByName('qtd').AsString := edtQuantAtual.Text;
//FDQuery.ParamByName('qtde').Value:= edtQuantAtual.Text;
FDQuery.ExecSQL;
essa tabela tem 3 campos distintos que sao "qtde_min, qtde, codigo_interno" no caso preciso alterar o dado campo 'qtde' .
Julio Cesar
Post mais votado
23/10/2017
Há um erro no seu código
FDQuery.Active := False; FDQuery.Close; FDQuery.SQL.Clear; FDQuery.SQL.Add('update produtos_ou set qtde = :qtde where (codigo_interno = :codigo_interno)'); //FDQuery.SQL.Add('value (:qtde)'); // esta linha não é necessária //FDQuery.Prepare; ///este é antes do execsql FDQuery.ParamByName('qtd').AsString := edtQuantAtual.Text; //FDQuery.ParamByName('qtde').Value:= edtQuantAtual.Text; FDQuery.ParamByName('codigo_interno').AsString := codigo_interno; // e falta esta linha FDQuery.Prepare; FDQuery.ExecSQL;
Quando você adiciona o ":VARIVEl", o componente já entende que é necessário a entrada de dados.
A condição "value(...)" é necessária quando está persistindo uma nova linha na tabela.
att
Luiz Vichiatto
Mais Posts
23/10/2017
Julio Cesar
conforme verifiquei agora.
segue novamente a sintaxe.
if FDQuery.Active then
FDQuery.Close;
FDQuery.SQL.Clear;
FDQuery.SQL.Add('update produtos_ou set qtde = :qtd where (codigo_interno = :codigo)');
FDQuery.ParamByName('qtd').Value := StrToFloat(edtQuantAtual.Text);
// FDQuery.ParamByName('qtd').AsString := StrToFloat(edtQuantAtual.Text);
FDQuery.ParamByName('codigo').AsString := edtCodInterno.Text;
FDQuery.Prepare;
FDQuery.ExecSQL;
mesmo fazendo uma conversão, não sei se o correto da um erro de ' " is not a valid floating point value.'
como corrigir isso?
24/10/2017
Luiz Vichiatto
https://www.devmedia.com.br/forum/duvida-sobre-campo-do-tipo-double-precision/49330
http://www.activedelphi.com.br/forum/viewtopic.php?t=55592&sid=55575e1c296e3500c89cb688043dfa6b
24/10/2017
Rafael Bosco
FDQuery.ParamByName('qtd').AsCurrency := StrToCurr(edtQuantAtual.Text);
26/10/2017
Julio Cesar
segue o codigo.
procedure TfrmMainEstoque.btnAlterarClick(Sender: TObject);
begin
//
FDTableProd_ib.Active := False;
FDTableProd_ib.Close;
FDTableProd_ib.SQL.Clear;
FDTableProd_ib.SQL.Add('update produtos_ib set preco_compra = :custo, preco_venda = :venda '+
'where codigo_interno = '+ edtCodInterno.Text);
FDTableProd_ib.ParamByName('custo').value := StrToFloat(edtCusto.Text);
FDTableProd_ib.ParamByName('venda').value := StrToFloat(edtVenda.Text);
FDTableProd_ib.Prepare;
FDTableProd_ib.ExecSQL;
end;
para quem tiver duvidas, obrigado a todos.
06/10/2019
Felipe
segue o codigo.
procedure TfrmMainEstoque.btnAlterarClick(Sender: TObject);
begin
//
FDTableProd_ib.Active := False;
FDTableProd_ib.Close;
FDTableProd_ib.SQL.Clear;
FDTableProd_ib.SQL.Add('update produtos_ib set preco_compra = :custo, preco_venda = :venda '+
'where codigo_interno = '+ edtCodInterno.Text);
FDTableProd_ib.ParamByName('custo').value := StrToFloat(edtCusto.Text);
FDTableProd_ib.ParamByName('venda').value := StrToFloat(edtVenda.Text);
FDTableProd_ib.Prepare;
FDTableProd_ib.ExecSQL;
end;
para quem tiver duvidas, obrigado a todos.
Velho, resolveu aqui pra mim, valeu
11/12/2019
Vicente Santos
Clique aqui para fazer login e interagir na Comunidade :)