我在我的程序中首先触发了Timer的一个事件,然后在其中打开了ADODataSet1,并循环打印其返回的结果。每打印一条记录,就通过ADOCommand执行了一条语句,将该条记录标记为已打印。打印结束后,再触发Timer,以达到循环检索新数据并打印的目的。这时,我发现,即使其它用户增加了新的数据,这段程序在第一次循环结束后,Timer再次触发时,就检测不到新数据了,始终是EOF,不知道是怎么回事?下面的代码有什么不妥当?后台数据库是SQL Server 2000。另外,还有一个问题,当ADODataSet返回EOF时,如何关闭该数据集?我用.Close时,总是触发异常。
procedure TfrmMain.TimerTimer(Sender: TObject);
begin
Timer.Enabled:=False;
//showmessage('时间到!');
try
ADODataSet1.Open;
if not (ADODataSet1.Eof and ADODataSet1.Bof) then
begin
MainStatusBar.Panels[0].Text:='正在打印......';
while not ADODataSEt1.Eof do
begin
ppReportOrders.PrintToDevices;
ppReportOrders.Print;
//执行修改已打印过的记录的代码
ADOCmd.ConnectionString:=ADODataSet1.ConnectionString;
ADOCmd.CommandText:='UPDATE tabOrders SET ExtraStatus=''1'' WHERE OrderNo='''+ADODataSet1.FieldByName('OrderNo').AsString+'''';
ADOCmd.Execute;
//ADODataSetCmd.Active:=False;
ADODataSet1.Next;
MainStatusBar.Panels[0].Text:='当前打印页码:'+IntToStr(ADODataSet1.RecNo);
end;
//ADODataSet1.Last;
ADODataSet1.Refresh;
ADODataSet1.Close;
Timer.Enabled:=True;
end
else
begin
//ADODataSet1.first;
//ADODataSet1.Refresh;
ADODataSet1.close;
Timer.Enabled:=True; end
except
// ADODataSet1.Refresh;
ADODataSet1.Close;
Timer.Enabled:=True;
MainStatusBar.Panels[0].Text:='等待......';
end;
end;
procedure TfrmMain.TimerTimer(Sender: TObject);
begin
Timer.Enabled:=False;
//showmessage('时间到!');
try
ADODataSet1.Open;
if not (ADODataSet1.Eof and ADODataSet1.Bof) then
begin
MainStatusBar.Panels[0].Text:='正在打印......';
while not ADODataSEt1.Eof do
begin
ppReportOrders.PrintToDevices;
ppReportOrders.Print;
//执行修改已打印过的记录的代码
ADOCmd.ConnectionString:=ADODataSet1.ConnectionString;
ADOCmd.CommandText:='UPDATE tabOrders SET ExtraStatus=''1'' WHERE OrderNo='''+ADODataSet1.FieldByName('OrderNo').AsString+'''';
ADOCmd.Execute;
//ADODataSetCmd.Active:=False;
ADODataSet1.Next;
MainStatusBar.Panels[0].Text:='当前打印页码:'+IntToStr(ADODataSet1.RecNo);
end;
//ADODataSet1.Last;
ADODataSet1.Refresh;
ADODataSet1.Close;
Timer.Enabled:=True;
end
else
begin
//ADODataSet1.first;
//ADODataSet1.Refresh;
ADODataSet1.close;
Timer.Enabled:=True; end
except
// ADODataSet1.Refresh;
ADODataSet1.Close;
Timer.Enabled:=True;
MainStatusBar.Panels[0].Text:='等待......';
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货