delphi简单的分页实现(高手可以不看)  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi简单的分页实现(高手可以不看)


delphi简单的分页实现(高手可以不看)

适合初学者,练习几个控件的使用

1、先放一张界面控件布局:

760410-20180320132716860-1582361597.png

   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