开发者

Delphi - Either BOF or EOF is True, or the current record has been deleted

This error showed when I tried to select on an empty table in MS SQL Server 2005: "either BOF or EOF is True, or the current record has been deleted". I have used TADOConnection and TADODataSet in Delphi 5 to connect and retrieve data from the database.

  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;

  DataS开发者_开发技巧et.Connection := Conn;
  DataSet.CommandText := 'SELECT * FROM MYTABLE';
  DataSet.Open;

  DataSet.Free;
  Conn.Free;

Is there a way to check if a database table is empty without incurring such error?


This error originally occured with an update to MDAC_TYP (to 2.6 from memory). According to an old Borland advisory "This is a bug in the SQL Server provider. Set CursorLocation = clUseClient to eliminate the error."

There was a ADOExpress patch available from Borland, but the link doesn't work. Embarcadero now host it here: ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe(Thanks for the official link Jeroen!)

I would recommend downloading and installing all patches listed on the Embarcadero site, assuming you can find them.


Download the ADO update for Delphi 5 here: ftp://ftpd.embarcadero.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe

Make sure you also have the regular update installed:

  • English Enterprise
  • English Professional
  • English Standard

There are more updates (Corba, original ADO install) and languages (French, German), but these should get you going.

There also used to be a http://info.borland.com/devsupport/delphi/download_files/zlibupdate.zip, but it is not on the ftpd servers.

--jeroen


It was long time agom but I recall that this problem in Delphi 5 resolves by Delphi update. Early version has serious problems with ADO components

P.S. Also I see that your code uses not typical runtime creation of components and does not use some container like data module or form (not good usually) for visual work with components. Also sometimes useful run simple queries via adoConnection.execute. If you do not use visual components, handling of ADO's Recordset object is much the same as Delphi's AdoDataset.


Since I spent a whole day on this, here is a wrap up of what I did in the end.

Delphi 5 Pro Installation with ADO Express

  1. Uninstall Delphi 5, also deleted installation directory
  2. Install Delphi 5 Pro (I only have a German Delphi Pro edition available)
  3. Install Delphi 5 Pro Update (I used the German update)
  4. Install Delphi 5 ADO Express
  5. Install Delphi 5 ADO Express Update Pack 1
  6. Install Delphi 5 ADO Express Update Pack 2

And the download links (many thanks again Jeroen Wiert Pluimers):

Delphi 5 Pro updates:

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

ADOExpress Update Packs 1 and 2:

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

And for future reference some screenshots to build the download links (case sensitive):

Delphi - Either BOF or EOF is True, or the current record has been deleted

Delphi - Either BOF or EOF is True, or the current record has been deleted

Delphi - Either BOF or EOF is True, or the current record has been deleted

Delphi - Either BOF or EOF is True, or the current record has been deleted

Delphi - Either BOF or EOF is True, or the current record has been deleted

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜