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