delphi简单的分页实现(高手可以不看)
适合初学者,练习几个控件的使用
1、先放一张界面控件布局:

4个button,2个label,1个edit,1个TRzsplitter(把界面分割成上下2部分),1一个adoquery,1个adoconnection,1个datdasource,1个DBgridEh(原生的dbgrid也可以)
2、双击窗体,编写连接数据库的代码:
procedure TForm3.FormCreate(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=数据库用户名;Initial Catalog=数据库名字;PassWord=数据库密码;Data Source=数据库服务器IP';
ADOConnection1.Connected := True;
adoquery1.Connection := adoconnection1;
adoquery1.SQL.clear;
adoquery1.SQL.add('select top ' + Edit1.Text + ' * from TableName order by id');
adoquery1.Open;
datasource1.dataset := adoquery1;
dbgrid1.DataSource := datasource1;
end;
注意:adoconnection控件的LoginPrompt的属性值改为False(为什么是False自己可以去试一下)
3、双击 首页 按钮,编写代码:
//第一页
procedure TForm3.btnFirstPageClick(Sender: TObject);
begin
adoquery1.SQL.clear;
adoquery1.SQL.add('select top ' + Edit1.Text + ' * from TableName order by id');
adoquery1.Open;
num2 := ;
end;
4、双击 上一页 按钮,编写代码:
//上一页
procedure TForm3.btnPreviousPageClick(Sender: TObject);
begin
dec(num2, StrToInt(Edit1.Text));
if num2 >= StrToInt(Edit1.Text) then
begin
adoquery1.SQL.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + inttostr(num2) + ' id from TableName order by id) order by id');
adoquery1.open;
end
else
begin
inc(num2, StrToInt(Edit1.Text));
adoquery1.sql.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName order by id');
adoquery1.Open;
end;
end;
5、编写下一页 按钮 编写代码:
//下一页
procedure TForm3.btnNextPageClick(Sender: TObject);
begin
adoquery1.SQL.clear;
adoquery1.sql.add('select count(*) as countnum from TableName');
adoquery1.Open;
inc(num2, StrToInt(Edit1.Text));
if num2 >= adoquery1.FieldByName('countnum').AsInteger then
begin
num2 := trunc(adoquery1.FieldByName('countnum').AsInteger / StrToInt(Edit1.Text)) * StrToInt(Edit1.Text);
end;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + inttostr(num2) + ' id from TableName order by id) order by id');
adoquery1.Open;
if DBGrid1.DataSource.DataSet.RecordCount <= then
begin
adoquery1.SQL.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + inttostr(num2-StrToInt(Edit1.Text)) + ' id from TableName order by id) order by id');
adoquery1.Open;
end;
end;
6、双击 最后一页 按钮,编写代码:
//最后一页
procedure TForm3.btnLastPageClick(Sender: TObject);
var
val1 :Integer;
val2 :Integer;
begin
adoquery1.sql.clear;
adoquery1.SQL.Add('select count(*) as countnum from TableName');
adoquery1.Open;
val1 := (adoquery1.FieldByName('countnum').AsInteger) mod StrToInt(Edit1.Text);
val2 := (adoquery1.FieldByName('countnum').AsInteger) - StrToInt(Edit1.Text);
adoquery1.SQL.Clear;
num2 := val2;
if val1 = 0then
begin
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + IntToStr(val2) + ' id from TableName order by id) order by id');
end
else
begin
adoquery1.SQL.Add('select top ' + IntToStr(val1) + ' * from TableName where id not in(select top ' + IntToStr(val2) + ' id from TableName order by id) order by id');
end;
adoquery1.Open;
end;
7、完整代码:
unit Unit3; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids, RzDBGrid, ExtCtrls, RzPanel, RzSplit, DBGridEhGrouping, GridsEh,
DBGridEh; type
TForm3 = class(TForm)
btnFirstPage: TButton;
btnNextPage: TButton;
btnPreviousPage: TButton;
btnLastPage: TButton;
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
Edit1: TEdit;
lblCount1: TLabel;
lblCount2: TLabel;
RzSplitter1: TRzSplitter;
DBGrid1: TDBGridEh;
procedure btnFirstPageClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnNextPageClick(Sender: TObject);
procedure btnPreviousPageClick(Sender: TObject);
procedure btnLastPageClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form3: TForm3;
num2: integer; implementation {$R *.dfm} //第一页
procedure TForm3.btnFirstPageClick(Sender: TObject);
begin
adoquery1.SQL.clear;
adoquery1.SQL.add('select top ' + Edit1.Text + ' * from TableName order by id');
adoquery1.Open;
num2 := ;
end; //最后一页
procedure TForm3.btnLastPageClick(Sender: TObject);
var
val1 :Integer;
val2 :Integer;
begin
adoquery1.sql.clear;
adoquery1.SQL.Add('select count(*) as countnum from TableName');
adoquery1.Open;
val1 := (adoquery1.FieldByName('countnum').AsInteger) mod StrToInt(Edit1.Text);
val2 := (adoquery1.FieldByName('countnum').AsInteger) - StrToInt(Edit1.Text);
adoquery1.SQL.Clear;
num2 := val2;
if val1 = 0then
begin
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + IntToStr(val2) + ' id from TableName order by id) order by id');
end
else
begin
adoquery1.SQL.Add('select top ' + IntToStr(val1) + ' * from TableName where id not in(select top ' + IntToStr(val2) + ' id from TableName order by id) order by id');
end;
adoquery1.Open;
end; //下一页
procedure TForm3.btnNextPageClick(Sender: TObject);
begin
adoquery1.SQL.clear;
adoquery1.sql.add('select count(*) as countnum from TableName');
adoquery1.Open;
inc(num2, StrToInt(Edit1.Text));
if num2 >= adoquery1.FieldByName('countnum').AsInteger then
begin
num2 := trunc(adoquery1.FieldByName('countnum').AsInteger / StrToInt(Edit1.Text)) * StrToInt(Edit1.Text);
end;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + inttostr(num2) + ' id from TableName order by id) order by id');
adoquery1.Open;
if DBGrid1.DataSource.DataSet.RecordCount <= then
begin
adoquery1.SQL.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + inttostr(num2-StrToInt(Edit1.Text)) + ' id from TableName order by id) order by id');
adoquery1.Open;
end;
end; //上一页
procedure TForm3.btnPreviousPageClick(Sender: TObject);
begin
dec(num2, StrToInt(Edit1.Text));
if num2 >= StrToInt(Edit1.Text) then
begin
adoquery1.SQL.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName where id not in(select top ' + inttostr(num2) + ' id from TableName order by id) order by id');
adoquery1.open;
end
else
begin
inc(num2, StrToInt(Edit1.Text));
adoquery1.sql.clear;
adoquery1.SQL.Add('select top ' + Edit1.Text + ' * from TableName order by id');
adoquery1.Open;
end;
end; procedure TForm3.FormCreate(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=数据库用户名;Initial Catalog=数据库名字;PassWord=数据库密码;Data Source=数据库服务器IP';
ADOConnection1.Connected := True;
adoquery1.Connection := adoconnection1;
adoquery1.SQL.clear;
adoquery1.SQL.add('select top ' + Edit1.Text + ' * from TableName order by id');
adoquery1.Open;
datasource1.dataset := adoquery1;
dbgrid1.DataSource := datasource1;
end; end.
delphi简单的分页实现(高手可以不看)的更多相关文章
- 简单的分页存储过程,Json格式日期转换为一般日期
简单的分页存储过程 CREATE PROC Paged @pageIndex INT, @pageCount INT OUTPUT, @pageSize INT AS DECLARE @count I ...
- jquery ajax json简单的分页,模拟数据,没有封装,只显示原理
简单的分页,模拟数据,没有封装,显示原理,大家有兴趣可以自己封装,这里只是个原理过程,真正的分页也差不多是这个原理,只是请求数据不太一样,html部分: <!TOCTYPE HTML> & ...
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- delphi 简单的删除字符串尾部数字的代码
delphi 简单的删除字符串尾部数字的代码 方式一: function FilterShowName(const sName: String): String; var I: Integer; b ...
- WM_SYSCOMMAND包括很多功能,比如:拖动左边框、拖动标题栏、滚动条滚动、点击最小化、双击标题栏——Delphi 通过事件代替了大部分常用的消息,所以Delphi 简单、易用、高效
procedure TForm1.WMSysCommand(var Message: TWMSysCommand); var str: string; begin case Message.CmdTy ...
- MyBatis简单的增删改查以及简单的分页查询实现
MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...
- Delphi调用SQL分页存储过程实例
Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...
- AngularJS实现简单的分页功能
本篇文章由:http://xinpure.com/angularjs-simple-paging-functionality/ 初学 AngularJS, 尝试着写一些小功能 代码逻辑写得略粗糙,仅仅 ...
- WPF最简单的分页控件
背景:最近在写项目的时候需要写一个简单的分页功能,因项目需要,没有改为MVVM模式,只需要在后台实现 1.呈现效果如下: 接下来就来上代码,看看怎么实现的 1.界面代码 <StackPanel ...
随机推荐
- Redis的两种持久化方式-快照持久化和AOF持久化
Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为"持久化"效 ...
- Angular CurrencyPipe货币管道关于人民币符号¥的问题
做项目(Angular项目)时经常需要处理金额的显示,需要在金额前面加上¥,但又不想用简单在前面加"¥"这么不优雅的方式,于是想到了CurrencyPipe.毕竟,Currency ...
- nyoj161 取石子 (四) 威佐夫博弈
思路:详细证明见博弈总结 如何判断威佐夫博弈的奇异局势? 对于状态(a, b),c = b - a,如果是奇异局势必定满足 a == c * (1+√5)/ 2. AC代码 #include < ...
- hdu3016 线段树+简单DP
以每个方块左右坐标区间为节点建立字典树,每个节点保存这个区间对应的方块的下标,将方块按照高度排序. 如何得到第i个方块可以移动到的两个方块呢?将所有方块排完序,将前i-1个方块放入字典树,根据第i个方 ...
- AGC010 - B: Boxes
原题链接 题意简述 给出一个由个数构成的环,每次可以选择一个位置并从这个数起顺时针依次对每个数-1,-2,-3,-,-n.问能否将所有数全变为0. 分析 考虑一次操作对环带来了什么影响. (在后加一个 ...
- JavaScript设计模式之策略模式
所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类 ...
- requests+多进程poll+pymongo实现抓取小说
今天看着有个很吸引人的小说作品信息:一家只在深夜开门营业的书屋,欢迎您的光临.作为东野奎吾<深夜食堂>漫画的fans,看到这个标题按捺不住我的好奇心........ 所以我又抓下来了,总共 ...
- V4L2驱动的移植与应用(一)
V4L2(video for linux) 可以支持多种设备,它可以有以下5种接口: 1.视频采集接口(video capture interface):这种应用的设备可以是高频头或者摄像头.V4L2 ...
- windows下使用docker安装tensorflow
一.安装Docker 1.首先先按照docker,从https://get.daocloud.io/toolbox/ 下载exe文件就好 双击安装会多出来三个东西: Oracle VM Virtua ...
- 更改Qt Application为 Qt Console Application
工程属性 -> 链接器 -> 系统 -> 子系统 : 更改为 控制台 (/SUBSYSTEM:CONSOLE)