请问各位大侠,我在delphi在访问sql server数据库,用TDBgrid控件显示查询结果。结果数据集比较大,因此想要分页显示,使每页显示50条记录,该如何实现?
解决方案 »
- 那里有图标(库)下载???(*.ico,delphi工具栏,菜单栏图标)
- 请问数据类型问题
- 请问如何让程序在“启动”菜单?
- 怎样实现多点聊天啊,
- 为什么总时出错:parameter 'ohoto' not found
- IBM DB2 v7.1 认证有用吗?csdn有DB2的专区吗?
- 怎样从服务器上连续监视客户机是否在线?谢谢
- 请问建立MDI窗体后要怎样它的子窗体打开,而且能后关闭,而且只能显示一个相同的子窗体
- 如何在线程中使用OLE自动化---急急急!!!
- 如何将TWinControl对象的背景变为透明?
- 请问indy的TCPServer如何知道连接的client的IP?如何知道断开的client的IP?
- hSession := InternetOpen('MyApp', 。。。。。。。),怎样取得webbrowser的hSession?
方法简单且效率高,已知的问题就是要多返回一个空的记录集 解决的方法是在前台调用时,用 set recordset=recordset.nextrecordset
的方法跳过第一个记录集
此方法由J9988提供,我只是将它改成了方便调用的存储过程--邹建 2004.05--*/
CREATE procedure p_splitpage
@sql nvarchar(4000), --要执行的sql语句
@currentpage int=2, --要显示的页码
@pagesize int=10, --每页的大小
@pagecount int=0 out --总页数
as
set nocount on
declare @p1 intexec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount outputselect @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@currentpage=(@currentpage-1)*@pagesize+1
select @currentpage
exec sp_cursorfetch @p1,16,@currentpage,@pagesize
exec sp_cursorclose @p1
GO
ADOQuery1.SQL.Clear;
pageCount := (page-1) * 100;
///// 分页查询语句
ADOQuery1.SQL.Add(format('select top 100 * from Alarm_Command_Log where log_serial_number not in (select top %d log_serial_number from Alarm_Command_Log order by log_serial_number) order by log_serial_number',[pageCount]));
page := page + 1;
adoquery1.Active := true; count := count + 1;
end;
ClientDataSet1.fetchondemand:=false;
ClientDataSet1.getnextpacket;
所以,我用SQL +TClientDataSet作成分叶:客户端:
var
i:Integer;
t_sql,str1,strend:wideString;
quedata:olevariant;
//2004-2-10为了优化程序性能 速度已提高到52秒
lStart, lEnd : Integer;
begin
//inherited;
// lStart := GetTickCount;
if not dmmain.DSquery.Active then exit; screen.Cursor := crhourglass;
//关掉与DBGRID 的互动
dmmain.dsquery.DisableControls;
t_sql:='select top ' + trim(ComboBox1.Text) +' * from TableName '+sWhere;
t_sql := t_sql+ ' and id > '+ inttostr(localcount);
try
ipubtemp.ty_query(t_sql,quedata);
if not varisnull(quedata) then
begin
if dmmain.dsquery.Active then dmmain.dsquery.Close;
dmmain.dsquery.Open;
dmmain.dsquery.AppendData(quedata,true);
dmmain.dsquery.Last;
dmmain.dsquery.EnableControls;
//得到此次查询的键值
LocalCount := GetKeyFieldValue('id'); //传入具体字段
edtRecNo.Text := '当前共有'+inttostr(dmmain.dsquery.recordcount) +'条';
end else
begin
//不再有数据
dmmain.dsquery.EnableControls; //ydy 必须要
btnpagedown.Enabled := false;
screen.Cursor := crdefault;
exit;
end;
except
dmmain.dsquery.EnableControls;
dbgrid1.Refresh;
end;
dmmain.dsquery.EnableControls;
dbgrid1.Refresh;
screen.Cursor := crdefault;
---------------------------
见笑了!!!