起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 311|回复: 11

【搞定】平台调用oracle存储过程出错**

[复制链接]
发表于 2007-6-26 10:02:50 | 显示全部楼层 |阅读模式
用平台得StoredProc控件调用oracle过程,参数自动取得,用代码对输入参数赋值,代码如下
    StoredProc1.Params.ParamByName('prm_PersonNo').AsString:= datasetbroker1.DataSet.FieldByName('aac001').AsString;       StoredProc1.Params.ParamByName('prm_ExcuteDate').AsDateTime:= SysSrv.SysService.Time;
    StoredProc1.Params.ParamByName('prm_Salary').AsFloat:= datasetbroker1.DataSet.FieldByName('aac040').AsFloat;
    StoredProc1.Params.ParamByName('prm_SIInfo').AsString:= '00100';

其中参数'prm_PersonNo'、'prm_SIInfo'库中为verchar2类型,'prm_ExcuteDate'为date类型,'prm_Salary'为number类型,可是运行程序后会提示如图错误,存储过程在oracle中运行正常,请问是什么问题谢谢。

3.jpg

22.55 KB, 下载次数: 152

回复

使用道具 举报

 楼主| 发表于 2007-6-26 10:58:47 | 显示全部楼层
平台自动取出的参数的ftFMTBcd类型是什么呢
回复 支持 反对

使用道具 举报

发表于 2007-6-26 11:14:21 | 显示全部楼层
楼主可以先确认一下是哪个参数出错——可以尝试分别对每个参数直接赋值。
我推测你数据集字段aac040的定义是string类型,所以ASFloat失败
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 11:19:42 | 显示全部楼层
aac040是工资字段,类型number(8,2)

其他几个字段也都不会有错。检查多多遍了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 11:29:32 | 显示全部楼层
把几个输入参数改为定值,还是出现这个错误!

    StoredProc1.Params.ParamByName('prm_PersonNo').AsString:= '2500000549';       //存储过程输入参数:单位编号
    StoredProc1.Params.ParamByName('prm_ExcuteDate').AsDateTime:= SysSrv.SysService.Time;
    StoredProc1.Params.ParamByName('prm_Salary').AsFloat:= 1111;
    StoredProc1.Params.ParamByName('prm_SIInfo').AsString:= '00100';
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 11:44:17 | 显示全部楼层
存储过程参数定义如下
   PROCEDURE prc_A_CalcPersonBase( prm_PersonNo      IN   VARCHAR2,
                                   prm_ExcuteDate    IN   DATE,
                                   prm_Salary        IN   NUMBER,
                                   prm_SIInfo        IN   VARCHAR2,
                                   prm_PensionBase   OUT  NUMBER,
                                   prm_MedicBase     OUT  NUMBER,
                                   prm_UnemployBase  OUT  NUMBER,
                                   prm_AccidentBase  OUT  NUMBER,
                                   prm_BearingBase   OUT  NUMBER,
                                   prm_AppCode       OUT  NUMBER,
                                   prm_ErrorMsg      OUT  VARCHAR2 )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-26 14:17:29 | 显示全部楼层
经试验证明,由平台自动取出的存储过程的参数,如果oracle中是number类型的,会生成ftFMTBcd(?不懂是什么意思,请解释下),将其改成ftFloat类型后不会再出现这个问题。在以前的帖子中看到平台技术支持人员说最好参数由平台自动获取,不要修改,所以没有注意到这个问题。现在出现这种问题,能否解释一下?ftFMTBcd到底是什么?
回复 支持 反对

使用道具 举报

发表于 2007-6-26 16:20:16 | 显示全部楼层
经确认是产品缺陷,已经提交,谢谢楼主!
平台把字段类型取错了!
回复 支持 反对

使用道具 举报

发表于 2007-6-26 18:10:29 | 显示全部楼层
错了,你上面的错应该是其他的字符串转换float出错。
不用修改ftFMTBcd,只要用asfloat访问参数就行了
回复 支持 反对

使用道具 举报

发表于 2007-6-26 18:13:12 | 显示全部楼层
ftFMTBcd是有精度数字的意思
float是无精度数字
一般我们不用管,重要用Param.AsFloat 或者 Field.AsFloat 来访问它的值就可以了
1楼的错误跟这个没有关系
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-12 04:02 , Processed in 0.040153 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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