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
代码如下:
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