为何会出现这样的错误!?
用bcb编的一个程序用了好长时间了,都没什么异常,但是最近一次,我运行她的时候居然
出现了问题,出错信息为:EListError: list out of bound. 现已查明错误是在调用一个存储过程时引发的。相关代码如下:
....
dm1->sp1->Params->Items[1]->AsDateTime=dtpStartDate->DateTime;
//dm1为数据模块,sp1为一存储过程 ,dtpStartDate为一DataTimePicker控件。
dm1->sp1->Params->Items[2]->AsDateTime=dtpEndDate->DateTime;
dm1->sp1->ExecProc();
......
望高手给予指导!!谢谢!!!
问题点数:50、回复次数:8Top
1 楼songhtao(三十年孤独)回复于 2001-02-16 11:31:00 得分 0
你在用前做了关闭、清除工作没有?该题我没有调试,只供参考。Top
2 楼xiaoyu()回复于 2001-02-16 11:37:00 得分 0
清除参数列表Top
3 楼holyfire(谁最衰啊你最衰,谁最帅啊我最帅)回复于 2001-02-17 17:38:00 得分 5
EListError 是关于列表和字符串错误的异常类。
当一个列表,字符串或TStringList对象产生错误时都会引起EListError异常。这个异常一般都发生在应用程序使用超出列表范围的项目。
当应用程序试图往一个一排序的字符串列表插入一个字符串时也会发生一个EListError,因为对一个以排序的列表在指定位置插入一个字符串可能破坏这个列表。
TStringList对象的Duplicates属性为dupError时,如果程序试图给该对象增加一个重复的字符串也会引起EListError异常。
从list out of bound这条信息可以看出,是超出列表范围的项目引起的。
你先调试一下,看一下dm1->sp1->Params->Count是不是大于等于3
如果小于3,dm1->sp1->Params->Items[i] i从0开始当i=2时即
dm1->sp1->Params->Items[2]越界
处理方法是dm1->sp1->Params->AddParam( TParam* Value )增加列表长度
Top
4 楼afighter(新人)回复于 2001-02-17 17:56:00 得分 5
可能是存储过程参数格式不对:dtpStartDate->DateTime的格式是 ‘01-10-10’ 的,
你试着用
dm1->sp1->Params->Items[1]->AsString = FormatDateTime('yyyy-mm-dd',dtpStartDate->DateTime);
看看。Top
5 楼yuanreid(闲云孤鹤)回复于 2001-02-17 18:39:00 得分 40
这种错误并不是类型不匹配的问题,而是你在调用存储过程的时候,BDE没有正确的得到调用存储过程的句柄,BDE认为参数个数为零,Params->Items[1]就会产生越界错误。
我以前出现这种错误一般有两个原因:
1.没有正确填写过程名称,比如大小写问题。
2.BDE同数据库协调问题,这种问题出现在BDE和Sybase或Informix等数据库的使用中,这些数据库的内部调用模式同BDE默认的有出入,需要手工设置参数类型,比如:
sp1->Params->Items[i]->ParamType = ptInput;
才能解决。
另外,使用sp1前要初始化:
sp1->Close();
//过程名
sp1->StoredProcName = "SPRD_OPER"; //大写
sp1->Prepare();Top
6 楼yuanreid(闲云孤鹤)回复于 2001-02-18 11:03:00 得分 0
问题解决了吗?Top
7 楼yuanreid(闲云孤鹤)回复于 2001-02-18 11:15:00 得分 0
加分?Top
8 楼WillHunt(willy)回复于 2001-02-19 08:43:00 得分 0
多谢各位出手相助,尤其是闲云孤鹤大哥的解答,正答在问题的要害,我已解决了这个问题,多谢各位。以后有机会,对切磋!!!
哦,当然。给分,我是不会忘记的。出门在外,要讲信用吗!!
Top




