ADO Dataset close时报错(200分)

  • 主题发起人 主题发起人 Pearl.
  • 开始时间 开始时间
P

Pearl.

Unregistered / Unconfirmed
GUEST, unregistred user!
我做的一个程序用adodataset访问SQL Server 7.
代码如下:
s := '';
with adodataset1 do
begin
commandtext := 'select * from t_station';
open;
while not eof do
begin
s := s + fieldbyname('stac').asstring+#13#10;
next;
end;
close;
end;
....
当程序执行到close时, 系统弹出错误:
Project STACalc.exe raised exception class EOleException with message 'Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.' Process stopped. Use Step or Run to continue.
紧接着又弹出另一个'Access violoation at address 0046F61B in module 'STACalc.exe'. Read of address 00000000'错误。

请问怎么回事?

上面代码在调试时运行成功。 后来为了导出数据到Excel, 我在form上放了一个第三方控件(该控件在Create时调用了TExcelApplication.Create, TExcelWorkbook.create和TExcelWorkSheet.Create),
功能是将数据从dataset导出到excel。 然后程序就出现上述毛病。 我将该控件删除后, 问题依旧。

跟踪源代码进入TCustomADODataSet.InternalClose;过程:
procedure TCustomADODataSet.InternalClose;
begin
BindFields(False);
if DefaultFields then DestroyFields;
FIndexFields.Clear;
DestroyLookupCursor;
if stOpen in RecordsetState then
begin
Recordset.CancelUpdate; <-----出错, 但此时进入Recordset内了, 无法继续跟踪
....

继续单步, 发觉程序莫名其妙调用了TDataSet.GetNextRecord. 从而产生了第二个错误.

当我用
try
close;
except
end;
强制跳过错误时。 第二个错误却产生在try...except...end后面第一条语句处(我的程序中那后面是连续3个end)。[:(]


环境: win2000 professional+sp3(part), ado 2.5, delphi 5+all patchs

 
Either BOF or EOF is True

搜一下ADO and EOF如果没有没有40条以上的回答我给你分。
ADO的BUG。
你补丁的可能打的顺序不对, D5->ado1->ado2,另外试试将MDAC升到2.7。

最后用d6吧。都2002年了。
 
这个问题大富翁上提过很多次了,升级ado就可以解决这个问题。
ado有两个升级包,依次进行升级就可以了[:D]
 
同意楼上的,我也碰到这样的问题,打上ado补丁后就解决了。
 
跟踪源代码看来不是ado控件的错呀。 错出在recordset中呀。
 
Delphi5三个补丁,
Delphi6有一个补丁
 
你装上Delphi5的ADO的两个补丁包即可解决,
这是Delphi5在ADO上一些BUG造成的。
 
我打过补丁了呀。 而且其它程序都好的。 包括我在放那个第三方控件之前程序也运行正常。 但放过那个控件(我已经删除了呀)之后就出毛病了。
 
升......升鸡巴。
 
当然一般这个问题都是要ADO升级的问题。
但是你的程序那个S得有多长??那可是循环累加呀。
 
把属性设只读就行了。当然用Delphi6也是没问题的。
 
应该不是ado的问题吧。还是用delphi6吧!
 
荷塘新月:
厉害!这也能解决问题?:)
 
我的程序中也碰到相同的问题,在D5、D6中都存在同样问题[:(]
 
后退
顶部