Question

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;

  DataSet.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?

Was it helpful?

Solution

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.

OTHER TIPS

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:

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):

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top