modul praktikum delphi 2008 final edition

Upload: dwi-yulianto

Post on 06-Jul-2015

1.228 views

Category:

Documents


1 download

TRANSCRIPT

Hendra Suprayogi, S.Kom. Ronny Susetyo Irfan Hartono

Modul Praktikum

PEMROGRAMAN DELPHIAntarmuka Borland Delphi 7

Sekolah Tinggi Informatika dan Komputer Indonesia 2008

Winner vs. LooserWinner 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

P

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 IsiWinner 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

1Pengenalan Borland Delphi dan Penyuntingan FormBorland Delphi

D

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

S

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 WindowMain 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 MenuMain menu merupakan menu utama yang digunakan untuk me-milih perintah-perintah dalam IDE Delphi. Main menu berada pada posisi teratas dalam main window.

Speed ButtonsSpeed 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 PaletteComponent 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 EditorCode 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 DesignerInti 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 InspectorDalam 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

D

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 UnitsForm 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 UnitsComponent 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 UnitsCommon 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 LainSelain 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

F

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

U

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 AplikasiBerikut 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 AplikasiTugas 1.1Rancanglah 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.2Rancanglah 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

2Events dan Event-Handlers

D

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

H

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

S

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 DiperhatikanBeberapa 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 AplikasiTugas 2.1Ubahlah 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.2Seperti 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.3Buatlah 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

3Exceptions

S

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

B

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

B

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

A

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

B

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 AplikasiTugas 3.1Rekayasalah 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.2Rekayasalah Kalkulator sehingga bisa melakukan operasi pe-mangkatan bilangan nyata dan operasioperasi trigonometri.

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

Modul

4VCL Standar dan Timer

D

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

B

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 AplikasiTugas 4.1Buatlah 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.2Buatlah 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.3Buatlah 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

5Koneksi Database menggunakan ADO

U

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

A

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

D

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 TabelPada 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 HubunganUntuk 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

O

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 SourceUntuk 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 DSNCara 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)

C

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

TADOConnectionKomponen 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.

ConnectionStringProperti 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.

LoginPromptProperti 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

TADOTableTADOTable 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.

ConnectionProperti 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.

TableNameProperti 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).

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

TADOQueryTADOQuery 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

ConnectionProperti 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.

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

ParametersProperti ini mendefinisikan parameter yang diisikan dalam pro-perti SQL.

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

Data Sources

S

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.

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

Modul V Koneksi Database menggunakan ADO

5-69

DataSetProperti 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

S

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.

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

DataFieldProperti 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

TDBGridKomponen 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.

TDBNavigatorKomponen 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.

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

TDBEditKomponen 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

L

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 AplikasiTugas 5.1Buatlah 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

6Medan-medan Semu dan Pengesahan Data

D

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

B

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 EditorUntuk 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

M

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.

OnCalcFieldsEvent 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

U

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.

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

DisplayFormatProperti 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.

DisplayWidthProperti 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

VisibleProperti ini digunakan untuk menampilkan sebuah medan pada pemakai atau menyembunyikannya.

Pengesahan Data

S

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.

BeforePostEvent 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.

OnPostErrorEvent 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

OnDeleteErrorEvent 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

A

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 p