起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 253|回复: 17

【结帖】存储过程执行出错????急急**

[复制链接]
发表于 2008-1-11 09:50:42 | 显示全部楼层 |阅读模式
用的2260版本哈,存储过程执行出错,以前都是正确的.

出错如图

代码如下:

SP.params.clear;
sp.params.createparam(......)
sp.params[0].asstring
....
sp.execute;

未命名.jpg

18.52 KB, 下载次数: 104

回复

使用道具 举报

 楼主| 发表于 2008-1-11 09:56:35 | 显示全部楼层

存储过程名和参数名全部是大写的哈

存储过程名和参数名全部是大写的哈


存储过程在数据库没有问题????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 10:33:48 | 显示全部楼层
procedure TMainForm.Button1Click(Sender: TObject);
var SP :TStoredProc;
    vOutStr :String;
begin
  vOutStr:='';
  SP:=TStoredProc.Create(Self);
  SP.ConnectionString:='DATABASEURL=Biz:\YWKJ\StoredConn.Database';
  SP.StoredProcName:='MYJXKH_DBFZXYRLJ_PRO';
  StoredProc1.Params.Clear;
  StoredProc1.Params.CreateParam(TFieldType.ftString,'C_BTBSJ',TParamType.ptInput);    //开始时间
  StoredProc1.Params[0].AsString := '2008-1-1';
  StoredProc1.Params.CreateParam(TFieldType.ftString,'C_ETBSJ',TParamType.ptInput);    //结束时间
  StoredProc1.Params[1].AsString := '2008-1-31';
  StoredProc1.Params.CreateParam(TFieldType.ftString,'C_TOTAL',TParamType.ptOutput);   //传出数量
  StoredProc1.Params[2].AsString := vOutStr;
  StoredProc1.Execute;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 10:34:54 | 显示全部楼层
存储过程里面的参数的数据类型为STRING型的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 10:40:20 | 显示全部楼层

存储过程如下:

CREATE OR REPLACE PROCEDURE "MYJXKH_DBFZXYRLJ_PRO" ----逮捕犯罪人嫌疑人员劳教人员
---Created: 2006-10-22
---Purpose:绵阳绩效考试统计逮捕犯罪人嫌疑人员劳教人员(不含经侦与禁毒案件)
(C_BTBSJ IN  VARCHAR2,  ---查找填报开始时间
C_ETBSJ IN  VARCHAR2,  ---查找填报结束时间
--C_TBDW IN  VARCHAR2,   ---填报单位
C_total OUT VARCHAR2  ---破获总案件数
)
IS
BEGIN
SELECT COUNT(*) INTO C_total FROM  AJXYR_CFB----逮捕犯罪人嫌疑人员劳教人员
       WHERE TO_DATE(substr(TO_CHAR(CFFS,'YYYY-MM-DD'),1,10),'YYYY-MM-DD') >= TO_DATE(C_BTBSJ,'YYYY-MM-DD')
        AND  TO_DATE(SubStr(TO_CHAR(CFFS,'YYYY-MM-DD'),1,10),'YYYY-MM-DD') <= TO_DATE(C_ETBSJ,'YYYY-MM-DD')
        AND  tbdw  in (select zbm from tjbblsb) AND CFFS = '04';
EXCEPTION
     WHEN OTHERS THEN
    C_total :=  0 ;
   
END MYJXKH_DBFZXYRLJ_PRO;
回复 支持 反对

使用道具 举报

发表于 2008-1-11 10:51:23 | 显示全部楼层
最后一个参数无论是count还是c_total:=0; 赋值都是整数。但参数是按照字符串存取的。
在返回前转换一下类型。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 10:54:38 | 显示全部楼层
你好!请问找到解决方案了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 11:06:35 | 显示全部楼层

我把存储过程修改成这样都不行呀

CREATE OR REPLACE PROCEDURE "MYJXKH_DBFZXYRLJ_PRO" ----逮捕犯罪人嫌疑人员劳教人员
---Created: 2006-10-22
---Purpose:绵阳绩效考试统计逮捕犯罪人嫌疑人员劳教人员(不含经侦与禁毒案件)
(C_BTBSJ IN  VARCHAR2,  ---查找填报开始时间
C_ETBSJ IN  VARCHAR2,  ---查找填报结束时间
--C_TBDW IN  VARCHAR2,   ---填报单位
C_total OUT VARCHAR2  ---破获总案件数
)
IS
BEGIN
    C_total :=  '0' ;
   
END MYJXKH_DBFZXYRLJ_PRO;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 11:21:38 | 显示全部楼层
希望今天内解决,因为客户吹得太急了
回复 支持 反对

使用道具 举报

发表于 2008-1-11 11:21:57 | 显示全部楼层
procedure TMainForm.Button1Click(Sender: TObject);
var SP :TStoredProc;
    vOutStr :String;
begin
  vOutStr:='';
  SP:=TStoredProc.Create(Self);
  SP.ConnectionString:='DATABASEURL=Biz:\YWKJ\StoredConn.Database';
  SP.StoredProcName:='MYJXKH_DBFZXYRLJ_PRO';
  StoredProc1.Params.Clear;
  StoredProc1.Params.CreateParam(TFieldType.ftString,'C_BTBSJ',TParamType.ptInput);    //开始时间
  StoredProc1.Params[0].AsString := '2008-1-1';
  StoredProc1.Params.CreateParam(TFieldType.ftString,'C_ETBSJ',TParamType.ptInput);    //结束时间
  StoredProc1.Params[1].AsString := '2008-1-31';
  StoredProc1.Params.CreateParam(TFieldType.ftString,'C_TOTAL',TParamType.ptOutput);   //传出数量
  StoredProc1.Params[2].AsString := vOutStr;
  StoredProc1.Execute;
end;

3楼的代码有问题。
第一,您用的到底是sp还是StoredProc1?
第二,不要对输出参数赋值
第三,如果用StroreProc1是在界面上放置的控件,在控件上可以直接添加参数,不需要动态添加。直接按名字访问就可以了。

StoredProc1.Params.ParamByName('C_ETBSJ').AsString
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 00:43 , Processed in 0.047479 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表