本人在SQL SERVER2000中写了这样的一个存储过程,在查询分析器中正确运行无误,但是在Delphi中调用该存储过程是就出现错误,存储过程的代码如下:
use cumtkj
goif exists (select * from sysobjects where id = object_id('sp_kaipiao'))
drop procedure sp_kaipiao
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROC sp_kaipiao(
@bno VARCHAR(20),
@fpleibie VARCHAR(20),
@note VARCHAR(50),
@kaipiaodate SMALLDATETIME,
@kaipiaomoney float,
@kaipiaomen VARCHAR(50),
@jimaomoney VARCHAR(50),
@zhengzhishuimoney VARCHAR(50),
@caizhengmoney VARCHAR(50)
)
ASBEGIN TRAN
DECLARE @newtotal1 float,
@newtotal2 float,
@newtotal3 float,
@T1 FLOAT,
@T2 FLOAT,
@T3 FLOAT SELECT DISTINCT @newtotal1=CAST(jmkpxj as float) ,@newtotal2=CAST(czkpxj AS float),@newtotal3=CAST(zzskpxj as float)
FROM kfb_fpkl
WHERE bh=@bno SELECT @T1= CAST(@jimaomoney as float)
SELECT @T2= CAST(@caizhengmoney as float)
SELECT @T3= CAST(@zhengzhishuimoney as float) SET @newtotal1=@newtotal1+@T1
SET @newtotal2=@newtotal2+@T2
SET @newtotal3=@newtotal3+@T3
SET @newtotal1=CAST( STR(@newtotal1,7,2) AS VARCHAR(50))
SET @newtotal2=CAST( STR(@newtotal2,7,2) AS VARCHAR(50))
SET @newtotal3=CAST( STR(@newtotal3,7,2) AS VARCHAR(50))
UPDATE kfb_fpkl
SET jmkpxj=@newtotal1,
czkpxj=@newtotal2,
zzskpxj=@newtotal3
WHERE bh=@bno
IF(@@error<>0)GOTO ON_ERRORINSERT INTO kfb_fpkl
VALUES(@bno,@fpleibie,@note,@kaipiaodate,@kaipiaomoney,@kaipiaomen,@newtotal1,@newtotal3,@newtotal2)
IF(@@error<>0)GOTO ON_ERROR COMMIT TRAN
RETURN 1ON_ERROR:
ROLLBACK TRAN
RETURN -1GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOEXEC sp_kaipiao '2003-06-050','财政','科研费','2004-7-2',4 ,'屠世浩','0.00','0.00','4.00'
delphi中调用存储过程的代码如下:
try
if (Edit17.Text='') then Edit17.Text:='0.00';
if (Edit18.Text='') then Edit18.Text:='0.00';
if (Edit19.Text='') then Edit19.Text:='0.00';
DMc.Dataupdate;
DM.kfb_msgadd.Active :=false;
DM.kfb_msgadd.Prepared :=false;
DM.kfb_msgadd.Parameters.Items[1].Value :=Trim(edit12.Text);
DM.kfb_msgadd.Parameters.Items[2].Value :=combobox10.Text;
DM.kfb_msgadd.Parameters.Items[3].Value :=Trim(edit13.Text);
DM.kfb_msgadd.Parameters.Items[4].Value :=StrToDateTime(dt1);
DM.kfb_msgadd.Parameters.Items[5].Value :=StrToFloat(Trim(edit16.Text));
DM.kfb_msgadd.Parameters.Items[6].Value :=Trim(Edit14.Text);
DM.kfb_msgadd.Parameters.Items[7].Value :=Edit17.Text;
DM.kfb_msgadd.Parameters.Items[8].Value :=Edit18.Text;
DM.kfb_msgadd.Parameters.Items[9].Value :=Edit19.Text;
DM.kfb_msgadd.Prepared :=true;
DM.kfb_msgadd.ExecProc();
e:=DM.kfb_msgadd.Parameters.Items[0].Value;
if e<>1 then
begin
DM.kfb_msgadd.Cancel;
exit;
end;
出现错误提示为:project project1.exe raised exception class EoleException with message'应用程序在当前操作中使用了错误类型的值。'...
高手指点,为什么会出现这样的情况。
use cumtkj
goif exists (select * from sysobjects where id = object_id('sp_kaipiao'))
drop procedure sp_kaipiao
GOSET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOCREATE PROC sp_kaipiao(
@bno VARCHAR(20),
@fpleibie VARCHAR(20),
@note VARCHAR(50),
@kaipiaodate SMALLDATETIME,
@kaipiaomoney float,
@kaipiaomen VARCHAR(50),
@jimaomoney VARCHAR(50),
@zhengzhishuimoney VARCHAR(50),
@caizhengmoney VARCHAR(50)
)
ASBEGIN TRAN
DECLARE @newtotal1 float,
@newtotal2 float,
@newtotal3 float,
@T1 FLOAT,
@T2 FLOAT,
@T3 FLOAT SELECT DISTINCT @newtotal1=CAST(jmkpxj as float) ,@newtotal2=CAST(czkpxj AS float),@newtotal3=CAST(zzskpxj as float)
FROM kfb_fpkl
WHERE bh=@bno SELECT @T1= CAST(@jimaomoney as float)
SELECT @T2= CAST(@caizhengmoney as float)
SELECT @T3= CAST(@zhengzhishuimoney as float) SET @newtotal1=@newtotal1+@T1
SET @newtotal2=@newtotal2+@T2
SET @newtotal3=@newtotal3+@T3
SET @newtotal1=CAST( STR(@newtotal1,7,2) AS VARCHAR(50))
SET @newtotal2=CAST( STR(@newtotal2,7,2) AS VARCHAR(50))
SET @newtotal3=CAST( STR(@newtotal3,7,2) AS VARCHAR(50))
UPDATE kfb_fpkl
SET jmkpxj=@newtotal1,
czkpxj=@newtotal2,
zzskpxj=@newtotal3
WHERE bh=@bno
IF(@@error<>0)GOTO ON_ERRORINSERT INTO kfb_fpkl
VALUES(@bno,@fpleibie,@note,@kaipiaodate,@kaipiaomoney,@kaipiaomen,@newtotal1,@newtotal3,@newtotal2)
IF(@@error<>0)GOTO ON_ERROR COMMIT TRAN
RETURN 1ON_ERROR:
ROLLBACK TRAN
RETURN -1GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOEXEC sp_kaipiao '2003-06-050','财政','科研费','2004-7-2',4 ,'屠世浩','0.00','0.00','4.00'
delphi中调用存储过程的代码如下:
try
if (Edit17.Text='') then Edit17.Text:='0.00';
if (Edit18.Text='') then Edit18.Text:='0.00';
if (Edit19.Text='') then Edit19.Text:='0.00';
DMc.Dataupdate;
DM.kfb_msgadd.Active :=false;
DM.kfb_msgadd.Prepared :=false;
DM.kfb_msgadd.Parameters.Items[1].Value :=Trim(edit12.Text);
DM.kfb_msgadd.Parameters.Items[2].Value :=combobox10.Text;
DM.kfb_msgadd.Parameters.Items[3].Value :=Trim(edit13.Text);
DM.kfb_msgadd.Parameters.Items[4].Value :=StrToDateTime(dt1);
DM.kfb_msgadd.Parameters.Items[5].Value :=StrToFloat(Trim(edit16.Text));
DM.kfb_msgadd.Parameters.Items[6].Value :=Trim(Edit14.Text);
DM.kfb_msgadd.Parameters.Items[7].Value :=Edit17.Text;
DM.kfb_msgadd.Parameters.Items[8].Value :=Edit18.Text;
DM.kfb_msgadd.Parameters.Items[9].Value :=Edit19.Text;
DM.kfb_msgadd.Prepared :=true;
DM.kfb_msgadd.ExecProc();
e:=DM.kfb_msgadd.Parameters.Items[0].Value;
if e<>1 then
begin
DM.kfb_msgadd.Cancel;
exit;
end;
出现错误提示为:project project1.exe raised exception class EoleException with message'应用程序在当前操作中使用了错误类型的值。'...
高手指点,为什么会出现这样的情况。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货