delphi+mysql如何实现查询结果在DBGrid(或者其他的控件也可以,但是请详细说明)中分页显示出来,并且有一个翻页按扭可以翻页查看。谁能告诉我查询的语句怎么写,我用的是ADOQuery查询,请不要只给我一句select * from table limit 2,3这样的语句,我希望要实现这个功能的详细的代码段,我只用delphi+mysql实现功能,请不要给我什么java,php或者其他什么语言的方法!谢谢!
解决方案 »
- delphi 2007 dev 安装 compile error
- 热烈庆祝第一个DELPHI节!(散分)
- 如何在DLL中访问EXE中的变量?
- 如何截获当前屏幕的分辨率,并存储下来?
- 如何在程序开始时自动把客户机上的时间和服务器校对一致?
- 关于两棵树之间的拖动问题,,在线很快就结贴!!!!
- 大家看看我的ADOQUREY下的代碼有什么問題﹖怎么實現不了我要的效果﹖
- 高手指点一下
- ERP
- 请问下点击程序红叉按钮的时候如何进入最小化?
- if GetVolumeInformation('c:', Buffer, SizeOf(Buffer), 请问这优代码的意思是什么
- CodeManager v2.0.0 (源码管理器)
就显示多少个GRID,按固定行数瓜分GRIDALL里的数据
粘一个别人发的unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,adoint, Grids, DBGrids, DB, ExtCtrls, DBCtrls, StdCtrls, Spin, ADODB;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure showdata();
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
adodataset1.Recordset.PageSize:=10;
adodataset1.Recordset.AbsolutePage:=1;
showdata;
end;
procedure Tform1.showdata;
var
irow,icol,icount:integer;
rs:adoint.recordset;
begin
//cleardata;
irow:=0;
icol:=0;
stringgrid1.Cells[icol,irow]:='顾客编号';
inc(icol);
stringgrid1.cells[icol,irow]:='公司名称';
inc(irow);
dec(icol);
rs:=adodataset1.recordset;
for icount:=1 to 10 do
begin
stringgrid1.cells[icol,irow]:=rs.fields.get_item('customerid').value;
inc(icol);
stringgrid1.cells[icol,irow]:=rs.fields.get_item('companyid').value;
inc(irow);
dec(icol);
rs.movenext;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
abspage:integer;
begin
abspage:=adodataset1.Recordset.AbsolutePage;
inc(abspage);
showdata;
end;
end.如果需要往前翻,定义一个全局变量
上面的方法是正常使用sql查询得到数据集而进行处理的
条条小路通厕所,使用分页存储过程实现,然后在程序中调用实现也可以
代码我就不贴出来了,引用页为
http://www.qqgb.com/Program/Delphi/DelphiJQ/Program_165423.html
stringgrid是新增记录用,保存后插入到数据表,而不是显示数据表,这种情况下该如何呢?
1 建临时表,第一列自动加1,第二列为页码暂为null
2 insert into 临时表 select * from 你的表
3 定义行数 X, 计算页数:select count(*)/行数
4 update 临时表 set 第二列 为 1 where 你的表某列 = (select top X 你的表某列 from 你的表)
5 做个循环 update 其它第二列 (....from 你的表 where 你的表某列 in (select 你的表某列 from 临时表 where 第二列不为NULL))最后就按列数来执行查询你的临时表 当然你要在DELPHI里有个页数的变量
设置一个页码 一个页长度
with Query do
begin
SQL.text:='select * from table limit '+format('%d,%d',[(APageNo-1)*APageSize+1,APageSize*APageNo]);
Open;
end;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
StringGrid1: TStringGrid;
这四个控件要怎么设置与数据库的连接啊??
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
我是初学者,我还只会用这三个控件设置数据库连接。。还有9楼的 dh9450 朋友,你那句with Query do是什么意思啊?我不明白。。
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(strSQL);
ADOQuery1.Active:=true;
...这一段全是对ADOQuery1的操作,重复写比较麻烦,你可以这样:
with ADOQuery1 do begin
SQL.Clear;
SQL.Add(strSQL);
Active:=true;
end;
如果你用ADO或者MYDAC之类的连接MYSQL
具体如楼上所说