Home > Firebird, Visual C# > The Power of Firebird Events

The Power of Firebird Events

July 23, 2012

Intro

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

Sudah lama sy mengetahui adanya fitur keren ini, hanya saja karna waktu itu masih aktif coding menggunakan VB 6 jadi sy kurang tertarik untuk mencobanya (habis mau gimana lagi vb6 memang belum mendukung fitur ini kok :D) 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 objek2x ini sedikit banyaknya akan memakan resource yg lumayan apalagi untuk aplikasi2x yang masa aktifnya lama seperti aplikasi sms gateway.

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

Jadi dengan memanfaatkan fitur ini kita tidak perlu lagi atau minimal mengurangi ketergantungan terhadap objek2x 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 sy menggunakan tool IBExpert dan sudah pernah sy bahas bagaimana cara penggunaan tool ini disini.

Untuk contoh kasus kali ini kita akan menambahkan dua event, masing2x 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, sy 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, sy akan menambahkan data secara langsung menggunakan tool IBExpert.

Perhatikan gambar awal sebelum perintah INSERT dijalankan.

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

Selamat MENCOBA🙂

  1. hendri
    July 25, 2012 at 6:01 pm

    klo vb6 mank nya tidak bisa om…???

    • July 25, 2012 at 6:32 pm

      Setau sy enggak bisa om, dulu sy pernah mencoba jg utk mencari library tambahan untuk memanfaatkan fitur ini di VB6 tapi belum ketemu.

  2. fajrin_zamzam
    July 25, 2012 at 6:09 pm

    Waah… saya belum pernah nyoba firebird ni om… kyknya bagus jg…
    Klo mySQL bisa jg om menangkap event seperti firebird ini???

    • July 25, 2012 at 6:35 pm

      Iya om, kita tunggu aja versi terbaru MySQL mana tau support😀

  3. hendri
    July 25, 2012 at 8:38 pm

    owh…sip om..
    update terus om ttg coding vb…😀
    d tunggu update selanjut nya…

    • July 26, 2012 at 9:55 am

      Oke om ditunggu aja😀

  4. July 31, 2012 at 1:34 pm

    di mysql lom ada ya mas ??

    • August 4, 2012 at 9:47 am

      Kayax e belum ada om.

  5. fajrin_zamzam
    October 6, 2012 at 12:07 pm

    om… klo di vb.net gimana ya caranya??? saya udah ngikutin cara diatas tetap ga bisa… help om…

    • fajrin_zamzam
      October 6, 2012 at 12:08 pm

      yg ga bisa di -> remoteEvent.RemoteEventCounts += new FbRemoteEventEventHandler(RemoteEventCounts);

      konversi ke code vb.net nya gimana ya om???

      • October 6, 2012 at 12:26 pm

        Coba gini om :

        Private Sub RemoteEventCounts(ByVal sender As Object, ByVal args As FbRemoteEventEventArgs)
            If (args.Counts = 1) Then
                Select Case args.Name
                    Case "NEW_CUSTOMER"
                        Call LoadData("customer", lstCustomer)
                    Case "NEW_SUPPLIER"
                        Call LoadData("supplier", lstSupplier)
                End Select
            End If
        End Sub
        
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim remoteEvent As New FbRemoteEvent(conn, daftarEvent)
        
            AddHandler remoteEvent.RemoteEventCounts, AddressOf RemoteEventCounts
        End Sub
        
        • fajrin_zamzam
          November 16, 2012 at 8:41 pm

          Makasih gan…. ane mau nanya selain firebird, software database yang lain ada ga yang bisa seperti ini???? SQL SERVER bisa gan???

          • January 2, 2013 at 11:05 am

            Monggo dicek sendiri om😀

  6. Iseng aja nanya... bukan ngetest (serius)
    December 1, 2012 at 7:14 pm

    om pertanyaan iseng neeh seperti MySQL X64/X32 Ato Firebird X64/X32
    misalkan saya pake Mysql X64 tapi menggunakan mysql odbc32 dan setelah di coba jalan…. tapi ada pengaruh ga di resultnya ?

    • January 2, 2013 at 11:08 am

      Setau sy perbedaan 32bit dan 64 bit itu salah satunya optimalisasi dalam penggunaan memory, klo yg perbedaan yg lain kayaxnya harus konsultasi dulu ke mbah google nih😀

      Klo maksud result disini adalah hasil perintah SELECTnya ya jelas sama enggak ada perbedaaan

  7. jordan
    December 18, 2012 at 3:13 pm

    om admin, ikut tanya?? sory saya pemula, saya install firebird 2.0. ketika mau ganti user default ‘SYSDBA’ tapi kok password ‘masterkey’ nya invalid ya? sudah beberapa kali install ulang tetep password deafult ‘masterkey’ nya invalid. bagaimana cara mengatasinya master? mohon pencerahan.

    • fajrin_zamzam
      December 18, 2012 at 11:26 pm

      bantu jawab ya om admin…. coba passwordnya pake masterkeys bukan ‘masterkey’

  8. jordan
    December 19, 2012 at 11:59 am

    tetep invalid gan, ane pake win7. apa bener kalo pake win7 firebird nya agak rewel? bingung nih gan, mohon pencerahannya.

    • January 2, 2013 at 11:14 am

      Sy udah lama pake firebird om mulai dari versi 1x sampai sekarang enggak pernah bermasalah.

      Coba diuninstall dan install ulang lagi firebirdnya, yg jelas dari dulu password defaultnya SYSDBA itu ya maskterkey.

  9. Vika
    April 18, 2013 at 4:22 am

    kalo utk pembuatan hal seperti diatas menggunakan VB6 , apa saja yg perlu dipersiapkan Pak?

  10. Vika
    April 18, 2013 at 4:23 am

    kalo utk pembuatan hal seperti diatas menggunakan VB6 (aplikasi service), apa saja yg perlu dipersiapkan Pak?

    • April 18, 2013 at 10:54 am

      Utk VB6 belum mendukung penggunaan firebird event

      CMIIW

  11. Choirul Akmal
    August 27, 2013 at 8:40 pm

    Om Admin, kalau menangkap event ke dalam system windows sehingga memunculkan notifikasi berupa popup windows bagaimana y

  12. August 28, 2013 at 9:18 am

    Lebih rincinya event yg mana om ? Apakah Event Viewer ?

    • Choirul Akmal
      August 29, 2013 at 9:35 am

      yup semacam itu, intinya event yg dicreate di firebird akan muncul juga sebagai popup message di windows. thanks sebelumnya

  13. fajrin zamzam
    January 22, 2014 at 11:22 pm

    om admin… ini artinya koneksinya harus terus dibuka ya???
    klo koneksinya dibuka terus apa ga bikin lambar jaringan pada aplikasi multi user/client???

  14. fajrin zamzam
    March 21, 2014 at 2:51 am

    om admin… ini artinya koneksinya harus terus dibuka ya???
    klo koneksinya dibuka terus apa ga bikin lambat jaringan pada aplikasi multi user/client???

    • March 21, 2014 at 6:23 am

      Source code udah ada, trus kenapa om enggak nyoba sendiri ?😀

      Rekomendasinya adalah buka-tutup-koneksi ketika membuat aplikasi di .NET, apakah Firebird Events mendukung ini ?🙂

      Saya udah nyoba kok om, tp jawabannya sy simpan dulu, nunggu om nyoba sendiri😀

  1. April 16, 2014 at 9:15 am
Comments are closed.
%d bloggers like this: