上周发了一个帖求助delphi+mySql实现分页的功能,谢谢大家给了很多方法,但是感觉有点乱。所以麻烦哪位大哥,能给我一个完整的工程,让我学习下!
说下要求:1、要用delphi+mySql实现
          2、mySql不用存储过程(如果在有不用存储过程的方法情况下,还多提供了一个存储过程的方法,那更好拉,2种方法都可以学习下)。
          3、我用的是DBGrid+DataSource+ADOConnection+ADOQuery实现的数据库连接和操作,连接数据库的代码可以不用写,我会设置(不用stringGrid和dataSet哦)。
          4、要能够上翻和下翻且能够指定页号翻页(关键)。
          5、显示总页数、当前页数(关键)。以上5个条件缺一不可啊,条件有点苛刻,但是还是先谢谢拉

解决方案 »

  1.   

    楼上的大哥,上周那帖,我给了你80分啊!!可是那些我真的看的很乱,而且,现在是赶时间用,所以没办法慢慢总结。能有一个完整的DEMO学习一下,是最快的了!时间紧迫,被逼无奈啊,挨!如果你会的话,麻烦你帮忙写一个吧,我快急死了。
      

  2.   

    用SQL分页比较简单吧!
    做过一个,都有你要的功能.
    明天找找看先
      

  3.   

    unit BCSDZCT;interfaceuses
      Business.System, Business.Forms, Business.Data, Business.Model,Business.System.SysUtils;type
      TBCSDZCT = class(TForm)
        DataSetBCSDBZSJJ: TSQLDataSet;
        DataSource1: TDataSource;
        Query1: TQuery;
        FuncBroker: TFuncBroker;
        ButtonImageList: TImageList;
        Panel4: TPanel;
        Panel5: TPanel;
        ToolBar1: TToolBar;
        ToolButton_zj: TToolButton;
        ToolButton4: TToolButton;
        ToolButton_xg: TToolButton;
        ToolButton6: TToolButton;
        ToolButton_sc: TToolButton;
        ComboBox_cxtj: TComboBox;
        Label_kscx: TLabel;
        Edit_gjz: TEdit;
        Image_cx: TImage;
        Panel1: TPanel;
        Label3: TLabel;
        Panel2: TPanel;
        Panel3: TPanel;
        DataGrid1: TDataGrid;
        DataGrid1BCSDB_XZ: TDataGridColumn;
        DataGrid1BCSDB_BCMC: TDataGridColumn;
        DataGrid1BCSDB_SBSJ1: TDataGridColumn;
        DataGrid1BCSDB_XBSJ1: TDataGridColumn;
        DataGrid1BCSDB_SBSJ2: TDataGridColumn;
        DataGrid1BCSDB_XBSJ2: TDataGridColumn;
        DataGrid1BCSDB_SBSJ3: TDataGridColumn;
        DataGrid1BCSDB_XBSJ3: TDataGridColumn;
        DataGrid1BCSDB_SBSJ4: TDataGridColumn;
        DataGrid1BCSDB_XBSJ4: TDataGridColumn;
        DataGrid1BCSDB_SBSJ5: TDataGridColumn;
        DataGrid1BCSDB_XBSJ5: TDataGridColumn;
        Label4: TLabel;
        Edit_PageCount: TEdit;
        Edit_Page: TEdit;
        Button1: TButton;
        Label_sy: TLabel;
        Label_xyy: TLabel;
        Label_syy: TLabel;
        Label_my: TLabel;
        Label1: TLabel;
        FIELD_BCSDBZSJJ_BCSDB_XZ: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_BCMC: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_SBSJ1: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_XBSJ1: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_SBSJ2: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_XBSJ2: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_SBSJ3: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_XBSJ3: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_SBSJ4: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_XBSJ4: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_SBSJ5: TUserDataField;
        FIELD_BCSDBZSJJ_BCSDB_XBSJ5: TUserDataField;
        procedure DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
        procedure BizFormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure ToolButton_zjClick(Sender: TObject);
        procedure ToolButton_xgClick(Sender: TObject);
        procedure ToolButton_scClick(Sender: TObject);
        procedure Image_cxClick(Sender: TObject);
        procedure BizFormShow(Sender: TObject);
        procedure Edit_PageCountChange(Sender: TObject);
        procedure Label_syClick(Sender: TObject);
        procedure Label_syMouseLeave(Sender: TObject);
        procedure Label_syMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure Label_syyClick(Sender: TObject);
        procedure Label_syyMouseLeave(Sender: TObject);
        procedure Label_syyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure Label_xyyClick(Sender: TObject);
        procedure Label_xyyMouseLeave(Sender: TObject);
        procedure Label_xyyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure Label_myClick(Sender: TObject);
        procedure Label_myMouseLeave(Sender: TObject);
        procedure Label_myMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure Button1Click(Sender: TObject);
        procedure Edit_PageChange(Sender: TObject);
        procedure DataGrid1Click(Sender: TObject);
        procedure Edit_PageCountKeyPress(Sender: TObject; var Key: Char);
      private      {private declarations}
      public
        {public declarations}
         procedure hqzx(page:string);  //判断函数
         function panduan():integer;   //获取总项
         procedure hqzx_cx(page_cx:string); //判断函数-查询
         function panduan_cx():integer;   //获取总项-查询
      end;
    implementation
    var
       PageCount:integer;//每页显示的行数
       Page:integer;//当前页数
       TotalPages:integer;//总页数
       quzheng:double;
       flag:boolean;
       PageCount_cx:integer;//每页显示的行数(查询)
       Page_cx:integer;//当前页数(查询)
       TotalPages_cx:integer;//总页数(查询)
       quzheng_cx:double;
       czrz:GGZYJ.TGGZYJ;  //公共资源集
       czmk,cznr_cz:string;//操作日志
    function TBCSDZCT.panduan():integer;//判断函数
    begin
         Query1.Close;
         Query1.ConnectionString := 'DATABASEURL=Biz:\RLZYGLXT\RLZYGLXTSJK.Database';
         Query1.CommandText := 'SELECT BCSDB.BCSDB_XZ, BCSDB.BCSDB_BCMC, BCSDB.BCSDB_SBSJ1, BCSDB.BCSDB_XBSJ1, BCSDB.BCSDB_SBSJ2, BCSDB.BCSDB_XBSJ2, BCSDB.BCSDB_SBSJ3, BCSDB.BCSDB_XBSJ3, BCSDB.BCSDB_SBSJ4, BCSDB.BCSDB_XBSJ4, BCSDB.BCSDB_SBSJ5, BCSDB.BCSDB_XBSJ5 FROM BCSDB';
         Query1.Open;
         result:=Query1.RecordCount;
    end;
    procedure TBCSDZCT.hqzx(page:string);//获取总项
    var
       zongxiang:string;
       zonghang:string;
    begin
         Query1.Close;
         Query1.ConnectionString := 'DATABASEURL=Biz:\RLZYGLXT\RLZYGLXTSJK.Database';
         Query1.CommandText := 'SELECT BCSDB.BCSDB_XZ, BCSDB.BCSDB_BCMC, BCSDB.BCSDB_SBSJ1, BCSDB.BCSDB_XBSJ1, BCSDB.BCSDB_SBSJ2, BCSDB.BCSDB_XBSJ2, BCSDB.BCSDB_SBSJ3, BCSDB.BCSDB_XBSJ3, BCSDB.BCSDB_SBSJ4, BCSDB.BCSDB_XBSJ4, BCSDB.BCSDB_SBSJ5, BCSDB.BCSDB_XBSJ5 FROM BCSDB';
         Query1.Open;
         quzheng:=Query1.RecordCount/PageCount;
         TotalPages:=integer(Query1.RecordCount/PageCount);
         if quzheng>double(TotalPages) then  //查看是否大于整数
         begin
              TotalPages:=TotalPages+1;
         end;
         zongxiang:=SysUtils.inttostr(TotalPages);
         zonghang:=SysUtils.inttostr(Query1.RecordCount);
         Edit_Page.Text:=page;
         Label1.Caption:='页次:' +page+'/'+zongxiang+'页 共'+zonghang+'项 每页';
    end;function TBCSDZCT.panduan_cx():integer;//判断函数-查询
    begin
         Query1.Close;
         Query1.ConnectionString := 'DATABASEURL=Biz:\RLZYGLXT\RLZYGLXTSJK.Database';
         if ComboBox_cxtj.text='班次名称' then
         begin
              Query1.CommandText := 'select BCSDB_BCMC,BCSDB_SBSJ1,BCSDB_XBSJ1,BCSDB_SBSJ2,BCSDB_XBSJ2,BCSDB_SBSJ3,BCSDB_XBSJ3,BCSDB_SBSJ4,BCSDB_XBSJ4,BCSDB_SBSJ5,BCSDB_XBSJ5,BCSDB_XZ from BCSDB where BCSDB_BCMC=''' + Edit_gjz.Text + '''';
         end;
         Query1.Open;
         result:=Query1.RecordCount;
    end;procedure TBCSDZCT.hqzx_cx(page_cx:string);//获取总项-查询
    var
       zongxiang_cx:string;
       zonghang_cx:string;
    begin
         Query1.Close;
         Query1.ConnectionString := 'DATABASEURL=Biz:\RLZYGLXT\RLZYGLXTSJK.Database';
         if ComboBox_cxtj.text='班次名称' then
         begin
              Query1.CommandText := 'select BCSDB_BCMC,BCSDB_SBSJ1,BCSDB_XBSJ1,BCSDB_SBSJ2,BCSDB_XBSJ2,BCSDB_SBSJ3,BCSDB_XBSJ3,BCSDB_SBSJ4,BCSDB_XBSJ4,BCSDB_SBSJ5,BCSDB_XBSJ5,BCSDB_XZ from BCSDB where BCSDB_BCMC=''' + Edit_gjz.Text + '''';
         end;
         Query1.Open;
         quzheng_cx:=Query1.RecordCount/PageCount_cx;
         TotalPages_cx:=integer(Query1.RecordCount/PageCount_cx);
         if quzheng_cx>double(TotalPages_cx) then  //查看是否大于整数
         begin
              TotalPages_cx:=TotalPages_cx+1;
         end;
         zongxiang_cx:=SysUtils.inttostr(TotalPages_cx);
         zonghang_cx:=SysUtils.inttostr(Query1.RecordCount);
         Edit_Page.Text:=page_cx;
         Label1.Caption:='页次:' +page_cx+'/'+zongxiang_cx+'页 共'+zonghang_cx+'项 每页';
    end;
    procedure TBCSDZCT.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
    begin
     if datagrid1.datasource.dataset.recno mod 2=0 then
     //偶数行
     AColor:=$EAEAEA;//行背景颜色
    end;
      

  4.   


    procedure TBCSDZCT.BizFormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      //退出窗体时取消对数据的操作
      DataGrid1.DataSource.DataSet.Cancel;
    end;procedure TBCSDZCT.ToolButton_zjClick(Sender: TObject);
    begin
     //新增
     FuncBroker.BizClassRef.BizURL.URL := 'Biz:\RLZYGLXT\XZBCXS.FUNC';
     FuncBroker.Func.Run('');  //传递空值
     try
       FuncBroker.Func.MainForm.ShowModal;
     finally
      self.BizFormShow(sender);
     end;
    end;procedure TBCSDZCT.ToolButton_xgClick(Sender: TObject);
    var   //修改
      s : string;
      i : Integer;
      myform:XGBCXS.TXGBCXSZCT;
    begin
      if DataSetBCSDBZSJJ.IsEmpty then
         exit;
      s := '';
      i := 0;
      DataGrid1.DataSource.DataSet.First;
      while not DataSetBCSDBZSJJ.Eof do
       begin
        if DataGrid1.DataSource.DataSet.FieldByName('BCSDB_XZ').AsInteger = 1 then
         begin
           s := DataGrid1.DataSource.DataSet.FieldByName('BCSDB_BCMC').AsString; //获取字段
           i := i+1;
         end;
         DataSetBCSDBZSJJ.next;
        end;
       if (i<=0) or (i>1)  then
       begin
         Dialogs.ShowMessage('你没有选择或者选择了多项,请单项选择!');
       exit;
       end else
       begin
          myform := XGBCXS.TXGBCXSZCT.Create(self.Context);
          myform.strParam := s;
          myform.Caption:='修改班次系数';
          myform.Label2.Caption := '修改班次系数';
          myform.typeName := '修改';
          myform.ShowModal;
          self.BizFormShow(sender);
          myform.Free;
       end;
       self.BizFormShow(sender);
    end;procedure TBCSDZCT.ToolButton_scClick(Sender: TObject);  //删除
    var
      s : string;
    begin
       if DataSetBCSDBZSJJ.IsEmpty then
         exit;
       s := '';
       DataGrid1.DataSource.DataSet.First;
       while not DataSetBCSDBZSJJ.Eof do
       begin
          if DataGrid1.DataSource.DataSet.FieldByName('BCSDB_XZ').AsInteger = 1 then
          begin
            s := DataGrid1.DataSource.DataSet.FieldByName('BCSDB_BCMC').AsString; //获取字段
            Query1.Close;            //SQL执行删除操作
            Query1.ConnectionString:='DATABASEURL=Biz:\RLZYGLXT\RLZYGLXTSJK.DATABASE';//数据库连接地址
            Query1.CommandText:='Delete from BCSDB where BCSDB_BCMC='''+s+'''';
            Query1.Execute;
            cznr_cz :='删除了班次名称为: '+s+'的信息';
            czrz.czrz(Self.Context,czmk,cznr_cz);
          end;
          DataSetBCSDBZSJJ.next;
       end;
       self.BizFormShow(sender);
    end;procedure TBCSDZCT.Image_cxClick(Sender: TObject);
    begin    //查询
      DataSetBCSDBZSJJ.Active := false;
      DataSetBCSDBZSJJ.SQL.Text := 'select BCSDB_BCMC,BCSDB_SBSJ1,BCSDB_XBSJ1,BCSDB_SBSJ2,BCSDB_XBSJ2,BCSDB_SBSJ3,BCSDB_XBSJ3,BCSDB_SBSJ4,BCSDB_XBSJ4,BCSDB_SBSJ5,BCSDB_XBSJ5,BCSDB_XZ from BCSDB where BCSDB_BCMC=''' + Edit_gjz.Text + '''';
      DataSetBCSDBZSJJ.Active := true;
      DataGrid1.ApplyBestFit(nil);
    end;procedure TBCSDZCT.BizFormShow(Sender: TObject); //页面加载
    begin      //********************页面加载****************
      Page:=1;
      PageCount:=SysUtils.StrToInt(Edit_PageCount.Text);
      DataSetBCSDBZSJJ.Close;
      DataSetBCSDBZSJJ.Open;
      hqzx(SysUtils.IntToStr(page));
      flag:=true;
      czrz:=GGZYJ.TGGZYJ.Create(self.Context);
      czmk:='班次设定';
    end;
      

  5.   

    [email protected]我的邮箱,最好是整个工程发给我,谢谢啊!