delphi简单的分页实现(高手可以不看)
适合初学者,练习几个控件的使用
1、先放一张界面控件布局:
4个button,2个label,1个edit,1个TRzsplitter(把界面分割成上下2部分),1一个adoquery,1个adoconnection,1个datdasource,1个DBgridEh(原生的dbgrid也可以)
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 := 0; 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 = 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.
转载:
https://www.cnblogs.com/OSKnown/p/8609384.html
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.039065837860107 seconds