Anda di halaman 1dari 112

Hendra Suprayogi, S.Kom.

Ronny Susetyo Irfan Hartono

Modul Praktikum

PEMROGRAMAN DELPHI
Antarmuka Borland Delphi 7

Sekolah Tinggi Informatika dan Komputer Indonesia 2008

Winner vs. Looser


Winner is always a part of solutions Looser is always a part of problems Winner sees answer in every problem Looser sees problem in every answer Winner always has a program Looser always has an excuse Winner always says, Its difficult, but its possible. Looser always says, Its possible, but its difficult.

Kata Pengantar

ascal merupakan salah satu bahasa pemrograman yang ter-kenal dengan kekuatan strukturnya. Selain itu didukung pu-la dengan kemudahannya untuk digunakan, sehingga menjadi pilihan yang patut diperhitungkan dalam dunia pemrograman. Kecepatan penjalanan program yang dihasilkannya juga menjadi salah satu daya saing mengapa Pascal terus berkembang hingga saat ini dengan berbagai bentuk, sampai terakhir pada bentuk OOP (object oriented programming) dan visual. Delphi merupakan versi visual dari Pascal, yang mana me-rupakan topik utama yang dibahas dalam modul praktikum ini. Modul praktikum ini merupakan yang pertama disusun karena pertama kali ini pulalah mata kuliah Pemrograman Del-phi diadakan di Sekolah Tinggi Informatika dan Komputer In-donesia. Pada terbitan ini penyusun telah memperbaiki susunan, bahasa, gaya, dan jenis huruf yang dipakai sehingga meningkat-kan derajat keterbacaan modul praktikum ini. Modul praktikum ini dihadirkan kembali pada tahun 2008, dengan bantuan dua asisten dosen di laboratorium STIKI, yaitu Ronny Susetyo dan Irfan Hartono. Penyusun berharap semoga Modul Praktikum Pemrogram-an Delphi ini dapat bermanfaat bagi semua pihak, terutama bagi yang mengambil mata kuliah Pemrograman Delphi di Sekolah Tinggi Informatika dan Komputer Indonesia. Namun begitu tidaklah masuk akal bila menganggap modul ini sudah sempurnaterutama karena memang tidak ada satu-pun yang sempurna. Tinjauan dan saran yang bersifat memba-ngun tetaplah sangat diharapkan demi peningkatan kesempur-naan modul praktikum ini, bukannya kesempurnaan itu sendiri.

Malang, Maret 2008 Penyusun

Daftar Isi
Winner vs. Looser.....................................................................ii Kata Pengantar.........................................................................iii Daftar Isi.....................................................................................v Pengenalan Borland Delphi dan Penyuntingan Form............1 Borland Delphi.........................................................................1 IDE Borland Delphi..................................................................3 Main Window............................................................3 Main Menu.............................................................4 Speed Buttons.......................................................4 Component Palette................................................4 Code Editor...............................................................4 Form Designer..........................................................5 Object Inspector.......................................................6 Pengenalan Organisasi Program Borland Delphi.....................7 Project Files (*.DPR) dan Unit Files (*.PAS)................8 Form Units.............................................................8 Component Units...................................................9 Common Units.......................................................9 Form Files (*.DFM)....................................................9 Resource Files (*.RES)..............................................9 Project Options Files (*.DOF) dan Desktop Settings Files (*.DSK)..............................................................9 Backup Files (*.~DP, *.~DF, *.~PA)........................10 Berkas Jenis Lain ....................................................10 Executable Files (*.EXE).......................................10 Object Unit Files (*.DCU)......................................10 Dynamic Link Library Files (*.DLL).......................11 Help Files (*.HLP).................................................11 Image Files (*.WMF, *.BMP, *.ICO).......................11 Perancangan Form................................................................11

Penambahan Komponen.........................................12 Contoh Aplikasi......................................................................12 Tugas Aplikasi........................................................................14 Tugas 1.1................................................................14 Tugas 1.2................................................................15 Events dan Event-Handlers....................................................16 Event yang dimiliki Komponen...............................................17 Contoh Aplikasi......................................................................18 Hal-hal yang harus Diperhatikan............................................23 Tugas Aplikasi........................................................................25 Tugas 2.1................................................................25 Tugas 2.2................................................................26 Tugas 2.3................................................................26 .............................................................................26 Exceptions...............................................................................27 Try-except..............................................................................27 Try..finally...............................................................................28 Contoh Aplikasi......................................................................30 Properti Tag...........................................................................34 Tugas Aplikasi........................................................................37 Tugas 3.1................................................................37 Tugas 3.2................................................................39 Tugas 3.3................................................................39 .............................................................................39 VCL Standar dan Timer...........................................................40 Contoh Aplikasi......................................................................42 Tugas Aplikasi........................................................................49 Tugas 4.1................................................................49 Tugas 4.2................................................................49 Tugas 4.3................................................................50 Koneksi Database menggunakan ADO.................................51 Arsitektur Database pada Delphi menggunakan ADO...........52 Microsoft Access....................................................................53

Membuat Tabel.......................................................54 Mendefinisikan Hubungan.......................................56 Open Database Connectivity.................................................58 Membuat Data Source............................................59 Membuat Berkas DSN.............................................61 Datasets (Koneksi ADO)........................................................63 TADOConnection.....................................................64 ConnectionString.................................................64 LoginPrompt........................................................66 TADOTable..............................................................67 Connection..........................................................67 TableName..........................................................67 Active..................................................................67 TADOQuery.............................................................67 Connection..........................................................68 SQL......................................................................68 Parameters..........................................................68 Active..................................................................68 Data Sources.........................................................................68 TDataSource...........................................................68 DataSet...............................................................69 Data Controls.........................................................................69 DataSource..........................................................69 DataField.............................................................69 TDBGrid..................................................................70 TDBNavigator.........................................................70 TDBText..................................................................70 TDBEdit...................................................................70 Contoh Aplikasi......................................................................70 Tugas Aplikasi........................................................................72 Tugas 5.1................................................................72 Medan-medan Semu dan Pengesahan Data.........................73 Jenis-jenis Medan dalam Datasets........................................74

Medan Data (Data Fields)....................................74 Medan Pengunjung (Lookup Fields).....................74 Medan Terhitung (Calculated Fields)...................74 Fields Editor............................................................74 Menghitung Medan Terhitung................................................77 OnCalcFields........................................................77 Rekayasa Tampilan Medan...................................................78 DisplayLabel........................................................78 DisplayFormat.....................................................78 DisplayWidth.......................................................78 Visible..................................................................79 Pengesahan Data..................................................................79 BeforePost ..........................................................79 OnPostError.........................................................79 OnDeleteError......................................................80 Referensi Tambahan.............................................................80 First, Prior, Next, dan Last...................................80 EnableControls dan DisableControls....................81 Eof dan Bof..........................................................81 RecordCount........................................................81 FieldByName.......................................................81 Contoh Aplikasi......................................................................82 Tugas Aplikasi........................................................................84 Tugas 6.1................................................................84 Hubungan Master-Detail dan Data Controls Tambahan......85 Mendefinisikan Hubungan Master-Detail...............................85 Data Controls Tambahan.......................................................87 TDBRadioGroup......................................................87 TDBCheckBox.........................................................88 TDBListBox.............................................................88 TDBComboBox........................................................88 TDBLookupListBox..................................................88 TDBLookupComboBox.............................................89

TDBMemo...............................................................89 TDBImage...............................................................89 Contoh Aplikasi......................................................................89 Tugas Aplikasi........................................................................90 Tugas 7.1................................................................90 Query........................................................................................92 Structured Query Language...................................................92 Data Manipulation Language..................................93 Query yang Menampilkan Hasil (SELECT)............93 Query yang Mengubah Data pada Tabel (INSERT, UPDATE, dan DELETE).........................................96 Perintah INSERT...........................................................96 Perintah UPDATE.........................................................96 Perintah DELETE..........................................................97 Data Definition Language.......................................98 Menggunakan TADOQuery....................................................98 SQL.........................................................................98 Parameters.............................................................99 DataType.............................................................99 Value...................................................................99 Menjalankan Query.................................................99 Open..................................................................100 ExecSQL............................................................100 Mengakses Hasil Query.........................................100 FieldByName.....................................................100 Contoh Aplikasi....................................................................101 Tugas Aplikasi......................................................................102 Tugas 8.1..............................................................102 Daftar Pustaka.......................................................................103

Modul

1
Pengenalan Borland Delphi dan Penyuntingan Form
Borland Delphi

elphi adalah versi visual dari Pascal. Berbagai kemudahan ditawarkan oleh Delphi, mulai dari perancangan aplikasi berbasis form, kemudahan pemberian komponen visual, reka-yasa property dan event yang tergabung melalui object inspector, sampai code insight (ada pada Delphi 3 ke atas). Selain itu, dukungan penuh diberikan kepada struktur baha-sa pemrograman yang digunakan, dengan memberikan migrasi dari Bahasa Pascal menjadi Bahasa Pascal Objek (Object Pascal Language). Dengan demikian, cara pemrograman sudah lain bila dibandingkan dengan Pascal yang lama. Migrasi struktur bahasa pemrograman tersebut dimaksud-kan untuk lebih mendekatkan kepada konsep pemrograman berorientasi objek, yang telah lama dimiliki oleh Bahasa Pemro-graman C++. Namun ciri khas bahasa Pascal yang mudah dipa-hamiterutama oleh pemulatetap merupakan kelebihan Pas-cal yang utama. Paduan ini membuat Delphi lebih mudah dipelajari (dari segi struktur bahasanya) daripada kompilerkompiler lainnya.

Modul I - Pengenalan Borland Delphi Gamba r 1.1: Contoh tampila n IDE Delphi.

1-2

Dengan cara perancangan aplikasi secara visual, maka apli-kasi-aplikasi Delphi mudah sekali dikembangkan, karena segala yang akan ingin ditampilkan dapat terlihat secara visual pada saat merancang aplikasi tersebut. Salah satu lagi kelebihan Delphi adalah kemampuan data-base-nya yang mendukung hampir semua jenis database, mulai dari yang bersifat local hingga client/server. Ditambah lagi de-ngan kelengkapan koneksi ADO (ActiveX Data Object) yang me-rupakan standar dari Microsoft, menambah integrasi aplikasi yang dikembangkan oleh Delphi dengan sistem operasi Micro-soft Windows. Selain itu disediakan pula versi Delphi khusus untuk sistem operasi Linux, yaitu Borland Kylix.

Modul I - Pengenalan Borland Delphi

1-3

IDE Borland Delphi

ebagai bahasa pemrograman yang bersifat visual, terdapat be-berapa peningkatan IDE Delphi dari IDE Turbo Pascal. Bila dalam IDE Turbo Pascal, pemrogram dapat melakukan coding, kompilasi, menjalankan program, dan debugging hanya dalam satu lingkungan terpadu, maka terdapat beberapa tambahan pa-da IDE Delphi. Tambahan utama yang ada meliputi tempat untuk form de-signer dan object inspector. Ada empat bagian utama pada IDE Delphi, yaitu main win-dow, code editor, form designer, dan object inspector.

Main Window
Main window (window utama) adalah sebuah window yang ter-dapat pada bagian atas setiap kali Delphi dijalankan. Main win-dow berisi menu-menu utama dari IDE Delphi, selain juga berisi komponen-komponen yang digunakan dalam membuat sebuah project.
Gamba r 1.3: Contoh Main Window .

Pada main window masih terdapat beberapa elemen yang di-gunakan untuk melakukan pemrograman pada Delphi. Bebera-pa elemen tersebut antara lain main menu, speed buttons, dan com-ponent pallete.

Modul I - Pengenalan Borland Delphi

1-4

Main Menu
Main menu merupakan menu utama yang digunakan untuk me-milih perintah-perintah dalam IDE Delphi. Main menu berada pada posisi teratas dalam main window.

Speed Buttons
Speed buttons merupakan tombol-tombol yang gunanya sama de-ngan main menu. Hanya saja bila dengan main menu diperlukan masuk berkali-kali dalam sub-menu, tetapi untuk beberapa perin-tah tertentu yang sering dipakai akan dapat dieksekusi dengan cepat menggunakan speed buttons tersebut, yaitu dengan klik pa-da salah satunya. Speed buttons berada pada posisi kiri bawah dari main win-dow.

Component Palette
Component palette adalah sebuah palet yang berisi daftar kompo-nen yang bisa digunakan dalam form aplikasi Delphi. Ada bebe-rapa tab pada component palette, dan pemrogram harus memilih-nya terlebih dahulu sebelum menggunakan komponen yang ada di dalam setiap tab tersebut. Component palette berada bawah dari main window. pada bagian kanan

Semua komponen yang ada pada Delphi ataupun tambahan yang bisa di-download dari internet disebut dengan VCL (visual component library). Meskipun begitu, ada beberapa yang benar-benar visual maupun yang non-visual.

Code Editor
Code editor adalah sebuah window yang digunakan untuk me-nyunting kode program, di mana pemrogram melakukan coding. Code editor juga terdapat pada IDE Turbo Pascal.

Modul I - Pengenalan Borland Delphi Gambar 1.4: Contoh Code Editor.

1-5

Form Designer
Inti perancangan aplikasi secara visual terdapat pada form de-signer. Dalam form designer, pemrogram dapat merancang bagai-mana sebuah form nantinya akan tampil dan berinteraksi de-ngan pemakai.

Modul I - Pengenalan Borland Delphi Gambar 1.5: Contoh Form Designer.

1-6

Sebuah form dapat berisi beberapa komponen yang diambil dari tab-tab komponen yang terdapat pada main window. Bebe-rapa komponen visual dapat langsung ditentukan posisi dan ukurannya hanya dengan melakukan drag-drop mouse pada kom-ponen yang bersangkutan.

Object Inspector
Dalam Delphi, komponen-komponen yang ada pada form (baik komponen visual maupun non-visual) memiliki beberapa proper-ti (property) dan event. Properti menggambarkan sifat dari komponen tersebut. Se-bagai contoh, properti Width menunjukkan lebar dari komponen tersebut. Sedangkan event merupakan kejadian-kejadian yang terjadi dan nantinya ditanggapi oleh pemrogram. Kode-kode untuk menaggapi kejadian tersebut dinamakan event-handler.

Modul I - Pengenalan Borland Delphi Gambar 1.6: Contoh Object Inspector.

1-7

Object inspector merupakan sebuah window untuk merekaya-sa properti dan event dari beberapa komponen tersebut. Terda-pat dua tab pada object inspector, yaitu tab properties dan tab events.

Pengenalan Organisasi Program Borland Delphi

elphi tidak hanya menyimpan berkas kode dengan ekstensi PAS, tetapi karena pada Delphi juga terdapat form beserta parameternya, maka ada beberapa berkas yang akan disimpan. Untuk memudahkan, sebuah program disebut dengan sebuah project. Project tersebut akan berisi form, source code untuk form, dan source code untuk project. Untuk sebuah form akan diberi sebuah unit, yang akan ber-isi kode-kode program untuk merekayasa form tersebut, teruta-ma untuk events yang dimiliki oleh form tersebut. Berikut ini berkas-berkas disimpan oleh Delphi: yang dihasilkan dan

Modul I - Pengenalan Borland Delphi

1-8

Project files (*.DPR), yaitu source code sebuah project pada Delphi. Setiap kali aplikasi pada Delphi dirancang, ma-ka akan terdapat satu project. Form files (*.DFM), yaitu text files atau binary files yang berisi informasi tentang sebuah form. Unit files (*.PAS), yaitu source code untuk unit. Setiap kali sebuah form dirancang maka akan diberikan sebuah berkas unitnama berkas keduanya sama, hanya eks-tensinya berbeda. Tetapi berkas unit dapat berdiri sendi-ri seperti halnya pada Turbo Pascal tanpa korespondensi sebuah form.

Ada beberapa berkas lain yang ada pada sebuah project, se-macam resource files (*.RES), berkas konfigurasi (*.CFG), berkas untuk options (*.DOF), hasil kompilasi unit (*.DCU), dan lain-lain. Bila sebuah project akan disalin antar media, maka semua berkas yang ada pada project directory harus disertakan.

Project Files (*.DPR) dan Unit Files (*.PAS)


Project files dipakai untuk menyimpan informasi mengenai form dan unit. Berkas tersebut berisikan inisialisasi form utama dan form-form lain yang dibuat secara otomatis. Sedangkan unit files dipakai untuk menyimpan program. Ada 3 jenis unit yaitu form units, component units dan common units.

Form Units
Form units dibuat secara otomatis oleh Delphi, yaitu satu unit untuk setiap form yang dibuat. Sebuah unit tidak dapat mempu-nyai lebih dari satu form yang didefinisikan di dalamnya.

Modul I - Pengenalan Borland Delphi

1-9

Component Units
Component units dibentuk pada saat mulai membuat sebuah komponen baru. Biasanya pembuatan komponen baru ini meru-pakan pekerjaan ahli dan jarang dilakukan oleh pemrogram bia-sa. Pembuatan komponen baru bukan berarti membuat yang benar-benar baru, karena sifat dari OOP itu sendiri. Pembuatan-nya adalah dengan cara menurunkan komponen yang sudah ada.

Common Units
Common units dibuat untuk tipe data, peubah, prosedur, fungsi, atau kelas yang dapat digunakan dan diaplikasikan. Unit ini adalah unit seperti pada Turbo Pascal.

Form Files (*.DFM)


Form files adalah berkas biner yang dibuat Delphi untuk me-nyimpan informasi yang berkaitan dengan form dan setiap form mempunyai sebuah unit file (*.PAS).

Resource Files (*.RES)


Resource files merupakan berkas biner yang berisi icons yang di-gunakan oleh project. Berkas ini secara terus menerus diubah oleh Delphi setiap kali pemrogram melakukan perubahan pada project-nya (termasuk mengubah form, unit, atau options dalam project tersebut).

Project Options Files (*.DOF) dan Desktop Settings Files (*.DSK)


Project options files dan desktop settings files terbentuk secara otomatis pada saat menyimpan project. Project options files merupakan berkas yang berisi options dari suatu project yang dinyatakan melalui

Modul I - Pengenalan Borland Delphi

1-10

pilihan Project|Options. Berkas ini tersimpan pada saat menyimpan project. Sedangkan desktop setting files berisi options yang dinyatakan melalui pilihan Tools| Environment Options. Project options files dimiliki oleh setiap project sedangkan desktop settings files dipakai untuk lingkungan Delphi. Kerusakan yang terjadi pada kedua jenis berkas tersebut da-pat mengganggu proses kompilasi. Untuk menangani gangguan tersebut adalah dengan menghapus kedua jenis berkas tersebut.

Backup Files (*.~DP, *.~DF, *.~PA)


Berkas dengan ekstensi ~DP, ~DF, dan ~PA merupakan berkas cadangan (backup) dari sebuah project yang berisi salinan terakhir dari berkas utama sebelum disimpan lebih lanjut.

Berkas Jenis Lain


Selain berkas-berkas tersebut di atas, masih ada beberapa berkas yang dikelompokkan sebagai berkasberkas lain karena tidak dibutuhkan secara langsung oleh project.

Executable Files (*.EXE)


Executable files (*.EXE) dibentuk oleh kompiler dan merupakan berkas eksekusi dari program aplikasi. Berkas inilah yang bisa dijalankan dari lingkungan Windows secara langsung sebagai aplikasi.

Object Unit Files (*.DCU)


Object unit files (*.DCU) merupakan berkas unit yang telah di-kompilasi oleh kompiler yang akan dihubungkan dengan berkas eksekusi. berkas ini analog dengan TPU

Modul I - Pengenalan Borland Delphi

1-11

pada Turbo Pascal. DCU merupakan singkatan dari Delphi Compiled Unit.

Dynamic Link Library Files (*.DLL)


Dynamic link library files (*.DLL) dibentuk oleh kompiler apabila merancang sebuah library. Sebuah library merupakan kepus-takaan yang dapat digunakan oleh semua aplikasi yang berjalan di bawah sistem operasi Microsoft Windows. Dengan menggunakan library, maka program Windows da-pat diubah tampilan atau di-update fungsifungsinya tanpa harus mengkompilasi program itu sendiri, tapi cukup mengganti ber-kas library tersebut pada sistem Windows.

Help Files (*.HLP)


Help files (*.HLP) merupakan berkas Windows dan merupakan berkas pertolongan standar yang dapat dipakai di program apli-kasi Delphi.

Image Files (*.WMF, *.BMP, *.ICO)


Image files (*.WMF, *.BMP, *.ICO) merupakan berkas Win-dows dari program aplikasi selain Delphi yang menyimpan gambar-gambar untuk mendukung program aplikasi yang dirancang agar tampak lebih informatif dengan pemakai.

Perancangan Form

orm pada Delphi dapat dirancang dengan cara mengubah properti-properti pada form tersebut, semisal properti Width untuk menyatakan lebar form, properti Caption untuk menyata-kan judul dari form tersebut, dan lain-lain. Untuk mengetahui properti-properti yang ada dan sekaligus mengubah nilainya, tekan tombol F11. Tombol tersebut akan melakukan switching antara form

Modul I - Pengenalan Borland Delphi

1-12

designer dengan object inspector. Sedangkan untuk melakukan switching form designer dengan code editor dapat dilakukan dengan menekan tombol F12. Selain itu, untuk beberapa properti dapat diubah dengan cara drag-drop mouse pada beberapa posisi form tersebut. Sebagai contoh, pemrogram dapat memindahkan posisi form tersebut dengan drag pada bagian Caption. Selain itu, pemrogram juga dapat mengubah ukuran form tersebut dengan melakukan drag pada sisi-sisi form tersebut.

Penambahan Komponen

ntuk melakukan penambahan komponen, dapat dilakukan dengan cara memilih (klik) pada salah satu komponen pada component palette, kemudian klik pada tempat yang diinginkan pada form. Selain itu, bisa juga dilakukan dengan cara klik pada salah satu komponen pada component palette dan melakukan drag pada tempat tertentu pada form yang berfungsi sekaligus untuk me-nentukan tempat dan ukuran dari komponen tersebut.

Contoh Aplikasi
Berikut ini pada gambar 1.7 merupakan form yang telah terisi beberapa komponen.

Modul I - Pengenalan Borland Delphi Gambar 1.7: Perancangan form untuk contoh aplikasi.

1-13

Semua VCL yang ada pada form tersebut diambil dari tab standard. Komponen TLabel, TEdit, TButton, TCheckBox, TRadio-Button, TGroupBox, dan TComboBox merupakan komponen visual yang telah diambil dari tab standard. Sedangkan TMainMenu dan TPopupMenu merupakan komponen non-visual. Ubahlah beberapa properti dari beberapa komponen yang ada di form tersebut, sehingga menghasilkan tampilan seperti pada gambar 1.7. Selanjutnya, pada folder kerja Anda (ingat untuk mengganti folder sebelum melakukan penyimpanan) simpanlah unit terse-but dengan nama UnitDataCalonTKI, dan simpan project terse-but dengan nama LatihanPertama.

Modul I - Pengenalan Borland Delphi

1-14

Tugas Aplikasi
Tugas 1.1
Rancanglah sebuah form seperti pada gambar 1.8. Komponen-komponen yang diperlukan semuanya masih berada pada tab standard, dan di antaranya adalah TLabel, TEdit, TButton, dan TPanel.
Gambar 1.8: Perancanga n form untuk tugas 1.1.

Berilah nama (ubah properti Name) komponenkomponen tersebut sebagai berikut: Ketiga komponen TEdit dengan nama (urut dari atas) EditNRP, EditNama, dan EditAlamat. Komponen TButton yang memiliki Caption OK dengan nama ButtonOK, dan yang memiliki Caption Cancel dengan nama ButtonCancel. Komponen TPanel yang ada di bawah dengan nama Pa-nelTampil.

Selanjutnya, pada folder kerja Anda (ingat untuk mengganti folder sebelum melakukan penyimpanan) simpanlah unit terse-but dengan nama UnitPertama, dan simpan project tersebut de-ngan nama TugasPertama.

Modul I - Pengenalan Borland Delphi

1-15

Tugas 1.2
Rancanglah sebuah form seperti pada gambar 1.9. Kali ini de-ngan hanya melihat sekilas dari form tersebut, tentukanlah sen-diri komponen yang harus dipilih, sekaligus properti tiap kom-ponen dalam form tersebut.
Gambar 1.9: Perancanga n form untuk tugas 1.2.

Semua komponen merupakan komponen visual yang berada pada tab standard.

Modul

2
Events dan Event-Handlers

elphi merupakan sebuah bahasa pemrograman dengan sifat event-driven. Berbeda dengan Pascal yang memiliki sifat prosedural, Delphi tidak menjalankan program secara berurutan dari awal hingga akhir, melainkan menunggu terjadinya event (kejadian). Event itu sendiri akan terpacu oleh beberapa macam keadaan, sesuai dengan nama dan tujuan dari event tersebut. Event sendiri merupakan suatu properti yang memiliki nilai sebuah pointer yang menunjuk ke sebuah prosedur. Sedangkan prosedur yang ditunjuk tadi disebut dengan event-handler. Tugas pemrogram yang sifatnya mengetikatau sering juga disebut dengan codingdilakukan untuk mengisi event-handler tersebut. Untuk melihat event yang ada pada sebuah komponen, da-pat dilihat pada object inspector pada tab events (ada dua tab pada object inspector, yang pertama adalah tab properties dan yang ke-dua tab events). Karena salah satu sifat dari Delphi adalah eventdriven, maka pemrogram, terutama pemrogram yang terbiasa memakai Turbo Pascal, harus meninggalkan kebiasaannya merancang program yang bersifat prosedural menjadi event-driven.

Modul II Events dan Event-Handlers

2-17

Bila gaya pemrograman prosedural adalah melakukan pem-rograman mulai dari awal hingga akhir secara berturutan, maka gaya pemrograman eventdriven adalah hanya menulis kode pro-gram untuk memerintahkan komputer mengerjakan suatu hal tertentu bila terjadi suatu event tertentu. Semisal bila suatu komponen TButton diklik dengan mouse, maka event OnClick akan timbul. Dan bila event tersebut berisi dengan event-handler yang diketik oleh pemrogram, maka event-handler yang diketik pemrogram tadi akan dijalankan. Tetapi bi-la event tersebut kosong (bernilai nil) maka tidak akan dikerjakan apapun. Satu contoh lain, bila sebuah komponen TEdit diubah isinya (properti Text-nya berubah) maka akan timbul event OnChange.

Event yang dimiliki Komponen

ampir semua komponenyang tergabung dalam VCL (vi-sual component library)memiliki event. Event tersebut tim-bul dalam kejadian yang berbedabeda. Nama dari event tersebut menggambarkan kejadian yang timbul. Sebagai contoh, berikut ini beberapa nama event dan artinya: 1. OnClick, timbul ketika komponen diklik dengan mouse. 2. OnDblClick, timbul ketika komponen diklik ganda de-ngan mouse. 3. OnChange, timbul ketika sebuah komponen yang memi-liki properti Text (seperti TEdit) diubah isinya (baik oleh pemakai atau oleh program). 4. OnEnter, timbul menerima fo-kus. ketika sebuah komponen

Modul II Events dan Event-Handlers

2-18

5. OnExit, timbul ketika kehilangan fo-kus.

sebuah

komponen

6. OnKeyDown, timbul ketika sebuah komponen menerima penekanan tombol papan ketik. 7. OnKeyUp, timbul ketika sebuah komponen yang telah menerima penekanan tombol papan ketik, di mana tombol tersebut sedang dilepaskan oleh pemakai. 8. OnKeyPress, timbul ketika sebuah komponen menerima sebuah karakter dari penekanan dan pelepasan sebuah tombol papan ketik. 9. OnMouseDown, timbul ketika tombol mouse ditekan (dan ditahan) pada sebuah komponen. 10. OnMouseUp, timbul ketika tombol mouse dilepas (setelah ditekan) pada sebuah komponen. 11. OnMouseMove, timbul ketika kursor mouse berpindah posisi pada sebuah komponen.

Contoh Aplikasi

ebagai contoh, buka kembali TugasPertama yang telah dibu-at. Buka project tersebut dan akan muncul tampilan (kira-kira) sebagai berikut:

Modul II Events dan Event-Handlers Gambar 2.1: Tampilan ProjectPerta ma.

2-19

Tujuan dari TugasPertama ini adalah bila komponen But-tonOK diklik, maka akan menampilkan NRP, nama, dan alamat (isi dari ketiga komponen TEdit) sekaligus pada PanelTampil yang ada di bawahnya. Untuk itu, klik pada ButtonOK, dan tekan F11. akan muncul object inspector, kemudian pilih pada halaman events, dan cari event OnClick. Lakukan klik ganda pada tempat kosong di sebe-lah kanan tulisan OnClick. Maka pemrogram akan dihadap-kan langsung pada code editor dengan tampilan sebagai berikut:

Modul II Events dan Event-Handlers Gambar 2.2: Eventhandler ButtonOKCl ick.

2-20

Secara otomatis akan disediakan event-handler seperti pada gambar di atas. Maka pemrogram akan dapat langsung menulis kode program untuk memerintahkan komputer melakukan se-suatu bila ButtonOK tadi diklik. Isilah baris di antara begin dan end tersebut dengan perintah sehingga keseluruhan event-handler tadi menjadi sebagai berikut: procedure Form1.ButtonOKClick(Sender: TObject); T begin PanelTampil.Caption := E d i t N R P . T e x t ,+ ' + ' EditNama.Text,+' + ' EditAlamat.Text; end ; Kemudian bila ButtonCancel diklik, maka aplikasi akan me-nutup. Caranya sama dengan tadi, hanya saja event OnClick yang diisi adalah milik komponen ButtonCancel. Isilah event-handler-nya sehingga menjadi seperti: procedure Form1.ButtonCloseClick(Sender: TObject); T begin Close; end ; Cobalah jalankan program tersebut dengan salah satu cara berikut ini:

Modul II Events dan Event-Handlers

2-21

Pilih pilihan Run|Run, atau Klik pada toolbar yang bertanda Tekan F9. , atau

Maka akan tampil:


Gambar 2.3: Hasil eksekusi program ProjectPerta ma.

Coba isi ketiga komponen TEdit dengan NRP, nama, dan alamat seseorang (disarankan yang pendek saja agar tulisannya tampil semua pada PanelTampil), kemudian klik ButtonOK.
Gambar 2.3: Setelah TEdit diisi dan ButtonOK diklik.

Bila ButtonCancel diklik, maka aplikasi tersebut akan me-nutup.

Modul II Events dan Event-Handlers

2-22

Bila sudah selesai, cobalah untuk membuat project baru yang mirip, dan nantinya akan tampil form-nya seperti gambar 2.4.
Gambar 2.4: Contoh form designer untuk project yang baru.

Tentukan sendiri properti dari semua komponen yang ada. Tujuannya adalah bila diisi dan diklik TButton yang memiliki Caption OK akan tampil seperti pada gambar 2.5.

Modul II Events dan Event-Handlers Gambar 2.5: Yang tampil bila TButton dengan Caption OK diklik.

2-23

Simpanlah unit-nya sebagai project-nya sebagai TugasDua.

UnitUtama,

dan

Hal-hal yang harus Diperhatikan


Beberapa hal berikut ini harus Anda perhatikan di saat melakukan coding. Bila Anda melanggar hal-hal berikut ini, ma-ka akan terjadi masalah pada waktu kompilasi. 1. Jangan ubah baris antara deklarasi kelas form (T F o r m 1 = c l a s s T F o r m)) sampai dengan klausa ( private, karena ba-gian tersebut secara otomatis akan diubah oleh Delphi sesuai dengan korespondensi form yang disunting. 2. Bila ingin menambahkan metode pada kelas form Anda, lakukan hanya pada bagian private atau public.

Modul II Events dan Event-Handlers

2-24

3. Anda juga bisa menambahkan bagian protected dan pu-blished pada kelas form Anda. 4. Jangan mengubah deklarasi peubah global form Anda (v a r F o r m 1 : T F o r m 1 ; ). 5. Sebelum Anda melakukan kompilasi, pada waktu mela-kukan coding, ingat jumlah blok yang ada. Semua blok harus berakhir dengan benar. Selain itu beberapa tip berikut bisa dilakukan untuk mem-permudah: 1. Anda bisa memberikan hanya satu event-handler untuk lebih dari satu event. Hanya saja jenis event harus sama. Caranya bisa dengan memilih beberapa komponen seka-ligus (dengan menggunakan shift+click) kemudian mendefinisikan event-handler-nya. Cara lainnya adalah de-ngan mendefinisikan event-handler untuk satu event, ke-mudian mengisikan event lain secara manual nama event-handler-nya. 2. Lakukan penyimpanan secara berkala untuk menghin-dari kehilangan data kalau sewaktuwaktu aliran listrik terganggu. 3. Untuk sekedar memeriksa kesahihan kode program, bi-sa dilakukan syntax check dengan memilih pilihan Pro-ject|Syntax check. 4. Untuk mengkompilasi bisa dilakukan dengan pilihan Project|Compile atau Project|Build. Perbedaan compile de-ngan build adalah jika compile hanya mengkompilasi ba-ris-baris yang diubah, sedangkan build mengkompilasi seluruh project.

Modul II Events dan Event-Handlers

2-25

Tugas Aplikasi
Tugas 2.1
Ubahlah TugasPertama sebagai berikut: Kosongkan event-handler ButtonOKClick. Ingat, hanya kosongkan isinya dengan hanya meninggalkan baris-baris:

procedure Form1.ButtonOKClick(Sender: TObject); T begin end ; Simpan project Anda, event-handler yang kosong tersebut akan secara otomatis terhapus. Hapus komponen ButtonOK. Buat sedemikian sehingga bila isi dari ketiga TEdit diu-bah, maka akan menampilkan NRP, nama, dan alamat pada PanelTampil. Simpan dan jalankan project tersebut.

Form tersebut akan tampil sebagai berikut:


Gambar 2.6: Rekayasa TugasPerta ma.

Modul II Events dan Event-Handlers

2-26

Tugas 2.2
Seperti pada tugas 2.1, lakukan hal yang sama pada contoh aplikasi kedua pada modul ini, yaitu isikan string pada TMemo berubah sesuai isi pada komponen TEdit, TSpinEdit, dan TCom-boBox tanpa melakukan klik pada TButton yang memiliki Caption OK.

Tugas 2.3
Buatlah sebuah permainan dengan menggunakan event OnMou-seMove pada sebuah TButton. Apabila didekati oleh pointer mou-se maka TButton tersebut akan berpindah menjahui posisi pointer mouse.

Modul

3
Exceptions

alah satu kelebihan yang dimiliki oleh Delphi adalah kemam-puannya untuk menangani exception. Exception adalah sebuah istilah pemrograman yang mengacu pada perkecualian yang di-akibatkan kesalahan pada waktu menjalankan program dan ti-dak dapat diketahui atau didefinisikan pada waktu kompilasi. Exception sendiri dapat diatasi dengan suatu cara yang dise-but dengan resource protection, yaitu suatu metode untuk melin-dungi sumber daya program. Lebih jauh lagi cara tersebut dina-makan dengan exception handling (penanganan pengecualian). Ada dua macam resource protection dalam Delphi, yaitu de-ngan blok try-except dan blok tr-.finally.

Try-except

lok try-except digunakan untuk menjalankan suatu blok per-nyataan dan mencegah Delphi agar tidak menampilkan pe-san kesalahannya. Sebagai gantinya, pemrogram dapat menam-pilkan pesan kesalahannya sendiri. Bila tidak terjadi exception, maka semua baris pada bagian try akan dijalankan, namun bagian except tidak akan dijalankan. Bila terjadi exception, maka baris

Modul III Exceptions

3-28

setelah baris di mana terjadi exception tadi (pada bagian try) tidak akan dijalankan, namun proses eksekusi program dilanjutkan ke bagian except. Perhatikan blok program berikut ini: try X := Y / Z; except on EZeroDivide do M e s s a g e D l g ( r j a d i p e m b a g i a n d e n g a n, n o l . ' 'Te m t E r r o r , [ m0)O K ] , b; end ; Pada contoh program tersebut, bagian try akan mencoba dieksekusi. Di sini ada kemungkinan terjadi exception bila Z bernilai nol, karena akan mengakibatkan pembagian dengan nol. Bila nilai Z tidak sama dengan nolkarenanya, bila tidak terjadi exceptionmaka bagian except tidak akan dijalankan. Bila nilai Z bernilai nol, maka bagian except akan dijalankan.

Try..finally

lok try-finally digunakan untuk menjalankan suatu blok per-nyataan, dan selalu menjalankan bagian finally, apapun yang terjadi (terjadi exception ataupun tidak). Hal ini biasanya berguna untuk memberikan finalisasi (pemberian nilai akhir, atau yang harus selalu dikerjakan terakhir kali). Blok ini sebenarnya tidak menangani exception, hanya mena-ngani alur program agar apapun yang terjadi, bagian finally sela-lu dikerjakan. Perhatikan blok program berikut ini: try A := B / C; D := B + C; finally C : =5; end ;

Modul III Exceptions

3-29

Pernyataan A : = B / C ; akan dieksekusi. Bila terjadi excep-tion (bila C bernilai nol) maka D : = B + C ; tidak akan dikerjakan. Sebaliknya bila tidak terjadi exception (bila C tidak bernilai nol) maka pernyataan D : = B + C ; akan dikerjakan. Namun, terjadi atau tidak exception tersebut, pernyataan C : = 5; tetap akan di-eksekusi. Untuk menangani exception sepenuhnya yang digabung de-ngan try-finally dapat dilakukan dengan meletakkan blok try-finally di dalam bagian try dari tryexcept. Sebagai contoh: try try A := B / C; D := B + C; finally C := 5; end ; except on EZeroDivide do M e s s a g e D l g ( r j a d i p e m b a g i a n d e n g a n, n o l . ' 'Te m t E r r o r , [ m0)O K ] , b; end ; Pada contoh di atas, apapun yang terjadi, baris C : = 5; tetap akan dijalankan. Tetapi bila terjadi exception, bagian except akan dijalankan. Bagian except akan dijalankan setelah menjalankan bagian finally. Perlu diketahui, agar kedua penanganan exception tadi be-kerja semestinya, maka perlu menonaktifkan pilihan Stop on Delphi Exceptions dengan cara: 1. Masuklah ke menu Tools|Debugger Options. 2. Pilihlah tab Language Exceptions. 3. Pastikan pilihan combo box Stop on Delphi Exceptions dinonaktifkan.

Modul III Exceptions

3-30

Contoh Aplikasi

gar lebih jelas, akan dicoba membuat sebuah aplikasi yang menerapkan penggunaan keduanya. Langkah pertama, rancanglah sebuah form seperti pada gambar 3.1. Ubahlah nama dari komponen TEdit yang pertama menjadi EditNilaiA, TEdit yang kedua menjadi EditNilaiB, dan TEdit yang ketiga menjadi EditHasil. Kemudian nama komponen TButton mulai dari yang pertama (yang teratas, mulai dari kiri ke kanan) diubah masing-masing menjadi ButtonPlus, Button-Minus, ButtonMultiply, dan ButtonDivide. Sedangkan kedua TButton berikutnya (yang berada di bawahnya) diubah namanya masing-masing menjadi ButtonDiv dan ButtonMod. Terakhir, ubahlah nama komponen TButton terbawah menjadi Button-Close. Kemudian ubahlah EditHasil men-jadi True.
Gambar 3.1: Tampilan form Kalkulator.

properti

ReadOnly

pada

Buatlah event-handler untuk masing-masing event OnClick pada keenam TButton pertama masing-masing sesuai dengan Caption-nya, yaitu untuk menjumlah,

Modul III Exceptions

3-31

mengurangi, mengalikan, membagi, melakukan pembagian bulat, dan mengetahui sisa ha-sil bagi bilangan bulat. Masing-masing akan memiliki eventhandler seperti di bawah ini: procedure Form1.ButtonPlusClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Real; begin try NilaiA := StrToFloat(EditNilaiA.Text); NilaiB := StrToFloat(EditNilaiB.Text); Hasil := NilaiA + NilaiB; EditHasil.Text := FloatToStr(Hasil); except on EConvertError do E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! end ; end ; procedure Form1.ButtonMinusClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Real; begin try NilaiA := StrToFloat(EditNilaiA.Text); NilaiB := StrToFloat(EditNilaiB.Text); Hasil := NilaiA - NilaiB; EditHasil.Text := FloatToStr(Hasil); except on EConvertError do E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! end ; end ;

Modul III Exceptions

3-32

procedure Form1.ButtonMultiplyClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Real; begin try NilaiA := StrToFloat(EditNilaiA.Text); NilaiB := StrToFloat(EditNilaiB.Text); Hasil := NilaiA * NilaiB; EditHasil.Text := FloatToStr(Hasil); except on EConvertError do E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! end ; end ; procedure Form1.ButtonDivideClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Real; begin try NilaiA := StrToFloat(EditNilaiA.Text); NilaiB := StrToFloat(EditNilaiB.Text); Hasil := NilaiA / NilaiB; EditHasil.Text := FloatToStr(Hasil); except on EConvertError do E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! on EZeroDivide do E d i t H a s i l . T e x t P: = b a g i a n d e n g a n n o l ! ' ' em ; end ; end ; procedure Form1.ButtonDivClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Integer;

Modul III Exceptions

3-33

begin try NilaiA := StrToInt(EditNilaiA.Text); NilaiB := StrToInt(EditNilaiB.Text); Hasil := NilaiA NilaiB; d v EditHasil.Text := IntToStr(Hasil); except on EConvertError do E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! o n E D i v B y Z e rd o o E d i t H a s i l . T e x t P: = b a g i a n d e n g a n n o l ! ' ' em ; end ; end ; procedure Form1.ButtonModClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Integer; begin try NilaiA := StrToInt(EditNilaiA.Text); NilaiB := StrToInt(EditNilaiB.Text); Hasil := NilaiA NilaiB; mod EditHasil.Text := IntToStr(Hasil); except on EConvertError do E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! o n E D i v B y Z e rd o o E d i t H a s i l . T e x t P: = b a g i a n d e n g a n n o l ! ' ' em ; end ; end ; Perhatikan, masing-masing bila terjadi kesalahan maka kesalahan tersebut tidak ditampilkan pada dialog pesan kesalah-an (message dialog), tetapi langsung ditampilkan pada EditHasil.

Modul III Exceptions

3-34

Pada kode program tersebut terdapat perbedaan antara ex-ception EDivByZero dan EZeroDivide, yaitu EDivByZero terjadi bi-la ada pembagian dengan nol untuk bilangan bulat, sedangkan EZeroDivide terjadi bila ada pembagian dengan nol untuk bi-langan nyata. Sekarang EditNilaiB, OnChange sedemikian EditNilaiB EditHasil. untuk masing-masing EditNilaiA dan buatlah event-handler pada event (dengan nama Edit-NilaiChange) sehingga bila EditNilaiA ataupun diubah, maka akan mengosongkan

procedure Form1.EditNilaiChange(Sender: TObject); T begin EditHasil.Clear; end ; Terakhir, buatlah agar jika ButtonClose diklik, aplikasi akan ditutup. procedure Form1.ButtonCloseClick(Sender: TObject); T begin Close; end ; Simpan unitnya dengan nama MainUnit, dan project-nya dengan nama Kalkulator. Jangan lupa untuk menyediakan folder tersendiri untuk menyimpannya. Kemudian cobalah jalankan aplikasi tersebut. Jangan lupa untuk menonaktifkan pilihan Stop on Delphi Exceptions.

Properti Tag

erikut ini ada sebuah tip kecil. VCL Delphi menyediakan sebuah properti yang dinamakan properti Tag. Properti ini ada pada kelas TComponent. Properti ini merupakan properti bertipe Integer, yang tidak memiliki arti sama sekali dalam Delphi. Namun, properti ini khusus disediakan bagi pemro-gram.

Modul III Exceptions

3-35

Properti ini bisa diisi berapa saja dan digunakan bebas oleh pemrogram untuk menandai atau sebagai label. Salah satu kegu-naannya adalah dipakai untuk membuat satu event-handler un-tuk banyak komponen sekaligus, dengan memanfaatkan para-meter Sender yang ada pada setiap event-handler dan menyeleksi Tag dari setiap Sender tersebut dengan struktur kendali case. Sebagai contoh, event-handler untuk setiap TButton pada Kal-kulator kecuali ButtonClose dapat dijadikan satu dengan nama ButtonOperationClick dan isinya: procedure Form1.ButtonOperationClick(Sender: TObject); T var NilaiA, NilaiB, Hasil: Real; ComponentTag: Integer; begin ComponentTag := TComponent(Sender).Tag; try i f C o m p o n e n t T a g [1. .4] t h e n in begin // ubah menjadi nilai bilangan nyata NilaiA := StrToFloat(EditNilaiA.Text); NilaiB := StrToFloat(EditNilaiB.Text); end else begin // ubah menjadi nilai bilangan bulat NilaiA := StrToInt(EditNilaiA.Text); NilaiB := StrToInt(EditNilaiB.Text); end ; case ComponentTag of 1 : Hasil := NilaiA + NilaiB; 2 : Hasil := NilaiA - NilaiB; 3 : Hasil := NilaiA * NilaiB; 4 : Hasil := NilaiA / NilaiB; 5 : H a s i l : = T r u n c ( N i ld i v ) r u n c ( N i l a i B ) ; aiA T 6 : H a s i l : = T r u n c ( N i lm o d ) r u n c ( N i l a i B ) ; aiA T end ; EditHasil.Text := FloatToStr(Hasil); except on EConvertError do

Modul III Exceptions

3-36

E d i t H a s i l . T e x t A: = t a u B s a l a; ! ' ' a h o n E O v e r f l od o w E d i t H a s i l . T e x t O: = r f l o w; ' ' ve ! o n E U n d e r f l od o w E d i t H a s i l . T e x t U: = e r f l o w; ' ' nd ! o n E D i v B y Z e rd o o E d i t H a s i l . T e x t P: = b a g i a n d e n g a n n o l ! ' ' em ; on EZeroDivide do E d i t H a s i l . T e x t P: = b a g i a n d e n g a n n o l ! ' ' em ; end ; end ; Kemudian komponen TButton mulai dari yang pertama hingga yang keenam (ButtonPlus, ButtonMinus, ButtonMulti-ply, ButtonDivide, ButtonDiv, dan ButtonMod) masing-masing diubah properti Tag-nya menjadi 1, 2, 3, 4, 5, dan 6. Jangan lupa untuk menghapus semua event-handler yang lama seperti cara yang telah ditunjukkan pada praktikum kedua. Dengan demikian, maka kode program akan menjadi jauh lebih ringkas karena hanya satu event-handler yang harus ditulis untuk keenam events dari keenam komponen TButton. Jalankan aplikasi tersebut dan amati hasilnya.

Modul III Exceptions

3-37

Tugas Aplikasi
Tugas 3.1
Rekayasalah Kalkulator dengan ketentuan: 1. Tambahkan satu komponen TPanel bernama PanelOpe-rasi yang menampilkan jenis operasi yang dikerjakan pada nilai A terhadap nilai B (sesuai dengan Caption dari TButton yang diklik). Letakkan TPanel tersebut di atas EditHasil seperti pada gambar 3.2. 2. Tambahkan kode program pada event-handler yang ada untuk menampilkan jenis operasi pada PanelOperasi. 3. Bila terjadi kesalahan dan ditampilkan pesan kesalahan pada EditHasil, warna Font pada EditHasil menjadi me-rah. 4. Bila tidak terjadi kesalahan dan hasilnya ditampilkan pada EditHasil, warna Font pada EditHasil menjadi bi-ru. 5. Bila isi dari EditNilaiA atau EditNilaiB diubah, selain mengosongkan EditHasil juga mengosongkan Caption pada PanelOperasi. 6. Buatlah kode program seringkas mungkin. yang ada menjadi

Modul III Exceptions Gambar 3.2: Tampilan form rekayasa Kalkulator.

3-38

Kemudian jalankan program tersebut. Hasil dari eksekusi aplikasi tersebut salah satunya seperti pada gambar 3.3.
Gambar 3.3: Salah satu kemungkinan hasil eksekusi Kalkulator.

Modul III Exceptions

3-39

Tugas 3.2
Rekayasalah Kalkulator sehingga bisa melakukan operasi pe-mangkatan bilangan nyata dan operasioperasi trigonometri.

Tugas 3.3
Tambahkan beberapa komponen dan event-handler pada Kalku-lator, sehingga mampu bekerja pada bilangan kompleks.

Modul

4
VCL Standar dan Timer

alam praktikum ini akan dibahas beberapa komponen yang sering dipakai pada tab Standard. Sebuah aplikasi Windows sederhana umumnya dikembangkan dengan memakai kompo-nen-komponen standar tersebut. Berikut ini komponen pada tab standard yang sering dipakai: 1. TMainMenu dan TPopupMenu, yaitu komponen yang merepresentasikan menu utama dan menu popup. Menu utama adalah menu yang muncul pada bagian atas se-buah form, tepat di bawah title bar. Sedangkan menu popup adalah menu yang muncul bila pemakai melaku-kan klik kanan pada sebuah kontrol. 2. TLabel, yaitu komponen tulisan pa-da form. untuk menampilkan

3. TEdit, yaitu komponen berbentuk kotak untuk meneri-ma masukan dari pemakai. Pada beberapa pemrogram-an visual sering disebut dengan Edit Box. 4. TMemo, yaitu komponen seperti TEdit, tetapi bisa mene-rima masukan lebih dari satu baris. Properti Lines me-nunjukkan string-list yang berisi baris-baris string yang terdapat pada TMemo.

Modul IV VCL Standar dan Timer

4-41

5. TButton, yaitu komponen berbentuk tombol, yang bisa menampilkan tulisan dan bisa diklik. 6. TCheckBox, yaitu komponen untuk menyatakan aktif atau tidaknya sebuah pilihan (options). Bentuknya kotak yang di dalamnya terdapat sebuah tanda silang yang menandakan bahwa pilihannya aktif. Bila diklik, maka tanda silangnya bisa muncul atau hilang, yang menan-dakan keaktifannya. 7. TRadioButton, yaitu komponen yang sama seperti TCheckBox, hanya saja bila terdapat lebih dari satu TRa-dioGroup dalam satu grup, maka hanya satu dari banyak TRadioButton yang dapat aktif. Bentuknya bulat dengan bulatan hitam di dalamnya yang menandakan keaktif-annya. 8. TListBox, yaitu komponen yang hampir sama dengan TMemo, hanya saja isinya tidak dapat diubah oleh pema-kai, dan hanya bisa dipilih per baris. Properti ItemIndex menyatakan item yang sedang terpilih. 9. TComboBox, merupakan komponen gabungan TEdit dan TListBox. Isi dari TComboBox (yang sama seperti TEdit) dapat diubah oleh pemakai, tetapi bila tanda drop-down di sebelah kanannya diklik maka akan muncul listbox yang berupa drop-down. 10. TGroupBox dan TPanel, yaitu komponen yang bersifat se-bagai kontainer untuk komponen lainnya. 11. TRadioGroup, yaitu komponen seperti TGroupBox yang berisi komponen TRadioButton yang dapat dikontrol se-cara terpusat. Selain komponen-komponen standar yang paling sering di-pakai di atas, masih ada satu komponen lagi yang sering dipakai di luar komponen database dan additional, khususnya untuk me-lakukan suatu proses yang berulang-ulang dengan sela waktu tertentu tanpa harus mengganggu proses lainnya.

Modul IV VCL Standar dan Timer

4-42

Komponen tersebut adalah komponen TTimer, yaitu sebuah komponen yang akan menghasilkan event OnTimer setiap selang waktu tertentu yang ditentukan pemrogram melalui properti In-terval. Properti Interval ini bertipe Cardinal dan menyatakan se-lang waktu dalam milidetik.

Contoh Aplikasi

erikut ini akan diberikan sebuah contoh program yang akan menggunakan beberapa komponen standar tersebut. Bebera-pa dari komponen yang akan dibahas sudah pernah diberikan pada praktikum sebelumnya. Oleh karena itu hanya yang belum dipakai yang akan dijelaskan secara lebih rinci. Pertama, buat form seperti pada gambar 4.1. Beri nama form tersebut menjadi MainForm.
Gambar 4.1: Perancangan form ProjectKeti ga.

Berilah nama pada ketiga TEdit pertama mulai dari atas ma-sing-masing EditNama, EditAlamat, dan EditTempatLahir. Tiga komponen tepat di bawah EditTempatLahir adalah TComboBox. Dari kiri ke kanan, masing-masing berilah nama ComboBoxTanggal, ComboBoxBulan, dan ComboBoxTahun. Isilah pro-perti Items dari ComboBoxTanggal dengan tulisan 1 sampai 31, yang masing-masing dipisahkan oleh Enter (seperti pada gambar 4.2). Kemudian isilah properti Items dari ComboBoxBulan de-ngan nama-nama bulan mulai dari

Modul IV VCL Standar dan Timer

4-43

Januari hingga Desember. Setelah itu, isilah properti Items dari ComboBoxTahun dengan tahun mulai 1970 hingga 2002. Berilah nama dua komponen TButton di bawah ketiga TCom-boBox tersebut dengan nama ButtonResetEditor dan Button-Tampilkan. Kemudian, beri nama komponen TMemo yang terdapat da-lam sebuah TPanel di sebelah kanan dengan nama MemoTam-pil. Kemudian jangan lupa mengubah properti ScrollBars dari MemoTampil menjadi ssBoth. Kosongilah properti Lines-nya, dan ubah properti ReadOnly menjadi True.
Gambar 4.2: String-list Editor yang muncul ketika mengisi properti Items dari TListBox atau TComboBox, atau properti Lines dari TMemo.

Berilah nama TPanel yang berada di sebelah kiri bawah dari MainForm dengan nama PanelWaktu, dan TButton di sebelah kanannya dengan nama ButtonHapusMemo. Terakhir, berilah nama komponen TTimer yang berada di sudut kanan atas de-ngan nama TimerWaktu, dan ubah properti Interval menjadi 100, serta properti Enabled menjadi True. Tujuan dari aplikasi ini adalah menampilkan nama, alamat, tempat lahir, dan usia (terhitung mulai tanggal lahir hingga saat ini) pada MemoTampil bila ButtonTampil diklik. Tetapi tanggal lahir harus

Modul IV VCL Standar dan Timer

4-44

divalidasi terlebih dahulu. Bila tidak valid akan menampilkan pesan kesalahan. Begitu pula bila data tidak lengkap, semisal nama, alamat, atau tempat lahir kosong. Kemudian bila ButtonResetEditor diklik akan mengosong-kan isi dari ketiga TEdit sekaligus membuat tanggal lahir menja-di 1 Januari 1970. Bila ButtonHapusMemo diklik akan mengaki-batkan isi MemoTampil terhapus. PanelWaktu akan menampilkan waktu saat ini, termasuk tanggalnya. Langkah pertama adalah membuat fungsi validasi untuk tanggal. Semisal, jangan sampai tanggal menunjukkan tanggal 31 Pebruari, dan juga harus diperhitungkan tahun kabisat. Buat-lah sebuah deklarasi field FTanggal yang bertipe TDateTime dan deklarasi fungsi yang berada pada bagian private dari tipe kelas TMainForm yang bernama TanggalSah yang bertipe Boolean, seperti pada contoh berikut: ... type T M a i n F o r m c= a s s T F o r m ) l ( Panel1: TPanel; PanelWaktu: TPanel; Label1: TLabel; EditNama: TEdit; Label2: TLabel; EditAlamat: TEdit; Label3: TLabel; EditTempatLahir: TEdit; Label4: TLabel; ComboBoxTanggal: TComboBox; ComboBoxBulan: TComboBox; ComboBoxTahun: TComboBox; ButtonTampilkan: TButton; Panel3: TPanel; MemoTampil: TMemo; ButtonResetEditor: TButton; Label5: TLabel; Label6: TLabel;

Modul IV VCL Standar dan Timer

4-45

ButtonHapusMemo: TButton; TimerWaktu: TTimer; private { Private declarations } FTanggal: TDateTime; function anggalSah: Boolean; T public { Public declarations } end ; ... Perhatikan bahwa fungsi yang Anda ketikkan berada pada bagian private (kode yang digarisbawahi). Untuk menulis kode-nya, setelah menulis deklarasi tersebut di atas dengan benar, te-kan Shift+Ctrl+C. maka Anda akan dihadapkan pada implemen-tasi fungsi tersebut seperti halnya pada gambar 4.3. Penekanan Shift+Ctrl+C tersebut yang menghasilkan implementasi metode merupakan fasilitas code completion dalam Delphi.
Gambar 4.3: Code completion yang terjadi setelah ditekan Shift+Ctrl+C.

Setelah itu isilah implementasinya dengan kode sebagai berikut: function MainForm.TanggalSah: Boolean; T var

Modul IV VCL Standar dan Timer

4-46

Y, M, D: Word; begin Y : = C o m b o B o x T a h u n . I t e m I n d e x; + 1970 M := ComboBoxBulan.ItemIndex + 1; D := ComboBoxTanggal.ItemIndex + 1; try FTanggal := EncodeDate(Y, M, D); Result := True; except MessageDlg('Tanggal masih belum sah.', m t E r r o r , [ m0)O K ] , b; Result := False; ComboBoxTanggal.SetFocus; end ; end ; Dengan cara yang sama, deklarasikan dan implementasikan pada bagian private, sebuah fungsi untuk mengetahui usia de-ngan nama GetUsia yang bertipe Integer. Berikut ini contoh deklarasi dan implementasinya: ... private { Private declarations } FTanggal: TDateTime; function anggalSah: Boolean; T function etUsia: Integer; G public { Public declarations } end ; ... function MainForm.GetUsia: Integer; T begin R e s u l t : = R o u n d ( ( N o w - F T a n g3 6 5 . 2)/ g a l ) 5; end ; Langkah berikutnya adalah memberikan eventhandler untuk event OnClick pada ButtonResetEditor: procedure MainForm.ButtonResetEditorClick( T Sender: TObject);

Modul IV VCL Standar dan Timer

4-47

begin EditNama.Clear; EditAlamat.Clear; EditTempatLahir.Clear; C o m b o B o x T a n g g a l . I t e m I n d0; : = ex ComboBoxBulan.ItemIndex := 0; ComboBoxTahun.ItemIndex := 0; end ; Kemudian event-handler untuk event OnClick pada Button-Tampilkan, event OnClick dari ButtonHapusMemo, dan event OnTimer dari TimerWaktu: procedure MainForm.ButtonTampilkanClick( T Sender: TObject); begin i f ( E d i t N a m a . T e x t ') o r ' = (EditAlamat.Text = r ' ') o ( E d i t T e m p a t L a h i r . T e x t t= e n ' ') h begin MessageDlg(ma, alamat, atau tempat lahir ' 'Na + ' t i d a k b o l e h k o s o, g . ' n m t E r r o r , [ m0)O K ] , b; EditNama.SetFocus; Exit; end ; i f n o t T a n g g a l S at h e n E x i t ; h MemoTampil.Lines.Clear; MemoTampil.Lines.Add( saya + EditNama.Text); 'Nama ' MemoTampil.Lines.Add( tinggal di ' 'Saya + EditAlamat.Text); M e m o T a m p i l . L i n e s . A d d ( l a h i r d i+ ' 'Saya EditTempatLahir.Text); MemoTampil.Lines.Add( usia saya adalah ' 'Dan + IntToStr(GetUsia) + ' tahun.' ); end ; procedure MainForm.ButtonHapusMemoClick( T Sender: TObject); begin MemoTampil.Lines.Clear;

Modul IV VCL Standar dan Timer

4-48

end ; procedure MainForm.TimerWaktuTimer(Sender: TObject); T begin PanelWaktu.Caption := FormatDateTime( mmm yyyy"," h:nn:ss' 'd m , Now); end ; Simpan unit dengan nama MainUnit dan project-nya dengan nama ProjectKetiga. Jalankan dan amati hasilnya.

Modul IV VCL Standar dan Timer

4-49

Tugas Aplikasi
Tugas 4.1
Buatlah sebuah aplikasi untuk menampilkan dua macam timer, yaitu timer biasa (menghitung maju, stopwatch) dan timer mun-dur (menghitung mundur, count-down timer). Khusus count-down timer tersebut harus bisa diatur selang waktunya, misalkan satu menit, atau dua puluh detik, dan seba-gainya. Tampilannya bebas, tetapi sebagai gambaran dapat memakai tampilan seperti pada gambar 4.4. Berilah nama project Anda tersebut dengan nama Project-Timer.
Gambar 4.4: Gambaran tampilan untuk program ProjectTime r.

Tugas 4.2
Buatlah project yang serupa dengan ProjectTimer, namun bisa menampilkan tiga bagian sekaligus, yaitu: Waktu saat ini.

Modul IV VCL Standar dan Timer

4-50

Timer maju. Count-down timer. Simpan dengan nama ProjectMultiTimer.

Tugas 4.3
Buatlah project untuk menampilkan stopwatch, dengan fasilitas lap-time yang bisa tercetak pada sebuah TListBox dan bisa disim-pan datanya untuk ditampilkan lagi kemudian. Simpan dengan nama ProjectLap.

Modul

5
Koneksi Database menggunakan ADO

ntuk melakukan akses database, Delphi memiliki beberapa cara. Borland Delphi 16-bit masih menggunakan BDE (Borland Database Engine). Sedangkan pengembang Borland Del-phi versi 32-bit sudah memikirkan koneksi dengan beragam tek-nologi. Ada koneksi dengan menggunakan InterBase, dbExpress, dan ADO (ActiveX Data Object). ADO merupakan teknologi Microsoft, sehingga sewaktu menggunakannya, tidak diperlukan lagi instalasi driver yang di-perlukan, karena sudah otomatis ada ketika Microsoft Windows diinstal. Karena itulah akan digunakan teknologi koneksi databa-se dengan menggunakan ADO dan mesin database-nya menggunakan Microsoft Access. Dalam kasus ini, akan dicoba untuk membuat sebuah databa-se dengan tiga tabel dan hubungannya seperti pada gambar 5.1, kemudian dibuat aplikasinya. Database tersebut akan dinamakan DatabaseContoh.mdb, sedangkan alias koneksinya akan dinamakan DBContohPrak5 (atau DBContohPrak5.dsn kalau menggunakan berkas DSN).

Modul V Koneksi Database menggunakan ADO Gambar 5.1: Struktur database yang akan digunakan pada kasus ini.

5-52

Mahasiswa NRP (Text, 8) Nama (Text, 20) Alamat (Text, 30) JenisKelamin (Yes/No) TempatLahir (Text, 15) TanggalLahir (Date/Time) MataKuliah KodeMK (Text, 6) Nama (Text, 15) SKS (Number, Long Integer) Nilai NoNilai (AutoNumber) NRP (Text, 8) KodeMK (Text, 6) Tugas (Number, Double) UTS (Number, Double) UAS (Number, Double)

Arsitektur Database pada Delphi menggunakan ADO

rsitektur database pada Delphi yang menggunakan ADO sangat sederhana dan mudah diterapkan. ADO merupakan sebuah objek yang melakukan koneksi ke semua jenis database, dengan menggunakan data source yang didefinisikan oleh ODBC (Open Database Connectivity).

Modul V Koneksi Database menggunakan ADO Gambar 5.2: Gambaran arsitektur koneksi database dengan mengunakan ADO.

5-53

Aplikasi Delphi

ODBC

Database Server

Microsoft Access

alam praktikum ini, digunakan Microsoft Access untuk membuat database. Di dalam database tersebut akan dibuat tabel-tabel yang diperlukan serta akan didefinisikan hubungan antar tabel tersebut (relationship). Untuk itu, jalankan Microsoft Access terlebih dahulu. Sete-lah itu, bila database belum ada, maka buatlah database baru de-ngan memilih Blank Database (bila menggunakan wizard), atau pilih File|New Database (bila menggunakan menu utama). Simpan database tersebut dengan nama tertentu pada lokasi tertentu pula. Disarankan untuk menyimpannya pada folder di mana project Delphi yang dibuat akan diletakkan.

Modul V Koneksi Database menggunakan ADO

5-54

Setelah itu akan muncul sebuah Database window dengan ju-dul DatabaseContoh.
Gambar 5.3: Jendela utama pada Microsoft Access.

Membuat Tabel
Pada saat muncul window utama, klik pada tombol New, kemu-dian pilih Design View. Segera akan muncul sebuah Table win-dow. Window ini terbagi dalam dua bagian, bagian atas untuk mendefinisikan nama-nama medan (field names) dan tipe data-nya (data types) dan bagian bawah untuk mendefinisikan rincian lebih lengkap dari tipe data tersebut.

Modul V Koneksi Database menggunakan ADO Gambar 5.4: Table Window pada Microsoft Access.

5-55

Isilah nama-nama medan dan tipe datanya seperti pada gambar 5.4 (sesuai dengan strukturnya pada gambar 5.1). Pada jendela bagian bawah, setiap kali baris di window atas dipilih, akan muncul rincian dari tipe data yang ada. Field Size menunjukkan ukuran dari tipe data (akan muncul pilihan jenis-jenis sub tipe data pada tipe data Number). Required menunjukkan apakah medan tersebut harus diisi atau tidak. Allow Zero Length menunjukkan apakah diperbolehkan mengisi medan dengan panjang nol atau tidak. Indexed menunjukkan jenis indeks yang akan diimplementasikan pada medan tersebut. Jangan lupa untuk mendefinisikan kunci utama (primary key) untuk tabel tersebut. Kunci utama adalah kunci yang digunakan untuk menyatakan keunikan dari setiap rekaman pada sebuah tabel. Untuk mendefinisikannya, klik pada medan yang teratas (medan NRP pada gambar 5.4) dan bila tanda kunci di samping kiri belum muncul, carilah tombol toolbar yang bergambar kunci dan klik pada tombol tersebut.

Modul V Koneksi Database menggunakan ADO

5-56

Setelah selesai, simpanlah tabel tersebut sesuai dengan namanya pada gambar 5.1 (bila diklik Close, akan ditanyakan apakah akan disimpan atau tidak, dan bila ya akan ditanyakan namanya). Ulangi langkah tersebut untuk tabel-tabel lainnya.

Mendefinisikan Hubungan
Untuk mendefinisikan hubungan antar tabel (relationship) dapat dilakukan dengan memilih menu Tools|Relationship. Bila hu-bungan belum didefinisikan, maka akan muncul Show Table win-dow. Pilih semuanya dan klik Add (ingat untuk tidak melakukan klik ganda dan tidak melakukan klik pada Add lebih dari sekali, karena akan membuat tabel sama yang ditampilkan lebih dari sekali.
Gambar 5.5: Jendela Relationshi ps.

Definisikan hubungan dengan melakukan drag-drop dari sa-tu medan pada sebuah tabel ke medan pada tabel lainnya yang berhubungan. Bila muncul dialog Edit Relationships, maka akan terdapat tiga pilihan.

Modul V Koneksi Database menggunakan ADO Gambar 5.6: Dialog Edit Relationships .

5-57

1. Enforce Referential Integrity, menunjukkan pemaksaan ke-utuhan hubungan, sehingga apapun yang terjadi pada waktu pengisian, penyuntingan, ataupun penghapusan data yang melibatkan medan-medan yang berhubung-an, tidak akan merusak hubungan tersebut. 2. Cascade Update Related Fields, merupakan sebuah metode untuk mempertahankan keutuhan dengan cara mengu-bah semua data pada medan transaksi yang berhubung-an bila medan master diubah. 3. Cascade Delete Related Records, merupakan sebuah meto-de untuk mempertahankan keutuhan dengan cara menghapus semua rekaman transaksi bila rekaman master dihapus dan yang dihapus merupakan medan-medan yang berhubungan. Dalam kasus ini, aktifkan Enforce Referential Integrity dan Cascade Update Related Fields. Kemudian klik Create. Ulangi untuk hubungan lainnya.

Modul V Koneksi Database menggunakan ADO Gambar 5.7: Relationship pada tabeltabel DatabaseCo ntoh.

5-58

Open Database Connectivity

DBC adalah singkatan dari Open Database Connectivity, yang berarti koneksi database terbuka. Maksudnya terbuka adalah kemampuannya untuk koneksi pada segala jenis database, de-ngan syarat tersedia driver yang diperlukan. Bukalah ODBC dengan cara membuka Control Panel dan membuka ODBC Data Source (membuka Control Panel|Admin-istrative Tools|Data Sources (ODBC) pada Windows XP). Akan muncul ODBC Data Source Administrator window. Pada window tersebut ada berbagai halaman, tapi yang akan digunakan ha-nyalah User DSN dan File DSN.

Modul V Koneksi Database menggunakan ADO Gambar 5.8: ODBC Data Source Administrato r window.

5-59

Membuat Data Source


Untuk membuat data sourcelebih tepat kalau disebut aliasyang menghubungkan aplikasi dengan database, pilih tab User DSN. Kemudian bila pada User Data Sources window nama alias database yang dimaksud belum ada, maka klik Add.

Modul V Koneksi Database menggunakan ADO Gambar 5.9: Dialog Create New Data Source.

5-60

Setelah itu akan muncul dialog Create New Data Source, dan pilih driver yang diinginkan (karena kita memakai Microsoft Ac-cess, maka pilih Microsoft Access Driver (*.mdb) dan klik Finish. Kemudian akan muncul dialog ODBC Microsoft Access Setup, dan isilah Data Source Name dengan nama aliasnya (dalam kasus ini, DBContohPrak5). Klik Select, dan isilah dengan database yang telah disimpan tadi (dalam kasus ini DatabaseCon-toh.mdb). Jika telah selesai mendefinisikan database tersebut, maka di atas tombol Select akan tertera nama database yang telah didefinisikan tersebut. Klik OK, maka nama alias telah ditam-bahkan pada User DSN.

Modul V Koneksi Database menggunakan ADO Gambar 5.10: Dialog ODBC Microsoft Access Setup.

5-61

Membuat Berkas DSN


Cara lainnya adalah dengan membuat berkas DSN, yaitu sebuah berkas yang berisi definisi koneksi dengan database. Cara ini sedikit lebih rumit, tetapi dengan adanya berkas DSN, maka bila menyalin aplikasi database ke komputer lain tidak perlu mela-kukan konfigurasi ulang pada ODBC, namun cukup dengan menyertakan berkas ini.

Modul V Koneksi Database menggunakan ADO Gambar 5.11: Tampilan tab File DSN.

5-62

Untuk membuat berkas DSN, klik kemudian klik Add. Setelah itu akan Create New Data Source. Seperti halnya pada Microsoft Access Driver (*.mdb), Next.

tab File DSN, muncul dialog yang tadi, pilih kemudian klik

Setelah itu akan muncul sebuah editbox, isilah dengan nama berkas DSN yang akan disimpan (dalam kasus ini, DBContoh-Prak5.dsn) lengkap dengan jejak folder-nya. Klik Browse untuk membantu menentukan nama berkas dan tempatnya. Klik Next dan bila ditampilkan informasi nama berkas dan driver-nya, klik Finish.

Modul V Koneksi Database menggunakan ADO Gambar 5.12: Tampilan dialog Create New Data Source.

5-63

Kemudian akan muncul dialog ODBC Microsoft Access Setup, seperti pada gambar 5.10, namun bagian editbox di atas (bagian Data Source Name dan Description) tidak dapat diisi. Klik Select, dan isilah dengan database yang telah disimpan tadi (dalam kasus ini DatabaseContoh.mdb). Jika telah selesai mendefinisi-kan database tersebut, maka di atas tombol Select akan tertera nama database yang telah didefinisikan tersebut. Klik OK, maka berkas DSN tadi telah disimpan pada tempat yang telah diten-tukan.

Datasets (Koneksi ADO)

oba jalankan Delphi, dan buatlah sebuah project baru. Ke-mudian lihat pada tab ADO. Di sana terdapat beberapa komponen yang disebut dengan datasets. Datasets merupakan komponen yang bertugas melakukan koneksi dengan database dan tabel-tabel fisik melalui perantara. Dalam kasus ini, perantara yang dipakai adalah ODBC. Sedangkan teknologi datasets yang dipakai adalah teknologi ADO (ActiveX Data Object).

Modul V Koneksi Database menggunakan ADO

5-64

TADOConnection
Komponen TADOConnection merupakan komponen yang bertu-gas melakukan koneksi dengan bantuan perantara. Perantara bisa berupa ODBC Data Source atau DSN File. Untuk mengak-tifkan koneksinya dapat dilakukan dengan mengganti properti Connected menjadi True, tetapi properti ConnectionString harus didefinisikan dulu.

ConnectionString
Properti ini digunakan untuk mendefinisikan koneksi dengan perantara. Properti ini bisa diisi langsung atau menggunakan step-by-step wizard. Klik pada tanda tiga titik di kanan untuk membuka wizard.
Gambar 5.13: Tampilan dialog ConnectionSt ring.

Bila menggunakan berkas DSN, gunakan Use Data Link File dan klik Browse untuk mempermudah pencarian. Isi dengan berkas yang telah dibuat tadi (DBContohPrak5.dsn). Namun bila menggunakan alias, gunakan Use Connection String, dan klik Build.

Modul V Koneksi Database menggunakan ADO Gambar 5.14: Tampilan dialog Data Link Properties, tab Provider.

5-65

Setelah itu akan muncul dialog Data Link Properties. Pada tab Provider, pilih Microsoft OLE DB Provider for ODBC Drivers, ke-mudian klik Next.

Modul V Koneksi Database menggunakan ADO Gambar 5.15: Tampilan dialog Data Link Properties, tab Connection.

5-66

Pilih Use data source name, dan pilih pada DBContohPrak5 setelah drop-down muncul. Klik OK. Pada dialog sebelumnya, klik OK pula. Setelah itu maka properti Connected bisa diubah menjadi True untuk memulai koneksinya.

LoginPrompt
Properti LoginPrompt digunakan untuk menampilkan kotak dialog untuk login ke database, yang bertujuan mengisikan Username dan Password. Bila properti ini bernilai True, maka dialog Login Prompt akan muncul. Bila bernilai False, maka dialog tersebut tidak muncul. Sebagai gantinya, bila pada database yang dikoneksi dilindungi dengan Username dan Password, maka untuk memulai koneksi harus

Modul V Koneksi Database menggunakan ADO

5-67

dilakukan dengan memanggil metode memiliki parameter UserID dan Password.

Open

yang

TADOTable
TADOTable merupakan komponen untuk mewakili tabel fisik dari database. Properti Active dapat diubah menjadi True untuk mengkoneksikan tabel, tetapi sebelumnya properti Connection dan TableName harus didefinisikan dulu.

Connection
Properti Connection mendefinisikan koneksi dengan TADOCon-nection, dan harus berupa komponen TADOConnection. Disaran-kan untuk mengisi properti ini, bukannya mengisi properti Con-nectionString, untuk membuat proses koneksi semua tabel dalam sebuah aplikasi menjadi terpusat.

TableName
Properti ini baru dapat diisi bila properti Connection sudah terde-finisi dan properti Connected pada TADOConnection yang disam-bung sudah bernilai True. Properti ini menunjukkan nama tabel secara fisik (misalkan: Mahasiswa, Mata Kuliah, atau Nilai).

Active
Properti ini digunakan untuk mengaktifkan tabel. Mengaktifkan tabel juga bisa dilakukan dengan metode Open.

TADOQuery
TADOQuery merupakan komponen yang mewakili sebuah que-ry. Query adalah pertanyaan yang diajukan pada database server dan bisa menghasilkan jawaban atau mengubah tabel.

Modul V Koneksi Database menggunakan ADO

5-68

Connection
Properti Connection mendefinisikan koneksi dengan TADOCon-nection, dan harus berupa komponen TADOConnection. Disaran-kan untuk mengisi properti ini, bukannya mengisi properti ConnectionString, untuk membuat proses koneksi semua query dalam sebuah aplikasi menjadi terpusat.

SQL
Properti ini bertipe TStrings dan berisi baris-baris kalimat yang digunakan untuk melakukan query pada database server.

Parameters
Properti ini mendefinisikan parameter yang diisikan dalam pro-perti SQL.

Active
Properti ini digunakan untuk mengaktifkan query. Mengak-tifkan query juga bisa dilakukan dengan metode Open atau Exec-SQL.

Data Sources

eperti yang telah dijelaskan tentang arsitektur database pada gambar 5.2, data sources adalah sumber data yang bertugas se-bagai perantara internal dalam aplikasi antara datasets dengan data controls. Pada Delphi, data sources bisa didapatkan pada tab Data Access.

TDataSource
Komponen TDataSource merupakan komponen yang mewujud-kan perantara intarnal antara datasets dengan data controls.

Modul V Koneksi Database menggunakan ADO

5-69

DataSet
Properti DataSet merupakan properti yang digunakan untuk me-nyatakan dataset yang ditunjuk. Dalam kasus ini, buatlah sede-mikian rupa sehingga setiap komponen TADOTable berhubung-an dengan satu komponen TDataSource. Ubahlah properti DataSet dari tiap TDataSource menjadi ma-sing-masing TADOTable yang sudah ada.

Data Controls

edangkan data controls merupakan komponenkomponen yang berfungsi sebagai antarmuka dengan pemakai. Pada komponen-komponen inilah pemakai berinteraksi dengan data-base. Pemakai bisa melihat data yang ada, menambahkan, meng-ganti, atau menghapusnya. Pada Delphi, komponen-komponen ini disebut juga dengan komponen data-aware, dan bisa didapatkan pada tab Data Con-trols. Berikut akan dibahas yang sering digunakan, beserta pro-perti utamanya.

DataSource
Properti DataSource dimiliki oleh semua data controls. Properti ini menunjukkan hubungan dengan data source dan harus bertipe TDataSource.

DataField
Properti DataField dimiliki oleh data controls yang menampilkan atau merekayasa hanya satu medan. Properti ini menunjukkan nama medan mana yang akan ditampilkan atau direkayasa oleh data controls. Properti ini baru bisa didefinisikan setelah properti DataSou-rce didefinisikan. Properti ini bertipe string.

Modul V Koneksi Database menggunakan ADO

5-70

TDBGrid
Komponen ini merupakan komponen yang bertugas menampil-kan data source berbentuk tabel. Karena semua medan juga akan tampil dalam satu waktu, maka komponen TDBGrid tidak me-miliki properti DataField.

TDBNavigator
Komponen ini mem-visual-kan tombol-tombol yang digunakan untuk merekayasa data source, seperti menuju rekaman pertama, sebelumnya, setelahnya, terakhir, menambahkan data, menyun-ting data, menghapus data, menyimpan, membatalkan, dan menyegarkan tampilan data. Karena TDBNavigator tidak merekayasa medan tertentu (tapi semua medan), maka komponen ini tidak memiliki properti Da-taField.

TDBText
Komponen ini merupakan komponen untuk mem-visualkan tampilan dari sebuah medan. Karena TDBText menampilkan ha-nya medan tertentu, maka komponen ini memiliki properti Data-Field.

TDBEdit
Komponen ini merupakan komponen untuk mem-visualkan tampilan dari sebuah medan sekaligus sebagai tempat untuk mengubah data pada medan tersebut sebagai masukan dari pemakai. Karena TDBEdit menampilkan dan merekayasa hanya medan tertentu, maka komponen ini memiliki properti DataField.

Contoh Aplikasi

anjutkan aplikasi yang telah dibuat dengan menyertakan tiga tabel seperti pada struktur gambar

Modul V Koneksi Database menggunakan ADO

5-71

5.1. Buatlah sedemi-kian sehingga ketiga tabel tersebut masing-masing divisualisasi-kan dengan menggunakan TDBGrid. Berilah nama (properti Name) pada tiap-tiap komponen TADOTable masing-masing TableMahasiswa untuk koneksi ta-bel mahasiswa, TableMK untuk koneksi tabel mata kuliah, dan TableNilai untuk koneksi tabel nilai. Kemudian berilah nama pada tiap-tiap komponen TDataSource masingmasing DSMaha-siswa untuk data source tabel mahasiswa, DSMK untuk data source tabel mata kuliah, dan DSNilai untuk data source tabel nilai. Selain itu, tiap tabel juga bisa direkayasa menggunakan TDBNavigator, yang diletakkan di bawah setiap TDBGrid seperti pada gambar 5.16.
Gambar 5.16: Contoh aplikasi praktikum 5.

Untuk membuat projek ini tak satupun baris kode program yang diperlukan untuk diketik. Simpan unit tersebut dengan nama MainUnit dan project tersebut dengan nama ProjectKe-lima. Jalankan dan cobalah untuk melakukan rekayasa data.

Modul V Koneksi Database menggunakan ADO

5-72

Tugas Aplikasi
Tugas 5.1
Buatlah sebuah project seperti pada ProjectKelima, tapi dengan definisi database seperti gambar 5.17, dan juga menggunakan komponen TDBEdit. Berilah nama project tersebut dengan nama ProjectBus.

Gambar 5.17: Definisi database untuk tugas.

Bus NoLambung (AutoNumber) NoPol (Text, 10) Kapasitas (Number, Long Integer) NoTrayek (Number, Long Integer) Trayek NoTrayek (AutoNumber) Jurusan (Text, 30) Jarak (Number, Double) Tarip (Number, Double) Perjalanan NoPerjalanan (AutoNumber) NoLambung (Number, Long Integer) Tanggal (Date/Time) Tiket NoTiket (AutoNumber) NoPerjalanan (Number, Long Integer) NoKursi (Number, Long Integer)

Modul

6
Medan-medan Semu dan Pengesahan Data

i samping medan-medan yang telah didefinisikan dalam tabel database fisik, dalam aplikasi Delphi masih dapat dide-finisikan medan-medan buatan sendiri yang bersifat semu (vir-tual). Sebagai contoh dari ProjectKelima pada modul 5, tampilan untuk nama dan alamat mahasiswa dapat disertakan pada tam-pilan tabel Nilai, sehingga dengan hanya melihat tabel Nilai da-pat diketahui nama mahasiswanya, begitu pula bila ingin meli-hat nama mata kuliah pada tabel Nilai. Selain itu, pemasukan data pada tabel juga bisa diatur sede-mikian rupa sehingga pada waktu pemakai menyimpan peru-bahannya, bila terdapat ketidaksahihan data, maka secara oto-matis data tersebut dicegah agar tidak disimpan. Dalam kasus ProjectKelima. ini, bukalah kembali project

Modul VI Medan-medan Semu dan Pengesahan Data

6-74

Jenis-jenis Medan dalam Datasets

erkaitan dengan informasi yang perlu dan tidak perlu ditam-pilkan pada sebuah tabel, maka tiap medan tabel fisik bisa dibuat sebagai komponen sewaktu merancang aplikasi. Selain itu, dalam Delphi juga dimungkinkan penambahan beberapa medan semu.

Medan Data (Data Fields)


Medan data (data fields) merupakan medan seperti halnya me-dan-medan pada tabel database secara fisik.

Medan Pengunjung (Lookup Fields)


Medan pengunjung (lookup fields) merupakan medan semu yang tidak hadir dalam tabel database secara fisik. Namun medan ini hanya hadir sebagai tampilan pada data set. Medan ini menampilkan medan dari tabel lainnya yang me-miliki hubungan dengan tabel asal, dan menggunakan kunci utama dari tabel yang akan dibaca yang berhubungan dengan kunci asing dari tabel asal.

Medan Terhitung (Calculated Fields)


Medan terhitung (calculated fields) merupakan medan semu se-perti halnya medan pengunjung. Hanya saja tampilan pada me-dan ini tidak langsung ada, tapi ditampilkan dengan cara dihi-tung setiap kali sebuah rekaman akan ditampilkan.

Fields Editor
Untuk membuat medan-medan menjadi komponen termasuk membuat medan-medan semumaka pada Delphi terdapat fa-silitas yang disebut Fields Editor.

Modul VI Medan-medan Semu dan Pengesahan Data

6-75

Fasilitas ini bisa dijumpai pada komponen dataset umum seperti tabel dan query. Sebelum medan-medan tadi didefinisikan, maka TADOTable atau TADOQuery harus dalam keadaan aktif properti Active diisi True. Kemudian klik kanan pada komponen TADOTable atau TADOQuery, lalu pilih Fields Editor. Akan muncul Fields Editor, yang pada keadaan awalnya kosong. Klik kanan dan pilih Add all fields, maka semua medan fisik akan menjadi komponen. Dalam kasus ini, lakukan hal tersebut untuk setiap TADOTable. Untuk membuat medan semu, sebelumnya nonaktifkan komponen TADOTable atau TADOQuery yang bersangkutan, kemudian klik kanan pada Fields Editor, dan selanjutnya pilih New field. Maka akan muncul dialog New Field. Dalam hal ini, coba buka Fields Editor pada TableNilai, kemudian pada Fields Editor tersebut, klik kanan dan pilih New field.
Gambar 6.1: Dialog New Field.

Pada Field properties, isilah bagian Name dengan nama Na-maMahasiswa, bagian Type dengan String, dan bagian Size de-ngan 20. Bagian Component akan terisi secara otomatis oleh Del-phi dan disarankan untuk tidak mengubah nilainya. Pada bagi-an Field type, pilih Lookup.

Modul VI Medan-medan Semu dan Pengesahan Data Gambar 6.2: New Field pada kasus TableNilai.

6-76

Pada bagian Lookup definition, isilah Key Fields dengan NRP, sebagai kunci untuk mencari pada tabel yang dikunjungi. Kemu-dian Dataset diisi dengan TableMahasiswa, sebagai tabel yang dikunjungi. Isilah Lookup keys dengan NRP, sebagai kunci peng-hubung pada tabel yang dikunjungi. Terakhir, isilah Result field dengan Nama, sebagai medan yang akan ditampilkan oleh me-dan semu NamaMahasiswa. Klik OK. Nama komponen medan semu tersebut akan didefinisikan sebagai TableNilaiNamaMa-hasiswa. Contoh kedua adalah menambahkan medan semu untuk menampilkan nilai akhir bila diketahui nilai akhir adalah 20% dari nilai tugas ditambah dengan 30% dari nilai UTS ditambah 50% dari nilai UAS. Dalam kasus ini, anggap nama medan tersebut adalah NilaiAkhir. Pada Fields Editor, pilih New field dan isilah seperti pada gambar 6.3.

Modul VI Medan-medan Semu dan Pengesahan Data Gambar 6.3: New Field pada kasus TableNilai, untuk menampilka n medan NilaiAkhir.

6-77

Selanjutnya klik OK. Nama komponen medan semu tersebut akan menjadi TableNilaiNilaiAkhir. Untuk menampilkan hasil-nya ikuti sub bab berikutnya.

Menghitung Medan Terhitung

edan-medan terhitung tidak dapat ditampilkan pada wak-tu perancangan. Ini dikarenakan nilai medan-medan ini memang tidak disediakan baik oleh tabel asal maupun tabel la-innya, namun hanya bisa didapatkan dengan cara coding. Untuk itu, pilih kembali komponen TableNilai, dan carilah event yang bernama OnCalcFields.

OnCalcFields
Event ini akan terjadi bila dataset akan melakukan penghitungan pada medan-medannya. Pada event inilah nilai apa yang diberi-kan kepada sebuah medan semu terhitung akan dihitung. Dalam kasus ini, karena: NilaiAkhir = 20% Tugas + 30 % UTS + 50 % UAS maka isi event-handler ini adalah sebagai berikut:

Modul VI Medan-medan Semu dan Pengesahan Data

6-78

procedure Form1.TableNilaiCalcFields(DataSet: T TDataSet); begin TableNilaiNilaiAkhir.AsFloat := 0.2 * TableNilaiTugas.AsFloat + 0.3 * TableNilaiUTS.AsFloat + 0.5 * TableNilaiUAS.AsFloat; end ;

Rekayasa Tampilan Medan

ntuk membuat pemakai lebih nyaman memakai aplikasi yang dikembangkan, beberapa aspek penting tampilan me-dan dapat direkayasa. Untuk itu, ubahlah beberapa properti yang dimiliki oleh komponen yang merupakan turunan dari kelas TField seperti dijelaskan di bawah ini.

DisplayLabel
Properti ini mewakili label atau tulisan yang ditampilkan seba-gai judul menggantikan nama medan fisik. Bila diganti akan mengubah tampilan judul pada TDBGrid.

DisplayFormat
Properti ini dimiliki oleh komponen yang merupakan turunan dari kelas TAggregateField, TDateTimeField, TNumericField, dan TSQLTimeStampField. Properti ini digunakan untuk menampil-kan hasil terformat, semisal untuk memformat bilangan, tanggal, atau jam. Acuan macam-macam penulisan format dapat dilihat pada help file yang dimiliki Delphi.

DisplayWidth
Properti ini dimiliki oleh semua TField, dan mewakili lebar (jum-lah) huruf yang akan ditampilkan tiap medan pada TDBGrid.

Modul VI Medan-medan Semu dan Pengesahan Data

6-79

Visible
Properti ini digunakan untuk menampilkan sebuah medan pada pemakai atau menyembunyikannya.

Pengesahan Data

elain hal tersebut di atas, pengesahan data dalam pemasukan data pada database merupakan hal yang sangat penting. Hal ini dikarenakan tidak semua data yang dimasukkan ke dalam rekaman merupakan data yang sah (valid). Ada beberapa hal yang menyebabkan ketidaksahihan data tersebut, di antaranya pengisian medan numerik yang melibat-kan huruf, aturan-aturan yang membatasi pengisian medan (bus-siness rules), dan kemungkinan kesalahan pemakai dalam memasukkan data.

BeforePost
Event ini terjadi bila pemakai akan melakukan penyimpanan rekaman yang telah disisipkan atau diubah pada tabel secara fisik. Segala ketidaksahihan data bisa dideteksi di sini dan men-cegah penyimpanan bila data yang diisikan dirasa tidah sah. Un-tuk membatalkan penyimpanan, panggilah prosedur Abort di dalam event-handler ini.

OnPostError
Event ini terjadi bila aplikasi atau pemakai melakukan penyim-panan rekaman pada tabel tetapi terjadi exception. Hal yang sering terjadi adalah pelanggaran kunci utama atau medan yang diisikan tidak sesuai dengan yang diminta konfigurasi database. Gunakan event ini untuk menampilkan pesan kesalahan sen-diri bila terjadi exception pada waktu melakukan penyimpanan pada tabel.

Modul VI Medan-medan Semu dan Pengesahan Data

6-80

OnDeleteError
Event ini terjadi bila aplikasi atau pemakai melakukan pengha-pusan rekaman pada tabel tetapi terjadi exception. Hal yang se-ring terjadi adalah data yang dihapus masih memiliki transaksi yang berhubungan pada tabel lain sesuai dengan konfigurasi hubungan (relationship). Gunakan event ini untuk menampilkan pesan kesalahan sen-diri bila terjadi exception pada waktu melakukan penghapusan pada rekaman tabel.

Referensi Tambahan

da beberapa referensi tambahan, yang sangat berguna un-tuk diterapkan dalam beberapa persoalan. Misalkan bagai-mana mengetahui berapa jumlah mahasiswa yang mengikuti mata kuliah dengan kode MK0001. Cara yang paling sederhana adalah dengan melakukan pen-carian satu persatu pada tabel nilai, kemudian menjumlahkan rekaman yang nilai medan KodeMK sama dengan MK0001. Komponen TADOTable menyediakan beberapa metode un-tuk melakukannya, beberapa di antaranya akan dijelaskan.

First, Prior, Next, dan Last


Metode First digunakan untuk menggerakkan pilihan rekaman ke rekaman teratas, sedangkan metode Prior digunakan untuk menggerakkan pilihan rekaman ke rekaman sebelumnya. Metode Next digunakan untuk menggerakkan pilihan re-kaman ke rekaman setelahnya, sedangkan metode Last diguna-kan untuk menggerakkan pilihan rekaman ke rekaman terakhir.

Modul VI Medan-medan Semu dan Pengesahan Data

6-81

EnableControls dan DisableControls


Metode EnableControls digunakan agar setiap kali posisi rekam-an aktif digerakkan, maka data control yang berkaitan dengan dataset tersebut langsung menampilkan perubahannya. Untuk menonaktifkannya digunakan metode DisableControls, sehingga bila melakukan proses berulang pada tabel tidak akan membe-bani sistem. Perlu diketahui, setiap kali selesai melakukan proses beru-lang, jangan lupa untuk memanggil EnableControls agar tampilan pada data controls bisa dikembalikan seperti semula.

Eof dan Bof


Properti Eof bernilai True hanya jika posisi rekaman aktif berada pada rekaman terakhir. Sedangkan properti Bof bernilai True ha-nya jika posisi rekaman aktif berada pada rekaman pertama.

RecordCount
Properti RecordCount digunakan untuk mengetahui jumlah re-kaman yang ada pada suatu tabel.

FieldByName
Metode FieldByName merupakan sebuah metode untuk menun-jukkan medan sesuai dengan namanya. Metode ini memiliki pa-rameter berbentuk string yang mewakili nama medan fisiknya. Untuk lebih lengkapnya, dapat dilihat pada help file Delphi. Sedangkan berikut ini suatu fungsi untuk mengetahui jumlah mahasiswa yang mengikuti mata kuliah dengan kode MK0001. Sebelumnya, letakkan sebuah komponen TADOTable, nama-kan dengan TableSearchNilai, arahkan properti Connection ke ADOConnection1, dan isi properti TableName dengan Nilai. Ke-mudian aktifkan tabel

Modul VI Medan-medan Semu dan Pengesahan Data

6-82

tersebut dengan mengubah properti Ac-tive menjadi True. Hal ini dimaksudkan agar proses tidak mengganggu tabel nilai yang ditampilkan. Untuk komponen ini tidak diperlukan TDataSource. f u n c t i o n u m l a h M a h a s i sc o n s t K o d e M K : t r i n) : I n t e g e r ; J wa( s g begin R e s u l t :0; = TableSearchNilai.DisableControls; TableSearchNilai.First; w h i l en o t T a b l e S e a r c h N i l a i .d o f Eo begin if TableSearchNilai. FieldByName( eMK' AsString = KodeMKn 'Kod ). the Result := Result + 1; TableSearchNilai.Next; end ; TableSearchNilai.EnableControls; end ;

Contoh Aplikasi

anjutkan ProjectKelima dan tambahkan beberapa medan se-mu pada TableNilai, di antaranya: AlamatMahasiswa, mahasiswa. mewakili alamat

UmurMahasiswa, mewakili usia mahasiswa. Hitung de-ngan mengurangi waktu sekarang terhadap tanggal la-hir mahasiswa (bila dikurangkan, akan menghasilkan bi-langan yang menunjukkan usia dalam satuan hari). NamaMataKuliah, mewakili nama mata kuliah. SKS, mewakili jumlah SKS. Bobot, mewakili NilaiAkhir. jumlah SKS dikalikan

Selain itu, formatlah TableMahasiswaJenisKelamin dengan tampilan Lakilaki atau Perempuan. Begitu pula dengan medan-

Modul VI Medan-medan Semu dan Pengesahan Data

6-83

medan lainnya yang dirasa perlu diformat. Ditambah lagi dengan memperbaiki tampilan judul medan sehingga nyaman dibaca pemakai. Jangan lupa untuk mencegah agar pengisian nilai tugas, UTS, maupun UAS tidak dilakukan sembarangan, tetapi dibatasi antara 0 hingga 100.

Modul VI Medan-medan Semu dan Pengesahan Data

6-84

Tugas Aplikasi
Tugas 6.1
Dari soal 5.1, tentang ProjectBus, buatlah medanmedan semu seperlunya. Setelah itu, cegah agar tiap perjalanan untuk tiap bus tidak memakai tanggal yang sama. Kemudian, batasi agar penjualan tiket bus tidak melebihi kapasitas yang ada pada tiap bus tiap perjalanan, dan jangan sampai dalam tiap perjalanan menjual lebih dari satu tiket dengan nomor tempat duduk yang sama.

Modul

7
Hubungan Master-Detail dan Data Controls Tambahan

erkadang hubungan master-detail diperlukan, terutama da-lam penampilan tabel yang saling berhubungan sebagai ta-bel master dan tabel rincian (tabel rincian umumnya disebut tabel item transaksi). Dengan hubungan master-detail, maka untuk menghubung-kan dua tabel (master dan rincian) dan merekayasanya tanpa mendefinisikan hubungan tersebut (oleh pemakai) akan dengan mudah dilakukan. Pemakai tidak perlu lagi mengubah medan penghubung pada kedua tabel tersebut, bahkan tidak perlu lagi melihatnya, karena medan-medan yang tidak perlu dipeduli-kan pemakai tersebut bisa disembunyikan.

Mendefinisikan Hubungan Master-Detail

ntuk mendefinisikan hubungan master-detail, pemrogram tidak perlu melakukan coding sedikitpun. Mendefinisikan hubungan ini hanya memerlukan dua komponen TADOTable (beserta dua

Modul VII Hubungan Master-Detail dan Data Controls Tambahan 7-86

TDataSource yang terhubung) yang mewakili dua tabel yang saling berhubungan. Misalnya, dalam kasus ProjectKelima, bila ingin mendefini-sikan hubungan ini untuk tabel mahasiswa sebagai master dan tabel nilai sebagai rincian, maka setiap kali dipilih salah satu rekaman pada tabel mahasiswa, maka nilai yang ditampilkan hanya untuk mahasiswa yang terpilih (karena dihubungkan de-ngan medan NRP). Untuk itu, isilah properti MasterSource pada TabelNilai de-ngan DSMahasiswa (yaitu sebagai data source yang mewakili tabel mahasiswa). Kemudian definisikan hubungannya (link) de-ngan mengisi properti MasterFields. Klik pada tiga titik di kanan untuk membuka dialog Field Link Designer.
Gambar 7.1: Dialog Field Link Designer.

Pada dialog tersebut, definisikan hubungan antara medan pada tabel rincian dengan medan pada tabel master, dalam hal ini, NRP dengan NRP. Pilih NRP pada Detail Fields dan pilih NRP pada Master Fields, kemudian klik Add. Maka akan muncul NRP NRP pada Joined Fields.

Modul VII Hubungan Master-Detail dan Data Controls Tambahan 7-87 Gambar 7.2: Dialog Field Link Designer setelah didefinisikan.

Klik OK, maka pada properti MasterFields tadi akan muncul NRP. Sejauh ini, hubungan master-detail sudah terbentuk. Untuk menambah tingkat kenyamanan pemakai, karena sudah jelas NRP dan data mahasiswa yang tertera pada tabel ni-lai hanya yang terpilih pada tabel mahasiswa, maka sembunyi-kan tampilan NoNilai, NRP, dan NamaMahasiswa pada tabel nilai seperti yang telah diajarkan pada praktikum 6.

Data Controls Tambahan

i samping data controls yang telah disebutkan pada prakti-kum sebelumnya, masih ada beberapa data controls tambah-an yang tak kalah penting dalam pembuatan aplikasi database. Kebanyakan data controls tambahan ini merupakan data controls yang merekayasa data per medan.

TDBRadioGroup
Komponen ini merupakan sebuah komponen data-aware yang mewakili pilihan-pilihan (lists) tertentu untuk

Modul VII Hubungan Master-Detail dan Data Controls Tambahan 7-88

mengisi (atau me-nampilkan nilai) sebuah medan yang bertipe string. Cara kerja-nya hampir sama dengan TRadioGroup pada tab standard, hanya saja yang ini disambungkan dengan nilai medan. Komponen ini sangat berguna untuk menyaring agar pema-kai hanya mengisikan data dengan nilai-nilai tertentu.

TDBCheckBox
Komponen TDBCheckBox adalah sebuah komponen data-aware yang digunakan untuk mewakili nilai medan yang bertipe boolean.

TDBListBox
Komponen ini sama seperti TDBRadioGroup, yaitu menyaring ni-lai-nilai tertentu saja untuk medan bertipe string. hanya saja tampilannya yang menggunakan sistem daftar yang bisa digu-lung.

TDBComboBox
Komponen ini sama seperti TDBListBox, dengan perbedaan bah-wa selain pemakai bisa memilih nilainilai tertentu saja, juga bisa diisikan data yang lainnya. Biasanya memudahkan untuk me-dan yang sering menggunakan nilai-nilai tertentu tetapi masih dimungkinkan memiliki nilai lainnya.

TDBLookupListBox
Komponen ini mirip dengan TDBListBox, tetapi mampu menam-pilkan nilai-nilai hubungan ke tabel master. Komponen ini sangat membantu dalam memasukkan nilai medan pada tabel transaksi yang bergantung pada nilai medan pada tabel master. Untuk menggunakannya, ubah properti ListSource ke kom-ponen TDataSource yang mewakili tabel master, properti Key-Field dengan medan kunci pada tabel

Modul VII Hubungan Master-Detail dan Data Controls Tambahan 7-89

master, dan properti ResultField dengan medan yang ingin ditampilkan pada tabel master.

TDBLookupComboBox
Komponen ini sama dengan TDBLookupListBox, hanya saja berupa editbox yang hanya memuat satu baris dan baru bisa menampilkan daftar bila tombol drop-down diklik.

TDBMemo
Komponen ini digunakan untuk merekayasa medan bertipe memo. menampilkan dan

TDBImage
Komponen ini digunakan untuk menampilkan dan merekayasa medan bertipe gambar bitmap atau foto.

Contoh Aplikasi

ukalah ProjectBus, kemudian buatlah hubungan master-deta-il sedemikian rupa sehingga memudahkan pemakai untuk mengisi data rutin perjalanan berdasarkan bus, dan memudah-kan pengisian data bus menurut trayek. Selain itu juga buat hu-bungan master-detail untuk memudahkan pengisian data peme-sanan tiket berdasarkan perjalanan. Buatlah setiap tampilan hanya menampilkan satu hubungan master-detail, sehingga dalam project ini diperlukan tiga tampilan. Anda dapat membuat tiga form yang bisa di-switch.

Modul VII Hubungan Master-Detail dan Data Controls Tambahan 7-90

Tugas Aplikasi
Tugas 7.1
Menggunakan yang telah diberikan pada modul 5, 6, dan 7, rancanglah sebuah database dan aplikasinya untuk membantu operasional sebuah swalayan yang menangani penjualan dan pembelian barang. Berbeda dengan tugas sebelumnya, kali ini hanya diberikan tabel dan nama medannya, sedangkan tipe data tiap medan harus Anda definisikan sendiri. Begitu pula dengan hubungan (relationships) yang harus Anda tentukan sendiri.
Gambar 7.3: Definisi database (hanya medanmedan) untuk tugas 7.1. Supplier
NoSupplier Nama Alamat NoTelpon

Customer
NoCustomer Nama Alamat NoTelpon

Barang
KodeBarang Nama HargaBeli HargaJual Stok

Pembelian
NoPembelian NoSupplier Tanggal

Penjualan ItemPembelian
NoItemPembelian NoPembelian KodeBarang Jumlah NoPenjualan NoCustomer Tanggal

ItemPenjualan
NoItemPenjualan NoPenjualan KodeBarang Jumlah

Modul VII Hubungan Master-Detail dan Data Controls Tambahan 7-91

Jangan lupa untuk mencegah agar pengisian harga jual ba-rang tidak sampai lebih rendah dari harga beli. Selain itu buat sedemikian rupa sehingga memudahkan pemakai dalam meng-isikan data dengan menggunakan hubungan master-detail, dan pengesahan data untuk mencegah misalnya penjualan barang melampaui batas stoknya.

Modul

8
Query

erkadang diperlukan menampilkan data tertentu berdasar-kan kriteria tertentu pula. Hal ini sangat sulit bila hanya di-lakukan dengan menggunakan tabel. Untuk menampilkan data tertentu tersebut, tampilan bisa disaring melalui sebuah query. Query adalah kumpulan perintah yang dikirimkan pada database server, dan database server mengerjakan perintah tersebut sekaligus mengirimkan hasilnya. Jadi bila menulis aplikasi Del-phi yang mengandung query, maka yang mengerjakan perintahperintah tersebut bukan aplikasinya, melainkan database server yang dipakai. Selain untuk menampilkan hasil yang tersaring, query juga bisa digunakan untuk menyisipkan, mengubah, dan menghapus data. Ditambah lagi kemampuannya untuk membuat, meng-ubah, atau menghapus tabel bahkan database!

Structured Query Language

QL (Structured Query Language) merupakan sebuah bahasa in-ternasional yang digunakan untuk melakukan query. Karena sifatnya yang internasional, maka SQL dapat dipakai pada data-base server apapun semua database server memakai SQL.

Modul VIII Query

8-93

SQL dikategorikan dua macam, pertama adalah untuk mere-kayasa data, dan kedua untuk mendefinisikan data.

Data Manipulation Language


Bagian kategori SQL untuk melakukan rekayasa data adalah DML (Data Manipulation Language). Bagian ini hanya merekayasa atau menampilkan data yang ada pada tabel. Bagian ini tidak melakukan definisi data, seperti membuat atau menghapus tabel data.

Query yang Menampilkan Hasil (SELECT)


Query jenis ini dipakai untuk tertentu yang klausa SELECT oleh FROM. hanya menampilkan hasil, dan biasanya menyaring tampilan agar hanya data ditam-pilkan. Query ini menggunakan sebagai awalan-nya, dan selalu diikuti

Bagian SELECT memilih medan-medan yang akan ditampil-kan, sedangkan bagian FROM menyatakan tabel-tabel yang di-gunakan dalam query tersebut. Untuk melakukan penyaringan data, maka digunakan klau-sa WHERE, di mana berisi syarat agar data ditampilkan. Selain itu dalam klausa WHERE juga bisa berisi syarat hubungan dua atau lebih tabel. Beberapa fungsi yang ada dalam SQL dan paling sering di-gunakan antara lain SUM, MIN, MAX, AVG, dan COUNT. 1. Fungsi SUM digunakan untuk mengetahui jumlah nilai dalam suatu medan pada tabel, dengan syarat tipe data medan harus berupa numerik. 2. Fungsi MIN digunakan untuk mengetahui nilai teren-dah dalam suatu medan pada tabel, dengan syarat tipe data medan harus berupa numerik.

Modul VIII Query

8-94

3. Fungsi MAX digunakan untuk mengetahui nilai terting-gi dalam suatu medan pada tabel, dengan syarat tipe data medan harus berupa numerik. 4. Fungsi AVG digunakan untuk mengetahui nilai rata-rata dalam suatu medan pada tabel, dengan syarat tipe data medan harus berupa numerik. 5. Fungsi COUNT digunakan jumlah rekaman pada tabel. untuk mengetahui

Klausa ORDER BY digunakan untuk mengurutkan hasil que-ry menurut medan tertentu. Sedangkan klausa GROUP BY digu-nakan untuk melakukan pengelompokan tampilan bila sebagian medan-medan yang dipilih pada bagian SELECT yang berupa kumpulan (bila sebagian medan terpilih menggunakan fungsi seperti yang ada di atas). Klausa GROUP BY biasanya diikuti dengan klausa HAVING, yang berfungsi sama dengan klausa WHERE, namun berisi persyaratan kumpulan tadi. Sebagai contoh, SQL untuk menampilkan semua mahasiswa adalah: S E L E C T* FROM Mahasiswa Sedangkan untuk menampilkan mahasiswa yang bernama Agus dapat dilakukan dengan cara: S E L E C T* FROM Mahasiswa A WHEREA.Nama =Agus" " Untuk menampilkan nilai tugas rata-rata dari mata kuliah Aljabar Logika adalah: S E L E C TA V G B . T u g a s ) ( FROM MataKuliah A, Nilai B W H E R E ( A . N a m a " A l j a b a r L o g i) a " D = k AN (A.KodeMK = B.KodeMK) Contoh di atas menunjukkan bahwa SQL juga mendukung hubungan antar tabeldalam kasus ini, tabel mata kuliah dan tabel nilai. Berikut ini sebuah contoh menggunakan ORDER BY, yaitu menampilkan nama mahasiswa yang mengikuti mata kuliah Aljabar

Modul VIII Query

8-95

Logika, dan ditampilkan mahasiswa, bukannya NRP.

urut

menurut

nama

S E L E C TA . N R P , A . N a m a FROM Mahasiswa A, MataKuliah B, Nilai C W H E R E ( A . N R P = C . N RA N D P) (B.KodeMK = C.KodeMK) AND ( B . N a m a" A l j a b a r L o g i) a " = k O R D E RB Y A . N a m a Karena hubungan antara tabel mahasiswa dengan mata kuliah merupakan hubungan many-to-many, maka hubungan tersebut harus memiliki perantaradalam hal ini tabel nilai. Sehingga bagian klausa FROM mengandung ketiga tabel terse-but. Perlu diketahui, bahwa tabel-tabel yang ada pada klausa FROM bukan hanya tabel yang medannya ingin ditampilkan, tetapi semua tabel yang terlibat, khususnya dalam hubungan (relationship). Contoh dari klausa GROUP BY dan HAVING bisa dilihat berikut ini. S E L E C TA . N R P , A . N a m a , A V G . 2 * B . T u g a s 0+ 3 * B . U T S + (0 . 0.5 * B.UAS)S RataRata A FROM Mahasiswa A, Nilai B WHERE(A.NRP = C.NRP) G R O U PB Y A . N R P , A . N a m a H A V I N GA V G . 2 * C . T u g a s 0+ 3 * C . U T S + (0 . 0.5 * C.UAS) >= 56 O R D E RB Y A . N a m a E S C D Query tersebut di atas akan menampilkan NRP, nama ma-hasiswa, dan rata-rata nilai akhir dari semua mata kuliah yang ditempuhnya, di mana rata-rata nilai akhirnya minimal 56, dan ditampilkan urut menurun (descending) menurut nama. Untuk acuan lebih lanjut dapat dibaca pada bukubuku ten-tang SQL.

Modul VIII Query

8-96

Query yang Mengubah Data pada Tabel (INSERT, UPDATE, dan DELETE)
Jenis dari query yang lain adalah query yang mengubah data pa-da tabel. Query ini tidak menampilkan hasil, tapi mengubah data yang ada pada tabel, seperti menambahkan baris baru (insert-ing), mengubah baris yang telah ada (updating), atau menghapus baris (deleting). Acuan lengkapnya dapat dibaca pada buku-buku tentang SQL, namun di sini akan diberikan beberapa contoh untuk in-serting, updating, dan deleting.

Perintah INSERT
Perintah ini digunakan untuk menambahkan baris baru, dengan parameter medan-medan yang diisikan. Sebagai contoh, untuk menambahkan data mahasiswa baru dengan NRP 02113105, nama Kikil, alamat mBangil, dan jenis kelamin laki-laki tanpa mengisikan tempat dan tanggal lahirnya adalah: I N S E R TI N T O M a h a s i s w a (NRP, Nama, Alamat, JenisKelamin) VALUES (" 0 2 1 1 3 1 0 5 "" K i k i l, " m B a n g i l " T R U E ) , " ,

Perintah UPDATE
Perintah ini digunakan untuk mengubah medan tertentu pada baris tertentu dengan kriteria tertentu pula. Bagian klausa WHERE dapat diisi dengan kriteria pengubahan data tersebut. Bila bagian tersebut tidak diisi, maka perubahan akan dilakukan pada semua baris pada tabel tersebut. Berikut ini contoh perintah untuk mengubah tempat lahir dari mahasiswa yang bernama Kikil menjadi Pasuruan. U P D A T EM a h a s i s w a SET TempatLahir"=asuruan" P

Modul VIII Query

8-97

WHERENama = Kikil" " Perubahan tersebut hanya akan mempengaruhi satu baris. Bila kriteria yang diberikan menunjuk ke banyak baris, maka perubahan akan dilakukan pada baris-baris yang bersangkutan. Contoh, bila ingin mengubah semua alamat mahasiswa yang bernilai mBangil menjadi Pocong, dapat dilakukan dengan cara sebagai berikut. U P D A T EM a h a s i s w a SET Alamat =Pocong" " WHEREAlamat =mBangil" " Sedangkan untuk mengubah semua nilai tugas pada tabel Nilai menjadi 60 adalah sebagai berikut. U P D A T EN i l a i SET Tugas = 0 6

Perintah DELETE
Perintah ini menghapus baris sesuai dengan kriteria yang telah ditentukan. Sama seperti pada UPDATE, klausa WHERE berisi kriteria yang diinginkan. Bila bagian klausa WHERE tidak diisi, maka semua baris akan dihapus. Berhati-hatilah dalam penggunaannya, bila lupa memberi-kan klausa WHERE dan query ini dijalankan, maka semua baris data akan terhapus, dan tidak ada cara untuk mengembalikan-nya. Misalkan untuk menghapus mahasiswa yang bernama Ki-kil, dapat dilakukan dengan cara berikut. D E L E T EF R O M M a h a s i s w a WHERENama = Kikil" " Contoh berikut akan menghapus semua baris data dalam tabel Mahasiswa. D E L E T EF R O M M a h a s i s w a

Modul VIII Query

8-98

Data Definition Language


Bagian kategori SQL yang bertugas untuk mendefinisikan data adalah DDL (Data Definition Language). Dalam kategori ini, perintah-perintah yang ditulis akan melakukan pembuatan tabel (CREATE TABLE), menambah atau menghapus medan dalam tabel (ALTER TABLE), menghapus tabel (DROP TABLE), membuat indeks tambahan pada tabel (CREATE INDEX), dan meng-hapus indeks utama atau tambahan pada tabel (DROP INDEX). Pada praktikum ini DDL tidak dibahas karena definisi data dilakukan pada database serverdalam hal ini, Microsoft Access. Perintah-perintah DDL dapat didapatkan dari buku-buku yang membahas tentang SQL.

Menggunakan TADOQuery

omponen TADOQuery merupakan komponen yang hampir sama dengan TADOTable, karena juga merupakan kelas dari TCustomADODataSet. Komponen ini juga menghasilkan tabel se-perti pada TADOTable, hanya jika query yang dikerjakan meru-pakan query dengan perintah SELECT. Agar bisa ditampilkan, harus ada komponen TDataSource yang mana properti DataSource-nya mengacu ke komponen ini, sama seperti pada TADOTable.

SQL
Properti SQL merupakan sebuah properti yang dimiliki oleh TADOQuery dan bertipe TStrings. Properti ini berisi perintah-perintah SQL yang akan dikirimkan ke database server. Untuk lebih jelasnya tentang tipe data TStrings, dapat dilihat pada help file yang disertakan dengan Borland Delphi.

Modul VIII Query

8-99

Parameters
Properti ini merupakan properti untuk mendefinisikan parame-ter. Parameter yang dimaksudkan adalah semacam peubah (vari-ables) yang disisipkan pada pernyataan SQL pada properti SQL. Pemakaian parameter sangat menguntungkan terutama un-tuk kesesuaian tipe data SQL dengan tipe data pada Pascal Ob-jek. Properti Parameters merupakan properti yang bertipe TPara-meters, yang merupakan kumpulan (collections) dari beberapa pa-rameter. Untuk menunjukkan parameter tertentu dapat diakses dari metode ParamByName dengan parameter berupa nama pa-rameter. Metode ParamByName tersebut bertipe TParameter. Berikut ini dijelaskan dua properti utama yang dimiliki oleh kelas TParameter.

DataType
Properti ini digunakan untuk mengakses tipe data dari parame-ter yang digunakan. Beberapa kemungkinan nilai yang diperbo-lehkan dapat dilihat dalam help file dari Borland Delphi.

Value
Properti Value menunjukkan isi peubah parameter tersebut. Pro-perti ini bertipe Variant, sehingga semua tipe data bisa diguna-kan.

Menjalankan Query
Untuk menjalankan querymelalui TADOQuery tentunya ter-lebih dahulu properti SQL harus diisi lengkap tanpa ada kesa-lahan. Bila terdapat kesalahan, maka pada waktu menjalankan query akan terjadi exception.

Modul VIII Query

8-100

Setelah properti SQL terisi lengkap, bila ada parameter yang disertakan pada SQL maka properti Parameters juga harus dide-finisikan. Ada dua cara menjalankan query, yaitu dengan metode Open atau metode ExecSQL.

Open
Metode Open digunakan bila perintah SQL yang dikirimkan mengembalikan data tabel. Perintah SQL yang mengembali-kandan menampilkandata tabel adalah perintah SELECT.

ExecSQL
Berbeda dengan Open, metode ExecSQL dijalankan apabila pe-rintah SQL mengandung perintah yang tidak mengembalikan data tabel. Perintah-perintah tersebut di antaranya adalah IN-SERT, UPDATE, dan DELETE.

Mengakses Hasil Query


Bila query yang dijalankan mengembalikan data tabel, maka se-lain bisa diperlihatkan melalui data controls, dapat juga diakses medan-medannya secara program. Berikut ini metode yang di-gunakan, yaitu FieldByName.

FieldByName
Metode FieldByName merupakan sebuah metode untuk menun-jukkan medan sesuai dengan namanya. Metode ini memiliki pa-rameter berbentuk string yang mewakili nama medan fisiknya. Berikut ini contoh menggunakan TADOQuery untuk me-nampilkan nilai tugas, UTS, dan UAS mata kuliah Pascal II da-ri mahasiswa yang bernama Kikil. ... try ADOQuery1.Close; ADOQuery1.SQL.Clear;

Modul VIII Query

8-101

A D O Q u e r y 1 . S Q L .' S E L E C T B . T u g a s , B . U T S , B . U A S ' Add( ); A D O Q u e r y 1 . S Q L .' F R O M M a h a s i s w a A , N i l a i +B , ' Add( ' M a t a K u l i a h )C ' ; A D O Q u e r y 1 . S Q L .' W H E R E ( A . N R P = B . N R P )) ; N D ' Add( A A D O Q u e r y 1 . S Q L .' ( C . K o d e M K = B . K o d e M K )) ; N D ' Add( A A D O Q u e r y 1 . S Q L .' ( A . N a m a = : N a m a M h s ) ) A N D ' Add( ; A D O Q u e r y 1 . S Q L .' ( C . N a m a = : N a m a M K ) ' Add( ); A D O Q u e r y 1 . P a r a m e t e r s . P a r a m' N a m a M h s ' B y N a m e () . DataType := ftString; A D O Q u e r y 1 . P a r a m e t e r s . P a r a m' N a m a M h s ' B y N a m e () . V a l u e : = i k i l; 'K ' A D O Q u e r y 1 . P a r a m e t e r s . P a r a m' N a m a M K ' ByName(. ) DataType := ftString; A D O Q u e r y 1 . P a r a m e t e r s . P a r a m' N a m a M K ' ByName(. ) V a l u e : = a s c a l I; ' 'P I ADOQuery1.Open; except M e s s a g e D l g ( r j a d i k e s a l a h a n p a d a q, e r y . ' 'Te u m t E r r o r , [ m0)O K ] , b; end ; ...

Contoh Aplikasi

ukalah ProjectBus, kemudian ubah kode-kode program se-demikian rupa sehingga perintahperintah pengesahan data seperti pada soal 6.1 tidak lagi melakukan looping dengan meng-gunakan TADOTable, tetapi diganti dengan menggunakan query. Selain itu, tambahkan satu form khusus untuk laporan ten-tang tiket yang terjual untuk tiap perjalanan dan laporan kursi-kursi yang masih kosong pada bus tertentu pada perjalanan ter-tentu. Buatlah semuanya memakai query.

Modul VIII Query

8-102

Tugas Aplikasi
Tugas 8.1
Kerjakan sama seperti tugas 7.1, tetapi semua pengesahan data dan laporan harus menggunakan query. Kerjakan tugas tersebut lengkap sehingga layak untuk diujicobakan pada dunia nyata. Apabila terdapat kesalahan apapun, maka program tersebut harus mampu mengatasinya. Selamat mengerjakan.

Daftar Pustaka
Borland International, Developer Guide. Inc., Borland Delphi 7 Borland International, Inc., Delphi 7 Help File. Suprayogi, Hendra, Modul Praktikum Pemrograman Delphi, STIKI, 2003.