Fórum Erro SP de inserir. Is not a valid BCD value. #343934
01/08/2007
0
dm.SP_MATERIAL_I_U.Close;
dm.SP_MATERIAL_I_U.Params[1].AsString:=cod.Text;
dm.SP_MATERIAL_I_U.Params[2].AsString:=descricao.Text;
dm.SP_MATERIAL_I_U.Params[3].AsString:=un.Text;
dm.SP_MATERIAL_I_U.Params[4].AsString:=unitario.Text;
dm.SP_MATERIAL_I_U.Params[5].AsString:=tipo.Text;
dm.SP_MATERIAL_I_U.ExecProc;
-------------------------------------------------------------------------
Quando vou gravar gravar da esse erro na linha ´ExecProc´.
O que pode ser?
Erro completo:
---------------------------
Debugger Exception Notification
---------------------------
Project MATERIAIS.exe raised exception class EBcdException with message ´2,>303000000030000000>04<;100020000000100000041 is not a valid BCD value´.
---------------------------
Break Continue Help
---------------------------
Tem um campo que é de valor, lá no banco coloquei como DOUBLE PRECISION.
Alguem tem ideia de como resolver? Estou iniciando agora a fazer inserção/atualização por SP.
FireBird 2.0
DBExpress
Jpauloss
Curtir tópico
+ 0Posts
02/08/2007
Fabiano Góes
não sou nenhum expert em DBExpress mais ...
os parametros de entrada da SP são todos do tipo string mesmo ?
tente para os parametros tipo integer usar:
Params[0].AsInteger := StrToInt(cod.Text);
pada o parametro do tipo valor como você mencionou tente:
Params[4].Value := Edit.Text;
ou
Params[4].Value := StrToFloat( Edit.Text);
espero ter ajudado !!!
Gostei + 0
02/08/2007
Claudio_f
tive esse problema com DBExpress e Oracle e resolvi da seguinte forma, ve te ajuda.
var bC : TBCD; xPreco : string; . . . bC := StrToBCD(unitario.Text); xPreco := BCDToStrf(bC,ffFixed,11,2); . . . dm.SP_MATERIAL_I_U.Params[4].AsString:=xPreco; //unitario.Text;
Gostei + 0
02/08/2007
Jpauloss
var bC : TBCD; xPreco : string; . . . bC := StrToBCD(unitario.Text); xPreco := BCDToStrf(bC,ffFixed,11,2); . . . dm.SP_MATERIAL_I_U.Params[4].AsString:=xPreco; //unitario.Text;
Esse BCD da dando:
[Pascal Error] U_MATERIAIS.pas(53): E2003 Undeclared identifier: ´TBCD´
Que faço?
Gostei + 0
02/08/2007
Jpauloss
var bC : TBCD; xPreco : string; . . . bC := StrToBCD(unitario.Text); xPreco := BCDToStrf(bC,ffFixed,11,2); . . . dm.SP_MATERIAL_I_U.Params[4].AsString:=xPreco; //unitario.Text;
Esse BCD da dando:
[Pascal Error] U_MATERIAIS.pas(53): E2003 Undeclared identifier: ´TBCD´
Que faço?[/quote:a2440436e3]
Gostei + 0
02/08/2007
Emerson Nascimento
dm.SP_MATERIAL_I_U.Params[1].AsString:=cod.Text;
dm.SP_MATERIAL_I_U.Params[2].AsString:=descricao.Text;
dm.SP_MATERIAL_I_U.Params[3].AsString:=un.Text;
dm.SP_MATERIAL_I_U.Params[4].AsFloat:=StrToFloat(unitario.Text);
dm.SP_MATERIAL_I_U.Params[5].AsString:=tipo.Text;
dm.SP_MATERIAL_I_U.ExecProc;
Gostei + 0
02/08/2007
Jpauloss
var bC : TBCD; xPreco : string; . . . bC := StrToBCD(unitario.Text); xPreco := BCDToStrf(bC,ffFixed,11,2); . . . dm.SP_MATERIAL_I_U.Params[4].AsString:=xPreco; //unitario.Text;
Esse BCD da dando:
[Pascal Error] U_MATERIAIS.pas(53): E2003 Undeclared identifier: ´TBCD´
Que faço?[/quote:d38790c082][/quote:d38790c082]
**Isso já descobri. Tem que declarar na USES: FMTBcd**
Estou com outro probleminha. Quando vou gravar esta dando OverFlow.
---------------------------
Debugger Exception Notification
---------------------------
Project MATERIAIS.exe raised exception class EBcdOverflowException with message ´BCD overflow´.
---------------------------
Break Continue Help
---------------------------
Já tentei várias coisas. Que faço?
O campo unitário que está como BCD, lá no banco está como float.
Gostei + 0
02/08/2007
Jpauloss
Gostei + 0
02/08/2007
Jpauloss
************************************************
procedure TF_MATERIAIS.salvarClick(Sender: TObject);
Var
bC : TBCD;
v_unitario: String; //**Encontrei informações sobreo o BCD no HELP.**//
begin
//********* Inicio da complicação ***************//
bC := StrToBCD(unitario.Text);
v_unitario:=BcdToStrF(bC, ffFixed, 11,2);
//********* Final da complicação ****************//
dm.SP_MATERIAL_I_U.Close;
dm.SP_MATERIAL_I_U.Params[1].Value:=(cod.Text);
dm.SP_MATERIAL_I_U.Params[2].AsString:=descricao.Text;
dm.SP_MATERIAL_I_U.Params[3].AsString:=un.Text;
dm.SP_MATERIAL_I_U.Params[4].AsFloat:=StrToFloat(v_unitario);
dm.SP_MATERIAL_I_U.Params[5].AsString:=tipo.Text;
dm.SP_MATERIAL_I_U.ExecProc;
end;
*******************************************************
Já fiz o debug, e o erro na na Execução da SP.
Já fui no help do delphi e diz isso:
*********************************************************
EBcdOverflowException is raised when
A call to VarFMTBcdCreate tries to create a BCD value with a precision and number of decimals that can´t be supported.
An application tries to cast a Variant to a BCD value but it can´t be expressed using the default precision and number of decimals.
*********************************************************
Alguem tem idéia de como resolver?
Gostei + 0
04/08/2007
Jpauloss
Gostei + 0
06/08/2007
Claudio_f
dm.SP_MATERIAL_I_U.Params[4].AsFloat:=StrToFloat(v_unitario);
eu gravo no banco como string.
Gostei + 0
06/08/2007
Martins
Obrigado.
Gostei + 0
06/08/2007
Jpauloss
/******************************************************************************/
/**** Generated by IBExpert 6/8/2007 22:00:54 ****/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATE GENERATOR SEQ_PROJETO_ID;
CREATE TABLE PROJETO (
ID_PROJETO INTEGER NOT NULL,
NOME_PROJETO VARCHAR(70),
DATA_REGISTRO VARCHAR(15)
);
/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/
ALTER TABLE PROJETO ADD CONSTRAINT PK_PROJETO PRIMARY KEY (ID_PROJETO);
Gostei + 0
06/08/2007
Jpauloss
/******************************************************************************/
/**** Generated by IBExpert 6/8/2007 22:15:21 ****/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATE GENERATOR SEQ_MATERIAL_ID;
CREATE TABLE MATERIAL (
ID_COD INTEGER NOT NULL,
COD_ORDENADO VARCHAR(20),
DESCRICAO VARCHAR(70) COLLATE PT_BR,
UN VARCHAR(2),
PRECO_UNITARIO FLOAT,
TIPO_CONTA VARCHAR(1)
);
/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/
ALTER TABLE MATERIAL ADD CONSTRAINT PK_MATERIAL PRIMARY KEY (COD_ORDENADO, ID_COD);
Gostei + 0
06/08/2007
Emerson Nascimento
Gostei + 0
06/08/2007
Jpauloss
O valor do produto em questão.
Gostei + 0