CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

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

楼主WillHunt(willy)2001-02-16 11:25:00 在 C++ Builder / 基础类 提问

用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

相关问题

  • 为何出现错误:javascript
  • 为何会出现Invalid class TypeCast这样的错误提示?
  • 我在删除列时为何出现这样的错误?
  • 为何出现这样的错误提示:cannot modify a read-only dataset?
  • addnew 出现错误ADODB.Recordset (0x800A0CB3),为何?
  • 为何出现I/O错误
  • 为何会出现这个错误?
  • 为什么出现这样的错误?
  • 错误,为何?
  • 出现错误

关键词

  • sp1
  • 存储过程
  • 数据库
  • elisterror
  • 字符串
  • dtpstartdate
  • 列表
  • 错误
  • dm
  • bde

得分解答快速导航

  • 帖主:WillHunt
  • holyfire
  • afighter
  • yuanreid

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo