【问题标题】:Delphi - Either BOF or EOF is True, or the current record has been deletedDelphi - BOF 或 EOF 为 True,或当前记录已被删除
【发布时间】:2010-08-04 04:50:51
【问题描述】:

当我尝试在 MS SQL Server 2005 中选择空表时出现此错误:“BOF 或 EOF 为 True,或者当前记录已被删除”。我在 Delphi 5 中使用了 TADOConnection 和 TADODataSet 来连接和检索数据库中的数据。

  Conn := TADOConnection.Create(nil);
  DataSet := TADODataSet.Create(nil);

  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=sa;' +
                           'Persist Security Info=True;' +
                           'User ID=user;Initial Catalog=mydb;' +
                           'Data Source=MYPC\SQLEXPRESS;' +
                           'Use Procedure for Prepare=1;' +
                           'Auto Translate=True;Packet Size=4096;' +
                           'Workstation ID=MYPC;' +
                           'Use Encryption for Data=False;' +
                           'Tag with column collation when possible=False';
  Conn.LoginPrompt := False;
  Conn.Open;

  DataSet.Connection := Conn;
  DataSet.CommandText := 'SELECT * FROM MYTABLE';
  DataSet.Open;

  DataSet.Free;
  Conn.Free;

有没有办法检查数据库表是否为空而不会出现此类错误?

【问题讨论】:

    标签: sql-server-2005 delphi ado delphi-5


    【解决方案1】:

    这个错误最初是在更新 MDAC_TYP(从内存到 2.6)时发生的。根据老Borland advisory “这是 SQL Server 提供程序中的错误。设置 CursorLocation = clUseClient 消除错误。”

    Borland 提供了一个 ADOExpress 补丁,但该链接无效。 Embarcadero 现在在这里托管它:ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe(感谢 Jeroen 的官方链接!)

    如果您能找到它们,我建议您下载并安装 Embarcadero 网站上列出的所有补丁。

    【讨论】:

    • 已编辑在 Embarcadero 的 ftp 网站上添加官方版本的链接
    【解决方案2】:

    在此处下载 Delphi 5 的 ADO 更新:ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe

    确保您还安装了常规更新:

    还有更多更新(Corba、原始 ADO 安装)和语言(法语、德语),但这些应该会让您继续前进。

    以前也有http://info.borland.com/devsupport/delphi/download_files/zlibupdate.zip,但在ftpd服务器上没有。

    --杰罗恩

    【讨论】:

    • 谢谢,不知道你是怎么得到这些链接的,我的谷歌技术不好
    • 我明白了,ftpc.borland.com 现在被 ftpd.embarcadero.com 替换了,但是所有文件和文件夹都一样
    • 我收到“此更新要求已安装 ADOExpress 更新包 1。”。我试图将给定的下载链接修改为“d5adoupdate1.exe”,但在服务器上找不到该文件。我在哪里可以买到?
    • 可能是这样。我从不跟踪国际更新。它们应该在 ftpd 服务器上,但由于它不允许目录浏览,所以我从这个开始:ftplike.com/browser/obelix.tul.cz/pub/mirrors/ftp.borland.com/…
    • 谢谢!我找到了德语更新,还找到了第一个 ADO Express 更新!服务器区分大小写!只要我有时间,我会发布确切的链接。我卸载了delphi 5。再次安装。然后是delhpi pro德语更新。然后是 ADO express,然后是 ADO 更新包 1,然后是 ADO 更新包 2。这花了我一整天的时间,我大概输入了 30 次许可证密钥。再次感谢!
    【解决方案3】:

    很久以前,但我记得 Delphi 5 中的这个问题已通过 Delphi 更新解决。早期版本的 ADO 组件存在严重问题

    附:此外,我看到您的代码不使用典型的运行时创建组件,并且不使用诸如数据模块或表单(通常不好)之类的容器来进行组件的可视化工作。有时也有用通过 adoConnection.execute 运行简单查询。如果不使用可视化组件,ADO 的 Recordset 对象的处理与 Delphi 的 AdoDataset 基本相同。

    【讨论】:

    • 如果您不将 ADO 的 Recordset 对象用于非可视代码,请使用 AdoDataSet.DisableControls 以极大地提高性能。
    【解决方案4】:

    由于我花了一整天的时间,这里是我最后所做的总结。

    使用 ADO Express 安装 Delphi 5 Pro

    1. 卸载Delphi 5,同时删除安装目录
    2. 安装 Delphi 5 Pro(我只有德文 Delphi Pro 版本)
    3. 安装 Delphi 5 Pro 更新(我使用的是德语更新)
    4. 安装 Delphi 5 ADO Express
    5. 安装 Delphi 5 ADO Express 更新包 1
    6. 安装 Delphi 5 ADO Express 更新包 2

    以及下载链接(再次感谢 Jeroen Wiert Pluimers):

    Delphi 5 Pro 更新:

    ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/delphi5/D5ProUpdate.exe ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/delphi5/german/d5proupdate.exe

    ADOExpress 更新包 1 和 2:

    ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/adoexpress/D5ADOUpgrade.exe ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe

    为了将来参考一些截图来构建下载链接(区分大小写):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2013-06-10
      相关资源
      最近更新 更多