delphi oracle 分页,delphi下ado+dbgrid实现数据集的分页显示

最近在网上看到别人写的dbgrid数据集的分页显示,基本上都是用SQL语句来实现的,一时手痒,自己也写了个,希望对新手有所帮助。

-------------------------------------------------------codes

below-------------------------------------------------------------

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls;

type

TForm1 = class(TForm)

Button1:

TButton;

Button2:

TButton;

Button3:

TButton;

Button4:

TButton;

DataSource1:

TDataSource;

DBGrid1:

TDBGrid;

ADOConnection1: TADOConnection;

ADOQuery1:

TADOQuery;

procedure

FormCreate(Sender: TObject);

procedure

Button1Click(Sender: TObject);

procedure

Button2Click(Sender: TObject);

procedure

Button3Click(Sender: TObject);

procedure

Button4Click(Sender: TObject);

private

{ Private

declarations }

public

{ Public

declarations }

end;

var

Form1: TForm1;

num1:integer=5;//全局变量num1为每页要显示的记录条数

。num2:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);//第一页begin

adoquery1.Connection:=adoconnection1;

adoquery1.SQL.clear;

adoquery1.SQL.add('select top '+inttostr(num1)+' * from

loginn');

adoquery1.Open;

end;

procedure TForm1.Button2Click(Sender: TObject);//下一页begin

adoquery1.Connection:=adoconnection1;

adoquery1.SQL.clear;

adoquery1.sql.add('select count(*) as countnum from loginn');

adoquery1.Open;

inc(num2,num1);

if num2>=adoquery1.FieldByName('countnum').AsInteger

then

num2:=trunc(adoquery1.FieldByName('countnum').AsInteger/5)*5;

adoquery1.SQL.clear;

adoquery1.SQL.Add('select top '+inttostr(num1)+' * from loginn

where user not in(select top '+inttostr(num2)+' user from

loginn)');

adoquery1.Open;

end;

procedure TForm1.Button3Click(Sender: TObject);//上一页

begin

dec(num2,num1);

if num2>5 then

begin

adoquery1.Connection:=adoconnection1;

adoquery1.SQL.clear;

adoquery1.SQL.Add('select top '+inttostr(num1)+' * from loginn

where user not in(select top '+inttostr(num2)+' user from

loginn)');

adoquery1.open;

end

else

begin

inc(num2,num1);

adoquery1.Connection:=adoconnection1;

adoquery1.sql.clear;

adoquery1.SQL.Add('select top '+inttostr(num1)+' * from

loginn');

adoquery1.Open;

end;

end;

procedure TForm1.Button4Click(Sender: TObject);//最后一页

begin

adoquery1.connection:=adoconnection1;

adoquery1.sql.clear;

adoquery1.SQL.Add('select count(*) as countnum from loginn');

adoquery1.Open;

num2:=trunc(adoquery1.FieldByName('countnum').AsInteger/5)*5;

adoquery1.SQL.Clear;

adoquery1.SQL.Add('select top '+inttostr(num1)+' * from loginn

where user not in(select top

'+inttostr (num2)+' user from loginn)');

adoquery1.Open;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

adoquery1.Connection:=adoconnection1;

adoquery1.SQL.clear;

adoquery1.SQL.add('select top '+inttostr(num1)+' * from

loginn');

adoquery1.Open;

datasource1.dataset:=adoquery1;

dbgrid1.DataSource:=datasource1;

end;

end.

---------------------------------------------------codes

over------------------------------------------------------------------

代码写的可能有点乱,看不懂的可以问我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值