April 11, 2006

Menggunakan ClientDataSets sebagai In-Memory Tables

Posted in Database at 4:09 pm by haoe

By: Haoe

Target: PEMULA.

Beberapa waktu yang lalu pernah ada member Dephindo yang menanyakan cara menggunakan stringgrid kemudian saya merespon bahwa saya pribadi lebih suka menggunakan in-memory table. Dengan menggunakan in-memory table kita bisa menambah, menghapus, mengurut serta operasi lain layaknya dataset biasa. Kemampuan seperti ini “agak sulit” diimplementasikan dengan menggunakan stringgrid. Saya mengerti masih banyak diantara kita yang berasumsi jika menggunakan in-memory tables maka kita harus menggunakan komponen pihak ke tiga. Seingat saya sdr. Kusnassriyanto (Totok) sempat memberikan respon kalau In-Memory Tables dapat menggunakan ClientDatasets tetapi tidak menjelaskan lebih rinci. Saya pribadi sudah lama menggunakan komponen tersebut dalam proyek-proyek software saya. Belakangan ini ada beberapa email via japri ke saya yang menanyakan hal yang sama, sehingga mendorong saya untuk membahas ClientDataSet ini khususnya bila digunakan sebagai in-memory tables.

Tulisan ini ditujukan untuk pemula jadi saya akan berusaha menjelaskannya dengan bahasa yang se “awam” mungkin.

TClientDataset merupakan bagian dari komponen MIDAS yang mulai diimplementasikan sejak release Delphi yang ke tiga.

untuk membuat Table yang baru, pertama definisikan dulu field-field yang akan dipakai kemudian buat table dengan perintah CreateDataset. Cuplikan source dibawah ini menunjukkan caranya.

uses  MidasLib;

var MyMemTable,MyMemTable2 : TClientDataSet;

MyMemTable:=TClientDataSet.Create(Self);
  MyMemTable.FieldDefs.Clear;
  MyMemTable.FieldDefs.Add('KODE', ftString, 12, False);
  MyMemTable.FieldDefs.Add('GOL', ftString, 5, False);
  MyMemTable.FieldDefs.Add('QTY', ftFloat, 0, False);
  MyMemTable.FieldDefs.Add('HARGA', ftFloat, 0, False);
  MyMemTable.FieldDefs.Add('JUMLAH', ftFloat, 0, False);
  MyMemTable.CreateDataset;
  MyMemTable.Open;

Mengurutkan data adalah pekerjaan yang gampang menggunakan ClientDataSet, cukup menambahkan perintah:

 MyMemTable.IndexFieldNames := 'KODE';

Karena proses pengurutan menggunakan data yang diambil langsung dari memory, maka proses ini bisa berlangsung dalam waktu yang sangat singkat. File index relatif tidak diperlukan kecuali data yang diurutkan dalam skala yang cukup besar atau bila diperlukan urutan menurun (Descending).

Untuk membuat file index gunakan perintah ini:

  MyMemTable.AddIndex('KODEX' ,'KODE', [ixCaseInsensitive]
                     ,'','',0);
  MyMemTable.IndexName := 'KODEX';

Untuk membuat file index dengan urutan menurun:

  MyMemTable.AddIndex('KODEX_DESC' ,'KODE', [ixCaseInsensitive]+
                      [ixDescending],'','',0);
  MyMemTable.IndexNames := 'KODEX_DESC';

Ada kalanya kita ingin melihat dua record yang berbeda pada saat yang bersamaan. Misalnya kita ingin memeriksa duplikasi record pada saat isi kode barang, kode customer, dan sebagainya. Dengan menggunakan ClientDataSet kita dapat mengkloning cusor dataset ke ClientDataSet yang lain dengan perintah:

  MyMemTable2:=TClientDataSet.Create(Self);
  MyMemTable2.CloneCursor(MyMemTable,False,False);
  MyMemTable2.Open;

Perintah diatas tidak mengkloning datanya tapi hanya kursornya, artinya MyMemTable dan MyMemTable2 akan merefleksi pada data yang sama. Kedua ClientDataSet menggunakan memory yang sama, bila kita menambah data di MyMemTable maka data tersebut akan muncul juga di MyMemTable2, begitu juga sebaliknya.

ClientDataSet juga menyediakan fasilitas untuk meyimpan data ke file lokal dan mengambil nya kembali. Gunakan method SaveToFile untuk menyimpan dan method LoadFromFile untuk mengambilnya kembali.

Jangan lupa sertakan MidasLib pada daftar uses atau sertakan file MIDAS.DLL pada aplikasi yang anda deploy. Saya sendiri lebih memilih cara pertama.

March 7, 2006

Hello world!

Posted in Uncategorized at 3:18 am by haoe

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!

Follow

Get every new post delivered to your Inbox.