我使用TADOConnection,TADOQuery(或TADOTable)来连接数据库(如Access或SQL Server )时出现以下的怪现象:
   当TADOQuery(或TADOTable)内没有记录时如运行TADOQuery.Close语句会出现错误提示‘exception Class EoleException with Message 'EOF 或EOF 中有一个是“真”,或者当前记录已被删除,所需操作要求一个当前的记录'    '
请各位指教如何避免出现该问题。参与讨论者有分,问题解决立即结帖。

解决方案 »

  1.   

    应该是ado的问题,没有遇到过,可以用try except处理,如果出现这个错不就不做任何处理。这样在运行的程序中就不会出错。
      

  2.   

    下载:
    http://www.pchome.net/dld/download.php?url=program/D5ADOUpgrade.exe
    D5ADOUpgrade.exe 15.85M Delphi5 ADO升级包1 ado pack1 Delphi5的ADO补丁升级包1,解决了很多ADO中的莫名其妙的错误。使用ADO编程一定要装它,否则会被型的一头雾水!http://www.pchome.net/dld/download.php?url=program/d5adoupdate2.exe
    d5adoupdate2.exe 1.74M Delphi5 ADO升级补丁2 ADO pack2 这是Delphi5的ADO补丁二,修改了补丁一之后残留的一些bug。
      

  3.   

    进行关闭操作时候应使用
    if ADOConnection.active then 
     ADOConnection.Active=False;
    我使用的是ADO+ORACLE 没有任何问题 
      

  4.   

    我前几天在BORLAND的新闻组上也看到了这个问题:my database is sql server 2000 and i use ado 2.5
    and this problem occurs only on system other than my system . i think this
    want be cause of using a component or dll that handle this .
    the error is "either bof or eof is true or the current record has been
    deleted'.
    it occures when the query result is null and the Bof=Eof=true and when i
    close the adoquery it raise this error.i use the delphi 5 update pack 2 for dbexpress but it doesn't correct and
    that error will occur on closing the empty dataset.thanks to help me.
    zall.不知道楼主的问题是否与这位老兄的一样?
    如果是一样的话,建议,看一看你的数据表是否有主键索引呢?
      

  5.   

    sysu(死树) ( )老兄说的网址下不了,不知还有没有其它地方有下栽的。
    Drate(鸟窝里的虫) ( ):我的问题跟你说的的确一样,我的数据表没有建索引,不知和主键索引有什么关系?
      

  6.   

    我肯定你用的是delphi5要打Ado的补丁。google里面打入关键字 delphi5 ado 补丁 就可以找到你想要的。
      

  7.   

    打上两个ADO的包,包在www.delphibbs.com或是www.playicq.com有下。
    另外最查查数据库设计上的问题,也有可能是对表内容有些什么约束。
      

  8.   

    直接到borland的FTP服务器下载吧:
    ftp://ftpc.borland.com/pub/delphi/devsupport/updates/adoexpress/D5ADOUpgrade.exe
    ftp://ftpc.borland.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe
      

  9.   

    天啊,世界真小。今天我也碰上这问题,快被折腾死了。拼命查了半天,我靠!
    明天回公司装DELPHI6
      

  10.   

    没有遇上过这样的问题,如下是在delphi6下的一个代码,没有任何补丁
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select * from Userinfo');
    adoquery1.Open;
    if adoquery1.RecordCount = 0 then
    adoquery1.Close;
    end;delphi5没有试过
      

  11.   

    我也遇到到同样的问题,
    打补丁后就没事了,
    建议快下载ADO补丁。
      

  12.   

    ADO要打补丁
    http://www.csdn.net/cnshare/soft/4/4541.shtm
      

  13.   

    下载网址:http://www.csdn.net/cnshare/soft/4/4541.shtm
      

  14.   

    如是delphi5打补丁,csdn上就有
      

  15.   

    我遇到的更奇怪,原来用delphi5(ado)在win2k下作的一个数据库应用程序(后台oracle73),一直用的不错,自从装了Microsoft .NET Framework后,程序运行时,查询到结果时一切正常,一旦查询不到结果就会报错:
        “exception Class EoleException with Message 'EOF 或EOF 中有一个是“真”,或者当前记录已被删除,所需操作要求一个当前的记录'”.NET Framework和delphi5有什么冲突呢?望高手指教!
      

  16.   

    刚刚在CSDN里下载了一份ADO补丁,安装时出错,提示信息是“Setup has detect uninstallShield in use ,please close uninstallShield and restart setup ”。我在Win2000下装的,系统里装的东西比较多,是不是要先卸掉其它一些程序(如Delphi或Installshield Professional ),再装ADO补丁,请高人指点。
      

  17.   

    刚刚的问题没了,但在安装过程中要求输入Delphi 5的序列号和授权码,我装的Delphi5 的序列号是SKI-HD3-C139 ,授权码是92x0,92x1,可是不能通过验证,(我的Delphi5 是D版的),有什么办法解决?
      

  18.   

    我用的是Delphi 5加SQL Server 2000.
    和afei78223(阿飞)也碰到同样的问题,因为以前一直是BDE的TQuery ,所以连数据库一定要通过BDE或ODBC.
    我在用ADOConnection连接SQL Server的时候也会出现这种情况,我的解决方法是.
    每次打开记录集的时候,先断开和ADOConnection的连结.即:
    ADOConnection1.connected:=false;
    ADOConnection1.connected:=true;
    Adoquery1.close;
    Adoquery1.open;先关闭再打开即可解决.
    ado别人用的都好好的.我开始没有想过补丁的问题,看来,我也应该想想丁的问题了.不过这个方法,虽然解决了报错问题,但问题.即原来连的ADOdataset控件,全部关闭了,并且断开,如果要想重新用别的,必须又一次打开它.希望起到拋砖引玉的作用.
    希望大虾们指教.,一定要安装补丁才可以解决掉这个问题吗?关注中...
      

  19.   

    奇怪了,我用111-111-1111-fex1-91x0 通过了验证,但是装完了后,ADO的组件用不了(全都没掉了),使用Install Packages强行装也不行,怎么回事,是不是我用的序列号与装Delphi5的序列号不一致引起的?
    至于升级,由于我的好多东西是For Delphi5的,升级太麻烦,下次准备用Delphi7.0。
      

  20.   

    好不容易装上了两个补丁,还是不行,把ADO都搞的不能用了,没办法,只好用Delphi6了。