problema com campo numeric

Delphi

07/01/2007

olá pessoal

estou tendo um problema com campo nuemric, estou usando firebird2.0 e dbexpress. E preciso resolver isso urgente.

na minha rotina para inserir registro fiz o seguinte

salda := StrtoFloat(Trim(EdSalC.text)); {pego o valor do campo e jogar na variável}

DecimalSeparator := ´.´; {converto para o formato americano}

EdSalC.text := FloattoStr(salda); {pego o valor da variável já formatado e jogar de volta no campo}

até ai tudo bem se eu digitar até 999,99 meu campo e numeric(15,02)
se eu digitar acima de 999,99 por exemplo 1000,00 dá erro dizendo que o valor não é um ponto flutuante ou coisa parecida, esqueci agora.

desde já obrigado pelça atençãode todos

abaixo o código completo:

procedure TFormLancamento.BitBtnIncluirClick(Sender: TObject);
Var
Data : Tdate;
Datx : string;


begin
VerCod;

Data := StrtoDate(Edata.text); {pegar o valor do campo e jogar na variável}
ShortDateFormat := ´mm/dd/yyyy´; {converter para o formato americano}
Datx := DateToStr(data); {pegar o valor da variável já formatado e jogar na outra variavel}

quant := StrtoFloat(Trim(EdQtde.text)); {pegar o valor do campo e jogar na variável}
valor := StrtoFloat(Trim(EdVlr.text)); {pegar o valor do campo e jogar na variável}
total := StrtoFloat(Trim(EdTot.text)); {pegar o valor do campo e jogar na variável}
anter := StrtoFloat(Trim(EdAntC.text)); {pegar o valor do campo e jogar na variável}
debto := StrtoFloat(Trim(EdDebC.text)); {pegar o valor do campo e jogar na variável}
creto := StrtoFloat(Trim(EdCreC.text)); {pegar o valor do campo e jogar na variável}
salda := StrtoFloat(Trim(EdSalC.text)); {pegar o valor do campo e jogar na variável}

DecimalSeparator := ´.´; {converter para o formato americano}

EdQtde.text := FloattoStr(quant); {pegar o valor da variável já formatado e jogar de volta no campo}
EdVlr.text := FloattoStr(valor); {pegar o valor da variável já formatado e jogar de volta no campo}
EdTot.text := FloattoStr(total); {pegar o valor da variável já formatado e jogar de volta no campo}
EdAntC.text := FloattoStr(anter); {pegar o valor da variável já formatado e jogar de volta no campo}
EdDebC.text := FloattoStr(debto); {pegar o valor da variável já formatado e jogar de volta no campo}
EdCreC.text := FloattoStr(creto); {pegar o valor da variável já formatado e jogar de volta no campo}
EdSalC.text := FloattoStr(salda); {pegar o valor da variável já formatado e jogar de volta no campo}

try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
dmd.SQLConnection1.StartTransaction(Transacao);
dmd.SQLDSLanca.Close;
dmd.SQLDSLanca.CommandType := ctQuery;
dmd.SQLDSLanca.CommandText := ´insert into Lancamento (IDLAN2, REQNUM, ´+
´CHQNUM, DATA, CODCRE, CREDITADO, CODDEB, DEBITADO, COD, NOME, QTDE, VALOR, TOTAL, ´+
´TRANSA, HISTORICO, CDGRUP, IDORIG, ANTERIOR, DEBITO, CREDITO, SALDO) ´+
´values(:idlan, :req, :chq, :dat, :cdcre, :credi, :cddeb, :debit,´+
´:cdn, :nom, :qtd, :valr, :tota, :trans, :hist, :cdgrupo, :idori, :ante, :debi, :cred, :sald)´;
dmd.SQLDSLanca.ParamByName(´idlan´).AsString := EdLan2.Text;
dmd.SQLDSLanca.ParamByName(´req´).AsString := EdReq.Text;
dmd.SQLDSLanca.ParamByName(´chq´).AsString := EdChe.Text;
dmd.SQLDSLanca.ParamByName(´dat´).AsString := Datx;
dmd.SQLDSLanca.ParamByName(´cdcre´).AsString := EdCodcre.Text;
dmd.SQLDSLanca.ParamByName(´credi´).AsString := EdCredi.Text;
dmd.SQLDSLanca.ParamByName(´cddeb´).AsString := EdCodeb.Text;
dmd.SQLDSLanca.ParamByName(´debit´).AsString := EdDebi.Text;
dmd.SQLDSLanca.ParamByName(´cdn´).AsString := EdCodcre.Text;//codigo do creditado
dmd.SQLDSLanca.ParamByName(´nom´).AsString := EdCredi.Text;//nome do creditado
dmd.SQLDSLanca.ParamByName(´qtd´).AsString := EdQtde.Text;
dmd.SQLDSLanca.ParamByName(´valr´).AsString := Edvlr.Text;
dmd.SQLDSLanca.ParamByName(´tota´).AsString := Edtot.Text;
dmd.SQLDSLanca.ParamByName(´trans´).AsString := ´C´;
dmd.SQLDSLanca.ParamByName(´hist´).AsString := EdHist.Text;
dmd.SQLDSLanca.ParamByName(´cdgrupo´).AsString:= Edit14.Text;
dmd.SQLDSLanca.ParamByName(´idori´).AsString := Edit16.Text;
dmd.SQLDSLanca.ParamByName(´ante´).AsString := EdAntC.Text;
dmd.SQLDSLanca.ParamByName(´debi´).AsString := EdDebC.Text;
dmd.SQLDSLanca.ParamByName(´cred´).AsString := EdCreC.Text;
dmd.SQLDSLanca.ParamByName(´sald´).AsString := EdSalC.Text;
dmd.SQLDSLanca.ExecSQL;
dmd.SQLConnection1.Commit(Transacao);
Showmessage(´Registro incluido´);
limpa;

except
on Exc:Exception do
Begin
ShowMessage(´Ocorreu um erro na tetativa de inclusão do registro:´+Exc.Message+´ -Verifique os dados digitados. O Registro não será incluído´);
dmd.SQLConnection1.Rollback(Transacao);

end;
end;

ShortDateFormat := ´dd/mm/yyyy´;
DecimalSeparator := ´,´;
end;


Altenir

Altenir

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

07/01/2007

talvez o erro aconteça por conta do separador de milhar, e não pelo separador decimal. retire-o antes de converter o valor para numerico.

você disse que digita 999,99 e dá certo, mas 1000,00 dá erro, porque provavelmente o valor informado foi na verdade 1.000,00 (com separador de milhar).


GOSTEI 0
Altenir

Altenir

07/01/2007

Resolvi o problema

[b:8827c91881]continuo usando o código [/b:8827c91881]
salda := StrtoFloat(Trim(EdSalD.text)); {pegar o valor do campo e jogar na variável}

DecimalSeparator := ´.´; {converter para o formato americano}

EdSalD.text := FloattoStr(salda); {pegar o valor da variável já formatado e jogar de volta no campo}

[b:8827c91881]criei um domain[/b:8827c91881]
CREATE DOMAIN NUMERIC_12_2 AS
NUMERIC(12,2)
CHECK (VALUE BETWEEN -9999999999.99 AND +9999999999.99)

caso resolvido


GOSTEI 0
POSTAR