Memperbaiki “bug” property RecordCount pada TIBDataSet

Pada komponen TIBDataSet terdapat property RecordCount, yang merupakan warisan dari class TDataSet.
Namun sayangnya property RecordCount yang ada di TIBDataSet kurang memenuhi kebutuhan informasi yang kita butuhkan.
property RecordCount yang ada di TIBDataSet hanya menampilkan record yang sudah dimuat (fetch row), bukan keseluruhan record hasil query.
Kali ini kita akan melakukan override untuk memperbaiki bug/kelemahan property RecordCount agar sesuai dengan yang kita harapkan.
Berikut ini contoh kodenya …

uses
  SysUtils, Classes, DB, IBCustomDataSet, IBDatabase,
  IBXPlus, DBTables;

type
  // Tambahkan ini ...
  TIBDataSet = class(IBCustomDataSet.TIBDataSet)
  private
    function GetRecordCountPlus: Integer;
  published
    property RecordCount: Integer read GetRecordCountPlus;
  end;
  // Sampai sini .. Tekan Ctrl+Shift C untuk menulis codenya
  Tdm = class(TDataModule)
    db: TIBDatabase;
    tr: TIBTransaction;
    tb: TIBDataSet;

...
...
...
...

{ TIBDataSet }

function TIBDataSet.GetRecordCountPlus: Integer;
var
   s: string;
begin
     s:=SelectSQL.Text;
     System.Delete(s,1,pos('from ',LowerCase(s))-1);
     s:='select count(*) '+s;
     with IBCustomDataSet.TIBDataSet.Create(nil) do
     begin
          Database:=Self.Database;
          SelectSQL.Text:=s;
          Open;
          Result:=Fields[0].AsInteger;
          Close;
          Free;
     end;
end;

Setelah melakukan perbaikan diatas, maka property RecordCount akan menghasilkan informasi sesuai dengan yang kita butuhkan yaitu jumlah record sesuai hasil query.

Semoga bermanfaat

Leave a Reply

Your email address will not be published. Required fields are marked *