想做一个查询,每次显示数据库里的10条数据,加两个按钮实现上一页和下一页的翻页功能,
看了网上有介绍说可以用adoquery.recordset.pagesize:=10来实现,
但我不知道该怎么让dbgrid关联到adoquery的页,
有没有哪位大哥能给个代码学习一下,先谢谢了,
组件:adoconnection,adoquery1,datasource,dbgrid,button1(上一页),button2(下一页),

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB,Grids, DBGrids, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        ListView1: TListView;
        Label1: TLabel;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        procedure Page_Count;
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
      page: integer;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      ListItem:TListItem;
      i:integer;
    begin
      with AdoConnection1 do
      begin
        ConnectionString := '连接串';
        open();
      end;
      Page := 0;
    end;procedure TForm1.Page_Count;
    var
      i:integer;
      ListItem:TListItem;
    begin
      ListView1.Clear;
      with AdoQuery1 do
      begin
        Connection := AdoConnection1;
        sql.Clear;
        sql.Add('select a,b from tmplive');
        open;
        if Page = 0 then Page := 1;
        if Page > RecordSet.RecordCount then page := RecordSet.RecordCount;
        Recordset.PageSize := 10;
        RecordSet.AbsolutePage := Page;
        for i:= 1 to Recordset.PageSize do
        begin
          ListItem := ListView1.Items.Add;
          ListItem.SubItems.Add(RecordSet.Fields.Item[0].value);
          ListItem.SubItems.Add(RecordSet.Fields.Item[1].Value);
          Next;
          if RecordSet.EOF then exit;
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Page := Page+1;
      Page_Count;
      Label1.Caption := IntToStr(Page);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
        Page := Page -1;
        Page_Count;
        Label1.Caption := IntToStr(Page);
    end;end.
      

  2.   

    如果dbgrid的可以实现吗?楼上用的是listview
      

  3.   

    直接在sql 中写吧,你既然不想一次显示那么多,那么为什么还要将所有的数据一次性调取到本地呢。很多时候,你将成千上万条数据调取到了本地,用户大多只看了前面的几页而已。