CREATE procedure pagescroll @pagenumber int 
as
declare @pagesize int
declare @pagestart intif @pagenumber=null
begin 
   set @pagenumber=0
end
set @pagesize=5set @pagestart=@pagesize*@pagenumberDECLARE records_cursor  SCROLL CURSOR FOR
SELECT * FROM net_webmail ORDER BY date_time
OPEN records_cursor
while @pagesize>0
Begin
   FETCH ABSOLUTE @pagestart FROM records_cursor
   set @pagestart=@pagestart+1
   set @pagesize=@pagesize-1
end
CLOSE records_cursor
DEALLOCATE records_cursor
GO我用这个存储过程来实现分页的功能。参数为要查的页数,每页有5条记录。
但是每个FETCH生成一个记录集。这样的话一次查询就要生成5个记录集。
这个存储过程我在查询分析器中调用成功,调用语句为 exec pagescroll 1 。
但是我在我的程序里想把查询结果显示在DBGrid中,却不行。我用的是TADOQuery执行的,具体如下:
ADOQuery1->SQL->Clear();
ADOQuery1-SQL->Add("exec pagescroll 1");
ADOQuery1->Open();
可是有错误,说是访问adosql.dll出错。
我用TADOCommand对象执行时:
ADOCommand->Text="exec pagescroll 1";
ADOCommand->Execute();
没有出错,但是没有返回的记录集合。请问如何通过使用服务器游标实现我的分页查询,并显示到DBGrid中??通过临时表的方法我也看过,但是每次查询都要生成临时表,系统开销大,不好,所以打算用服务器游标解决问题。