当我尝试在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;
有没有办法检查数据库表是否为空而不会产生此类错误?
答案 0 :(得分:7)
此错误最初发生在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网站上列出的所有补丁,假设您可以找到它们。
答案 1 :(得分: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
答案 2 :(得分:2)
很长一段时间agom但我记得Delphi 5中的这个问题通过Delphi更新解决了。早期版本的ADO组件存在严重问题
P.S。此外,我看到您的代码不使用典型的运行时创建组件,也不使用某些容器,如数据模块或表单(通常不太好)用于组件的可视化工作。有时也可以通过adoConnection.execute运行简单查询。如果不使用可视组件,则处理ADO的Recordset对象与Delphi的AdoDataset非常相似。
答案 3 :(得分:1)
因为我花了一整天的时间,所以这是我最后所做的一切。
使用ADO Express安装Delphi 5 Pro
下载链接(非常感谢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
以供将来参考一些截图来构建下载链接(区分大小写):