Erro ao ter saldo estoque = 0

Delphi

10/04/2006

Utilizo esse procedimento para INSERIR valores na minha tab_entradas, ou seja.. dar entrada de QUANTIDADE no estoque.

O problema é quando tenho estoque com SALDO = 0 (zero) me acontece um erro no aplicativo... caso for diferente de zero (possuir estoque) funciona normalmente.


[b:4904be51ef]ERRO: ´´ is not a valid floating point value[/b:4904be51ef]
Mesmo com o erro me grava a entrada.. só nao atualiza meu SALDO do produto.

PODEM ME AJUDAR POR FAVOR?


// PROCEDIMENTO USADO

procedure TForm_Entradas.BtnOKClick(Sender: TObject);
var
dataCad : string;
ddata : TDate;
Begin

ddata := strtodateDef(Form_Menu.SBPrincipal.Panels[2].text,0);
if ddata > 0 then
dataCad := formatdatetime(´yyyy-mm-dd´,ddata)
else
dataCad := ´null´;




/////////////////////////// INSERE NA TABELA ENTRADAS
Begin

decimalseparator:=´.´; //DEFINE O SEPARADOR COMO . FICA 33.33 E NAO 33,33

QueryEntradas.Active := False;
QueryEntradas.SQL.Clear;
QueryEntradas.Sql.Add(´insert into tab_entradas (PRODUTO, COD_PRODUTO, UN, NF, PRECO_COMPRA, QTDE, FORNECEDOR, DATA_ENTRADA, ´+
´USUARIO, VIVO) values (´+´´´´+CBProduto.text+´´´´+´,´+´´´´+EdCod.text+´´´´+´,´+´´´´+EdUN.text+´´´´+´,´+´´´´+EdNF.text+´´´´+´,´+QuotedStr(FLOATTOSTR(EdValorUnit.VALUE))+´,´+QuotedStr(FLOATTOSTR(EdQtde.VALUE))+´,´+´´´´+CBFornecedor.text+´´´´+´,´+´´´´+dataCad+´´´´+´,´+´´´´+Form_Menu.SBPrincipal.Panels[0].Text+´´´´+´,´+´´´´+´S´+´´´)´);
QueryEntradas.ExecSql; //execucao final
MessageDLG(´OK.QUANTIDADE adicionada no Estoque.´,mtinformation, [mbok],0); //mensagem de OK
decimalseparator:=´,´;
End;



///////////////////VERIFICA SALDO ANTIGO DO PRODUTO


with QueryProdutos do
Begin
QueryProdutos.Close;
QueryProdutos.Sql.Clear;
QueryProdutos.Sql.text := ´select COD,PRODUTO,SALDO from tab_produtos where COD = ´+QuotedStr(EdCod.text)+´´;
QueryProdutos.Active := true;
End;


EDSaldoEstoqueAntigo.Text:=queryProdutos.FieldByname(´SALDO´).Asstring;

EdSAldoEstoqueNovo.Text:=floattostr(strtofloat(EDSAldoEstoqueAntigo.text)+ strtofloat(EDQtde.text));


with QueryProdutos do
Begin
decimalseparator:=´.´; //DEFINE O SEPARADOR COMO . FICA 33.33 E NAO 33,33
Close;
Sql.Clear;
Sql.text:= ´update tab_produtos Set SALDO = ´+QuotedStr(FLOATTOSTR(EdSAldoEstoqueNovo.VALUE))+´ where COD=´´´+edcod.text+´´´´;

ExecSql;
End;
decimalseparator:=´,´; //volta o separador para ,
//End

BtnCadastrar.Enabled := true;
BtnCancelar.Enabled := false;
CBFornecedor.Text := ´´;
CBFornecedor.Enabled := False;
CBProduto.Text := ´´;
CBProduto.Enabled := false;
EdUn.Clear;
EdQtde.Clear;
EdQtde.Enabled := false;
EdValorUnit.Clear;
EdValorUnit.Enabled := false;
EdNf.Clear;
EdNf.Enabled := false;
BtnOK.Enabled := false;

Form_Entradas.Close;



end;


Ce

Ce

Curtidas 0

Respostas

Rjun

Rjun

10/04/2006

Você está passando [b:f67e88d422]Zero[/b:f67e88d422] ou [b:f67e88d422]vazio[/b:f67e88d422] quando o estoque for ZERO?


GOSTEI 0
Tolimpio

Tolimpio

10/04/2006

Voce provavelmente esta pegando alguma ´string vazia´.... de algum edit... etc
e convertendo para float.......
faca um breakpoint nas linha que da o erro...... e verifique o valor a ser convertido........


GOSTEI 0
Ce

Ce

10/04/2006

Você está passando [b:40832cad53]Zero[/b:40832cad53] ou [b:40832cad53]vazio[/b:40832cad53] quando o estoque for ZERO?


Estou passando ZERO (pelo menos estou pretendendo) :?


GOSTEI 0
Edilcimar

Edilcimar

10/04/2006

Se passar vazio vai dar erro, se passar 0 não dá, portanto vc tem que ter certeza que o local onde vc está buscando os dados não está ´´, caso esteja durante a conversão vai dar erro, portanto tente fazer a coisa dentro de um try


GOSTEI 0
Ce

Ce

10/04/2006

Se passar vazio vai dar erro, se passar 0 não dá, portanto vc tem que ter certeza que o local onde vc está buscando os dados não está ´´, caso esteja durante a conversão vai dar erro, portanto tente fazer a coisa dentro de um try


mas aonde q faço isso?? poderia me dar o exemplo :(


GOSTEI 0
Gameiro

Gameiro

10/04/2006

Eu uso essa função para verificar se o valor é válido se não for eu passo como zero:

function Tcaixa.validafloat(valor : string):boolean;
begin
  //função que verifica se foi digitado um valor q não pode ser convertido
  
  try
    StrTofloat(valor);
    result := true;
   except
     on EConvertError do
     result := false;
  end;
end;


NO ONEXIT DO EDIT OU NA HORA DE FAZER O INSERT USE A FUNÇÃO

if validafloat(currencyedit2.Text) then
    begin
      valor:=strtofloat(currencyedit2.Text);
    end
    else
    begin
      valor:=0.00;
    end;








na sua instrução sql em vez de passar o QuotedStr(FLOATTOSTR(EdQtde.VALUE)), tente passar direto a variavel que recebeu o valor convertido.



Obs.: É mais fácil de entender o código se vc usar parametros na instrução SQL.


Até mais. :)


GOSTEI 0
POSTAR