为何会出现这样的错误!?

WillHunt 2001-02-16 11:25:00
用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();
......

望高手给予指导!!谢谢!!!


...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
WillHunt 2001-02-19
  • 打赏
  • 举报
回复
多谢各位出手相助,尤其是闲云孤鹤大哥的解答,正答在问题的要害,我已解决了这个问题,多谢各位。以后有机会,对切磋!!!
哦,当然。给分,我是不会忘记的。出门在外,要讲信用吗!!
yuanreid 2001-02-18
  • 打赏
  • 举报
回复
加分?
yuanreid 2001-02-18
  • 打赏
  • 举报
回复
问题解决了吗?
yuanreid 2001-02-17
  • 打赏
  • 举报
回复
这种错误并不是类型不匹配的问题,而是你在调用存储过程的时候,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();
afighter 2001-02-17
  • 打赏
  • 举报
回复
可能是存储过程参数格式不对:dtpStartDate->DateTime的格式是 ‘01-10-10’ 的,
你试着用
dm1->sp1->Params->Items[1]->AsString = FormatDateTime('yyyy-mm-dd',dtpStartDate->DateTime);
看看。
holyfire 2001-02-17
  • 打赏
  • 举报
回复
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 )增加列表长度

xiaoyu 2001-02-16
  • 打赏
  • 举报
回复
清除参数列表
我不懂电脑 2001-02-16
  • 打赏
  • 举报
回复
你在用前做了关闭、清除工作没有?该题我没有调试,只供参考。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧