Delphi - BOF或EOF为True,或者当前记录已被删除

raj*_*azo 2 delphi sql-server-2005 ado delphi-5

当我尝试在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;
Run Code Online (Sandbox Code Playgroud)

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

Ger*_*oll 7

此错误最初发生在MDAC_TYP更新(从内存到2.6).根据旧的Borland建议 "这是SQL Server提供程序中的一个错误.设置 CursorLocation = clUseClient为消除错误."

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

我建议您下载并安装Embarcadero网站上列出的所有补丁,假设您可以找到它们.


Jer*_*ers 6

下载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服务器上.

--jeroen