Pencarian Data Menggunakan Locate pada Delphi
Pencarian Data Menggunakan Locate pada Delphi
Introduksi
Anda mungkin sudah mengetahui bahwa komponen table mempunyai beberapa method yang dapat digunakan untuk mencari data, antara lain : GotoKey, GotoNearest, FindKey, FindNearest, Locate, LookUp, Seek dan lainnya. Penggunaan masing-masing method tergantung dari apa yang anda inginkan, dan ketersediaan indeks pada tabel yang bersangkutan. Khusus untuk metode Locate, bisa digunakan untuk mencari data pada tabel yang tidak memiliki indeks. Tetapi jika tabel memiliki indeks, maka yang digunakan adalah indeks primernya. Menurut pengalaman penulis, mencari data menggunakan Locate ini lebih simple dan fleksible karena dapat digunakan pada BDE, ADO, Interbase, Oracle dan lainnya.
Pembahasan
Untuk lebih memahami pencarian data menggunakan Locate, anda bisa mencoba membuat aplikasi baru seperti berikut ini :
Komponen
Property
Nilai
TADOTable
ConnectionString
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=AK.mdb;Persist Security Info=False
TableName
Guru
Active
True
TdataSouce
DataSet
ibtguru
TDBGrid
DataSource
dsguru
Tedit
Name
EdCari
TSpeedButton
Name
Cari
Caption
&Cari Nip
Dan komponen-komponen lainnya (optional) sehingga terbentuk seperti tampilan form input data guru di bawah ini :
Klik 2 kali pada tombol Cari Nip, kemudian ketikkan listing berikut :
procedure Tguru.cariClick(Sender: TObject);
begin
edcari.Visible:=true;
edcari.SetFocus;
end;
Pada EdCari samping tombol Cari Nip, klik 1 kali. Kemudian pada object inspector pilih events OnKeyPress, setelah itu klik 2 kali pada event tersebut dan ketikkan listing program berikut :
procedure Tguru.EdcariKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
if ibtguru.Locate('nip',edcari.Text,[lopartialkey])=true then
begin
tampildata;
edcari.Visible:=false;
edcari.Text:='';
end
else
begin
showmessage('NIP Yang Anda Cari Tidak Ditemukan');
edcari.Text:='';
end;
end;
Simpan project anda dengan nama sexyloveform.exe, dan coba jalankan.
Keterangan Options yang digunakan :
loCaseInsensitive
Nama field dan nilai yang dicari tidak membedakan antara huruf besar dan huruf kecil.
loPartialKey
Untuk menyatakan bahwa data yang dicari dapat berupa bagian dari nilai pada field atau seluruhnya. Contoh : anda mengisi KeyValues dengan 'Ham', maka 'Hammer' atau 'Hamburger' akan dianggap sama.
Jika option kosong [], maka data yang dicari harus sama dengan data yang diisikan dalam pencarian. Contoh : anda mengisi KeyValues dengan 'Ham', maka hanya 'Ham' yang ditampilkan dan dianggap sama yang lainnya tidak akan ditampilkan.
Database
Database adalah sekumpulan data yang tersimpan didalam sebuah system komputer secara terstruktur. Sebuah database terdiri dari (minimal) satu buah tabel.
Tabel adalah sekumpulan data yang terorganisir dalam bentuk kolom & baris.
Field adalah sekumpulan data yang terbentuk dalam sebuah kolom dengan type data yang sama.
Record adalah sekumpulan data yang merupakan gabungan dari beberapa field sehingga menjadi sebuah informasi yang lengkap.
Untuk menghubungkan database dengan Delphi dapat dilakukan dengan 2 cara mudah yaitu dengan menggunakan :
ODBC (Open DataBase Connection) yang merupakan jembatan untuk menghubungkan database dengan program aplikasi apapun.
OLEDB (Object Linking & Embedding DataBase) merupakan salah satu fasilitas yang dimiliki oleh Delphi untuk mengakses database secara langsung. Sayangnya cara ini hanya dapat dilakukan untuk database Ms. Access.
Setelah mengenal database, mahasiswa akan mempelajari cara untuk menghubungkan database yang telah dibuat dengan Delphi agar data yang ada didalam database dapat tampil pada form Delphi. Untuk itu diperlukan beberapa komponen antara lain :
ADOConnection bertugas untuk menghubungkan program yang dibuat dengan database. Metode yang digunakan dapat dipilih salah satu dari beberapa metode yang telah disediakan (ODBC / OLEDB). Untuk itu property yang harus di set adalah property Connection String (untuk lebih jelas silahkan lihat materi).
Jika komponen ADOConnection1 sudah terhubung dengan database, maka dibutuhkan sebuah komponen lain untuk menghubungkan dengan tabel yaitu ADOTable. Untuk dapat mengakses tabel yang ada didalam database, terlebih dahulu hubungkan property Connection dengan ADOConnection1. Setelah terkoneksi dengan database, maka pilih tabel yang ada di dalam database melalui property TableName.
Jika pada property TableName tidak memunculkan nama tabelnya, maka set property Active menjadi True terlebih dahulu.
Sampai dengan langkah ini maka program (Delphi) sudah terhubung dengan database yang ada. Untuk menampilkan data yang ada kedalam form dibutuhkan komponen DBGrid. Untuk dapat menggunakan komponen ini diperlukan bantuan dari komponen DataSource yang berfungsi sebagai jembatan antara ADOTable dengan DBGrid.
Set property DataSet pada komponen DataSource untuk dihubungkan dengan ADOTable1. Sedangkan pada komponen DBGrid perlu di set property DataSource untuk dihubungkan dengan komponen DataSource1.
Saat ini maka data akan tampil pada form Delphi. Jika tidak, maka ubahlah property Active pada ADOTable1 menjadi TRUE.
Untuk dapat memanipulasi data yang ada dengan cepat dapat menggunakan komponen DBNavigator yang berupa tombol – tombol untuk melakukan manipulasi data yang ada. Untuk dapat menggunakan komponen ini, maka set property DataSource dengan komponen DataSource1.
Di bawah ini akan diajarkan bagaimana cara untuk mengganti DBNavigator dengan menggunakan Button biasa.
Hal pertama yang harus dipahami adalah cara untuk menggerakkan kursor. Perintah perintah yang dapat digunakan antara lain :
First (kursor akan bergerak ke posisi record pertama)
Prior (kursor akan bergerak ke posisi record sebelumnya)
Next (kursot akan bergerak ke posisi record berikutnya)
Last (kursor akan bergerak ke posisi record terakhir)
BOF (Begin Of File) adalah awal dari sebuah file (database) (sebelum record pertama)
EOF (End Of File) adalahakhir dari sebuah file (database) (Setelah record terakhir)
RecNo akan menggerakkan kursor ke arah nomor record yang dituju
Semua perintah diatas merupakan property dari komponen ADOTable.
Setelah memahami tentang bagaimana cara menggerakkan kursor, maka berikutnya adalah menggunakan komponen DBEdit. Komponen ini merupakan turunan dari komponen Edit dimana terdapat beberapa property baru yaitu DataSource dan DataField.
Property DataSource bertugas untuk menghubungkan dengan tabel yang akan dituju. dalam hal ini memerlukan jembatan yaitu komponen DataSource. Sedangkan untuk property DataField berfungsi untuk menghubungkan dengan field yang dituju. Jika setting yang digunakan benar, maka data yang ada didalam database akan muncul pada DBEdit. Perlu diingat bahwa data yang tampil adalah data dimana posisi kursor berada. Jika posisi kursor diubah, maka data yang tampil juga akan berubah.
Jika telah berhasil untuk menampilkan data didalam DBEdit, maka materi dapat dilanjutkan kepada perintah untuk memanipulasi data. Beberapa perintah yang dapat digunakan antara lain :
APPEND (menambahkan baris baru setelah record terakhir)
INSERT (menambahkan baris baru pada posisi kursor berada saat itu)
POST (menyimpan data yang dimasukkan kedalam database)
CANCEL (membatalkan proses penyimpanan data yang dimasukkan kedalam database)
Jadi perintah untuk menyimpan data dapat menggunakan APPEND / INSERT dan diakhiri dengan perintah POST.
Perintah – perintah diatas merupakan bagian dari komponen ADOTable.
Selain perintah diatas, untuk dapat memasukkan data kedalam field yang benar dibutuhkan property FieldByName('nama field') dan diakhiri dengan type data yang akan disimpan (AsString / AsInteger).
Contoh perintah penyimpanan dengan menggunakan InputBox :
procedure TForm1.BtnSIMPANClick(Sender: TObject);
begin
ADOTable1.Append;
ADOTable1.FieldByName('kdbrg').AsString := InputBox('TAMBAH BARANG','KODE BARANG','0 );
ADOTable1.FieldByName('namabrg').AsString := InputBox('TAMBAH BARANG','NAMA BARANG','0 );
ADOTable1.FieldByName('stok').AsInteger := strtoint(InputBox('TAMBAH BARANG','STOK BARANG','0 ));
ADOTable1.FieldByName('harga').AsInteger := strtoint(InputBox('TAMBAH BARANG','HARGA BARANG','0 ));
if MessageDlg('TAMBAHKAN DATA ?',mtConfirmation,mbOKCancel,0) = mrok then
ADOTable1.Post
else
ADOTable1.Cancel;
end;
Pada contoh perintah diatas digunakan perintah Append untuk menambahkan baris baru setelah record terakhir. Kemudian data dari InputBox dimasukkan kedalam field masing – masing sesuai dengan type datanya (String / Integer) dengan menggunakan property FieldByName.
Setelah semua data masuk, program akan melakukan konfirmasi terlebih dahulu dengan cara bertanya kepada pengguna apakah data akan ditambahkan atau tidak. Jika pengguna menekan tombol OK (mrOk) yang artinya YA, maka data akan disimpan dengan menggunakan perintah POST. Dan sebaliknya jika pengguna menekan tombol CANCEL yang artinya membatalkan penyimpanan data, maka proses penyimpanan akan dibatalkan dengan menggunakan perintah CANCEL.
Di bawah ini akan dipelajari bagaimana cara untuk melakukan pencarian data serta menampilkan data tersebut kedalam Edit biasa (bukan DBEdit). Selain itu juga akan dipelajari bagaimana cara untuk melakukan editing data serta deleting.
Hal pertama yang perlu dipahami terlebih dahulu adalah cara untuk menampilkan data pada komponen Edit. Cara yang dilakukan pada dasarnya adalah kebalikan dari proses menyimpan data. Jika pada proses menyimpan data yang ada didalam edit (DBEdit) disimpan kedalam database, maka kali ini adalah kebalikannya. Data yang ada didalam database akan ditampilkan pada Edit.
EdtKDBRG.Text := ADOTable1.fieldbyname('kdbrg').AsString;
EdtNAMA.Text := ADOTable1.fieldbyname('namabrg').AsString;
EdtSTOK.Text := ADOTable1.Fields[2].AsString;
EdtHARGA.Text := ADOTable1.Fields[3].AsString;
Sekali lagi, data yang tampil adalah data pada posisi kursor.
Setelah sukses menampilkan data pada Edit, maka sekarang memasuki hal yang paling vital pada dunia pemrograman dengan menggunakan database yaitu proses pencarian data (searching). Pada dasarnya logika proses pencarian data adalah sebagai berikut :
1. Tentukan data yang dicari (pada edit)
2. Gerakkan kursor menuju record pertama (first)
3. Baca field yang telah ditentukan (misal kdbrg)
4. Bandingkan data yang dicari dengan data yang dibaca dari database
5. Jika sama maka tampilkan semua data
6. Jika tidak sama maka gerakkan kursor ke record berikutnya (next)
7. ulangi langkah – langkah diatas sampai record terakhir (EOF)
Untuk mempermudah proses pencarian, ADOTable memiliki salah satu fungsi pencarian yaitu fungsi LOCATE. Fungsi ini akan mencari pada field yang ditentukan untuk dibandingkan dengan inputan yang diberikan dengan menggunakan metode LoCaseInsensitive atau LoPartialKey. Pada metode LoCaseInsensitive, maka proses pencarian akan mengabaikan huruf kapital (menganggap sama huruf besar dan kecil). Sedangkan pada metode LoPartialKey, proses pencarian dapat dilakukan hanya dengan sebagian karakter saja dari data yang dicari (tidak perlu lengkap).
function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean;
KeyField adalah field dimana pencarian akan dilakukan (dapat lebih dari 1 field)
KeyValues adalah nilai yang dicari (dari Edit)
Options adalah metode yang digunakan (LoPartialKey / LoCaseInsenstive)
Jika pencarian berhasil, maka fungsi ini akan menghasilkan nilai TRUE dan sebaliknya jika pencarian gagal (tidak menemukan data yang dicari) fungsi ini akan mengembalikan nilai FALSE.
JIka proses pencarian sudah berhasil, maka selanjutnya pengguna dapat mengubah maupun menghapus data yang ditemukan.
Untuk melakukan pengubahan data pada dasarnya sama dengan proses penambahan data hanya saja mengganti perintah Append menjadi Edit agar tidak membuat baris baru. Tetap diakhiri dengan perintah POST untuk menyimpan data.
ADOTable1.Edit;
ADOTable1.Fields[2].AsInteger := stokedit;
ADOTable1.Post;
Sedangkan untuk proses penghapusan data cukup dengan menggunakan perintah Delete. Yang perlu diperhatikan dalam menggunakan perintah penghapusan data ini adalah pastikan terlebih dahulu apakah data jadi dihapus atau tidak (buat pertanyaan kepada pengguna). Karena setelah dilakukan proses penghapusan maka data tidak akan dapat dikembalikan lagi.
if MessageDlg('YAKIN MENGHAPUS DATA ' + ADOTable1.Fields[1].AsString + ' ?',
mtConfirmation,mbOKCancel,0) = mrok then ADOTable1.Delete;
Sampai disini semua dasar tentang operasi database telah tersampaikan.
Dibawah inin kita akan mempelajari 3 buah type field.
Pada dasarnya, field yang tampil pada DBGrid (ADOTable) terbagi menjadi beberapa type antara lain :
DATA Field merupakan representasi field fisik yang ada didalam database
CALCULATED Field adalah field yang tampil secara virtual dengan kemampuan untuk melakukan perhitungan melalui event OnCalcField.
LOOKUP Field merupakan field yang tampil secara virtual dengan kemampuan untuk mereferensi kepada field yang lain.
Untuk dapat menggunakan field – field virtual ini, maka buatlah sebuah tabel penjualan dengan field – field sebagai berikut :
TJual
kdjual : number (long integer)
kdbrg : text (5) –> harus sama dengan field kdbrg pada TBarang
jumlah : number (long integer)
kemudian isilah tabel jual tersebut dengan beberapa data (ingat untuk kdbrg harus yang ada pada TBarang)
Untuk menampilkan TJual pada form Delphi tidak lagi membutuhkan ADOConnection karena kedua tabel berada pada database yang sama (ingat fungsi ADOConnection pada pertemuan 1). Jadi komponen yang dibutuhkan mulai dari ADOTable dan seterusnya.
Setelah dapat menampilkan TJual pada form, maka untuk dapat menggunakan virtual field lakukan klik 2x pada komponen ADOTable2. Akan muncul sebuah tampilan berupa window kecil. Lakukan klik kanan pada window tersebut kemudian pilih Add All Fields (atau tekan Ctrl+F).
Semua field yang tampil diatas adalah field yang terdapat secara fisik didalam database. Jika ditampilkan pada form akan kurang menarik karena hanya terdiri dari kdjual, kdbrg dan jumlah saja. Untuk dapat menampilkan Nama Barang tidak perlu untuk menambahkan field barang pada TJual karena akan menyebabkan redundansi (duplikasi) data. Untuk dapat melakukan hal tersebut maka dibutuhkan LOOKUP field.
Untuk menambahkan LOOKUP Field, lakukan klik kanan sekali lagi dengan memilih New Field, maka akan tampil sebuah window baru seperti berikut ini :
Isilah Name dengan nama field yang diinginkan (ingat aturan penamaan field)
Pilih type data yang sesuai pada Type
Tentukan lebar field pada bagian Size (jika diperlukan)
Pada Field Type, pilihlah Lookup. Maka semua pilihan pada Lookup Definiton akan terbuka.
Pilihlah foreign key pada Key Field.
Pilihlah tabel tujuan pada bagian Dataset (dalam hal ini lokasi ADOTable1 & ADOTable2 berlainan sehingga perlu diawali dengan Form1)
Pada bagian Lookup Keys, pilihlah primary key (primary key & foreign key harus identik) pada tabel tujuan.
Pada bagian Result Field, pilihlah nama field yang ingin ditampilkan (dalam hal ini adalah NamaBrg).
Geserlah field baru tersebut ke atas, maka pada DBGrid akan tampil field tersebut.
Lakukan langkah yang sama untuk dapat menampilkan stok barang & harga.
Setelah dapat menggunakan LOOKUP field, sekarang coba menggunakan CALCULATED Field untuk menampilkan subtotal (jumlah x harga).
Untuk dapat membuat sebuah CALCULATED Field, lakukan langkah – langkah yang (hampir) sama dengan membuat LOOKUP Field. Hanya saja pilihlah CALCULATED pada Lookup Definition.
Setelah membuat CALCULATED Field, sekarang carilah event OnCalcField pada ADOTable2.
Tuliskan perintah berikut ini pada event OnCalcField :
procedure TForm2.ADOTable2CalcFields(DataSet: TDataSet);
begin
ADOTable2subtotal.Value := ADOTable1jumlah.AsInteger * ADOTable2harga.AsInteger;
end;
Perintah diatas akan mengisi virtual field SubTotal yang telah dibuat dengan hasil dari perkalian isi field Jumlah & Harga. Perintah ini akan dikerjakan setiap kali komponen ADOTable2 di refresh.
Keuntungan menggunakan virtual field ini antara lain :
1. Jika nama barang pada TBarang berubah, maka nama barang pada DBGrid2 (menampilkan TJual) juga akan berubah karena mereferensi ke field Nama barang pada TBarang tersebut.
2. Jika terdapat perubahan harga barang atau jumlah barang yang dibeli, maka akan langsung terhitung secara otomatis.
Kali ini pokok bahasan yang akan dipelajari adalah tentang SQL (Structured Query Language). Secara singkat, SQL dapat diartikan sebagai bahasa-nya database untuk memenuhi kebutuhan database ter-relasi.
Microsoft Access sebagai salah satu produk database juga memiliki kemampuan untuk penggunaan SQL meskipun pada beberapa bagian "memiliki bahasanya sendiri".
Perintah – perintah yang ada pada SQL dibagi menajadi 2 bagian besar yaitu :
Data Definition Language
Adalah kelompok perintah – perintah yang berguna untuk memanipulasi database (membuat database, membuat tabel dll). Contoh :
Data Manipulation Language
Adalah kelompok perintah – perintah yang digunakan untuk memanipulasi data (menambah data, menghapus data dll)
Untuk dapat menggunakan SQL pada Delphi, dibutuhkan komponen yang bernama ADOQuery. Komponen ini merupakan pengganti komponen ADOTable. Pada komponen ADOQuery ini tidak lagi diperlukan untuk melakukan set tabel, tetapi cukup mengkoneksikan database saja. Karena pada dasarnya dengan menggunakan query, programmer dapat terhubung ke tabel manapun yang diinginkan. Hal ini berarti memudahkan programmer dalam menampilkan data (jika dibutukan dari beberapa tabel sekaligus).
Kemudian perintah SQL dapat diketikkan pada property SQL. Perintah yang ada didalam property ini akan dijalankan setiap kali komponen ADOQuery di refresh.
Didalam Delphi sendiri (ADOQuery), Data Manipulation Language (DML) di bedakan menjadi 2 yaitu perintah yang mengembalikan data (query) dan perintah yang tidak mengembalikan data. Perintah query (SELECT) akan mengembalikan data berupa hasil query, maka seperti dijelaskan diatas hanya perlu dilakukan refresh (dalam hal ini melakukan perintah OPEN). Sedangkan untuk perintah yang tidak mengembalikan data akan dieksekusi dengan menggunakan perintah ExecSQL.
Perintah SELECT memiliki struktur sebagai berikut
SELECT [field] FROM [tabel] WHERE [kondisi]
Untuk menampilkan semua field dapat menggunakan symbol * (bintang).
Perintah SQL untuk memasukkan data baru adalah :
INSERT INTO [tabel] ([field1],[field2] dst) VALUES ([isi field1],[isi field2] dst)
Perintah SQL untuk merubah (edit) record adalah
UPDATE [tabel] SET [field] = [isi] WHERE [kondisi]
Yang perlu diperhatikan dalam melakukan UPDATE data adalah penggunaan KONDISI. Jika KONDISI tidak ditentukan (misal kdbrg = '001 ) maka semua record akan terUPDATE!!.
Perintah SQL untuk menghapus record adalah
DELETE FROM [tabel] WHERE [kondisi]
Dalam melakukan penghapusan data juga harus memperhatikan kondisi. Jika kondisi tidak terisi maka semuadata akan TERHAPUS!!.
Dalam Delphi dikenal berbagai perintah dasar dalam pengelolaan basis data. Pada sesi pemrograman basis data ini, akan dibahas mengenai metode-metode yang terdapat dalam komponen TTable. Diakhir sesi anda akan diberikan contoh pemrograman basis data menggunakan metode-metode pada komponen TTabel untuk pengelolaan record pada suatu tabel. Adapun metode-metode tersebut sebagai berikut:
Metode Append, digunakan untuk menambah record baru.
Metode Post, digunakan untuk mengupdate record baru atau record yang diubah
Metode Cancel, digunakan untuk membatalkan metode Append atau proses pengubahan data sebelum metode Post dilakukan.
Metode Delete, digunakan untuk menghapus record yang aktif.
Metode pada Komponene TTable untuk Menjelajahi record
Dalam basis data dikenal istilah kursor yang merupakan fasilitas yang menunjukkan record yang sedang aktif. Dalam komponen TTable dikenal beberapa metode untuk menggerakan kursor yang dapat digunakan pemakai untuk menjelajahi berbagai record dalam tabel. Adapun Perintah Dasar Pengelolaan basis Data yang berfungsi untuk menjelajahi record, sebagai berikut:
Metode First, digunakan untuk memindahkan pointer kerecord pertama.
Metode Last, digunakan untuk memindahkan pointer kerecord terakhir
Metode Next, digunakan untuk memindahkan pointer kerecord berikutnya
Metode Prior, digunakan untuk memindahkan pointer kerecord sebelumnya