+62 812-1171-5379 Fast Respond

Paging Delphi

Paging Delphi

Kalau kita melihat pada tampilan google bagian bawah selalu menampilkan banyak nomor, dari angka 1 sampai 10 dan ada juga firs dan last, itulah yang disebut dengan paging, saya yakin dari beberapa dari teman-teman selalu memperhatikan hal tersebut. ada yang pernah kebayang menggunakan cara tersebut atau perlu gak sih kalau pada delphi ?, selama menggunakan datasource dan data masih berkapasitas kecil mungkin tidak perlu, pertanyaan saya adalah bagaimana cara database yang kita gunakan menggunakan VPS (Virtual Private Server). Nah jawabannya cocok sekali menggunakan paging untuk diterapkan pada data master.

Baik, selanjutnya akan saya demokan cara membuatnya, topik kali ini akan membahas kode seluler yang berada di Jawa Timur :

Silahkan membuat database bernama 'tes_db', dan buat tabel seperti dibawah ini


CREATE TABLE `t_kodearea` (
  `Id_kodearea` int(11) NOT NULL AUTO_INCREMENT,
  `kodearea` varchar(10) DEFAULT NULL,
  `provider` varchar(50) DEFAULT NULL,
  `kota` varchar(50) DEFAULT NULL,
  `propinsi` varchar(50) DEFAULT NULL,
  `status_kodearea` varchar(12) DEFAULT NULL,
  PRIMARY KEY (`Id_kodearea`)
) ENGINE=InnoDB AUTO_INCREMENT=331 DEFAULT CHARSET=latin1;





unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, MemDS, DBAccess, MyAccess, Math,
  ExtCtrls;

type
  TForm1 = class(TForm)
    MyConnection1: TMyConnection;
    MyQuery1: TMyQuery;
    DataSource1: TDataSource;
    MQCariCount: TMyQuery;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    DBGrid1: TDBGrid;
    Panel4: TPanel;
    Edit_Search: TEdit;
    BTSearch: TButton;
    BTFirst: TButton;
    BTBack: TButton;
    BTNext: TButton;
    BTLast: TButton;
    Label2: TLabel;
    CbLimit: TComboBox;
    Label1: TLabel;
    procedure BTSearchClick(Sender: TObject);
    procedure BTFirstClick(Sender: TObject);
    procedure BTLastClick(Sender: TObject);
    procedure BTBackClick(Sender: TObject);
    procedure BTNextClick(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Pagingrecord(nhal: Integer);
  end;

var
  Form1: TForm1;
  Posisiawal, Tothal, Hal, Datatotal: integer;
  FetchRow : integer;

implementation

{$R *.dfm}

procedure TForm1.BTSearchClick(Sender: TObject);
begin
     pagingrecord(0);
end;

procedure TForm1.pagingrecord(nhal: Integer);
var
   i, posisiakhir: Integer;
begin
    Screen.Cursor := crHourGlass;
    if (nhal >= 1) then
    begin
        posisiawal := (nhal - 1) * StrToIntDef(CbLimit.Text, 25);
        hal := nhal;
    end else
    begin
        posisiawal := 0;
        hal := 1;
    end;

    // tampilkan data + limit
    with MyQuery1 do
    begin
        FetchRow := StrToIntDef(CbLimit.Text, 25);
        SQL.Text := ' Select * from t_kodearea ' +
                    ' Where kodearea like :paramsearch or provider like :paramsearch or kota like :paramsearch ' +
                    ' Order by id_kodearea ' +
                    ' Limit :paramoffset, :paramcount';
        ParamByName('paramsearch').AsString := '%' + Edit_Search.Text + '%';
        ParamByName('paramoffset').AsInteger := posisiawal;
        ParamByName('paramcount').AsInteger := StrToIntDef(CbLimit.Text, 25);
        Open;
    end;

    // Mencari total jumlah record, koding dibawah tidak boleh diganti dengan MyQuery1.Recordcount;
    with MQCariCount do
    begin
         SQL.Text := 'select count(*) totrecord from t_kodearea ' +
                     ' Where kodearea like :paramsearch or provider like :paramsearch or kota like :paramsearch ';
         ParamByName('paramsearch').AsString := '%' + Edit_Search.Text + '%';
         Open;
    end;
    datatotal := MQCariCount.Fields[0].AsInteger;

    tothal := Ceil(datatotal / StrToIntDef(CbLimit.Text, 25));
    if hal = tothal then
    Begin
         posisiakhir := datatotal
    End else
    Begin
         posisiakhir := StrToIntDef(CbLimit.Text, 25) * hal;
    End;
    Screen.Cursor := crDefault;
end;

procedure TForm1.BTFirstClick(Sender: TObject);
begin
     pagingrecord(0);
end;

procedure TForm1.BTLastClick(Sender: TObject);
begin
     pagingrecord(Tothal);
end;

procedure TForm1.BTBackClick(Sender: TObject);
begin
     if hal > 1 then
     Begin
          pagingrecord(hal - 1)
     End else
     Begin
          pagingrecord(0)
     End;
end;

procedure TForm1.BTNextClick(Sender: TObject);
begin
     if hal < tothal then
     Begin
          pagingrecord(hal + 1);
     End else
     Begin
          pagingrecord(tothal);
     End;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Grid: TDBGrid;
  Row: integer;
begin
    Grid := sender as TDBGrid;
    Row := grid.DataSource.DataSet.RecNo;

    if Odd(row) then
    Begin
         Grid.Canvas.Brush.Color := $00FFD8B0
    End else
    Begin
         Grid.Canvas.Brush.Color := clWhite;
    End;

    Grid.Canvas.Font.Color := clBlack;
    Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

end.

Tampilkan hasil program seperti dibawah ini

Paging Program