The Power of Firebird Events

Posted by Kamarudin • 3 minute read • Comments

Intro

Judul postingan kali ini saya ambil dari dokumentasi resmi website Firebird dengan sub dokumen White Papers & Presentations.

Sudah lama saya mengetahui adanya fitur keren ini, hanya saja karna waktu itu masih aktif ngoding menggunakan VB Classic jadi saya kurang tertarik untuk mencobanya (habis mau gimana lagi VB Classic memang belum mendukung fitur ini kok :grin:) CMIIW.

Ketika kita diminta untuk membuat aplikasi real time yang akan selalu merefresh data yang ditampilkan, pilihan kita biasanya selalu menggunakan objek timer, thread atau yang sejenisnya untuk selalu mengecek apa ada data baru yang ditambahkan/diperbaiki/dihapus.

Penggunaan objek-objek ini sedikit banyaknya akan memakan resource yang lumayan apalagi untuk aplikasi yang masa aktifnya lama seperti aplikasi sms gateway.

Contoh lain misalnya kita ingin membuat aplikasi sms yang otomatis mengirimkan sms notifikasi ke nomor-nomor tertentu setiap ada data pembelian yang diinputkan.

Jadi dengan memanfaatkan fitur ini kita tidak perlu lagi atau minimal mengurangi ketergantungan terhadap objek-objek timer dan sejenisnya.

Dan sesuai dengan nama fitur ini yaitu “Events”, mungkin sudah terlintas dipikiran kita bahwa fitur ini sangat cocok jika digabungkan dengan fitur Firebird lainnya yaitu Trigger.

Membuat Event

Untuk demo membuat event ini saya menggunakan tool IBExpert dan sudah pernah saya bahas bagaimana cara penggunaan tool ini disini.

Untuk contoh kasus kali ini kita akan menambahkan dua event, masing-masing pada tabel CUSTOMER dan SUPPLIER, adapun struktur tabelnya seperti berikut :

CREATE TABLE SUPPLIER (
    ID      INTEGER NOT NULL,
    NAMA    VARCHAR(30),
    ALAMAT  VARCHAR(30)
);

CREATE TABLE CUSTOMER (
    ID      INTEGER NOT NULL,
    NAMA    VARCHAR(30),
    ALAMAT  VARCHAR(30)
);

Event kita tambahkan pada saat pembuatan trigger, berikut langkah-langkahnya :

  1. Aktifkan salah satu tabel misal Customer, kemudian pilih tab trigger

  2. Klik kanan pada item After Insert

  3. Kemudian lengkapi kode triggernya seperti gambar berikut :

Pada contoh di atas kita menambahkan sebuah event dengan nama NEW_CUSTOMER yang otomatis akan dieksekusi pada saat terjadi proses INSERT pada tabel Customer.

Untuk selanjutnya kita ulangi lagi langkah-langkah diatas untuk menambahkan event dengan nama NEW_SUPPLIER pada tabel Supplier.

Menangkap Event dari Aplikasi

Untuk mendemokan bagaimana menangkap event firebird dari aplikasi, saya menggunakan C# dengan tipe project Windows Application.

C# sendiri tidak otomatis bisa mengakses database firebird tetapi harus menambahkan library FirebirdClient - ADO.NET Data Provider yang bisa didownload disini.

Berikut langkah-langkah untuk menambahkan library FirebirdClient - ADO.NET Data Provider

  1. Klik kanan node References -> Add Reference..

  2. Pilih library FirebirdClient - ADO.NET Data Provider yang sudah didownload kemudian klik Ok

Adapun kode lengkapnya seperti berikut :

using FirebirdSql.Data.FirebirdClient;
private FbConnection conn = null;

public Form1()
{
    InitializeComponent();

    string dbPath = System.IO.Directory.GetCurrentDirectory() + "\\FBEVENT.FDB";
    string server = "127.0.0.1";

    string strCon = "User ID=SYSDBA;Password=masterkey;Database=" + server + ":" + dbPath;
    conn = new FbConnection(strCon);
    conn.Open();

    // mendaftarkan event yang akan ditangkap
    string[] daftarEvent = { "NEW_CUSTOMER", "NEW_SUPPLIER" };
    FbRemoteEvent remoteEvent = new FbRemoteEvent(conn, daftarEvent);

    // proses delegate, untuk mendaftarkan method RemoteEventCounts pada event FbRemoteEventEventHandler
    remoteEvent.RemoteEventCounts += new FbRemoteEventEventHandler(RemoteEventCounts);

    remoteEvent.QueueEvents();
}

private void RemoteEventCounts(object sender, FbRemoteEventEventArgs args)
{
    if (args.Counts == 1)
    {
        switch (args.Name)
        {
            case "NEW_CUSTOMER":
                LoadData("customer", lstCustomer);
                break;

            case "NEW_SUPPLIER":
                LoadData("supplier", lstSupplier);
                break;
        }
    }
}

Yang perlu diperhatikan pada method RemoteEventCounts diatas adalah setiap ada event yang masuk otomatis akan memanggil method LoadData

private void LoadData(string tableName, ListBox lst)
{
    string strSql = "SELECT nama, alamat FROM " + tableName;

    lst.Items.Clear();
    using (FbCommand cmd = new FbCommand(strSql, conn))
    {
        using (FbDataReader dtr = cmd.ExecuteReader())
        {
            while (dtr.Read())
            {
                lst.Items.Add(dtr.GetString(0) + ", " + dtr.GetString(1));
            }
        }
    }
}

Yuph sampe disini sudah selesai, saatnya kita uji coba aplikasi ini.

Demo Menangkap Event

Untuk membuktikan bahwa fitur event ini berfungsi dengan baik, saya akan menambahkan data secara langsung menggunakan tool IBExpert.

Perhatikan gambar awal sebelum perintah INSERT dijalankan.

Setelah saya menjalankan printah INSERT diatas, aplikasi yang saya buat menggunakan C# secara otomatis menampilkan data yang saya inputkan melalui tool IBExpert.

Selamat MENCOBA :blush:

Comments