Anda di halaman 1dari 138

BAHASA PEMROGRAMAN DELPHI

DAFTAR ISI
KATA PENGANTAR i
Curriculum Vitae Penulis ii
Ucapan Terima Kasih iii

DAFTAR ISI iv

BAB 1 PENGANTAR DELPHI


1.1. MENGENAL DELPHI 01
1.2. PRODUK DARI DELPHI 02
1.3. KEBUTUHAN INSTALASI DELPHI 03

BAB 2 LINGKUNGAN KERJA DELPHI


2.1. MENGENAL IDE DELPHI 04
2.2. MENU DAN TOOLBAR 05
2.3. COMPONENT PALETTE, FORM DESIGNER, DAN OBJECT INSPECTOR 05
2.4. OBJECT TREEVIEW 08
2.5. CODE EDITOR 08
2.6. OBJECT REPOSITORY 10
2.7. DELPHI HELP 11
2.8. FILE FILE SOURCE PENTING DELPHI 12

BAB 3 DASAR PEMROGRAMAN DELPHI


3.1. DELPHI PASCAL 13
3.2. DELPHI OBJECT PASCAL 45
3.3. EXCEPTION 55
3.4. DEBUGGING DAN EXCEPTION 58
3.5. CLASS REFERENCE 58

BAB 4 LATIHAN PEMROGRAMAN DELPHI


4.1. LATIHAN 01 : APLIKASI SEDERHANA 60
4.2. LATIHAN 02 : MENGGUNAKAN KONDISIONAL 62
4.3. LATIHAN 03 : MENGGUNAKAN ITERASI 64

BAB 5 DATABASE DELPHI


5.1. TIPE DATABASE MANAGEMENT SYSTEM 69
5.2. TIPE DATABASE DELPHI 73
5.3. MEKANISME DATA AKSES 74
5.4. ARSITEKTUR DATABASE DELPHI 75

BAB 6 DATABASE LOKAL


6.1. APLIKASI MYBASE 74
6.2. MENGAKTIFKAN DATASET 76

DIKTAT AJAR Page 5


BAHASA PEMROGRAMAN DELPHI
6.3. MENGAKSES FIELD DATASET 77
6.4. NAVIGASI DATASET 77
6.5. MEMBUAT FILE DATA PACKET 79
6.6. DATA CONTROL 81
6.7. FIELD 84
6.8. MODIFIKASI DATA 86
6.9. VALIDASI DATA 91
6.10. INDEKS 91
6.11. FILTER DAN RANGE 93
6.12. PENCARIAN DATA 96
6.13. AGGREGATE 98

BAB 7 DATABASE RELASIONAL


7.1. APLIKASI DATABASE 100
7.2. AKSESORIS UMUM APLIKASI DATABASE 110

BAB 8 RAVE REPORT


8.1. MENGGUNAKAN RAVE REPORT 115

BAB 9 SQL
9.1. SEKILAS MENGENAI SQL 129
9.2. METODE SQL 129
9.3. IMPLEMENTASI SQL DALAM BAHASA PEMROGRAMAN DELPHI 131

DAFTAR PUSTAKA 136

DIKTAT AJAR Page 6


BAHASA PEMROGRAMAN DELPHI
Teknologi informasi pada zaman modern ini berkembang sangat pesat. Tidak hanya pada satu bidang,
tetapi juga semua bidang. Merambah dunia usaha, industri, hingga instansi pemerintah. Teknologi
informasi terkait erat dengan istilah perangkat lunak (software). Perangkat lunak (software) merupakan
jembatan penghubung antara user dengan perangkat keras (hardware) komputer. Tanpa perangkat lunak
(software), perangkat keras (hardware) dari suatu komputer tak lebih dari suatu benda mati yang tidak
dapat dimanfaatkan oleh user.

Ada banyak perangkat lunak (software) yang digunakan dalam kehidupan sehari hari, seperti Microsoft
Word, Adobe Reader, Corel DRAW, dan lain lain. Perangkat lunak (software) tersebut merupakan
beberapa contoh dari perangkat lunak aplikasi (application software). Perangkat lunak aplikasi
(application software) adalah perangkat lunak (software) yang secara khusus digunakan untuk kebutuhan
pengolahan data tertentu sehingga peran dari penggunanya adalah murni sebagai seorang user. Ada pula
perangkat lunak (software) yang dapat digunakan sebagai sarana untuk membuat perangkat lunak
(software) lainnya atau aplikasi. Perangkat lunak (software) seperti ini dinamakan perangkat lunak bahasa
pemrograman (programming language software). Dengan perangkat lunak bahasa pemrograman
(programming language software) ini, Software Engineer dapat membuat, merancang, dan mengatur
sendiri interface beserta fasilitas perangkat lunak (software) yang akan dibuat. Perangkat lunak
(software) yang dapat ditangani oleh perangkat lunak bahasa pemrograman (programming language
software) meliputi banyak bidang misalnya aplikasi perkantoran, aplikasi perbankan, aplikasi desain
grafis, aplikasi desktop, dan lain lain. Dalam buku ini, perangkat lunak bahasa pemrograman
(programming language software) yang dikupas adalah bahasa pemrograman Delphi.

1.1. Mengenal Delphi

Salah satu perangkat lunak bahasa pemrograman (programming language software) yang menduduki
peringkat 50 (lima puluh) besar dunia adalah Borland Delphi. Borland Delphi menggunakan bahasa
pemrograman Pascal. Bahasa pemrograman ini dipakai pertama kali pada perangkat lunak bahasa
pemrograman (programming language software) yang bernama Turbo Pascal. Pascal juga merupakan
salah satu produk legendaries dari Borland. Sekitar tahun 90 an, Pascal pernah menjadi perangkat lunak
bahasa pemrograman (programming language software) popular yang menjadi pilihan dari Software
Engineer. Hal ini karena bahasa Pascal mudah dipelajari.

Banyak jenis aplikasi yang dapat dibuat oleh bahasa Pascal. Seiring dengan perkembangan dunia
Teknologi Informasi, bahasa pemrograman juga turut berkembang. Yang semula masih menggunakan
text mode kemudian berkembang menjadi bahasa pemrograman dengan GUI yang sangat menarik.
Perkembangan tersebut tidak lepas dari pengaruh perkembangan sistem operasi (operating system).
Dahulu Turbo Pascal digunakan untuk sistem operasi (operating system) yang masih menggunakan DOS
(Disk Operating System). Karena Microsoft mulai banyak mengeluarkan varian sistem operasi yang
mendukung GUI, seperti Windows 95, Windows 98, sampai dengan Windows Vista, mau tidak mau
Borland pun harus menyesuaikan dengan perkembangan tersebut. Pada akhirnya muncullah perangkat
lunak bahasa pemrograman (programming language software) yang bernama Borland Delphi hingga
Turbo Delphi. Versi terbaru adalah Delphi 2009. Meski ada banyak versi Delphi, teknikal pemrograman
yang dibahas dalam buku ini adalah Delphi 7. Versi ini dipilih karena mempunyai fitur dan fasilitas yang
mencukupi, kinerja yang bagus pada spesifikasi perangkat keras (hardware) minimum, di samping itu
cukup popular dan banyak digunakan oleh Software Engineer.

Sekilas mungkin terlintas pertanyaan di benak Anda. Mengapa Borland Delphi menjadi bahasa
pemrograman yang begitu popular ? Jawabannya adalah, Borland Delphi mempunyai banyak fasilitas dan

DIKTAT AJAR Page 7


BAHASA PEMROGRAMAN DELPHI
bahasa pemrograman ini relative mudah dipelajari dan digunakan. Delphi mendukung berbagai fasilitas
yang tidak dimiliki oleh bahasa pemrograman lain, misalnya fasilitas source completion, tool database
desktop, xml converter, Microsoft Office Component Connector, Corba, BDE, dan masih banyak lagi.
Delphi adalah salah satu aplikasi pemrograman yang menarik. Delphi bukan hanya digunakan untuk
perancangan aplikasi desktop ataupun console, tetapi juga web development. Oleh karena fungsinya
sangat beragam, Borland Delphi dikenal sebagai bahasa pemrograman Rapid Application Development
(RAD).

Salah satu fasilitas bahasa pemrograman Delphi yang paling banyak digunakan dan paling banyak
membantu dalam proses pembuatan program adalah fasilitas source completion. Source completion
adalah fasilitas yang disediakan oleh Delphi yang mampu digunakan untuk melengkapi kode yang
dituliskan pada kode editor secara otomatis. Dengan fasilitas ini penulisan listing program akan menjadi
lebih cepat. Tentu saja hal ini akan semakin menghemat waktu, biaya, dan tenaga.

Anda membutuhkan database? Delphi juga dapat menangani kebutuhan database Anda secara langsung,
dengan dukungan database desktop. Pembuatan report juga dapat ditangani secara langsung oleh Delphi.
Dalam hal pembuatan report, Delphi telah menyediakan aplikasi tambahan yang dinamakan Quick Report
dan Rave Report. Quick Report dan Rave Report adalah tool yang dirancang khusus untuk menangani
report. Tool ini sudah ada dalam paket Delphi. Jadi, Delphi merupakan paket bahasa pemrograman yang
lengkap dan patut dijadikan pilihan oleh Anda.

1.2. Produk dari Delphi

Sebagai bahasa pemrograman yang bersifat Rapid Application Development (RAD), Delphi telah
menghasilkan beberapa aplikasi sebagai berikut ini :
Accounting : Intuit Lacerte, Spryka Desktop Budget .
Business : Atlantis Word Processor, SME:Service Management Enterprise Service management
software.
CodeGear Products : CodeGear Delphi, CodeGear C++ Builder, Borland JBuilder versions 1 and 2.
Communication : Globestar Systems Connexall (Event Notification and Presence Management
Platform).
Database Management/Development : MySQL Tools (Administrator, Query Browser), TOAD, SQL
Maestro
Email Marketing : Spryka Epostmailer
Engineering Software : Altium Designer/Protel (electronics design), OrcaFlex (offshore structural
analysis).
Image Viewers : FastStone Image Viewer, FuturixImager, Photofiltre, BioniX Wallpaper Changer.
Internet Messaging : Skype (VoIP and IM), QIP (IM), The Bat! (e mail client), PopTray (e mail checker),
FeedDemon (feed viewer), XanaNews, Xnews (newsgroup reader).
Music Production : FL Studio.
Point of Sale and Retail Management : Infinity RMS by Triquestra International .
Software Development : Dev C++ (IDE), DUnit (unit testing), Help & Manual (help system authoring),
Inno Setup (installer engine), Game Maker .
Web Authoring : Macromedia HomeSite (HTML editor), TopStyle Pro (CSS editor), Macromedia
Captivate (screencast) .
Web Browsers (MSIE shells) : Avant Browser, Netcaptor.

DIKTAT AJAR Page 8


BAHASA PEMROGRAMAN DELPHI
Utilities : Spybot Search & Destroy, Ad Aware (anti spyware), jv16 PowerTools, Total Commander
(file manager), Copernic Desktop Search, PowerArchiver, Beyond Compare(file comparison),
WordWeb (dictionary/thesaurus).

1.3. Kebutuhan Instalasi Delphi

Untuk melakukan instalasi dari Delphi, sistem operasi Window Anda harus telah didukung beberapa
aplikasi eksternal Window. Beberapa syarat aplikasi eksternal yang harus dipenuhi sebagai berikut :
Microsoft .NET Framework 2.0.
Microsoft Direct Access Object 2.8.
Microsoft Internet Explorer v6.0 SP1.
Microsoft XML Core Services (MSXML) v4.0 SP2.
Microsoft Visual J# .NET v2.0 Redistributable.

Jika pada sistem operasi Windows yang Anda gunakan ternyata belum memenuhi syarat aplikasi yang
disebutkan, maka installer Delphi akan meng instalasi nya secara otomatis. Selain itu, instalasi Delphi
juga membutuhkan spesifikasi tertentu pada komputer yang Anda gunakan, sesuai dengan kebutuhan
minimum Delphi.

Ketentuan sistem minimum komputer yang harus dipenuhi adalah sebagai berikut :
Intel Pentium atau kompatibel, kecepatan prosesor minimal 1.4 GHz (disarankan 2 GHz).
1 GB RAM (direkomendasikan 2 GB).
3 GB ruang kosong pada hard disk untuk Delphi.
750 MB ruang kosong pada hard disk untuk persyaratan.
DVD RW/ROM Drive.
Monitor 1024 x 768 piksel atau monitor dengan resolusi lebih tinggi.

Berikut ini adalah daftar jenis sistem operasi Windows yang mendukung Delphi :
Microsoft Windows 2000 (SP4 atau yang lebih tinggi).
Microsoft Windows XP Home atau Professional (SP3 atau yang lebih tinggi).
Microsoft Windows Vista SP1 (memerlukan administrator policy).
Microsoft Windows Server 2003 (SP1).
Microsoft Windows Server 2008.

Setelah memahami dan memenuhi kebutuhan perangkat lunak (software) dan perangkat keras
(hardware) untuk meng instal Delphi, Anda dapat melanjutkannya dengan melakukan instalasi Delphi di
komputer.

DIKTAT AJAR Page 9


BAHASA PEMROGRAMAN DELPHI
Integrated Development Environment atau IDE adalah sebuah lingkungan terintegrasi yang digunakan
pada proses pengembangan perangkat lunak (software). Delphi menyediakan IDE untuk digunakan oleh
Software Engineer dalam proses pengembangan dari aplikasi secara cepat dan mudah.

2.1. Mengenal IDE Delphi

IDE adalah bagian dari Delphi yang digunakan untuk menciptakan aplikasi. Dengan IDE secara visual, para
Software Engineer dapat merancang tampilan untuk para user interface (antarmuka pengguna) dan
melakukan penulisan skrip program (kode program).

Gambar 2 1.IDE Delphi

Pada saat pertama kali dipanggil, akan muncul beberapa tools utama dalam Delphi IDE, yaitu Menu,
Toolbar, Component Palette, Object Inspector, Object Treeview, Code Editor, Project Manager, dan
beberapa tools lain. Semua fasilitas dan fitur tersebut mempunyai tujuan untuk membuat para
pengembang aplikasi dapat mengembangkan aplikasi secara mudah dan cepat.

DIKTAT AJAR Page 10


BAHASA PEMROGRAMAN DELPHI
2.2. Menu dan Toolbar

Window utama Delphi terdiri atas menu, toolbar, dan Component Palette. Menu yang ada dalam Delphi
berisi sejumlah besar perintah yang sebagian diantaranya mempunyai shortcut key yang dapat
dipergunakan untuk akses cepat menggunakan keyboard.

Gambar 2 2. Menu dan Toolbar

Toolbar yang ada dalam bahasa pemrograman Delphi berupa sekumpulan tombol untuk fungsi fungsi
yang sering dipergunakan oleh Software Engineer. Toolbar tersebut dikelompokkan dalam beberapa
kelompok, yaitu Standard Toolbar, View Toolbar, Desktop Toolbar, Debug Toolbar, serta Internet Toolbar.

Di bawah ini daftar shortcut yang sering digunakan dalam bahasa pemrograman Delphi.

Shortcut Keterangan
F1 Bila Anda membutuhkan bantuan dalam membuat aplikasi, tombol ini akan
menghubungkan Anda dengan Help Delphi.
F12 Shortcut ini berguna untuk pindah dari form ke editor kode dengan cepat.
Shift + F12 Shortcut ini berguna untuk menampilkan form yang sedang Anda kerjakan dalam
aplikasi.
Ctrl + F12 Menampilkan semua unit yang ada pada suatu proyek.
F11 Berguna untuk mengaktifkan Object Inspector.
Ctrl + F11 Membuka file proyek dengan cepat.
Shift + Ctrl + F11 Menampilkan Window Project Option.
F9 Mengeksekusi program yang sedang Anda kerjakan.

2.3. Component Palette, Form Designer, dan Object Inspector

Component Palette, Form Designer, dan Object Inspector secara bersama sama digunakan untuk
membuat tampilan program.

2.3.1. Component Palette

Component palette berisi komponen komponen Delphi (Visual/Non Visual VCL dan CLX) yang dapat
digunakan untuk mendesain tampilan program dalam suatu Form. Komponen yang ada dalam komponen
palette disusun dan dikelompokkan dalam page sesuai fungsinya. Misalnya tab standard hanya berisi
komponen standar yang biasa digunakan dalam pemrograman.

Contoh dari tab standard adalah komponen Button, Edit, Label, RadioButton, dan masih banyak lagi.

Gambar 2 3. Component Palette

DIKTAT AJAR Page 11


BAHASA PEMROGRAMAN DELPHI
2.3.2. Form Designer

Bahasa pemrograman Delphi adalah sebuah IDE yang bertujuan untuk pembuatan aplikasi visual. Aplikasi
visual adalah aplikasi yang memerlukan interaksi dari user melalui penglihatan visual mereka. Bayangkan
apa yang terjadi apabila bentuk form yang dirancang terkesan acak acakan. Oleh sebab itu, bahasa
pemrograman Delphi menyediakan fasilitas yang berfungsi untuk memudahkan Software Engineer dalam
merancang form secara user friendly dan tentu saja harus mudah dimengerti oleh user. Adapun fasilitas
yang disediakan oleh Delphi dikenal dengan istilah Form Designer.

Form designer adalah form tempat untuk mengatur komponen sesuai dengan kebutuhan tampilan
program yang akan dibuat. Cara meletakkan komponen ke dalam form ada beberapa macam, yaitu :
Click komponen pada component palette, kemudian click atau drag pada Form.
Double click komponen pada component palette, maka komponen tersebut akan terletak pada
tengah form.
Shift click pada component palette, kemudian click pada form beberapa kali untuk meletakkan
beberapa komponen. Untuk menormalkan kembali status click, tekan tombol panah pada bagian kiri
component palette.

Gambar 2 4. Form Designer

Objek yang sudah ada dalam form dapat diatur posisinya sesuai dengan kebutuhan cukup dengan cara
click and drag pada objek tersebut. Objek yang terseleksi akan ditandai dengan delapan kotak kecil di
bagian tepi dan sudutnya. Beberapa objek dapat diseleksi secara bersamaan. Caranya dengan menekan
tombol Shift sambil click pada objek lain, atau dengan menekan tombol Ctrl sambil melakukan drag.
Beberapa objek yang terseleksi dapat dipermudah dengan pengaturan posisinya dengan melakukan
align. Pilih menu Edit Align. Fungsi align ini sangat bermanfaat karena dapat memudahkan Software
Engineer dalam menyusun tampilan yang rapi.

DIKTAT AJAR Page 12


BAHASA PEMROGRAMAN DELPHI
2.3.3. Object Inspector

Object Inspector dipergunakan untuk mengubah nilai property dari objek yang terseleksi yang ada dalam
Form Designer. Object Inspector terdiri atas 2 (dua) page.

Page pertama adalah Properties, berguna untuk mengatur property komponen yang sedang aktif.

Gambar 2 5. Object Inspector page Properties

Dan page kedua adalah Events yang berfungsi sebagai trigger/pemicu komponen yang bersangkutan
untuk menjalankan perintah tertentu.

Gambar 2 6. Object Inspector page Events

DIKTAT AJAR Page 13


BAHASA PEMROGRAMAN DELPHI
2.4. Object Treeview

Object Treeview secara default berada di sisi kiri desktop. Object Treeview menampilkan hubungan
parent child antar komponen dalam bentuk hirarki. Object Treeview, Form Designer, dan Object Inspector
saling tersinkronisasi, sehingga bila fokus kita ubah dalam Form Designer maka fokus dalam Object
Treeview dan Object Inspector juga akan berpindah.

Gambar 2 7. Object Treeview

2.5. Code Editor

Ketika kita menyusun komponen dalam suatu form, Delphi akan membangkitkan kode program dalam
bahasa Object Pascal. Kita dapat meng edit kode program dengan menggunakan code editor yang
merupakan suatu editor teks yang mempunyai banyak fitur.

Gambar 2 8. Code Editor

DIKTAT AJAR Page 14


BAHASA PEMROGRAMAN DELPHI
Salah satu fungsi yang sangat membantu kita dalam menyusun program adalah adanya syntax
highlighting yaitu adanya perbedaan style dan warna font untuk kata kunci, identifier, konstanta, dan
lain lain. Pada bagian kiri terdapat Code Explorer, yang berisi daftar variabel, procedure, uses list, dan
lain lain yang ditampilkan dalam bentuk tree. Pada bagian kanan adalah Code Editor. Dengan code editor,
kita dapat membuka lebih dari satu file text, yang masing masing dapat di pilih dengan page selector.
Pada bagian bawah code editor terdapat status bar yang berisi informasi tentang posisi kursor (baris dan
kolom), status modifikasi file, serta status Insert/Overwrite dari code editor. Di sebelah kanannya
terdapat code/diagram selector yang dapat digunakan untuk mengganti tampilan kode menjadi diagram
dan sebaliknya.

Fitur fitur lain yang tersedia dalam code editor sebagai berikut ini.

2.5.1. Code Insight

Code Insight tool digunakan untuk menampilkan window popup sesuai konteks. Fitur fitur dalam code
editor yang masuk kelompok ini sebagai berikut :
Code Completion, digunakan untuk mempermudah Software Engineer dalam menentukan property,
method, ataupun event dari objek tertentu yang telah diketikkan.
Code Parameter, digunakan untuk mengetahui parameter apa saja yang dipunyai oleh suatu
procedure/function tertentu.
Tooltip Expression Evaluation. Pada saat program sedang berhenti ketika terjadi proses debugging,
gerakkan mouse pointer ke suatu ekspresi tertentu, diamkan beberapa lama, maka akan muncul nilai
dari ekspresi tersebut.
Tooltip Symbol Insight. Pada saat kita sedang mengetikkan kode program, gerakkan mouse di atas
suatu identifier tertentu, maka akan muncul deklarasi dari identifier tersebut.

2.5.2. Code Template

Code Template adalah kerangka struktur program yang mempersingkat Software Engineer dalam
mengetikkan kode program. Tekan Ctrl J untuk menampilkan daftar Code Template. Kita dapat
mendefinisikan beberapa template lain melalui Editor Options.

2.5.3. Class Completion

Class Completion digunakan untuk melengkapi kelas tertentu dan untuk meng generate suatu kerangka
kode di bagian implementasi. Untuk melakukannya ketikkan tombol Ctrl Shift C. Sebagai contoh, jika kita
mendefinisikan property test : Integer, maka setelah Ctrl Shift C ditekan maka akan di generate write dan
read spicifier pada bagian private, serta kerangka kode pada bagian implementasi. Fungsi ini sangat
membantu bila kita banyak bekerja dengan Object Oriented Programming.

2.5.4. Code Browsing

Code Browsing digunakan untuk memindahkan kursor ke tempat deklarasi suatu identifier tertentu. Bila
mouse pointer digerakkan di atas suatu identifier tertentu, maka akan muncul deklarasi identifier
tersebut. Tetapi bila kita tahan tombol Ctrl sambil Anda gerakkan mouse pointer ke identifier tersebut
maka identifier tersebut ditampilkan dalam warna biru dengan garis bawah. Click identifier tersebut maka
kursor akan menuju deklarasi identifier tersebut. Untuk kembali ke posisi semula dapat menggunakan
tombol browse back dan browse forward. Prinsip kerja dari code browsing mirip dengan aplikasi web

DIKTAT AJAR Page 15


BAHASA PEMROGRAMAN DELPHI
browser dalam internet di mana pada saat kita tahan tombol control maka identifier yang ada di bawah
mouse pointer seperti web link, sedangkan tombol browse back dan browse forward mirip tombol back
dan forward dalam web browser.

Untuk memindahkan kursor dari deklarasi procedure/function menuju implementasi procedure/function


tersebut, gunakan Ctrl Up dan Ctrl Down.

2.5.5. Code Explorer

Dalam code explorer, daftar isi code editor ditampilkan dalam bentuk diagram pohon (tree diagram).
Dengan code explorer navigasi terhadap kode program akan menjadi sangat mudah. Double click item
dalam code explorer, maka kita akan langsung menuju tempat item tersebut dalam code editor.

2.6. Object Repository

Object Repository dalam Delphi berisi kumpulan objek (Form, Dialog, Wizzard, Template, dll) yang dapat
memudahkan dalam hal development. Dengan Object Repository, modul modul program ataupun proyek
yang pernah dibuat dapat dipergunakan kembali (reusable).

Gambar 2 9. Object Repository

Untuk memasukkan proyek kita ke dalam object repository, kita gunakan menu Project Add to
Repository. Bila yang ingin kita tambahkan adalah form atau data module, kita dapat menambahkannya
ke object repository dengan click kanan dan pilih menu Add to Repository. Untuk mengakses item dalam
object repository, kita gunakan menu File New Other. Di layar monitor akan muncul objek objek yang
dapat dipergunakan kembali.

Kita dapat mempergunakan objek objek tersebut dalam 3 (tiga) cara, yaitu :

DIKTAT AJAR Page 16


BAHASA PEMROGRAMAN DELPHI
2.6.1. Copy

Pilih copy, bila menginginkan proses copy terhadap suatu objek untuk ditempatkan dalam projek.
Perubahan apa pun terhadap object repository tidak berpengaruh pada objek dalam proyek, demikian
juga sebaliknya, perubahan objek tersebut dalam proyek tidak akan berpengaruh terhadap objek dalam
object repository.

2.6.2. Inherit

Pilih inherit, bila menginginkan proses pembuatan turunan dari objek yang ada dalam object repository.
Bila terjadi proses compile, perubahan yang terjadi dalam object repository akan berpengaruh terhadap
objek dalam proyek. Tetapi perubahan objek dalam proyek tidak akan terpengaruh pada object
repository.

2.6.3. Use

Pilih use, bila menginginkan objek dalam object repository menjadi bagian dalam aplikasi. Perubahan
terhadap objek dalam proyek akan berpengaruh terhadap objek yang ada dalam object repository karena
objek dalam proyek maupun dalam object repository adalah sama. Penggunaan metode ini harus
dilakukan dengan terencana dan hati hati.

2.7. Delphi Help

Bahasa pemrograman Delphi menyediakan context sensitive help, yaitu help yang bekerja berdasarkan
konteks. Dengan menekan tombol F1, akan diperoleh help tergantung objek/Window yang aktif.

Gambar 2 10. Help Delphi

DIKTAT AJAR Page 17


BAHASA PEMROGRAMAN DELPHI
2.8. File file Source Penting Delphi

Dalam setiap bahasa pemrograman, sangat penting untuk mengetahui dengan pasti jenis jenis file
sumber (source) yang dibutuhkan untuk membuat aplikasi. Untuk Delphi, ada tiga jenis file sumber utama
yang tidak boleh hilang/terhapus, yaitu :
File Project, mempunyai ekstensi *.dpr,
File Unit, mempunyai ekstensi *.pas,
File Form, mempunyai ekstensi *.dfm.

Hirarki tertinggi dari sistem file Delphi terletak pada Project, karena di dalam Project lah unit dan form
berada. Tanpa Project, Anda tidak dapat melakukan kompilasi program, tetapi tanpa unit atau form Anda
masih dapat mengompilasi program. Untuk pemrograman Delphi berbasis Window, minimal dalam
sebuah Project terdapat sebuah unit dan sebuah form.

DIKTAT AJAR Page 18


BAHASA PEMROGRAMAN DELPHI
Bahasa pemrograman yang digunakan dalam Delphi adalah suatu variant dari bahasa Pascal, yang oleh
Delphi disebut sebagai Object Pascal karena variant ini meng implementasi Object Oriented Programming
(OOP). Pada bab ini, Delphi Object Pascal akan dibahas dalam dua sub bab, yaitu sub bab dengan judul
Delphi Pascal yang membahas elemen bahasa Delphi yang tidak terkait dengan OOP, dan Delphi Object
Pascal yang mempunyai elemen terkait dengan OOP.

3.1. Delphi Pascal

3.1.1. Komentar pada Kode

Komentar adalah tulisan pada kode yang digunakan untuk kepentingan dokumentasi. Compiler tidak akan
menerjemahkan komentar. Pada bahasa pemrograman Delphi, komentar ditandai dengan Kurung
kurawal { } dan kurung biasa dan tanda bintang (* *) untuk komentar yang bisa lebih dari satu baris, serta
garis miring ganda // untuk komentar yang hanya satu baris.

{ Ini adalah Komentar }


{
MyProg ver 1.0
Program ini dibuat untuk uji coba saja
}
(* Coba-coba *)
// Trik ini adalah trik yang sederhana

3.1.2. Identifier

Identifier adalah nama untuk meng identifikasi konstanta, tipe data, variabel, procedure, function, unit,
program, dan field pada record.

Pendefinisian identifier harus memenuhi ketentuan sebagai berikut :


Panjang nama suatu identifier maksimum 63 (enam puluh tiga) karakter. Selebihnya akan diabaikan
oleh Compiler.
Identifier harus diawali dengan abjad, atau karakter garis bawah (_).
Karakter berikutnya bisa abjad, karakter garis bawah, atau angka.
Identifier tidak dapat mengandung karakter spasi ataupun symbol simbol seperti $, #, &, %, dan lain
lain.
Nama identifier tidak boleh sama dengan kata kunci (reserved word).

3.1.3. Kata Kunci (reserved word) dan Directive

Kata kunci (reserved word) adalah kata yang memiliki peran khusus dalam bahasa Delphi Pascal. Kata
yang termasuk kata kunci tidak boleh menjadi identifier. Selain itu, Delphi juga memiliki sejumlah kata
yang termasuk dalam kelompok directive, yaitu kata yang punya peran khusus tergantung lokasinya. Ini
berarti, meskipun sangat tidak dianjurkan, kita dapat mendefinisikan identifier dengan kata yang
termasuk directive, misalnya private, public, dan lain lain. Berikut ini daftar kata yang termasuk kata kunci
(reserved word) yang ditampilkan dalam tabel dengan urutan alphabet.

DIKTAT AJAR Page 19


BAHASA PEMROGRAMAN DELPHI
Kata Kunci Peran dalam Delphi Pascal
and Operasi Boolean AND.
array Untuk mendefinisikan array.
as Untuk melakukan typecast.
asm Awal dari definisi Assembly.
begin Awal blok.
case Pencabangan dengan banyak alternative.
class Definisi kelas.
const Definisi konstanta.
constructor Metode khusus untuk membentuk kelas.
destructor Metode khusus untuk menghancurkan kelas.
dispinterface Bentuk khusus interface, yaitu Dispatch Interface
(berkaitan dengan COM automation).
div Pembagian bilangan bulat.
do Awal dari statement yang akan dijalankan (untuk
for, while, with, tryexcept).
downto Untuk for dengan arah pengulangan terbalik.
else Pilihan lainnya dalam suatu pencabangan (untuk if
dan case).
end Akhir dari blok.
except Awal dari exception block (untuk tryexcept).
exports Digunakan untuk meng export procedure, function
atau varibel (dalam DLL).
file Untuk mendefinisikan variable dengan tipe file.
finalization Awal dari perintah yang harus dijalankan pada saat
unit ditutup (pasangan dari initialization).
finally Kata kunci untuk melindungi resource (tryfinally).
for Pengulangan dengan banyaknya pengulangan yang
sudah diketahui.
function Pendefinisian dari function.
goto Perintah untuk loncat ke label tertentu.
If Pencabangan dengan 2 (dua) alternative.
implementation Kata kunci yang mengawali bagian implementation.
initialization Awal dari sekumpulan perintah yang harus
dijalankan ketika suatu unit mulai diakses.
inline Untuk meng akses perintah assembly.
interface Awal dari bagian interface dalam unit.
Kata kunci untuk mendefinisikan interface.
Is Untuk mengecek tipe kelas.
label Label yang menandai tempat untuk perintah goto.
library Kata kunci untuk menandai sebuah proyek akan
menghasilkan library (DLL).
mod Pembagian sisa.
nil Pointer kosong.
not Operator Boolean untuk negasi (NOT).
object Alternative dari pendefinisian kelas.

DIKTAT AJAR Page 20


BAHASA PEMROGRAMAN DELPHI
of Kata kunci yang menjadi pelengkap kata kunci lain
tertentu (file, case, array, set, dll).
or Operator Boolean untuk atau (OR).
out Definisi parameter untuk procedure/function yang
hanya digunakan sebagai output saja.
packed Untuk mendefinisikan tipe record atau array yang
tidak di align menjadi word atau double word.
procedure Pendefinisikan procedure.
program Pendefinisikan project yang merupakan program.
property Atribut dari objek yang dapat memiliki metode
untuk mengaksesnya (Setter dan Getter).
raise Untuk membangkitkan exception.
record Untuk mendefinisikan tipe record.
repeat Kata kunci untuk pengulangan di mana syarat
berhentinya pengulangan diperiksa di akhir blok.
resourcestring Untuk mendefinisikan resource.
set Untuk mendefinisikan himpunan.
shl Operasi bitwise untuk shift left.
shr Operasi bitwise untuk shift right.
string Untuk mendefinisikan tipe string.
then Untuk mendefinisikan alternative utama dalam if.
threadvar Untuk mendefinisikan variabel local dari thread.
to Untuk mendefinisikan pengulangan dengan for
try Untuk melindungi resource (tryfinally) atau untuk
menangkan exception (tryexcept).
type Untuk mendefinisikan tipe identifier.
unit Untuk mendefinisikan unit.
until Untuk mendefinisikan pengecekan dalam
pengulangan repeat.
uses Untuk mengakses unit lain.
var Untuk mendefinisikan variabel.
while Untuk mendefinisikan pengulangan di mana
pengecekan berhentinya pengulangan dilakukan di
awal.
with Untuk menyingkat akses terhadap field dari record
atau field, property, ataupun method dari objek.
xor Operasi Boolean exclusive or (XOR).

DIKTAT AJAR Page 21


BAHASA PEMROGRAMAN DELPHI
Berikut ini beberapa directive yang ditampilkan dalam urutan alphabet.

Nama Directive Peran Directive dalam Delphi Pascal


at Untuk mendefinisikan dalam metode mana
perintah raise akan dilakukan.
automated Level akses yang sama dengan public, tetapi
memiliki informasi berkaitan dengan
Automation Server.
message Untuk mendefinisikan sebuah metode yang
akan me respon Windows Message
tertentu.
on Untuk memeriksa exception apa yang akan
ditangkap.
private Untuk mendefinisikan level akses private
bagi metode atau property dari objek.
protected Untuk mendefinisikan level akses protected
bagi metode atau property dari objek.
published Untuk mendefinisikan level akses published
bagi metode atau property dari objek.
public Untuk mendefinisikan level akses public
atau property dari objek.

Compiler Directive
Compiler directive adalah informasi yang diberikan kepada compiler tentang bagaimana compiler akan
meng compile program. Compiler directive berbentuk sintaks khusus pada blok komentar yang diawali
dengan karakter $.
Compiler directive dapat dikelompokkan menjadi 3 (tiga) kelompok, yaitu :
Switch directive, yaitu directive yang digunakan untuk menghidupkan atau mematikan fitur khusus
yang dimiliki oleh compiler. Untuk setiap directive yang digunakan, biasanya menggunakan tanda +
atau on untuk menghidupkan fitur tersebut, dan menggunakan tanda atau off untuk
mematikannya. Beberapa directive jenis ini dapat dipanggil dalam satu perintah dengan dibatasi oleh
tanda koma. Contohnya sebagai berikut :

{ $O }
{* $O- *}
{ $B+, R-, S- }

Parameter directive, yaitu directive yang menentukan parameter tertentu yang berpengaruh
terhadap proses compile. Contohnya adalah :

{ $I TYPES.INC }

Conditional directive, adalah kompilasi berdasarkan kondisi, di mana kondisi ditentukan oleh
keberadaan suatu konstanta tertentu. $DEFINE digunakan untuk menentukan bahwa konstanta
tersebut eksis, sedangkan $UNDEF digunakan untuk menentukan bahwa konstanta tersebut tidak
(lagi) eksis. Untuk menentukan conditional compilation nya, gunakan $IFDEF, $IFNDEF, $IF, $ELSEIF,
$ELSE, $ENDIF, serta $IFEND. Berikut ini adalah contohnya :

DIKTAT AJAR Page 22


BAHASA PEMROGRAMAN DELPHI
{ $DEFINE DEBUG}

{ $IFDEF DEBUG}
Writeln (Debug is on.) ; // baris ini di-compile
{ $ELSE}
Writeln(Debug is off.) ; // baris ini tidak di-compile
{ $ENDIF}

{ $UNDEF DEBUG}

{ $IFNDEF DEBUG}
Writeln(Debug is off.) ; // baris ini di-compile

{ $ENDIF}

Compiler directive dapat dikirimkan melalui command line parameter jika Anda menggunakan command
line parameter untuk melakukan compile, bisa juga diletakkan dalam configuration file (file dengan
ekstension * .cfg). Semua compiler directive yang diletakkan dalam program akan meng override compiler
directive dari file berekstensi *. cfg maupun command line.

3.1.4. Unit

Delphi Pascal merupakan bahasa modular sehingga memungkinkan modul program dapat di compile
secara terpisah pisah. Modul ini disebut sebagai unit. Penggunaan unit akan membuat program menjadi
terstruktur dan memungkinkan reusability kode program dalam projek yang berbeda. Kita dapat
membuat sebuah unit yang berdiri sendiri dan dapat dipergunakan oleh proyek apa pun. Ketika program
di compile, di run atau sedang dilakukan syntax checking, Delphi akan membentuk sebuah file biner
dengan nama yang sama dan berakhiran dcu.

Struktur Unit
Sebuah unit selalu diawali dengan kata kunci unit <Nama Unit> dan diakhiri dengan end. (end dan tanda
titik). Nama unit harus sama dengan nama file (tanpa extension) serta mengikuti ketentuan sebagai
identifier. Unit akan terbagi menjadi 2 (dua) bagian, yaitu interface dan implementation. Pada bagian
akhir implementation, kita dapat menyisipkan blok initialization dan finalization. Blok initialization berisi
kode program yang akan dijalankan sesaat setelah unit dimuat ke memory, sedangkan finalization adalah
blok yang dijalankan sesaat sebelum unit dibuang dari memory.

DIKTAT AJAR Page 23


BAHASA PEMROGRAMAN DELPHI
Definisi Unit unit Nama_Unit;
interface
Bagian uses Unit1, Unit2, , Unit N;
interface function Testing: Integer;
implementation
Uses List var Nilai : Integer;
uses Unit A, Unit B, , Unit Z;
function Testing : Interger;
begin
result := 0;
end;
Bagian initialization
implemen Nilai := 100;
tation finalization
end.

Uses
Kata kunci uses digunakan untuk mendaftarkan unit unit lain yang identifier nya akan digunakan dalam
unit yang bersangkutan. Uses bersifat optional dan jika dipergunakan harus berada pada bagian awal
interface atau bagian awal implementation. Unit yang disebut terakhir memiliki prioritas paling tinggi
untuk digunakan. Perhatikan kode berikut :

uses SysUtils, Windows;

procedure HapusFile (NamaFile: string);


begin
DeleteFile(NamaFile);
end;

Function DeleteFile ada di unit SysUtils dan unit Windows. Dalam contoh di atas, delete File yang akan
dipanggil adalah delete file yang ada di unit Windows karena unit ini disebut belakangan dalam uses. Bila
yang kita inginkan adalah function DeleteFile yang ada dalam SysUtils, kita dapat menambahkan nama
unit SysUtils di depan function DeleteFile sehingga kode tersebut menjadi seperti di bawah ini.

uses SysUtils, Windows;

procedure HapusFile(NamaFile: string);


begin
SysUtils.DeleteFile(NamaFile);
end;

Circular Reference
Circular Reference, yaitu uses yang berputar (misalnya Unit1 uses ke Unit2, Unit2 uses ke Unit3 dan Unit3
uses ke Unit1), tidak boleh dilakukan dalam bagian interface. Kadang kadang kita menginginkan dua atau
beberapa unit yang bersifat saling tergantung satu dengan lainnya. Cara yang paling sederhana adalah
dengan Circular Reference pada bagian implementation. Tetapi akan jauh lebih baik jika kita menghindari
circular reference, misalnya dengan cara mendefinisikan procedure, function, kelas, atau variabel yang
diperlukan oleh unit unit tersebut pada unit lain.

DIKTAT AJAR Page 24


BAHASA PEMROGRAMAN DELPHI
Initialization dan Finalization
Initialization adalah bagian yang dijalankan ketika aplikasi atau library (DLL) dipanggil ke memory oleh
Windows. Delphi menggunakan metode depth first traversal untuk menjalankan kode initialization, yaitu
sebelum blok initialization suatu unit dijalankan, blok initialization setiap unit yang di uses akan
dijalankan terlebih dahulu. Blok initialization setiap unit hanya dijalankan sekali. Bila ada unit lain yang
melakukan uses terhadap unit tersebut, kode initialization tidak akan dijalankan lagi.

Finalization adalah bagian yang akan dijalankan ketika keluar dari aplikasi atau ketika library dibuang dari
memory. Urutan pemanggilan blok finalization adalah kebalikan dari urutan pemanggilan blok
initialization. Sebagai catatan sebuah unit harus memiliki blok initialization untuk dapat memiliki blok
finalization. Meskipun demikian bagian blok initialization bisa saja kosong.

Berikut ini contoh yang menggambarkan initialization dan finalization.

Kita memiliki 3 (tiga) buah unit dengan nama Unit1, Unit2, dan Unit3.
Panggil menu File New Other.
Pada Page New, pilih Console Application dan tekan tombol OK.
Kemudian Pilih menu File New Unit sebanyak 3 (tiga) kali, sehingga kita mempunyai sebuah program
utama dan 3 (tiga) buah unit. Untuk masing masing unit ketikkan kode sebagai berikut ini :

program Project2;

{ $APPTYPE CONSOLE}

uses
Unit1 in Unit1.pas,
Unit2 in Unit2.pas,
Unit3 in Unit3.pas;

begin
Writeln(Main Program);
end.

unit Unit1 ;

interface

uses Unit2, Unit3;

implementation

initialization
Writeln(Initialization Unit1);
finalization
Writeln(Finalization Unit1);
end.

unit Unit2;

interface
uses Unit3;
implementation

DIKTAT AJAR Page 25


BAHASA PEMROGRAMAN DELPHI

initialization
Writeln(Initialization Unit2);
finalization
Writeln(Finalization Unit2);
end.

unit Unit3;

interface

implementation
initialization
Writeln(Initialization Unit3);
finalization
Writeln(Finalization Unit3);
end.

Compile program tersebut (Ctrl F9). Untuk menjalankannya masuk ke DOS Windows, dan jalankan
program tersebut dari DOS Windows, sehingga tampilan program bisa terlihat seluruhnya. Cara
lainnya adalah menjalankan file RunProject.bat yang ada pada direktori code untuk latihan ini.

Hasilnya sebagai berikut ini.

Initialization Unit3
Initialization Unit2
Initialization Unit1
Main Program
Tekan ENTER.

Finalization Unit1
Finalization Unit2
Finalization Unit3

Perhatikan bagian uses list dari kode yang tercantum dalam Project2.dpr. Terlihat bahwa uses di mulai
dari unit1, diikuti unit2, dan terakhir unit3. Karena unit1 berada di urutan pertaman useslist, maka
project2 akan meminta unit1 untuk menjalankan bagian initialization nya. Tetapi sebelum unit1
menjalankan initialization dirinya, unit1 tersebut akan memeriksa apakah ada uses list. Ternyata ada uses
ke unit2 dan unit3 secara berurutan. Maka unit1 akan meminta unit2 untuk menjalankan initialization.
Ternyata unit2 pun ada uses ke unit3, sehingga unit2 akan meminta unit3 menjalankan initialization.
Karena unit3 tidak ada uses ke unit apa pun, maka unit3 akan menjalankan bagian initialization nya dan
mengembalikan kendali kepada unit2. Unit2 akan menjalankan initialization dan mengembalikan kendali
kepada unit1. Unit1 akan meminta unit3 untuk memanggil initialization. Tetapi karena initialization unit3
sudah pernah dipanggil, maka kendali diberikan kembali kepada unit1. Selanjutnya unit1 akan
menjalankan bagian initialization nya, dan mengembalikan kendali kepada project2.

3.1.5. Konstanta

Konstanta adalah identifier yang bersifat tetap selama program berjalan. Pendefinisian konstanta pada
blok yang diawali dengan kata kunci const. Bagian definisi konstanta dapat diletakkan pada bagian
interface, implementation, atau di mana saja dalam kode program. Peletakan konstanta akan
berpengaruh terhadap dikenalnya konstanta dari bagian lain program. Sebagai contoh, konstanta

DIKTAT AJAR Page 26


BAHASA PEMROGRAMAN DELPHI
diletakkan pada bagian interface, maka konstanta tersebut akan dikenal oleh unit lain. Bila diletakkan
pada bagian implementation, maka konstanta tersebut hanya dikenal oleh unit tersebut. Bila diletakkan
dalam suatu rutin (procedure atau function) maka konstanta tersebut hanya dikenali oleh rutin tersebut.
Dikenalinya suatu identifier dari suatu lokasi tertentu dalam program biasa disebut dengan istilah scope.
Berikut ini contoh konstanta.

unit Unit2;
interface

const
AppCaption = My Program ver 1.0;

procedure HitungData;

implementation

const
XData = 10;
YData = 100;

procedure HitungData;
const A: real = 10;
begin
( Kode untuk Hitung data )
end;

end.

Delphi secara otomatis akan menentukan tipe konstanta berdasarkan nilai yang didefinisikan untuk
konstanta tersebut. Meskipun demikian, kita bisa mendefinisikan tipe konstanta kita secara eksplisit.
Pada contoh di atas, konstanta A dalam procedure HitungData didefinisikan tipenya secara eksplisit
sebagai tipe real.

Kita bisa mengisi nilai konstanta dengan ekspresi yang memenuhi syarat tertentu. Ekspresi untuk
konstanta biasanya disebut sebagai constant expression. Ekspresi ini mencakup angka, karakter, True,
False, atau nil, operator untuk numeric maupun string, serta bisa juga konstanta lain, asal sudah
didefinisikan sebelumnya. Constant Expression tidak dapat melibatkan nilai, variabel, dan pemanggilan
function terkecuali beberapa function, yaitu Abs, Chr, Hi, High, Length, Lo, Low, Odd, Ord, Pred, Round,
Size Of, Succ, Swap, serta Trunc. Contohnya sebagai berikut ini.

const
const_A = 100;
const_B = A;
const_C = 256 1 + Const_A;
const_D = (2.5 + 1) / (2.5 1);
const_E = Borland + + Corporation
const_F = Chr(32);
const_G = Ord(Z) Ord(A) + 1;

DIKTAT AJAR Page 27


BAHASA PEMROGRAMAN DELPHI
3.1.6. Tipe Data

Bagian yang sangat penting dalam pemrograman adalah mendefinisikan tipe tipe data baru sesuai
dengan kebutuhan program. Untuk mendefinisikan tipe data baru, gunakan kata kunci type. Seperti
halnya const, kata kunci yang menandai area pendefinisian tipe data ini dapat diletakkan di mana saja
sesuai kebutuhan. Konsekuensi logis dari peletakkan kata kunci ini adalah pengaruh pada scope nya.
Berikut ini contoh pendefinisian tipe data.

type
TMyArray = array (0..19) of Byte;
MyData = integer;

3.1.7. Variabel

Sebelum suatu variabel dapat digunakan, variabel tersebut harus didefinisikan terlebih dahulu. Untuk
mendefinisikan variabel, gunakan kata kunci var yang menandai area pendefinisian variabel. Peletakkan
area pendefinisian variabel ini dapat dilakukan di mana saja dalam program, dan akan berpengaruh
terhadap scope nya.
Setiap variabel yang didefinisikan harus mempunyai tipe. Untuk mendefinisikan tipe suatu variabel,
gunakan tanda titik dua (:). Berikut ini contoh pendefinisian variabel.

var
Value : Integer;
Sum : Integer;
Line : string;

Karena Value dan Sum bertipe sama, penulisannya bisa dilakukan sebagai berikut.

var
Value, Sum : Integer;
Line : string;

3.1.8. Expression, Operator, dan Precedence

Expression
Expression (ekspresi) adalah sebuah konstruksi dalam program Delphi yang mempunyai nilai. Berikut ini
beberapa contoh expression.

Expression Keterangan
X variabel
@X alamat variabel
17 konstanta bertipe integer
Jumlah variabel
Hitung(X, B) Pemanggilan fungsi
Char(48) value typecast
X=10 ekspresi boolean
not Selesai ekspresi boolean
A in HimpunanKu ekspresi boolean
X*Y ekspresi aritmetik
A+B ekspresi aritmetik

DIKTAT AJAR Page 28


BAHASA PEMROGRAMAN DELPHI
Expression selalu bisa dibentuk dari expression lain dengan menggunakan operator, sedangkan ekspresi
pembentuknya biasa disebut operand.

Assignment
Assignment adalah memasukkan suatu nilai ke dalam suatu variabel. Assignment menggunakan operator
:=, dan dengan bentuk.

variabel := ekspresi

Variabel bisa dengan tipe data apa pun ,sedangkan ekspresi harus kompatibel dengan variabel yang
diberikan. Contoh Assignment sebagai berikut ini.

I := 3;
I := I+1;
X := Y-Z;
Selesai := (I>10) and (Y<5);

Tanda := biasanya disebut assignment operator. Perlu diberikan catatan di sini bahwa dalam bahasa
pemrograman Pascal, assignment bukanlah ekspresi (tidak menghasilkan nilai).

Operator
Operator adalah semacam fungsi yang merupakan bagian dari bahasa Pascal yang peran utamanya
adalah membentuk ekspresi. Yang termasuk operator adalah @, not, ^, , /, div, mod, and, shl, shr, as, +,
, or, xor, =, >, <, <>, <=, >=, in, serta is.

Operator @, not, ^, adalah operator unary, artinya operator yang operand nya hanya satu. Operator
lainnya kecuali + dan bersifat binary, yaitu operator yang mempunyai 2 (dua) operand. Operator + dan
dapat berperan sebagai operator unary atau binary tergantung kepada konteks nya (sebagai media
penjumlahan dan pengurangan ataukah sebagai tanda plus dan minus).

Operator unary akan berada di depan operand nya (misalnya A atau @Test), kecuali operator ^ yang
berada setelah operand nya (misalnya P^). Operator yang bersifat binary selalu berada di antara
keduanya (misalnya A+10).

Bekerjanya operator sangat dipengaruhi oleh operand nya. Sebagai contoh A + B akan menjadi operasi
aritmetika penjumlahan bila A dan B adalah Integer atau Real. Tetapi A + B akan menjadi concatenation
(penyambungan) string bila A dan B bertipe string. Bahkan A + B bisa berarti operasi union (gabungan)
bila A dan B bertipe Himpunan Set. Tetapi perlu diperhatikan juga bahwa bila A adalah Integer dan B
adalah string, maka A + B tidak dapat bekerja (menghasilkan compiler error).

Operator Precedence
Operator precedence adalah hak operator untuk dioperasikan terlebih dahulu. Misalnya ekspresi A+B*C,
maka operator * akan dikerjakan terlebih dahulu, baru hasilnya dijadikan operand untuk operator +. Hal
ini terjadi karena * mempunyai hak lebih tinggi dibandingkan +. Urut urutan operator precedence sebagai
berikut.

DIKTAT AJAR Page 29


BAHASA PEMROGRAMAN DELPHI
Operator Precedence
@, not, ^ pertama (tertinggi, dioperasikan paling awal)
*, /, div, mod, and, shl, shr, as kedua
+, , or, xor ketiga
=, >, <, <>, <=, >=, in, is keempat (terendah, dioperasikan terakhir)

Untuk mengubah precedence, kita bisa menggunakan tanda kurung, misalnya : (A+B)*C, maka operator +
akan diproses terlebih dahulu.

3.9. Tipe Data dalam Delphi Pascal

Dalam Delphi Pascal ada beberapa kelompok tipe data, yaitu Boolean, Integer, Real, Character, String,
Array, Record, Enumerated, Set. Tipe data String, Array, dan Record akan dibahas secara terpisah.

Boolean
Boolean adalah tipe data yang nilainya adalah True atau False. Dalam Delphi Pascal. Tipe data Boolean
disimpan dengan lebar 1 byte.

Operasi Boolean
Operasi Boolean memerlukan operand dengan tipe boolean (True atau False) dan menghasilkan nilai
Boolean juga. Operator yang digunakan dalam operasi Boolean sebagai berikut.

Operator Operasi Contoh


not negasi. not (C in MySet)
not (A>10)
and conjunction, yaitu menghasilkan A and B
nilai True bila kedua operand
bernilai True. Bila salah satu
operand False maka hasilnya
pasti False.
or disjunction, yaitu menghasilkan A or B
nilai True bila salah satu operand
bernilai True. Bila keduanya
False hasilnya adalah False.
xor exclusive disjunction, yaitu A xor B
menghasilkan nilai True bila
hanya satu operand yang True.
Bila keduanya True atau
keduanya False, maka hasilnya
adalah False.

Perhatikan ekspresi boolean berikut ini.

(A<>0) and (B<>0)

Bila nilai dari variabel A adalah 0, maka ekspresi di atas pasti bernilai False tidak peduli nilai dari variabel
B (karena operator and akan menyebabkan nilai False, apabila salah satu operand nya bernilai False).

DIKTAT AJAR Page 30


BAHASA PEMROGRAMAN DELPHI
Oleh karena itu nilai dari variabel B tidak akan diperiksa oleh program (ekspresi (B<>0) tidak dievaluasi
oleh program).

Perhatikan juga ekspresi boolean di bawah ini.

(A=0) or (B=0)

Bila nilai dari variabel A adalah 0, maka ekspresi di atas pasti bernilai True tidak peduli berapa nilai dari
variabel B (karena operator or akan menyebabkan nilai True, apabila salah satu operand nya bernilai
True). Oleh karena itu nilai dari variabel B tidak akan diperiksa oleh program (ekspresi (B=0) tidak
dievaluasi oleh program).

Hal yang dijelaskan di atas terjadi karena (secara default), program Delphi hanya melakukan evaluasi
ekspresi logic secara sebagian. Keuntungannya adalah program akan berjalan lebih cepat. Tetapi kita
dapat memaksa agar untuk setiap ekspresi boolean dengan operator and dan or kedua operand selalu
diperiksa secara lengkap dengan cara mengubah compiler option.

Operasi Aritmetik
Operasi aritmetik digunakan untuk melakukan penghitungan aritmetik. Operand dan hasil dari operasi
aritmetik adalah Integer atau Real. Operator yang digunakan dalam operasi aritmetik sebagai berikut.

Operator Operasi Tipe Operand Tipe Hasil


+ Penjumlahan Integer, Real Integer, Real
Jika salah satu operand
adalah real, maka
hasilnya adalah real
Pengurangan Integer, Real Integer, Real
Jika salah satu operand
adalah real, maka
hasilnya adalah real
* Perkalian Integer, Real Integer, Real
Jika salah satu operand
adalah real, maka
hasilnya adalah real
/ Pembagian Real Integer, Real Real
div Pembagian Integer Integer Integer
Hasil akan dibulatkan
ke bawah
mod Pembagian sisa Integer Integer
+(unary) Tanda + Integer, Real Integer, Real
(unary) Tanda Integer, Real Integer, Real

DIKTAT AJAR Page 31


BAHASA PEMROGRAMAN DELPHI
Integer
Integer adalah bilangan bulat. Dalam Delphi Pascal, terdapat beberapa tipe data yang merupakan Integer
dan dikelompokkan sebagai Generik dan Fundamental. Sebisa mungkin gunakan tipe generik karena tipe
generik akan dioptimasi berkaitan dengan sistem operasi dan CPU yang dipergunakan.

Tipe Generik
Tipe Data Range Format
Integer 2,147,483,648 s.d. 2,147,483,647 signed 32 bit
Cardinal 0 s.d. 4,294,967,295 unsigned 32 bit

Tipe Fundamental
Tipe Data Range Format
Shortint 128 s.d. 127 signed 8 bit
SmallInt 32,768 s.d. 32,767 signed 16 bit
Longint 2,147,483,648 s.d. 2,147,483,647 signed 32 bit
Int64 (2^63)..(2^63) 1 signed 64 bit
Byte 0 s.d. 255 unsigned 8 bit
Word 0 s.d. 65,535 unsigned 16 bit
Longword 0.4294967295 unsigned 32 bit

Secara umum, operasi aritmetika terhadap integer akan menghasilkan tipe Integer atau cardinal
(signed/unsigned 32 bit). Operasi akan menghasilkan Int64 hanya jika salah satu operand nya adalah
Int64.

Bila operasi menghasilkan nilai lebih besar dari range integer, maka nilai integer akan berputar kembali ke
nilai awal dari range.

Berikut ini kita akan bereksperimen dengan bilangan integer untuk memahami perilaku integer.
Buat sebuah aplikasi console baru. (Pilih menu File New Other, lalu pilih Console Application).
Ketikkan kode dalam program sehingga program kita akan menjadi seperti berikut ini.

program Project2;
{$APPTYPE CONSOLE}

uses
SysUtils;

var Byte1, Byte2: Byte;


ShInt1: ShortInt;
Int1, Int2: Integer;
Card1 : Cardinal;
IntA: Int64;
begin
Writeln(Eksperimen dengan Integer);
Writeln(----------------------------------);
Byte1 := 20;
Writeln(Byte1 = , Byte1);
Writeln(Byte1*Byte1 = , Byte1*Byte1);
Byte2 := Byte1*Byte1;
Writeln(Byte2 = Byte1*Byte1; Byte2 = , Byte2);

DIKTAT AJAR Page 32


BAHASA PEMROGRAMAN DELPHI
ShInt1 := Byte1*Byte1;
Writeln(ShInt1 = Byte1*Byte1; ShInt = , ShInt1);
Writeln;

Int1 := 2000000000;
Writeln(Int1 = , Int1);
Int2 := Int1+Int1;
Writeln(Int1+Int1 = , Int1+Int1);
Writeln(Int2 = Int1+Int1; Int2 = , Int2);
Card1 := Int1+Int1;
Writeln(Card1 = Int1+Int1; Card1 = , Card1);
IntA := Int1+Int1;
Writeln(IntA = Int1+Int1; IntA = , IntA);
IntA := Int64(Int1)+Int1;
Writeln(IntA = Int64(Int1)+Int1; IntA = , IntA);
readln;
end.

Setelah program di run, hasilnya adalah :

Eksperimen dengan Integer


Byte1 = 20
Byte1*Byte1 = 400
Byte2 = Byte1*Byte1; Byte2 = 144
ShInt1 = Byte1*Byte1; Shlnt1 = -112

Int1 = 2000000000
Int1+Int1 = -294967296
Int2 = Int1+Int1; Int2 = -294967296
Card1 = Int1+Int1; Card1 = 4000000000
IntA = Int1+Int1; IntA = -294967296
IntA = Int64(Int1)+Int1; IntA = 4000000000

Byte1 kita isi dengan 20. Byte1*Byte1 bernilai 400. OK, tidak ada masalah. Ketika kita isi Byte2 dengan
Byte1*Byte1, ternyata hasilnya adalah 144. Apa yang terjadi ? Karena Byte2 bertipe Byte, range nya
adalah 0 s.d. 255. Maka 256 akan menjadi 0, 257 menjadi 1, 258 menjadi 2, dan seterusnya, sehingga 400
menjadi 144. Demikian juga, untuk ShInt1 dengan range 128 s.d. 127, angka 400 akan berputar 2 kali ke
minus 128, sehingga hasil akhirnya adalah 112.

Kemudian nilai Int1 kita isi dengan 2 milyar, maka 2 milyar + 2 milyar, seharusnya 4 milyar. Tetapi 4 milyar
berada di luar range Integer (signed 32 bit), maka 4 milyar akan berputar ke nilai minimum Integer
sehingga hasil akhirnya adalah 294967296. Pada saat nilai ini dimasukkan ke Cardinal (unsigned 32 bit),
maka nilai tersebut akan berada di luar range Cardinal (negatif), sehingga terjadi perputaran kembali ke
nilai maksimum Cardinal, dan menyebabkan nilai akhir kembali bernilai 4 milyar.

Untuk IntA (dengan tipe Int64), karena hasil operasinya adalah integer, maka hasilnya sama dengan Int1.
Setelah menggunakan operasi Int64 (karena salah satu operand nya Int64), maka hasil yang diperoleh
menjadi benar, yaitu 4 milyar. Bila range checking option diaktifkan, maka program di atas akan
mengakibatkan run time error.

DIKTAT AJAR Page 33


BAHASA PEMROGRAMAN DELPHI
Operasi Bitwise
Operasi Bitwise (Bitwise Operation) adalah meng operasikan 2 (dua) operand dengan tipe integer yang
dipandang sebagai kumpulan bit. Perhatikan contoh berikut (A, B, dan C adalah Byte).

A := 5;
B := 12;
C := A and B;

Berapa nilai C ? Nilai C dapat ditentukan dengan menggunakan bitwise operation, yaitu dengan
memandang A dan B sebagai kumpulan Bit. Karena A dan B bertipe Byte, maka panjangnya adalah 8 Bit.

A 5 0000 0101
B 12 0000 1100
---------------------------------------------------------- and
C 0000 0100 = 4

Setiap bit yang bersesuaian dioperasikan dengan operasi logic and, yaitu bila kedua bit bernilai satu maka
nilai bit hasilnya adalah 1. Selain itu, bernilai nol. Jadi, nilai C adalah 4.

Secara lengkap, operator bitwise sebagai berikut.

Operator Keterangan Contoh


not bitwise negasi A := 5;
untuk setiap bit 0 menjadi 1 dan setiap bit 1 B := not A;
menjadi 0. A 5 0000 0101
not
B 1111 1010 = 250
and bitwise and A := 5;
Bila dua bit bernilai 1, maka bit hasilnya bernilai 1. B := 12;
Jika salah satu bit bernilai 0 maka hasilnya bernilai C := A and B;
0. A 5 0000 0101
B 12 0000 1100
and
C 0000 0100 = 4
or bitwise or A := 5;
Bila salah satu bit bernilai 1, maka bit hasilnya B := 12;
bernilai 1. Jika keduanya 0, maka bit hasilnya C := A or B;
bernilai 0. A 5 0000 0101
B 12 0000 1100
or
C 0000 1101 = 13
xor bitwise xor A := 5;
Bila salah satu bit bernilai 1 dan bit lainnya bernilai B := 12;
0, maka bit hasilnya adalah 1. Bila keduanya 0 atau C := A xor B;
keduanya 1, maka bit hasilnya adalah 0. A 5 0000 0101
B 12 0000 1100
xor
C 0000 1001 = 9

DIKTAT AJAR Page 34


BAHASA PEMROGRAMAN DELPHI
shi bitwise shift left A := 5;
Menggeser semua bit ke kiri dari operand pertama B := 12;
sebanyak operand kedua. C := A shi B;
A 5 0000 0101
shi 2
C 0001 0100 = 20
shr bitwise shift right A := 5;
Menggeser semua bit ke kanan dari operand B := 12;
pertama sebanyak operand kedua. C := A shr B;
A 5 0000 0101
shr 2
C 0000 0001 = 1

Real
Tipe fundamental bilangan real dalam Delphi Pascal sebagai berikut.

Tipe Data Ukuran (byte) Range Significant Digits


real48 6 2.9 x 106^ 39 s.d. 1.7 x 10^38 11 12
single 4 1.5 x 10^ 45 s.d. 3.4 x 10^38 7 8
double 8 5.0 x 10^ 324 s.d. 1.7 x 10^308 15 16
extended 10 3.4 x 10^ 4932 s.d. 1.1 x 19 20
10^4932
comp 8 9,223,372,036,854,775,808 s.d. 19 20
9,223,372,036,854,775,807
currency 8 922337203685477.5808 s.d. 19 20
922337203685477.5807

Tipe generic Real pada Delphi 7 didefinisikan sebagai Double.

Tipe extended menawarkan presisi lebih tinggi tetapi agak kurang portable.

Tipe Comp (Computational) adalah native Intel CPU dan direpresentasikan sebagai Integer 64 bit.

Tipe Currency adalah fixed floating point data type yang digunakan untuk meminimalkan error
pembulatan. Tipe ini direpresentasikan sebagai Integer 64 bit yang berskala dan hanya mempunyai 4
(empat) digit di belakang koma.

Char dan Wide Char


Tipe fundamental dari character adalah AnsiChar dan WideChar. AnsiChar berukuran 1 (satu) byte
sedangkan WideChar berukuran lebih dari 1 (satu) byte. Tipe generic karakter adalah Char dan sama
dengan AnsiChar. Char adalah tipe ordinal, sehingga dapat mempunyai sifat sifat tipe ordinal, misalnya
dapat di increment, decrement, dan dapat menjadi pilihan dalam case. Untuk melihat nilai byte dari
karakter, bisa menggunakan Ord(x), di mana x adalah char.

DIKTAT AJAR Page 35


BAHASA PEMROGRAMAN DELPHI
Enumerated
Tipe data Enumerated adalah tipe data yang isinya terbatas pada nilai nilai yang telah didefinisikan.
Untuk mendefinisikan tipe dan jenis ini digunakan kurung buka sebagai awal, kurung tutup sebagai akhir,
serta setiap nilai yang mungkin dibatasi dengan tanda koma.

Contohnya sebagai berikut.

type
TKartu = (Club, Diamond. Heart, Spade);
TJenisKelamin = (Pria, Wanita);

Set
Tipe data set adalah kumpulan elemen data yang masing masing mempunyai tipe yang sama. Set
merupakan implementasi dari himpunan data. Untuk mendefinisikannya dapat dilihat pada contoh
berikut ini.

type
TSetHuruf = set of Char;
var
Vokal : TSetHuruf;
Konsonan : TSetHuruf;
Angka : TSetHuruf;
Kosong : TSetHuruf;

Untuk mengisi suatu set, dapat dilakukan secara langsung dengan menyebutkan tipe yang mungkin dan
dibatasi oleh kurung kotak ([]). Setiap elemen set dibatasi oleh koma. Setiap variabel yang didefinisikan
sebagai set selalu dapat diisi dengan nilai kosong yang didefinisikan sebagai [ ]. Perhatikan contoh berikut
ini.

Vokal := [ A, E, I, O, U ] ;
Konsonan := [ B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z ] ;
Angka := [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] ;
Kosong := [ ] ;

Operasi Set
Operasi dalam Set (himpunan) sebagai berikut.

Operator Fungsi Tipe Operand Tipe Hasil


+ Gabungan. Tipe set yang kompatibel. Set
Selisih. Tipe set yang kompatibel. Set
* Irisan. Tipe set yang kompatibel. Set
In Anggota dari. Operand kiri adalah Boolean
elemen yang akan
diperiksa. Operand kanan
adalah set yang akan
diperiksa.

DIKTAT AJAR Page 36


BAHASA PEMROGRAMAN DELPHI
Perhatikan juga contoh berikut.

type
TSetHuruf = set of Char;
var
Vokal : TSetHuruf;
Konsonan : TSetHuruf;
Angka : TSetHuruf;
Kosong : TSetHuruf;
Alfabet : TSetHuruf;
HasilBoolean : Boolean;
AlfabetBukanAngka : TSetHuruf;

begin
Vokal := [A, E, I, O, U];
Konsonan := [ B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z];
Angka := [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
Kosong := [ ];
Alfabet := Vokal + Konsonan + Angka
Kosong := Vokal + Konsonan;
HasilBoolean := A in Vokal;
AlfabetBukanAngka := Alfabet Angka;
end;

3.1.10. Tipe Data String

Delphi Pascal mendukung beberapa macam string, yaitu Short String, Ansi String atau Long String, Wide
String, dan Null terminated String. Indeks string dimulai dari 1 (satu).

Short String
Short string adalah string dengan panjang maksimum 255 (dua ratus lima puluh lima) karakter.
Pendefinisian dari Short String dapat dilakukan dengan 2 (dua) cara, yaitu dengan Short string dan
dengan string [x], di mana x adalah panjang maksimum dari string. Pendefinisian dengan Short string
adalah string dengan panjang maksimum 255 karakter dan memory yang dialokasikan sejumlah 256 byte.
Untuk pendefinisian dengan string [x] diterjemahkan sebagai panjang maksimum dari string adalah x
sedangkan memory yang dialokasikan adalah x+1. Indeks ke 0 dari string akan menyimpan panjang string.
Short string hanya digunakan untuk backward compatibility. Perhatikan contoh bawah ini.

var
S : ShortString; (panjang maks 255 karakter, 256 byte)
S1 : string[10]; (panjang maks 10 karakter, 11 byte)
Len : Integer;
begin
S := Hello;
Len := Ord(S[ 0]); ( L now contains the length of S, or 5 )
end;

Ansi String
Ansi String atau Long String adalah string yang dialokasikan secara dinamik sesuai dengan kebutuhan.
Panjang Ansi String hanya dibatasi oleh memory yang tersedia. Variabel bertipe string sendiri sebenarnya
adalah sebuah pointer yang berisi alamat di heap memory. Mekanisme alokasi dan dealokasinya dikelola
oleh Delphi Pascal.

DIKTAT AJAR Page 37


BAHASA PEMROGRAMAN DELPHI
Wide String
Wide String mirip dengan Ansi String hanya setiap karakternya disimpan sebagai Wide Char (16 bit
karakter Unicode). Perilaku Wide String sangat mirip dengan Ansi String. Perbedaannya hanya pada
ukuran setiap karakternya.

Null terminated String


Null terminated string adalah kumpulan karakter bukan null (#0) yang diakhiri oleh karakter null. Karakter
null pertama dalam string ini akan dianggap sebagai akhir dari string. Null terminated string banyak
dipakai untuk meng akses Windows API. Implementasi pemrograman dengan menggunakan Null
terminated String adalah dengan menggunakan variabel bertipe PChar (Pointer of Char), atau
menggunakan array of char. Selain itu, Anda juga bisa menggunakan typecast terhadap variabel tipe
string, atau menggunakan function StrPCopy.

3.1.11. Pencabangan dan Pengulangan

Pencabangan adalah mengontrol program sehingga perintah yang dijalankan mengikuti alur tertentu
berdasarkan suatu kondisi tertentu. Yang termasuk dalam pencabangan adalah perintah if then else,
dan perintah case.

Elemen program lain yang juga sangat penting adalah pengulangan atau loop. Loop adalah pengulangan
perintah sesuai dengan kondisi tertentu. Dalam object Pascal terdapat 3 (tiga) macam loop, yaitu : for,
while, dan repeat, yang masing masing mempunyai ciri tersendiri.

If, Then, Else


Salah satu kata kunci yang mempunyai peran sangat besar dalam pemrograman adalah kelompok kata
kunci If, Then, Else. Kata kunci ini digunakan untuk melakukan suatu proses tertentu bila kondisi tertentu
dipenuhi, dan menjalankan proses lain jika kondisi tidak terpenuhi.

Bentuk dasarnya adalah

if <ekspresi Boolean> then <statement> [ else <statement>];

Ekspresi adalah sekumpulan perintah dalam object Pascal yang memberikan nilai tertentu. Ekspresi
Boolean dalam if di atas adalah ekspresi yang hasilnya adalah tipe data Boolean (True atau False).

Statement adalah sekumpulan perintah dalam object Pascal yang me representasikan aksi tertentu dan
akan dijalankan. Sekumpulan statement yang diawali oleh begin dan diakhiri oleh end disebut statement
block, dan selalu dapat dianggap sebagai statement tunggal.

Kata kunci else <statement>, bersifat optional, artinya boleh tidak dikutsertakan. Sebelum kata kunci else
tidak ada titik koma. Kita buat sebuah contoh berikut ini.

if a>0 then x := 100 else x := 200;

Pada contoh di atas, variabel a akan diperiksa untuk menentukan nilai yang akan diisikan pada variabel x.
Jika variabel a nilainya 0, maka x akan diisi dengan 100, jika tidak, maka x akan diisi dengan 200.

DIKTAT AJAR Page 38


BAHASA PEMROGRAMAN DELPHI
Case
Kalau if then else adalah pencabangan yang mempunyai dua alternatif, maka Case adalah pencabangan
yang mempunyai lebih dari dua alternatif. Bentuknya sebagai berikut ini.

case <expression> of
<casevalue> := <statement>;

<casevalue> := <statement>;
else
<statement>
end

Expression adalah suatu ekspresi yang menghasilkan nilai ordinal, sedangkan casevalue adalah nilai
konstan yang akan dibandingkan dengan nilai ekspresi ordinal tersebut.

Contoh adalah :

case Ch of
A..Z, a..z : Label1.Caption := Letter;
0..9 : Label1.Caption := Digit;
+, -, *, / : Label1.Caption := Operator;
else
Label1.Caption := Special Character;
end;

Berikut ini adalah contoh lain yang akan menggunakan case.

Variabel Nilai adalah nilai ujian yang akan diperiksa untuk menghasilkan nilai index.

var Nilai : Byte;


begin
case Nilai of
0..34 : Label1.Caption := Nilai E;
35..54 : Label1.Caption := Nilai D;
55..74 : Label1.Caption := Nilai C;
75..84 : Label1.Caption := Nilai B;
else
Label1.Caption := Nilai A;
end;
end.

For
Loop jenis ini dilakukan untuk pengulangan dengan banyaknya pengulangan yang sudah diketahui.
Format dari loop jenis ini sebagai berikut.

for <nilai_awal> to <nilai_akhir> do


<statement>

end;

DIKTAT AJAR Page 39


BAHASA PEMROGRAMAN DELPHI
Untuk for yang nilai akhir lebih kecil dari nilai awal, gunakan bentuk berikut ini.

for <nilai_awal> downto <nilai_akhir> do


<statement>

end;

Nilai_awal dan Nilai_akhir adalah ekspresi dengan tipe Integer.

Contoh penggunaan for sebagai berikut.

var
I : Integer;
X : Integer;
begin
X := 0;
for I := 0 to 9 do begin
Writeln(Iteration value : + IntToStr(X);
Inc (X, 10);
end;
end.

While
Loop jenis ini digunakan untuk melakukan pengulangan selama suatu kondisi tertentu terpenuhi.
Bentuknya sebagai berikut.

while <kondisi> do begin


<statement>

end;

Contohnya sebagai berikut.

var
I : Integer;
begin
I := 5;
while I > -1 do begin
Writeln(Iterasi ke + IntToStr(I));
Dec(I);
end;
Memo1.Lines.Add(Selesai);
end;

Repeat
Loop jenis ini digunakan untuk melakukan pengulangan sampai suatu kondisi terpenuhi. Perbedaan
mendasar antara while dengan repeat adalah pada while pengecekan dilakukan pertama kali sedangkan
pada repeat pengecekan dilakukan terakhir. Bentuk repeat sebagai berikut.

DIKTAT AJAR Page 40


BAHASA PEMROGRAMAN DELPHI
repeat
<statement>

until <kondisi>

Contohnya sebagai berikut.

var
I : Integer;
begin
I := 5;
Memo1.Clear;
repeat
Memo1.Lines.Add(Iterasi ke + IntToStr(I));
Dec(I);
until I = -1;
Memo1.Lines.Add(Selesai);
end;

3.1.12. Array

Array adalah kumpulan data yang bertipe sama dengan banyaknya elemen tetap. Secara internal, seluruh
elemen array tersimpan dalam memori yang contiguous, di mana setiap elemen akan langsung diikuti
oleh elemen berikutnya. Untuk meng akses array, dipergunakan indeks yang berada dalam kurung
kotak([]), misalnya A[0], A[100], dst.

Keuntungan terbesar ketika kita menggunakan array adalah akses elemenya yang sangat cepat. Secara
internal, alamat elemen ke n dari array dapat dihitung dengan n dan ukuran dari array tersebut, oleh
karena itu O(A[n]) = 1. Kerugiannya adalah bila kita ingin menyisipkan data ke dalam array atau ingin
menghapus elemen array, maka kita harus menggeser semua elemennya. Delphi menyediakan beberapa
tipe array, yaitu static array, dynamic array serta open array.

Array Statis (Static Array)

Array statis adalah array yang banyaknya elemen tetap selama program berjalan karena ditentukan pada
saat deklarasi. Indeks dari array statis bisa berupa Integer, Char, atau tipe ordinal lainnya. Memori yang
dialokasikan untuk array statis adalah banyaknya elemen dikalikan ukuran elemen. Mendefinisikan array
statis berukuran besar sebagai variabel lokal procedure/function tidak dianjurkan karena menyebabkan
borosnya penggunaan stack.

Pendefinisian Array Statis


Bentuk umum dari array statis adalah :

<NamaArray> = array[Tipe Indeks] of <Tipe Dasar>;

Tipe Indeks adalah tipe yang digunakan untuk melakukan indeksing array. Tipe indeks yang paling sering
digunakan adalah [min..maks], min adalah indeks minimum, maks adalah indeks maksimum. Tipe indeks
lainnya adalah [Byte], [ShortInt], [Char] atau Tipe ordinal lainnya. Tipe dasar adalah tipe elemen array,
bisa tipe elementer seperti Integer, Byte, Double, String, atau Record juga bisa tipe lain seperti TObject
(dan turunannya).

DIKTAT AJAR Page 41


BAHASA PEMROGRAMAN DELPHI
Perhatikan contoh di bawah ini.

type
ArrayChar = array [Char] of Integer;
// Array #0 s.d. #255 dari Integer
ArrayByte = array [Byte] of Char;
// Array 0 s.d. 255 dari Char
ArrayInt = array [ShortInt] of string;
// Array -128 s.d. 127 dari string

Sebagai contoh lain, untuk mendefinisikan array yang terdiri atas 5 (lima) elemen integer, kita dapat
melakukannya dengan cara sebagai berikut :

var
MyArray : array[0..4] of integer

Untuk mengaksesnya, gunakan cara sebagai berikut ini.

var
MyArray : array [0..4] of integer

begin
MyArray[ 0] := -20;
MyArray[ 1] := -10;
MyArray[ 2] := 0;
MyArray[ 3] := 10;
MyArray[ 4] := 20;

x := MyArray[ 2] + MyArray[ 3] ;
end;

Array Dinamis (Dynamic Array)

Array dinamis adalah array yang banyaknya elemen dapat diubah pada saat runtime. Indeks dari array
dinamis selalu diawali dengan 0, dan banyaknya elemen dapat ditentukan dengan menggunakan
SetLength.

Mendefinisikan Array Dinamis


Pendefinisian array dinamis mirip dengan array statis tetapi tidak menyebutkan tipe indeks nya. Sintaks
pendefinisian array dinamis sebagai berikut ini.

type
<NamaTipe> = array of <Tipe Dasar>;
var
<Nama Variabel> : array of <Tipe Dasar>;

DIKTAT AJAR Page 42


BAHASA PEMROGRAMAN DELPHI
Tipe dasar adalah tipe elemen array, bisa tipe elementer seperti Integer, Byte, Double, String, atau
Record juga bisa tipe lain seperti TObject (dan turunannya).

type
TMyIntegerArray = array of Integer;
TMyFloatArray = array of Double;

var
A : array of string;
B : array of boolean;
C : array of TComponent;

Pada awalnya variabel array dinamis berisi nil, di mana banyaknya elemen dari array dinamis adalah 0
(tidak mempunyai elemen), sehingga kita perlu memanggil procedure SetLength untuk menentukan
berapa ukuran array dinamis yang diinginkan.

var X : array of Integer;


vSize : Integer;
begin
vSize := 100;
SetLength(X, vSize);
for i := 0 to vSize-1 do begin
X[ i] := I;
end;
end;

Array Terbuka (Open Array)

Array Terbuka adalah parameter dalam procedure atau function yang dapat dilewati oleh array statis
ataupun array dinamis. Array statis yang dilewatkan pun tidak tergantung dengan tipe indeknya. Batas
indeks minimum array terbuka adalah 0, meskipun variabel array yang dilewatkan batas minimumnya
bukan 0. Batas maksimumnya tergantung ukuran array yang dilewatkan.

Perhatikan contoh kode berikut ini.

function Array2Str(vNamaArray : string; vArray : array of integer) : string;


var i : Integer;
vLow : Integer;
begin
result := ;
for i := Low(vArray) to High(vArray) do begin
result := result+Format(%s[ %d] : %d, [ vNamaArray, i, vArray[ i]]);
result := result+#13#10;
end;
end;

Pada contoh di atas, parameter vArray adalah array terbuka sehingga bisa dilewati oleh array statis
dengan berbagai tipe indeks.

3.1.13. Record

Record adalah kumpulan data yang setiap elemennya dapat memiliki tipe yang berbeda. Elemen data ini
disebut dengan Field. Untuk menggunakan data jenis record ini, pertama kita harus mendeklarasikan

DIKTAT AJAR Page 43


BAHASA PEMROGRAMAN DELPHI
sebuah tipe data bentukan berjenis record, kemudian baru kita mendefinisikan variabel yang bertipe
record tersebut. Awal definisi data record ditandai dengan kata kunci record dan diakhiri dengan kata
kunci end. Berikut ini contoh penggunaan tipe data record.

type
TMyRecord = record
Nama : string;
Alamat : string;
Kota : string;
KodePos : string[ 5];
end;

var
MyRecordVar : TMyRecord;

begin
MyRecordVar.Nama := Diego Maradona;
MyRecordVar.Alamat := Jalan Gunung Merapi No.99;
MyRecordVar.Kota := Buenos Aires;
MyRecordVar.KodePos := 56777;
end;

Kata Kunci With


Bila kita berbicara tentang record, maka mau tidak mau kita harus berbicara sebuah kata kunci, yaitu
with. Meskipun demikian penggunaan kata kunci ini tidak terbatas untuk penggunaan record saja. Kata
kunci ini digunakan untuk mempermudah pemrograman dengan menggunakan record. Untuk
mempermudah pembahasan, kita tulis ulang contoh yang telah dibahas di atas, sebagai berikut.

MyRecordVar.Nama := Diego Maradona;


MyRecordVar.Alamat := Jalan Gunung Merapi No.99;
MyRecordVar.Kota := Buenos Aires;
MyRecordVar.KodePos := 56777;

Dengan menggunakan kata kunci with, kita dapat menyederhanakan perintah di atas sebagai berikut ini.

with MyRecordVar do begin


Nama := Diego Maradona;
Alamat := Jalan Gunung Merapi No.99;
Kota := Buenos Aires;
KotaPos := 56777;
end;

3.1.14. Pointer

Dalam sistem komputer, semua bagian di memory dapat diasosiasikan dengan suatu nilai numerik yang
disebut address atau alamat di memory. Dengan demikian, setiap bagian di memory dapat di akses
dengan menggunakan alamat. Pointer adalah tipe data dalam bahasa pemrograman yang berisi alamat di
memory tersebut. Ini berarti pointer adalah sebuah tipe data yang isinya menunjuk ke data lain di
memory.

Dalam bahasa pemrograman Delphi, khususnya pada tingkat yang lebih lanjut, peran pointer sangatlah
penting, meskipun di sisi lain dapat menimbulkan malapetaka. Pointer mempunyai kekuatan besar dalam

DIKTAT AJAR Page 44


BAHASA PEMROGRAMAN DELPHI
membangun struktur data dan dapat dimanfaatkan untuk mengelola memori secara akurat. Di sisi lain,
dalam penggunaan pointer, sangat mudah terjadi salah pakai yang bisa menimbulkan error yang sulit
dicari penyebabnya, yaitu access violation.

Dasar dasar penggunaan Pointer


Seperti telah dijelaskan sebelumnya, pointer adalah tipe data yang dapat menunjuk ke lokasi tertentu di
memori. Untuk mendefinisikan sebuah variabel pointer, kita bisa menggunakan <tipe data> atau bisa
menggunakan Pointer. Perhatikan contoh berikut ini.

var p1 : ^Integer; // pointer to integer


p2 : ^Real; // pointer to real number
p3 : Pointer // untyped pointer

Variabel p1 adalah variabel dengan tipe pointer to integer, artinya nilai yang ditunjuk oleh p1 adalah nilai
bertipe integer. Variabel p2 adalah pointer to real, artinya nilai yang ditunjuk oleh variabel ini adalah
bilangan real. Sementara variabel px adalah untyped pointer, artinya tipe yang ditunjuk oleh variabel
pointer ini tidak ditentukan. Variabel bertipe untyped pointer akan kompatibel dengan variabel pointer
bertipe apa pun. Menggunakan untyped pointer pada umumnya lebih fleksibel tetapi kurang aman.

3.1.15. Function dan Procedure

Function dan Procedure adalah suatu blok program yang dapat dipanggil oleh bagian lain dalam program.
Setelah dipanggil, function akan mengembalikan nilai, sedangkan procedure tidak. Karena menghasilkan
nilai, function bisa menjadi bagian dari suatu ekspresi, dan bisa juga nilainya di assign kan ke suatu
variabel tertentu. Procedure tidak menghasilkan nilai, sehingga tidak dapat menjadi bagian dari suatu
ekspresi. Demikian juga, procedure tidak dapat di assign kan ke variabel. Berikut ini contoh pemanggilan
function dan procedure.

X := (MyFunction(Y)+A)*B;
MyFunction(P);

MyProcedure(X);

Function bisa dipanggil seperti procedure (tanpa perlu dipergunakan nilainya), seperti contoh di atas.

Pendeklarasian Function
Deklarasi untuk function sebagai berikut ini.

function <NamaFunction>(<Parameter>) : <Tipe Hasil>;


<directives>;
<localDeclarations>;
begin
<Pernyataan pernyataan>
end;

Nama Function mengacu pada ketentuan identifier. Parameter berbentuk daftar nama parameter dan
tipenya akan dibahas secara khusus. Tipe hasil adalah semua tipe data yang mungkin. Directives
mencakup calling conventions, forward declaration, serta overloading.

Local declaration adalah deklarasi constant, tipe data, variabel local, ataupun function dan procedure.

DIKTAT AJAR Page 45


BAHASA PEMROGRAMAN DELPHI
Contoh pendeklarasian dari function sebagai berikut ini.

function MyFx : Integer;


begin
Result := 17
end;

Result adalah variabel yang sudah terdefinisi secara internal untuk menyimpan hasil keluaran function.
Tipe variabel result sama dengan deklarasi tipe hasil function.

Kita juga dapat menggunakan nama function untuk mengembalikan hasil, seperti terlihat pada contoh di
bawah ini.

function MyFx : Integer;


begin
MyFx := 17;
end;

Pendeklarasian Procedure
Seperti telah disebutkan di atas, perbedaan antara function dan procedure sangatlah tipis. Deklarasinya
pun sangat mirip seperti terlihat di bawah ini.

function <NamaProcedure>(<Parameter>); <directives>;


<localDeclarations>;
begin
<Pernyataan pernyataan>
end;

Nama Procedure mengacu pada ketentuan identifier. Parameter berbentuk daftar nama parameter dan
tipenya akan dibahas secara khusus. Directives mencakup calling conventions, forward declaration, serta
overloading.

Local declaration adalah deklarasi constant, tipe data, variabel local, ataupun function dan procedure.

Contoh dari procedure sebagai berikut ini.

procedure NumString(N : Integer; var S : string);


var
V : Integer;
begin
V := Abs(N);
S := ;
repeat
S := Chr(V mod 10 + Ord(0)) + S;
V := V div 10;
until V = 0;
if N < 0 then S := - + S;
end;

DIKTAT AJAR Page 46


BAHASA PEMROGRAMAN DELPHI
Parameter dalam Function/Procedure
Sebagian besar function dan procedure mempunyai daftar parameter di bagian kepalanya. Seperti
contoh berikut ini.

function Power(X : Real; Y : Integer) : Real ;

Yang merupakan daftar parameter adalah (X : Real; Y : Integer).

Daftar parameter adalah sekumpulan deklarasi parameter yang dipisahkan dengan tanda titik koma (;)
dan berada dalam kurung. Setiap parameter adalah deklarasi nama parameter yang dipisahkan dengan
koma, diikuti dengan titik dua dan diakhiri dengan tipe data, mirip seperti ketika kita mendefinisikan
variabel. Beberapa parameter bisa diikuti tanda = untuk menentukannya sebagai default parameter.
Deklarasi setiap parameter bisa diawali dengan var, const, atau out. Bila parameter dideklarasikan tanpa
var, const, atau out, maka passing parameter rnya dilakukan dengan cara By Value. Artinya function
mempunyai variabel parameter tersendiri dan nilai yang dikirimkan ke function/procedure akan di copy
ke variabel parameter tersebut. Bila didefinisikan sebagai var atau out, maka passing parameter akan
dilakukan By Reference. Artinya function tidak mempunyai variabel parameter tetapi hanya alamat dari
nilai yang diisikan. Jadi, aksi terhadap parameter sebenarnya langsung kepada variabel yang dilewatkan
pada parameter tersebut. Bila menggunakan const, variabel akan di passing mirip dengan By Value,
tetapi compiler akan melakukan optimasi tertentu bila parameter yang dilewatkan adalah string atau
record.

Bila kita mendeklarasikan parameter dengan tipe const maka kita tidak dapat mengubah nilai parameter
tersebut. Akan tetapi, bila yang dilewatkan adalah reference ke objek, kita masih bisa mengubah
property nya. Demikian juga bila yang dilewatkan adalah pointer, kita masih dapat mengubah data pada
alamat yang ditunjuk oleh pointer tersebut.

Deklarasi parameter dengan var dan out digunakan untuk mendefinisikan variabel yang dapat menerima
hasil proses dalam function atau procedure, artinya dalam function atau procedure variabel dengan tipe
ini biasanya akan di assign suatu nilai tertentu yang merupakan hasil proses. Bedanya adalah bila
parameter didefinisikan by value atau didefinisikan sebagai const, maka variabel dengan nilai kompatibel
dapat dilewatkan. Tetapi bila parameter didefinisikan dengan var atau out, maka variabel yang
dilewatkan harus identik. Perhatikan contoh berikut ini.

function MyFunction (x : Integer; var y : Integer;


out z : Integer) : Integer;
begin
Y := x+y;
Z := x*x;
end;

procedure TForm1.ButtonClick ( Sender : TObject);


var x, y, z : Cardinal;
begin
// pemanggilan function MyFunction
MyFunction (x, y, z);
end;

DIKTAT AJAR Page 47


BAHASA PEMROGRAMAN DELPHI
Pada saat MyFunction dipanggil, x bisa dilewatkan karena cardinal dan integer adalah kompatibel. Tetapi
y dan z tidak bisa dilewatkan karena penggunaan deklarasi var dan out mensyaratkan variabel yang
dilewatkan harus identik.

Default Parameter
Default parameter adalah parameter function atau procedure yang mempunyai default sehingga
pemanggilnya bisa mengabaikan parameter tersebut. Persyaratan dari parameter seperti ini adalah :
Parameter bertipe by value atau const (var atau out tidak bisa) dan tidak boleh untyped.
Parameter ini harus berada di bagian paling belakang dalam daftar parameter.
Nilai yang diisikan sebagai default menggunakan ekspresi mengikuti ketentuan ekspresi untuk
konstanta (constant expression).

Misalnya kita mempunyai sebuah procedure yang dideklarasikan sebagai berikut ini.

procedure FillArray (A: array of Integer; Value: Integer = 0);

Maka kita dapat memanggilnya tanpa mengikutsertakan parameter yang mempunyai default.

FillArray(MyArray);

Atau kita bisa juga melewatkan parameter default tersebut untuk meng override nilai default nya.

FillArray (MyArray, 1);

Deklarasi Forward
Bila kita ingin sebuah function dalam suatu unit dapat diakses oleh unit lain, maka kita harus
mendeklarasikan function tersebut (bagian kepala function) di bagian interface.

unit Unit2;
interface
uses SysUtils;

function MyFunction(x: Integer; var y: Integer;


out z: Integer): Integer;

implementation

function MyFunction(x: Integer; var y: Integer;


out z: Integer); Integer;
begin
y := x+y;
z := x*z;
end;

end.

Bila kita sudah mendefinisikan sebuah function pada bagian interface, maka di bagian manapun dalam
implementation kita dapat memanggil function tersebut. Berbeda jika function tidak didefinisikan di
bagian interface, maka function pemanggil harus berada di bawah deklarasi function yang dipanggil.

DIKTAT AJAR Page 48


BAHASA PEMROGRAMAN DELPHI
Kadang kala kita tidak ingin function yang kita definisikan bisa diakses oleh unit lain, misalnya jika function
tersebut bersifat internal. Tetapi di sisi lain kita ingin function tersebut dipanggil meskipun pemanggilnya
kita tulis di atas function yang dipanggil. Pada kasus ini kita dapat mendeklarasikan function tersebut
dengan forward declaration. Kita tinggal meng copy kepala function tersebut di atas dan menambahkan
kata kunci forward, seperti contoh di bawah ini.

implementation

function MyFunction(x: Integer; var y: Integer;


out z: Integer); Integer; forward

Calling Conventions
Calling convention akan menentukan bagaimana parameter parameter suatu procedure/function akan
dilewatkan, meliputi urutan parameter, penggunaan register dalam processor, serta pengaturan
penggunaan stack. Untuk menentukan calling convention mana yang akan digunakan, kita dapat
menambahkan register pascal, cdecl, stdcall, atau safecall. Bila tidak ada pendefinisian calling convention
secara eksplisit, maka Delphi akan menggunakan register. Biasanya kita hanya perlu mendefinisikan
calling convention secara eksplisit bila kita berinteraksi dengan dll (dynamic linked library). Calling
convention yang paling efisien adalah register karena meminimalkan penggunaan stack. Akan tetapi bila
kita bekerja dengan dll di Windows, biasanya kita akan menggunakan stdcall ataupun dengan safecall.
Sedangkan cdecl biasanya digunakan oleh library yang dibuat dengan bahasa C.

Overloading Function/Procedure
Kita dapat mendefinisikan 2 (dua) buah function atau procedure dengan nama yang sama dalam satu unit
asal menggunakan directive overload dan parameter kedua fungsi harus berbeda (tipenya atau
banyaknya parameter, atau keduanya). Function atau procedure yang seperti ini biasanya disebut dengan
istilah overloading procedure. Perhatikan contoh berikut ini.

function Divide(X, Y: Real) : Real; overload;


begin
Result := X/Y;
end;
function Divide(X, Y: Integer) : Integer; overload;
begin
Result := X div Y;
end;

Variabel bertipe Prosedural


Kita dapat mendefinisikan suatu variabel yang bertipe procedure atau function sehingga variabel tersebut
bisa diisi nilainya dengan function atau procedure yang kompatibel. Variabel bertipe procedure atau
function ini biasa disebut dengan istilah procedural types atau bertipe prosedural. Berikut ini contoh dari
pendefinisian variabel sebagai tipe prosedural.

type
TIntegerFunction = function : Integer;
TProcedure = procedure;
TStrProc = procedure(const S: string);
TMathFunc = function (X : Double) : Double;
var
F : TIntegerFunction;
Proc : TProcedure;

DIKTAT AJAR Page 49


BAHASA PEMROGRAMAN DELPHI
SP : TStrProc;
M : TMathFunc;

Contoh berikut ini adalah tipe prosedural yang digunakan dalam parameter sebuah procedure.

Procedure FuncProc( P : TIntegerFunction);


begin

end;

Misalkan kita mempunyai function atau procedure yang kompatibel dengan tipe tipe prosedural yang
sudah kita definisikan.

function F1 : Integer;
begin
result := 0;
end;

function F2 (x : double) : double;


begin
result := x;
end;

procedure F1;
begin
//
end;

procedure F2 (const S : string);


begin
//
end;

Suatu function atau procedure dikatakan kompatibel dengan suatu tipe prosedural bila daftar parameter
dan tipenya sama dengan yang didefinisikan pada tipe prosedural tersebut, sedangkan nama setiap
parameter tidak harus sama. Untuk function ditambah bahwa hasilnya juga harus bertipe sama.

Selanjutnya kita dapat meng assign kan procedure/function tersebut ke dalam variabel bertipe
prosedural, seperti contoh berikut ini.

F : = F1;
M := F2;
Proc := P1;
SP := P2;

Kemudian kita bisa memanggil function (yang sudah di assign kan) melalui variabel tersebut.

procedure TForm1.ButtonClick(Sender : TObject);


begin
X := F;
Y := M (1);
Proc;
SP (Testing);
end;

DIKTAT AJAR Page 50


BAHASA PEMROGRAMAN DELPHI
Variabel bertipe prosedural sebenarnya adalah variabel pointer. Nilai default dari variabel ini adalah nil.
Bila variabel ini berisi nil, maka memanggil function melalui variabel yang bernilai nil akan berakibat
dibangkitkannya exception. Cara termudah apakah variabel bernilai nil atau tidak, kita dapat
menggunakan function Assigned. Meskipun variabel bertipe prosedural adalah variabel pointer, tetapi
ada perbedaan yang sangat penting antara variabel ini dengan pointer. Misalkan F adalah variabel
prosedural dan Pt adalah variabel bertipe pointer. Memanggil F secara langsung berarti memanggil
function/procedure yang ditunjuk oleh F. Sedangkan bila kita langsung memanggil Pt, maka berarti kita
mengambil alamat yang ditunjuk oleh Pt tersebut. Untuk mengetahui alamat function yang ditunjuk oleh
F, maka kita harus menggunakan @F sedangkan untuk mengetahui alamat variabel dari F sendiri maka
kita harus menggunaka @@F.

2.2. Delphi Object Pascal

2.2.1. Object Oriented Programming

Sejak pertama komputer ditemukan sampai dengan sekarang telah terjadi evolusi terhadap bahasa
pemrograman. Penggerak evolusinya adalah keinginan untuk mendapatkan sebanyak mungkin dengan
usaha dan sumber daya yang sedikit mungkin (prinsip ekonomi). Pada awalnya, pemrograman dilakukan
dengan memasukkan urutan perintah bahasa mesin, yang kemudian berubah dengan munculnya bahasa
pemrograman tingkat rendah, seperti BASIC. Pada tahap ini, antara data dan perintah tidak dipisahkan
secara tegas. Selanjutnya program terpecah menjadi subprogram, dan data dipisah dari program.

Akhirnya program dipecah menjadi objek, di mana dalam objek terdapat subprogram dan data, yang
mempunyai keterkaitan satu dengan lainnya. Konsepinilah yang akhirnya berkembang dan disebut
dengak konsep Object Oriented Programming.

Keuntungan bahasa pemrograman OOP dibandingkan dengan bahasa pemrograman pendahulunya


adalah :
Lebih terstruktur.
Lebih modular, serta mudah digunakan kembali (reusable).
Lebih tahan terhadap perubahan.
Lebih mudah dikembangkan.
Lebih alami.

Ciri ciri dasar dari Object Oriented Programming (OOP) adalah :

Classes (Kelas Objek) adalah definisi data dan fungsi/prosedur yang terbungkus secara abstrak. Konsep
pendefinisian kelas ini biasanya disebut sebagai Data Abstraction (Abstraksi Data). Definisi kelas ini
biasanya akan menjadi kerangka modularitas program.

Encapsulation (Pembungkusan) adalah membungkus/menyembunyikan bagian bagian tertentu dari


program, sehingga pemakai objek tidak perlu tahu bagian internal dari objek tersebut.

Inheritance (Pewarisan) adalah hubungan antar object yang memungkinkan disusunnya hirarki object.
Setiap objek anak akan mempunyai sifat dari moyangnya.

Polymorphism (Kebanyakrupaan), adalah kemampuan mengungkapkan/melakukan hal yang sama


dengan cara yang berbeda.

DIKTAT AJAR Page 51


BAHASA PEMROGRAMAN DELPHI
Keempat hal di atas adalah syarat agar sebuah bahasa pemrograman disebut sebagai OOP. Bila sebuah
bahasa tidak mempunyai fitur Inheritance dan Polymorphism tetapi mempunyai pendefinisian Classes
saja, maka bahasa pemrograman tersebut biasanya disebut sebagai Object Base.

2.2.2. Class dan Instance

Class adalah kelas, cetakan, jenis, atau abstraksi dari objek. Sedangkan Instance adalah contoh nyata
objek dari kelas tertentu. Atribut adalah data yang dimiliki oleh objek. Atribut sering juga disebut sebagai
field atau property dari objek. Methods adalah function atau procedure yang dimiliki oleh objek tersebut.

Berikut ini adalah beberapa contoh dari class dan instance.


Manusia adalah kelas.
Si Fulan adalah contoh nyata dari kelas manusia.
Tinggi badan, warna kulit, pekerjaan, adalah atribut dari kelas manusia.
Kucing adalah kelas.
Si Meong adalah contoh nyata dari kelas kucing.

Dalam konteks pemrograman, kelas adalah tipe data, sedangkan contoh nyata adalah tempat dalam
memori di mana objek dibuat. Pada contoh berikut ini kita mendefinisikan kelas sebagai tipe objek yang
biasanya definisi kelas diletakkan pada bagian interface. Tetapi bisa juga diletakkan pada bagian
implementation.

type
MyClass = class
private
MyData1 : Integer;
MyData2 : Integer;
public
function GetMyData1 : Integer;
function GetMyData2 : Integer;
function GetMyData3 : Integer;
end;

Setiap method yang didefinisikan dalam kelas harus didefinisikan implementasinya pada bagian
implementation.

function MyClass.GetMyData1 : Integer;


begin
result := MyData1;
end;

function MyClass.GetMyData2 : Integer;


begin
result := MyData1;
end;

function MyClass.GetMyData3 : Integer;


begin
result := 1;
end;

DIKTAT AJAR Page 52


BAHASA PEMROGRAMAN DELPHI
Pada bagian lain dari program (bisa unit lain), kita dapat mendefinisikan variabel dengan tipe objek yang
sudah kita deklarasikan. Dalam Delphi, variabel bertipe objek merupakan variabel bertipe pointer. Yang
disebut sebagai instance dari objek adalah tempat di memory yang ditunjuk oleh variabel pointer
tersebut. Akan tetapi, untuk menyederhanakan pembicaraan, biasanya variabel tersebut yang dinyatakan
sebagai instance dari objek.

// di tempat tertentu dalam program


var
Obj : MyClass;
begin
Obj := MyClass.Create;
X := Obj.GetMyData1;
end;

Dalam contoh di atas, MyClass adalah kelas, sedangkan instance nya berada dalam memori yang ditunjuk
oleh variabel Obj (dengan singkat dapat dikatakan bahwa Obj adalah instance dari MyClass). MyData1
dan MyData2 adalah atribut dari kelas MyClass,sedangkan GetMyData1 dan GetMyData2 adalah methods
dari MyClass.

2.2.3. Property dan Field

Objek mempunyai atribut, yaitu data dari objek tersebut. Dalam Delphi, atribut objek ada dua macam,
yaitu field dan property. Field adalah variabel yang dimiliki oleh objek, sedangkan property adalah atribut
objek yang didefinisikan dengan kata kunci property. Untuk lebih jelasnya, perhatikan contoh di bawah
ini.

TMyObject = class
private
FMyData : Integer;
public
property MyData : Integer read FMyData write FMyData;
end;

Pada contoh di atas, FMyData adalah field, sedangkan MyData adalah property.

Ketika kita mendefinisikan property, kita dapat menentukan bagaimana data dibaca (getter) dan
bagaimana data dituliskan ke dalam objek (setter). Getter kita deklarasikan dengan kata kunci read,
sedangkan setter dengan kata kunci write. Getter bisa langsung berupa field atau menggunakan function
tertentu. Setter pun demikian, bisa langsung berupa field atau menggunakan procedure tertentu.

TMyObject = class
private
function GetMyData : Integer;
procedure SetMyData (const Value : Integer);
public
property MyData : Integer read GetMyData write SetMyData;
end;

DIKTAT AJAR Page 53


BAHASA PEMROGRAMAN DELPHI
2.2.4. Property Berindeks

Kita dapat mendefinisikan property yang mempunyai indeks untuk mengaksesnya. Sebagai contoh
property pages pada objek PageControl yang bertipe TTabSheet, kita dapat mengaksesnya menggunakan
indeks, seperti pada contoh berikut.

PageControl1.Page[ 0].Caption := Test;

Untuk mendefinisikan property di atas, kita dapat menggunakan property yang mempunyai indeks yang
dideklarasikan dalam kurung kotak. Pada property jenis ini, kita harus mendefinisikan getter dan setter
dengan function dan procedure. Kita dapat menggunakan tipe ordinal (integer dan sebangsanya,
character, atau enumerated), serta kita juga dapat menggunakan string sebagai index. Untuk lebih
jelasnya, perhatikan contoh berikut ini.

type
TMySound = (tsClick, tsClack, TsClock) ;
TMyObject = class
private
function GetMySoundStr (idx : TMySound) : string ;
function GetTMyData (idx : string) : Integer ;
function GetTMyIndex (idx : Integer) : string ;
procedure SetMySoundStr (idx : TMySound ; const Value : string) ;
procedure SetTMyData (idx : string ; const Value : Integer) ;
procedure SetTMyIndex (idx : Integer ; const Value : string) ;
public
property MySoundStr [ idx : TMySound] : string read
GetMySoundStr
write SetMySoundStr ;
property MyData [ idx : string] : Integer read GetTMyData
write SetTMyData ;
property MyIndex [ idx : Integer] : string read Get TMyIndex
write SetTMyIndex default ;
end;

Default pada Property Berindeks


Pada contoh di atas, kita menggunakan directive default pada property MyIndex. Hal ini, akan
memungkinkan kita menyingkat akses ke field tersebut langsung dari variabel objek yang bertipe
TMyObject, maka tanpa harus menggunakan x.MyIndex[0], kita dapat langsung menggunakan x[0].

Hal ini pulalah yang memungkinkan kita mengakses ListBox1.Items[i], meskipun Items bukan property
berindeks tetapi property dengan tipe TStrings. Tetapi karena property Strings dari TStrings merupakan
default, maka ListBox1.Items[i] sama dengan ListBox1.Items.Strings[i].

Catatan penting di sini adalah untuk direktif default pada property bertipe ordinal atau set (dan tidak
berindeks). Direktif ini disebut storage specifiers, dan termasuk didalamnya adalah stored dan
nodedefault. Storage specifiers tidak berkaitan dengan perilaku program (bukan nilai default objek ketika
di create) tetapi hanya berkaitan dengan penyimpanan nilai property ini pada storage, dan hanya untuk
published property. Bila nilai property sama dengan nilai default yang disebutkan, maka property tidak
disimpan dalam storage.

DIKTAT AJAR Page 54


BAHASA PEMROGRAMAN DELPHI
2.2.5. Kelas TObject dan Variabel bertipe Object

Kelas TObject adalah kelas yang mempunyai posisi tertinggi dalam struktur hirarki objek dalam Delphi.
Semua kelas adalah turunan dari TObject. Ketika kita hanya mendefinisikan sebuah objek tanpa
diturunkan dari kelas apa pun, secara otomatis Delphi akan menurunkan kelas ini dari TObject.

type
MyClass = class
private
MyData1: Integer;
MyData2: Integer;
public
function GetMyData1: Integer;
function GetMyData2: Integer;
function GetMyData3: Integer;
end;

Pada contoh di atas, MyClass tidak diturunkan dari objek apa pun. Secara otomatis kelas MyClass
diturunkan dari TObject.

Semua variabel bertipe TObject maupun turunannya, adalah variabel pointer. Oleh sebab itu, sebelum
variabel tersebut dapat dipakai harus disiapkan memory untuk objek yang dimaksud dengan cara
memanggil constructor nya(biasanya constructor bernama Create).
Selain itu, seperti halnya sifat variabel pointer biasa, assignment antara dua variabel pointer tidak akan
meng copy objek, tetapi kedua variabel akan menunjuk ke instance yang sama.

var
Obj1, Obj2: MyClass;
begin
Obj1 := MyClass.Create;
Obj2 := Obj1;
Obj1.MyData1 := x;
end;

2.2.6. Method

Method adalah function atau procedure yang dimiliki oleh objek. Method didefinisikan sebagai member
dari suatu kelas. Cara pendefinisian dan perilakunya sangat mirip dengan function atau procedure biasa.
Perbedaannya adalah pada bagian implementasi dari method kita harus memberikan qualifier yang
merupakan nama kelas. Perhatikan contoh definisi objek berikut ini.

TMyObject = class
public
procedure MyProc(x: Integer);
function MyFunc(X : Double); Double;
end;

Kedua method yang mempunyai TMyObject harus kita implementasikan seperti pada contoh berikut ini.

function TMyObject.MyFunc(X: Double): Double;


begin

DIKTAT AJAR Page 55


BAHASA PEMROGRAMAN DELPHI
result := X;
end;
procedure TMyObject.MyProc(x: Integer);
begin
// do something
end;

Cara menggunakannya dapat dilakukan seperti contoh berikut ini.

Y := X.MyFunc(10);

Pada contoh di atas, X adalah instance dari TMyObject.

Constructor dan Destructor


Constructor dan destructor adalah method khusus dari objek yang akan dipanggil untuk membangun
objek (constructor) dan menghancurkan objek (destructor). Meskipun tidak harus, sebaiknya nama
constructor adalah create dan nama destructor adalah destroy.

Abstract Method dan Abstract Class


Abstract method adalah method yang tidak mempunyai implementasi. Abstract class adalah kelas yang
mempunyai paling tidak satu abstract method. Abstract class murni adalah kelas yang seluruh method
nya abstrak dan tidak mempunyai definisi field.
Untuk mendefinisikan abstract class dalam Delphi, kita tinggal menambahkan kata kunci abstract. Tetapi
abstract method harus bersifat virtual, sehingga sebelum kita nyatakan sebagai abstract, sebuah method
harus dinyatakan sebagai virtual terlebih dahulu seperti contoh di bawah ini.

TMyObject = class
public
function MyAbstFunc(X: Double) : Double; virtual; abstract;
end;

Class Method
Bila method biasa hanya dapat dipanggil dari instance object, class method adalah method yang dapat
dipanggil langsung dari tipe kelasnya (tanpa perlu create objek). Cara mendefinisikannya adalah dengan
menambahkan kata kunci class di depan method yang kita definisikan. Cara menggunakannya adalah
dengan memanggil nama kelas diikuti nama class method nya. Berikut ini adalah contoh penggunaannya.

TMyObject = class
public
class function Test : string;
end;

Adapun implementasi dari class method di atas terlihat dalam contoh di bawah ini.

class function TMyObject.Test : string;


begin
result := ClassName;
end;

DIKTAT AJAR Page 56


BAHASA PEMROGRAMAN DELPHI
Sedangkan cara menggunakannya sebagai berikut ini.

procedure TForm1.ButtonClick(Sender : TObject);


begin
ShowMessage(TMyObject.Test);
end;

Dalam class method kita dapat memanggil constructor ataupun class method lain. Namun kita tidak dapat
mengakses field, property, dan method biasa.

2.2.7. Encapsulation

Encapsulation adalah menyembunyikan bagian internal program sehingga secara alamiah tidak menjadi
perhatian bagi pengguna objek tersebut.
Bagian objek yang dapat dikenali oleh pihak luar biasanya adalah bagian publik, sedangkan bagian yang
disembunyikan adalah bagian private. Delphi menyediakan 3 (tiga) buah direktif yang berkaitan dengan
information hiding, yaitu private, protected, dan public. Selain itu, di tingkat yang setara, Delphi
menyediakan direktif published untuk RTTI.

Gambar 3 1. Encapsulation

Private
Direktif ini digunakan untuk mendefinisikan objek member (field, property, dan method) yang bersifat
internal. Bila sebuah objek member bersifat private maka member ini hanya bisa diakses dari unit yang
sama.

Public
Bila suatu objek member diinginkan agar dapat diakses dari unit lain, maka member ini harus
didefinisikan sebagai public.

Protected
Protected berada di antara private dan public. Setiap member yang didefinisikan sebagai protected dapat
diakses oleh modul manapun bila berada di unit yang sama (serupa dengan private). Tetapi protected
member hanya dapat diakses oleh turunan objek bila berada di unit yang terpisah.

DIKTAT AJAR Page 57


BAHASA PEMROGRAMAN DELPHI
Published
Direktif published digunakan untuk mendefinisikan bahwa property atau method akan mempunyai RTTI
(run time type information). Visibility nya sama dengan public, yang berarti member yang bersifat
published dapat diakses dari unit lain. Adapun RTTI menyebabkan property bisa muncul di Object
Inspector. Property atau method bisa berada pada bagian published. Tetapi hanya field yang bertipe kelas
atau interface saja yang dapat berada di bawah published.

2.2.7.1. Event

Dalam Delphi, event adalah property yang bertipe method dan mempunyai visibility published. Karena
mempunyai visibility published, event mempunyai RTTI sehingga dapat muncul di Object Inspector.
Sebagai property, kita dapat meng assign event seperti halnya kita meng assign property biasa, tentu saja
dengan syarat tipenya kompatibel. Pada saat tertentu sesuai dengan kebutuhan program, property
bertipe method ini akan dijalankan setelah diperiksa terlebih dahulu bahwa nilainya tidak nil. Delphi
memanfaatkan teknik ini agar perilaku komponen bisa diintervensi oleh Software Engineer sebagai user
komponen tersebut.

2.2.8. Inheritance

Dalam OOP, konsep inheritance dilakukan dengan generalisasi dan spesialisasi. Semua kemampuan yang
dimiliki oleh suatu objek pasti dimiliki oleh turunan dari objek tersebut. Keuntungan penting lain dari
adanya inheritance dalam OOP adalah kita bisa menambahkan kemampuan objek yang sudah tersedia
tanpa mengubah kode objek tersebut.
Dalam Delphi, setiap kita mendefinisikan objek baru, kita pasti menurunkannya dari objek lain, paling
tidak dari TObject. Ini berarti kita sudah melakukan inheritance. Kita bisa melakukannya dengan
membuat objek baru yang diturunkan dari objek yang sudah tersedia.

TMyObject = class (TLabel)


end;

Pada contoh di atas, TMyObject adalah turunan dari TLabel.

2.2.9. Polymorphism

Secara luas, polymorphism berarti kode yang sama dapat digunakan untuk kelas atau tipe data yang
berbeda dengan hasil yang berbeda sesuai dengan kelas atau data yang ada. Dengan arti yang luas ini,
operator tambah (+) juga mempunyai sifat polymorphism, karena dapat bekerja untuk integer, real,
maupun string. Demikian juga overloading method, function, atau procedure mempunyai sifat
polymorphism. Yang kita bahas di sini adalah polymorphism yang berkaitan dengan inheritance
(subclassing), di mana sifat yang sudah terdefinisi pada nenek moyangnya dapat di implementasi oleh
objek turunannya dengan cara berbeda.
Misalkan kita mempunyai objek TBentuk yang kita turunkan menjadi TKotak dan TEllipse. Pada objek
TBentuk kita definisikan method Gambar. Untuk setiap turunan dari TBentuk, kita akan meng
implementasi method Gambar ini secara berbeda sesuai kebutuhan kita. Ketika kita mempunyai
sekumpulan objek TBentuk, tanpa peduli objek tersebut adalah TKotak atau TEllipse, kita dapat
memanggil method Gambar yang akan menampilkan hasil yang berbeda. Untuk lebih jelasnya perhatikan
contoh berikut ini.

DIKTAT AJAR Page 58


BAHASA PEMROGRAMAN DELPHI
Pertama kita akan mendefinisikan 3 (tiga) buah objek, yaitu TBentuk, TKotak, dan TEllipse. Dalam objek
TBentuk kita definisikan method Gambar yang bersifat virtual.

TBentuk = class
private
FBound : TRect;
public
constructor Create(vBound : TRect);
procedure Gambar (vCanvas : TCanvas) ; virtual;
end;

TKotak = class (TBentuk)


public
procedure Gambar(vCanvas : TCanvas) ; override;
end;

TEllipse = class (TBentuk)


public
procedure Gambar(vCanvas : TCanvas) ; override;
end;

Implementasi untuk constructor create dan method Gambar dari TBentuk sebagai berikut ini.

{ TBentuk }

constructor TBentuk.Create(vBound : TRect);


begin
FBound := vBound;
end;

procedure TBentuk.Gambar(vCanvas : TCanvas);


begin
// Tidak melakukan apa-apa
end;

Method Gambar dari TBentuk tidak melakukan apa apa, karena bentuk memang tidak bisa digambar.
Biasanya yang seperti ini dibuat menjadi abstract method.

Implementasi Gambar untuk TKotak dan TEllipse sebagai berikut ini.

{ TKotak }

procedure TKotak.Gambar(vCanvas : TCanvas);


begin
vCanvas.Rectangle(FBound);
end;

{ TEllipse }

procedure TEllipse.Gambar(vCanvas : TCanvas);


begin
vCanvas.Ellipse(FBound);
end;

DIKTAT AJAR Page 59


BAHASA PEMROGRAMAN DELPHI
Selanjutnya akan kita lihat bagaimana menggunakan TBentuk, TKotak, dan TEllipse. Pertama, kita
definisikan sebuah array of TBentuk yang bisa kita letakkan di bagian interface.

var
FArrayBentuk : array of TBentuk;

Kemudian elemen elemen array nya kita create sebagai TKotak atau TEllipse pada secara random dengan
FBound yang random juga. Kita perlu sebuah function yang bisa menghasilkan rectangle random. Untuk
meng inisialisasi dan membuang array kita gunakan masing masing sebuah procedure.

function RandomRect(X, Y, W, H : Integer) : TRect;


var vX, vY : Integer;
begin
vX := Random(X);
vY := Random(Y);
result := Rect(vX, vY, vX+Random(W), vY+Random(H));
end;
procedure InitArray(Count : Integer);
var i : Integer;
vRect : TRect;
begin
SetLength(FArrayBentuk, Count);
for i := 0 to Count-1 do begin
vRect := RandomRect(400, 500, 10, 20);
if Random(2) = 1 then begin
FArrayBentuk[ i] := TKotak.Create(vRect);
end else begin
FArrayBentuk[ i] := TEllipse.Create(vRect);
end;
end;
end;
procedure RemoveArray;
var i : Integer;
begin
for i := 0 to Length(FArrayBantuk)-1 do begin
FArrayBentuk[ i] .Free;
end;
end;
Procedure InitArray kita panggil pada bagian Initialization. Pada bagian finalization kita panggil
RemoveArray.

initialization
InitArray;

finalization
RemoveArray;

end.

Berikut ini adalah contoh penting untuk polymorphism nya.

for i := 0 to Length(FArrayBentuk)-1 do begin


FArrayBentuk[ i] .Gambar(PaintBox1.Canvas);
end;

DIKTAT AJAR Page 60


BAHASA PEMROGRAMAN DELPHI

Pada potongan kode di atas, elemen FArrayBentuk adalah bertipe TBentuk. Tetapi pada saat di create,
objek objek TBentuk tersebut bisa berupa TKotak atau TEllipse. Tetapi kode di atas tidak peduli apakah
objek actual yang ditunjuk oleh elemen Array adalah TKotak atau TEllipse. Kode di atas masih bisa
bekerja tanpa perubahan meskipun kita menurunkan lagi TBentuk menjadi TPolygon, TSegitiga, ataupun
yang lainnya.

2.3. Exception

Salah satu hal penting dalam pemrograman adalah menangani error yang mungkin muncul dalam
program. Beruntung, Delphi menyediakan pengelolaan error dalam gaya yang konsisten. Ketika sebuah
error muncul, maka akan terbentuk secara otomatis sebuah objek dengan tipe exception, dan untuk
menghindari kesalahan beruntun yang lebih fatal, alur program tidak akan dilanjutkan. Ide dari kelas
exception ini adalah penanganan terhadap error yang sederhana dan seragam, sehingga konsentrasi dari
Software Engineer tidak akan lepas dari objek dan algoritma yang telah tersusun.

Munculnya exception pada aplikasi console menyebabkan aplikasi berhenti. Demikian juga munculnya
exception dalam thread akan menyebabkan thread berhenti. Dalam aplikasi GUI biasa, munculnya
exception akan menyebabkan tampilnya sebuah Window yang berisi informasi tentang kesalahan yang
timbul. Tugas dari Software Engineer adalah menulis kode tertentu bila exception terjadi.

Dengan menangani exception secara benar, program akan lebih sehat dan kuat (robust) bahkan pada
beberapa kasus dapat membantu menganalisis algoritma untuk menemukan bug dalam algoritma.

2.3.1. Melindungi Alokasi Resource

Bila kita mengalokasikan resource tertentu kita berkewajiban untuk menjamin bahwa resource tersebut
kembali bebas setelah tidak kita pergunakan, meskipun terjadi error. Bila kita mengabaikan hal ini, maka
perangkat lunak (software) kita menjadi tidak stabil bahkan dapat mengakibatkan operating system
menjadi tidak stabil. Untuk melindungi resource yang kita alokasikan, kita dapat menggunakan blok
tryfinally.

Perhatikan contoh berikut ini.

procedure TForm1.ButtonClick(Sender : TObject);


var vPtr : Pointer;
vInteger, vPembagi : Integer;
begin
vPembagi := 0;
GetMem(vPtr, 1024); (Alokasi 1 KB Memory)
vInteger := 100 div vPembagi; (terjadi exception)
FreeMem(vPtr, 1024);
end;

Hal penting yang akan kita pelajari pada contoh di atas adalah ketika terjadi pembagian dengan 0, maka
alur program akan loncat keluar dari blok, sehingga FreeMem tidak pernah membuang memory yang
telah dialokasikan.

DIKTAT AJAR Page 61


BAHASA PEMROGRAMAN DELPHI
Untuk menjamin bahwa FreeMem dijalankan, kita perlu melindungi alokasi memory dengan
menggunakan tryfinally, yang bentuk dasarnya sebagai berikut ini.

(alokasi resource)
try

(perintah-perintah yang menggunakan resource tersebut)

finally
( pembebasan resource)
end;
(Bila terjadi exception, perintah di sini tidak dijalankan)

Perintah perintah antara finally dan end akan selalu dijalankan, baik terjadi error ataupun tidak. Bila
terjadi error pada perintah di antara try dan finally, maka eksekusi program akan terhenti di situ dan
loncat ke bagian finally untuk menjalankan perintah pembebasan resource. Bila tidak terjadi error maka
setelah semua perintah di antara try finally dijalankan akan dilanjutkan dengan perintah perintah di
antara finally dan end. Sebagai catatan di sini adalah ketika terjadi error, status program setelah selesai
menjalankan perintah pembebasan resource adalah masih dalam keadaan error, sehingga perintah
perintah setelah end tidak akan dijalankan.

Selanjutnya program di atas kita perbaiki dengan menambahkan perlindungan terhadap alokasi resource
sebagai berikut ini.

procedure TForm1.ButtonClick(Sender : TObject);


var vPtr : Pointer;
vInteger, vPembagi : Integer;
begin
vPembagi := 0;
GetMem (vPtr, 1024); ( alokasi 1 KB memory)
try
vInteger := 100 div vPembagi; (terjadi exception)
finally
FreeMem (vPtr, 1024);
end;
end.

Beberapa jenis resource yang harus dilindungi adalah :


File ;
Memory ;
Windows Resource (hanya untuk VCL) ; dan
Object.

2.3.2. Mendefinisikan respon terhadap Exception

Ketika exception muncul, Delphi akan menampilkan sebuah Window yang berisi tentang kesalahan yang
muncul, dan menghentikan program di titik tersebut. Tetapi sering kali kita ingin melakukan sesuatu yang
lain ketika terjadi error. Perhatikan contoh di bawah ini.

DIKTAT AJAR Page 62


BAHASA PEMROGRAMAN DELPHI
procedure TForm.ButtonClick (Sender : TObject);
const
MyData1 : array [0..9] of Integer = (10, 5, 7, 18, 13, 4, 5, 6, 3, 1);
MyData2 : array [0..9] of Integer = (4, 5, 3, 0, 5, 6, 7, 9, 3, 4);
var I, j, x : Integer;
begin
for i := 0 to 9 do begin
x := 0;
for j := 1 to 5 do begin
x := (x+MyData1[ i]) div MyData2[ i];
end;
Memo1.Lines.Add (Hasil ke + IntToStr(i) + = + IntToStr(x));
end;
end.

Pada saat i = 4, maka terjadi error karena MyData2[4] berisi 0, sehingga terjadi exception EDivByZero. Kita
tidak ingin loop utama (i) berhenti karena kita perlu tahu hasil perhitungan lainnya. Kita dapat
mendefinisikan respon terhadap munculnya exception tertentu dengan menggunakan tryexcept yang
bentuk dasarnya adalah :

try
(blok program yang dilindungi)
except
on ExceptionTertentu do
(Statement bila ExceptionTertentu terjadi)
end;

Selanjutnya kode yang dilindungi dari EDivByZero dengan perincian sebagai berikut ini.

procedure TForm.ButtonClick (Sender : TObject);


const
MyData1 : array [0..9] of Integer = (10, 5, 7, 18, 13, 4, 5, 6, 3, 1);
MyData2 : array [0..9] of Integer = (4, 5, 3, 0, 5, 6, 7, 9, 3, 4);
var I, j, x : Integer;
begin
for i := 0 to 9 do begin
x := 0;
try
for j := 1 to 5 do begin
x := (x+MyData1[ i]) div MyData2[ i];
end;
Memo1.Lines.Add (Hasil ke + IntToStr(i) + = + IntToStr(x));
except
on EDivByZero do
Memo1.Lines.Add (Data tidak dapat dihitung);
end;
end;
end.

Bila terjadi exception EDivByZero, maka hasil yang muncul ketika nilai MyData2 = 0 adalah Data tidak
dapat dihitung, dan program terus melanjutkan menghitung data berikutnya.

DIKTAT AJAR Page 63


BAHASA PEMROGRAMAN DELPHI
2.4. Debugging dan Exception

Ketika kita menjalankan program dari Delphi IDE (misalnya dengan menekan tombol F9), berarti kita
menjalankan program tersebut dalam metode Delphi debugger. Ketika terjadi error, maka program akan
berhenti dan menunjuk ke baris di mana terjadi error. Hal ini merupakan hal yang normal sesuai dengan
kebutuhan kita akan fasilitas debugger.

Tetapi ketika kita jalankan contoh program untuk menjalankan exception di atas, kita mungkin akan
sedikit bingung dengan berhentinya program pada baris di mana terjadi exception.

Bila kita ingin tahu apakah exception tersebut sudah tertangani dengan benar, kita dapat menjalankan file
exe nya melalui Window Explorer. Atau kita dapat mematikan secara sementara Stop on Delphi
Exception yang dapat kita tampilkan dari menu Tools Debugger Option pada page Language Exception,
seperti tampak pada gambar berikut ini.

Gambar 3 2. Debugger Options

2.5. Class Reference

Variabel bertipe class reference adalah variabel yang mengacu kepada definisi dari kelas tersebut.
Variabel jenis ini dapat digunakan bila kita ingin memanggil class method atau constructor dari suatu
kelas melalui variabel. Perlu diingat bahwa variabel class reference bukanlah variabel bertipe objek,
tetapi variabel yang mengacu kepada tipe kelas. Perhatikan contoh berikut ini.

Kita mempunyai sebuah kelas dengan tipe TMyClass. Selanjutnya kita definisikan sebuah class reference
dengan nama TMyClassRef, sebagai berikut :

type
TMyClassRef = class of TMyClass;

DIKTAT AJAR Page 64


BAHASA PEMROGRAMAN DELPHI
Selanjutnya kita dapat mendefinisikan sebuah variabel dengan tipe class reference sebagai berikut ini.

var
AnObject : TMyClass; // variabel bertipe objek
AClassRef : TMyClassRef; // variabel bertipe class reference
begin
AnObject := TMyClass.Create; // variabel bertipe objek
// dapat di-assign dengan instance dari objek tersebut

AClassRef := TMyClass; // variabel bertipe class reference


// harus di-assign dengan tipe kelas

Kita dapat memanggil class method ataupun constructor melalui variabel yang sudah kita definisikan di
atas dengan contoh sebagai berikut :

AnObject := AClassRef.Create;

Delphi menyediakan banyak sekali class reference diantaranya :

TClass = class of TObject;


TComponentClass = class of TComponent;
TFormClass = class of TForm;

DIKTAT AJAR Page 65


BAHASA PEMROGRAMAN DELPHI
Bab ini membahas tentang penerapan dari uraian uraian yang tercantum dalam bab 2 dan bab 3 dalam
tiga buah contoh program.

Latihan 01 : Aplikasi Sederhana

Pada latihan ini kita membuat sebuah program kalkulator sederhana.

1. Mulailah dengan meng klik pada menu File > New Application.

2. Selanjutnya kita mendesain tampilan aplikasi. Delphi menyediakan sebuah form Designer kosong
untuk kita gunakan dalam mendesain aplikasi, gunakan juga Component Palette untuk mengambil
komponen yang dibutuhkan, dan desainlah sebagai berikut dengan menggunakan Object Inspector :

3. Sekarang kita melengkapi property komponen. Pada Object Inspector lakukan pengaturan property
menurut tabel berikut ini :

Komponen Property Value


Form1 Caption Latihan
Label1 Caption Data 1
Label2 Caption Data 2
Label3 Caption Hasil
Edit1 Name EdData1
Text 0

DIKTAT AJAR Page 66


BAHASA PEMROGRAMAN DELPHI
Edit2 Name EdData2
Text 0
Edit3 Name EdHasil
Text 0
Button1 Caption Kali
Button2 Caption Selesai

4. Sehingga menghasilkan tampilan seperti ini :

5. Menggunakan Event yang sesuai untuk menuliskan perintah program, untuk program kali ini kita
hanya menggunakan Event onClick pada tombol [Kali] dan tombol [Selesai]. Caranya mudah, klik 2x
pada tombol [Kali], sehingga Delphi menunjukkan kita lokasi untuk pengetikan pada Unit Editor
sebagai berikut ini :

procedure TForm1.Button1Click(Sender : TObject);


begin
EdHasil.Text := FloatToStr(StrToFloat(EdData1.Text) *
StrToFloat(EdData2.Text));

end;

6. Gunakan cara yang sama untuk tombol [Selesai], klik 2x pada tombol tersebut, lalu ketikkan sebagai
berikut :

procedure TForm1.Button2Click(Sender : TObject);


begin
Close;
end;

7. Simpan aplikasi yang kita buat dengan cara meng klik menu File > Save All. Berturut turut Delphi
akan meminta nama file untuk menyimpan Unit dan dilanjutkan dengan meminta nama file untuk
menyimpan Project. Simpanlah nama unit Anda dengan Ulatihan01 dan project Anda dengan nama
Platihan01.

DIKTAT AJAR Page 67


BAHASA PEMROGRAMAN DELPHI
8. Selesai melakukan penyimpanan, kita lanjutkan dengan melakukan kompilasi sekaligus menjalankan
program. Adapun caranya melalui menu Run > Run.

Latihan 02 : Menggu nakan Kondisional

Pada latihan kali ini kita akan membuat sebuah program perhitungan nilai mahasiswa. Dalam hal ini,
input program adalah nilai nilai UTS dan UAS, output program berupa grade nilai dalam abjad A, B, C, D,
atau E.

1. Mulailah dengan meng klik pada menu File > New > Application.

2. Pada Form Designer, dengan menggunakan komponen dari palette standard, berikut ini :

Desainlah form Anda seperti ini :

3. Aturlah property tiap komponen dengan mengikuti tabel berikut :

Komponen Property Value


Form1 Caption Latihan02
Panel1 Caption Data 1
Font.Style.fsBold True
Panel2 Caption Nilai
Font.Style.fsBold True
Panel3 Caption Bobot
Font.Style.fsBold True
Label1 Caption UTS 1
Label2 Caption UTS 2

DIKTAT AJAR Page 68


BAHASA PEMROGRAMAN DELPHI
Label3 Caption UAS
Label4 Caption Total
Label5 Caption Grade
Edit1 Text 0
Edit2 Text 0
Edit3 Text 0
Edit4 Text 25
Edit5 Text 25
Edit6 Text 50
Edit7 Text
Edit8 Text
Button1 Caption Hitung
Button2 Caption Selesai

Hasil akhir desain Anda akan menjadi seperti di bawah ini :

4. Untuk menuliskan skrip program, Anda harus meng klik 2x pada tombol [Hitung], lalu ketikkan listing
di bawah ini :

procedure TForm1.Button1Click(Sender : TObject);


var uts1, uts2, uas, na : real;
b1, b2, b3 : real;
grade : string;
begin
//mengambil data nilai..
uts1 := StrToFloat (Edit1.Text);
uts2 := StrToFloat (Edit2.Text);
uas := StrToFloat (Edit3.Text);
//..mengambil data persen bobot.
na := uts1*b1 + uts2*2 + uas*3;
//..menentukan grade nilai..
if (na >= 80) then
grade := A
else if (na >= 60) and (na < 80) then
grade := B
else if (na >= 60) and (na < 70) then
grade := C
else if (na >= 50) and (na < 60) then
grade := D
else
grade := E;

DIKTAT AJAR Page 69


BAHASA PEMROGRAMAN DELPHI
//..menampilkan output.
Edit7.Text := FloatToStr(na);
Edit8.Text := grade;

end;

5. Dan skrip terakhir, Anda lakukan klik 2x pada tombol [Selesai], lalu ketikkanlah :

procedure TForm1.Button2Click (Sender : TObject);


begin
Close;
end;

6. Simpanlah program dengan nama unit Ulatihan02 dan nama Project Latihan02.

7. Kompilasi program Anda dengan menggunakan menu Run > Run.

Latihan 03 : Menggunakan Ite rasi

Latihan kali ini adalah membuat program yang mengilustrasikan cara melakukan perhitungan secara
berulang/iterasi. Untuk contoh, kita menggunakan perhitungan yang sangat familiar yaitu perhitungan
trigonometri.

1. Mulailah dengan meng klik pada Menu File > New > Application.

2. Pada Form designer, dengan menggunakan komponen dari Palette Standard dan Palette Additional
berikut :

DIKTAT AJAR Page 70


BAHASA PEMROGRAMAN DELPHI
desainlah form Anda seperti ini :

3. Klik 2x pada komponen chart1, lalu pada dialog editing chart1, tambahkan data series1 :

4. Aturlah property tiap komponen dengan mengikuti tabel berikut :

Komponen Property Value


Form1 Caption Latihan 03
Panel1 Caption Data Input
Font.Style.fsBold True
Label1 Caption Sudut Awal
Label2 Caption Jumlah Data
Label3 Caption Interval
Label4 Caption Total
Label5 Caption Grade
Edit1 Text 0
Edit2 Text 50
Edit3 Text 10
Button1 Caption Sinus
Button2 Caption Cosinus
Button3 Caption Selesai

DIKTAT AJAR Page 71


BAHASA PEMROGRAMAN DELPHI
5. Dalam latihan kali ini, kita menggunakan beberapa variabel yang bersifat global, artinya dapat
digunakan pada semua procedure yang berada di dalam unit latihan ini. Maka deklarasi variabel harus
Anda letakkan sebagai berikut :

private
( Private declarations )
public
( Public declarations )
end;

var
Form1 : TForm1;
I, ndat : integer;
teta0, step : real;
ceksin : Boolean;
x, y : array [0..360] of real;

6. Untuk menuliskan skrip perintah program, klik 2x pada tombol [Sinus], lalu ketiklah :

procedure TForm1.Button1Click (Sender : TObject);


begin
teta0 := StrToFloat (Edit1.Text);
ndat := StrToInt (Edit2.Text);
step := StrToFloat (Edit3.Text);
Series1.Clear;
x[0] := teta0;
for i := 0 to ndat do
begin
y[i] := sin(x[i]*3.14/180);
Series1.AddXY( x[i],y[i] , , clRed );
X[i+1] := x[i] * step;
end;
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add(Grafik Trigonometri);
Chart1.Title.Font.Style := [fsBold];
Chart1.LeftAxis.Title.Caption := Nilai Sinus;
ceksin := True;
UpdateValue; //User define procedure
end;

7. Kemudian klik 2x pada tombol [Cosinus], lalu ketikkan :

procedure TForm1.Button2Click (Sender : TObject);


begin
teta0 := StrToFloat (Edit1.Text);
ndat := StrToInt (Edit2.Text);
step := StrToFloat (Edit3.Text);
Series1.Clear;
x[0] := teta0;
for i := 0 to ndat do
begin
y[i] := cos(x[i]*3.14/180);
Series1.AddXY( x[i],y[i] , , clRed );
X[i+1] := x[i] * step;

DIKTAT AJAR Page 72


BAHASA PEMROGRAMAN DELPHI
end;
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add(Grafik Trigonometri);
Chart1.Title.Font.Style := [fsBold];
Chart1.LeftAxis.Title.Caption := Nilai Cosinus;
ceksin := True;
UpdateValue; //User define procedure
end;

8. Pada latihan kali ini kita juga membuat sebuah user define procedure (prosedur sendiri), yang kita
tempatkan sebelum posisi end terakhir dari unit. Ketikkan sintaks berikut :

procedure TForm1.UpdateValue;
var
I : integer;
begin
StringGrid1.ColCount := 3;
StringGrid1.RowCount := ndat+1;
StringGrid1.Cells[0,0] := 1 ;
StringGrid1.Cells[1,0] := X ( i );
StringGrid1.Cells[2,0] := Y ( i );
x[ 0 ]:= teta0;
for i := 0 to ndat do
begin
if ceksin then
y [ i ] := sin(x [ i ]*3.14/180)
else
y [ i ] := cos(x [ i ]*3.14/180);
x[i+1] := x[i] + step
StringGrid1.Cells[0, i+1] := IntToStr(i);
StringGrid1.Cells[1, i+1] := FloatToStr(x[i]);
StringGrid1.Cells[2, i+1] := formatFloat(#0.000, y[i]);
end;
end;

agar unit mengenalnya, perhatikan cara penulisannya dan letakkan header procedure tersebut pada
barisan deklarasi berikut :

procedure Button2Click ( Sender : TObject );


procedure Button3Click ( Sender : TObject );
procedure UpdateValue;
private
( Private declarations )
public
( Public declarations )
end;

9. Lalu terakhir, klik 2x pada tombol [Selesai], dan ketiklah :

procedure TForm1.Button3.Click ( Sendet : TObject );


begin
Close;
end;

DIKTAT AJAR Page 73


BAHASA PEMROGRAMAN DELPHI
10. Simpan program Anda, dengan nama unit Ulatihan03 dan nama Project Latihan03. Lalu jalankan
dengan menekan F9, sehingga Anda akan diperoleh hasil sebagai berikut :

DIKTAT AJAR Page 74


BAHASA PEMROGRAMAN DELPHI
Aplikasi database memungkinkan user berinteraksi dengan informasi yang tersimpan dalam sebuah
database. Tidak seperti bahasa pemrograman yang lain, Delphi memberikan banyak pilihan teknologi
kepada Software Engineer dalam membangun dan mengembangkan aplikasi database. Dengan
banyaknya pilihan tersebut, Software Engineer dapat mengembangkan aplikasi dengan mekanisme akses
data yang paling tepat menurut kebutuhan.

5.1. Tipe Database Management System

Database adalah informasi yang diorganisasikan dan disimpan dengan cara tertentu. Jenis sistem
database yang paling banyak digunakan pada masa kini adalah Database Relasional. Database Relasional
mengorganisasikan informasi dalam bentuk tabel tabel logika yang saling berelasi.

Sistem yang digunakan untuk mengelola database biasanya disebut Database Management System
(DBMS). DBMS yang mengelola database relasional biasa disebut dengan Relational Database
Management System (RDBMS).

Setiap Database Management System mempunyai cara tersendiri bagaimana menyimpan informasi dan
bagaimana menyediakan interface ke user untuk mengaksesnya. Delphi mempunyai dukungan terhadap
2 (dua) jenis server database relasional.

Remote Database Server, yaitu DBMS yang mempunyai sistem independen yang terpisah dari
aplikasinya. Remote database server biasanya berada pada mesin yang terpisah. Data dari remote
database server bahkan mungkin tidak berada dalam satu mesin tetapi terdistribusi pada beberapa
server. Walaupun remote database server bervariasi dalam menyimpan informasi, remote database
server menyediakan interface yang seragam buat user untuk mengakses informasi yang tersimpan
didalamnya yaitu Structured Query Language (SQL). Karena Anda mengaksesnya dengan
menggunakan SQL, remote database server sering disebut SQL server. Contoh remote database
server yang ada saat ini, misalnya Firebird, Oracle, IBM UDB DB2, MS SQL Server, InterBase, Sybase,
Informix, PostgreSQL, dan lain lain.
Database Lokal, yaitu DBMS yang berada pada system yang sama dengan aplikasinya. Aplikasi dapat
bersifat sub ordinat dari DBMS atau sebaliknya DBMS yang merupakan sub ordinat dari aplikasi.
Biasanya mempunyai proprietary API untuk mengakses data dan hanya optimal untuk single user. Jika
database di share untuk beberapa user, biasanya menggunakan mekanisme file based locking, karena
itu sering disebut file based database. Contoh database lokal adalah Paradox, dBASE, FoxPro, Access,
dan lain lain.

Memilih tipe database yang akan digunakan bergantung pada banyak hal. Berikut ini adalah hal hal yang
harus dipertimbangkan ketika memilih database yang akan Anda pergunakan.

User. Berapa banyak user yang akan berbagi data yang sama? Remote database server didesain untuk
diakses banyak user pada saat yang bersamaan. Remote database server mendukung multi user
melalui mekanisme yang disebut transaction. Beberapa database lokal juga menyediakan mekanisme
file based locking. Kebanyakan justru tidak menyediakan dukungan multi user sama sekali. Jika
aplikasi Anda harus dapat diakses oleh lebih dari seorang user, lebih aman jika Anda menggunakan
remote database server.
Data. Berapa banyak data yang dikelola? Remote database server dapat mengelola jauh lebih banyak
data daripada database lokal. Beberapa remote database server didesain untuk mengelola data
warehousing dalam jumlah yang sangat besar.

DIKTAT AJAR Page 75


BAHASA PEMROGRAMAN DELPHI
Performance. Seberapa cepat performance yang diinginkan? Database lokal biasanya lebih cepat
daripada remote database server karena berada dalam sistem yang sama dengan aplikasi database
nya. Tetapi hal ini harus selalu dikaitkan dengan jumlah data yang dikelola.
Maintenance. Database lokal biasanya membutuhkan maintenance yang lebih sedikit dibandingkan
dengan remote database server. Remote database server biasanya membutuhkan seorang Database
Administrator (DBA) untuk mengelolanya.
Biaya. Penggunaan remote database server membutuhkan biaya lisensi yang lebih besar karena juga
memperhitungkan lisensi untuk setiap client yang terkoneksi. Tetapi beberapa remote database
server bersifat open source dan gratis untuk digunakan seperti Firebird dan PostgreSQL.

5.2. Tipe Database Delphi

Aplikasi database yang tersedia di Delphi mempunyai banyak tipe, meliputi :


Sistem Tunggal/Stand Alone.
Sistem File Share/Sentralisasi.
Sistem Client Server.
Sistem Multi tier.

Sistem Tunggal/Stand Alone


Pada arsitektur ini database dan aplikasi database ditempatkan pada mesin (komputer) yang sama.
Arsitektur ini adalah arsitektur yang paling sederhana dan dirancang untuk single user. Database yang
digunakan adalah database lokal.

Sistem File Share


Arsitektur ini sama dengan aplikasi database stand alone kecuali database dapat diakses dari beberapa
client yang terhubung dalam jaringan. Jadi, aplikasi database ditempatkan di masing masing client untuk
mengakses database yang sama yang diletakkan di suatu komputer dalam jaringan. Atau dapat juga
aplikasi berada pada server yang sama dengan data dan dijalankan oleh client melalui dumb terminal.
Arsitektur ini hanya cocok untuk aplikasi dengan jumlah user yang sedikit. Database yang digunakan
adalah database lokal.

Aplikasi database stand alone atau file share termasuk dalam aplikasi single tiered application, karena
aplikasi dan database berbagi file system yang sama.

Sistem Client Server


Arsitektur ini terdiri dari 2 (dua) komponen utama, yaitu client dan server. Aplikasi database berada pada
mesin client. Sedangkan pada server terdapat remote database server dan database yang akan diakses.
Aplikasi jenis ini juga sering disebut sebagai two tiered application. Jika aplikasi database juga
ditempatkan di mesin yang sama dengan server yang berisi remote database server, aplikasi ini juga tetap
disebut two tiered application, karena aplikasi dan database server beroperasi pada 2 (dua) system
independen yang berbeda.

Sistem Multi tier


Arsitektur ini merupakan perluasan dari sistem client server. Arsitektur ini terdiri dari remote database
server, aplikasi server yang mengakses remote database server, dan aplikasi client yang mengakses
aplikasi server. Jumlah tier dalam aplikasi dapat ditambah sesuai dengan kebutuhan.

DIKTAT AJAR Page 76


BAHASA PEMROGRAMAN DELPHI
5.3. Mekanisme Data Akses

Untuk mengakses database, Delphi menyediakan banyak pilihan mekanisme akses data, yaitu :
BDE (Borland Database Engine).
IBExpress.
dbGO.
dbExpress.
ADO (ActiveX Data Objects).

Selain mekanisme data akses yang disediakan oleh Delphi, banyak juga mekanisme data akses yang
ditawarkan oleh pihak lain, baik yang bersifat komersial ataupun non komersial yang dapat Anda
manfaatkan di Delphi.

Borland Database Engine (BDE)


BDE merupakan teknologi database standar yang diperkenalkan pada versi awal Delphi dan pada saat ini
merupakan satu satunya teknologi akses database yang ditawarkan oleh Delphi. BDE pada awalnya
adalah Paradox Engine untuk mengakses database Paradox yang kemudian dikembangkan agar dapat
mengakses database lokal lain seperti dBASE, FoxPro, Access, dan text file. BDE juga dikembangkan agar
dapat mengakses remote database server. Delphi menyertakan beberapa BDE driver yang dikenal dengan
nama SQL Links untuk mengakses SQL server seperti Oracle, DB2, Sybase, Informix, MS SQL Server, dan
Interbase. BDE juga dapat mengakses database lain lewat ODBC driver.

Membuat aplikasi dengan BDE sangat mudah dan seragam untuk berbagai jenis database. Ini membuat
porting aplikasi dari suatu database ke database lain sangat mudah. BDE juga terdokumentasi dengan
baik.

Walaupun demikian bukan berarti BDE tidak mempunyai kekurangan. Kekurangan dari BDE adalah engine
yang sangat besar dengan banyak file yang dibutuhkan ketika instalasi dan membutuhkan banyak
memori.

Sejak tahun 2002, Borland tidak lagi melakukan proses update terhadap SQL Links. SQL Links tidak
disertakan lagi dalam produk Delphi setelah tahun 2002. Jadi, saat ini BDE hanya ditujukan untuk
mengakses database lokal seperti dBASE dan Paradox.

IBExpress
IBExpress adalah teknologi khusus untuk mengakses Interbase Server. IBExpress tidak dapat digunakan
untuk mengakses remote database server lain. IBExpress memberikan kontrol dan akses yang lebih luas
terhadap Interbase Server dibandingkan dengan mekanisme data akses lain. IBExpress mempunyai
komponen khusus yang mampu menangani transaction dan melakukan koneksi langsung ke client library
Interbase. Ini membuat aplikasi yang dihasilkan tidak membutuhkan library lain selain client library
Interbase.

dbGO
dbGO adalah implementasi ADO (ActiveX Data Objects) di Delphi yang merupakan standar Microsoft
untuk akses data, digunakan untuk mengakses database melalui OLEDB. dbGO sebelumnya disebut
dengan nama ADOExpress. Microsoft kini menawarkan mekanisme data akses baru yaitu ADO.Net yang
bekerja di bawah platform .Net.

DIKTAT AJAR Page 77


BAHASA PEMROGRAMAN DELPHI
dbExpress
dbExpress adalah library pengaksesan database yang bersifat cross platform, merupakan standar
pengakses data terbaru dari Delphi untuk platform Win32. Dengan Kylix, Anda dapat melakukan
kompilasi aplikasi yang Anda buat menggunakan dbExpress di Linux, tentu saja hal ini hanya dapat Anda
lakukan untuk aplikasi CLX bukan aplikasi VCL.

dbExpress adalah library yang sangat ringan dan cepat untuk mengakses SQL Server. dbExpress mulai
diperkenalkan mulai dari Delphi 6.

ActiveX Data Object (ADO)


ADO adalah metode mengaksesan database dari Microsoft, jadi, koneksi ini direkomendasikan untuk
koneksi pada produk produk Microsoft. Seperti Microsoft Access dan SQL Server.

5.4. Arsitektur Database Delphi

Delphi menyediakan berbagai macam komponen dataset untuk mengakses data. Dataset adalah
representasi data dalam aplikasi yang kita buat. Ketika akan mengakses suatu data dari sebuah sumber
data maka dibutuhkan komponen dataset agar terjadi interaksi dengan data tersebut.

Untuk menampilkan data di dataset pada user interface aplikasi, Anda membutuhkan komponen
komponen yang dapat menampilkan data pada dataset. Komponen komponen ini disebut sebagai data
control. Dataset tidak dapat berhubungan langsung dengan data control. Keduanya dihubungkan oleh
sebuah komponen yang bernama DataSource. Dataset dapat memperoleh data dari sumber data dengan
berbagai cara.

Arsitektur dasar aplikasi database di Delphi dapat digambarkan oleh diagram di bawah ini.

User Interface Data Source


Dataset Connection
to Data

Data Module

User Interface
User Interface berisi berbagai data control yang menampilkan data dari database yang direpresentasikan
oleh dataset.

Data Source
Data Source adalah penghubung antara user interface dan komponen dataset yang merupakan
representasi dari data di database. Beberapa komponen data control pada sebuah form dapat berbagi
sebuah data source.

Dataset
Inti dari aplikasi database adalah dataset. Komponen ini merepresentasikan sekumpulan record dari
suatu database. Kumpulan record ini dapat berupa record record dari sebuah tabel database, subset dari
field atau record suatu tabel atau informasi yang berasal lebih dari satu table yang digabungkan
membentuk single view.

DIKTAT AJAR Page 78


BAHASA PEMROGRAMAN DELPHI
Connection
Dataset mengkoneksikan diri ke database dengan berbagai macam cara tergantung dengan tipe dataset
yang digunakan. Beberapa jenis dataset dapat mengakses langsung data tanpa komponen connection.

Data Module
Data Module adalah container tempat seluruh komponen data akses diletakkan. Data module berfungsi
untuk melakukan sentralisasi seluruh business rule dari aplikasi database.

DIKTAT AJAR Page 79


BAHASA PEMROGRAMAN DELPHI
Fokus pembahasan adalah teknik membuat sebuah aplikasi yang mampu menyimpan data dalam bentuk
tabel, mengubah data, menghapus data, atau menampilkan data sesuai dengan keinginan dari user.

6.1. Aplikasi MyBase

Dataset adalah inti dari aplikasi database yang terdapat dalam bahasa pemrograman Delphi. Salah satu
komponen dataset yang disediakan oleh Delphi adalah ClientDataSet. ClientDataSet adalah dataset
terpenting di Delphi dan merupakan inti dari sebagian besar aplikasi database di Delphi.

ClientDataSet dapat memperoleh data secara langsung dari sumber data berupa file dalam format data
packet. File data packet dapat berbentuk file binary atau file text. Data packet dalam bentuk file binary
biasanya berekstensi cds. Sedangkan data packet dalam bentuk text ditulis dalam format XML. File data
packet dalam bentuk text biasanya berukuran lebih besar daripada file data packet dalam bentuk binary.

File data packet berisi sebuah tabel. Sebuah tabel terdiri dari baris dan kolom. Contoh sebuah tabel :

Nama Ibu Kota Kontinen Area


Argentina Buenos Aires Amerika Selatan 2,777,815.00
Bolivia La Paz Amerika Selatan 1,098,575.00
Brazil Brasilia Amerika Selatan 85,111,968.00
Canada Ottawa Amerika Utara 9,976,147.00
Chile Santiago Amerika Selatan 756,943.00
Colombia Bogota Amerika Selatan 1,138,907.00
Cuba Havana Amerika Utara 114,524.00

Kolom pada tabel disebut dengan istilah field dan baris pada tabel disebut dengan istilah record. Setiap
record pada tabel mempunyai informasi yang berelasi dengan setiap field. Contoh di atas adalah tabel
dengan nama Negara yang mempunyai 4 (empat) buah field dan berisikan informasi sebanyak 7 (tujuh)
buah record.

Kita dapat membuat aplikasi database dengan menggunakan komponen ClientDataSet dengan database
berupa kumpulan tabel yang disimpan dalam file file data packet. Aplikasi yang dibuat dengan
menggunakan ClientDataSet dan mengakses file secara langsung disebut dengan istilah file based
database application. Delphi menyebut teknologi ini dengan istilah MyBase.

Untuk membuat aplikasi database sederhana single user yang hanya mengelola data dalam jumlah yang
tidak besar, aplikasi MyBase sangat tepat digunakan. Aplikasi MyBase sangat ringan dan cepat karena
seluruh isi tabel di load ke memory. Oleh karena itu, kuota tabel dibatasi oleh kapasitas memory
komputer yang digunakan oleh user.

DIKTAT AJAR Page 80


BAHASA PEMROGRAMAN DELPHI
Arsitektur aplikasi MyBase dapat digambarkan sebagai berikut ini.

Data Module
File
Data Source ClientDataSet
User Interface

Dengan membandingkannya dengan diagram arsitektur database Delphi, tampak bahwa dataset yang
digunakan dalam MyBase adalah ClientDataSet dan koneksi ke sumber data dilakukan dengan cara
mengaksesnya langsung dari file.

Contoh aplikasi MyBase sebagai berikut ini :

Untuk memperjelas pembahasan di atas, kita akan membuat program sederhana yang akan
menampilkan data dari sebuah file data packet.
Buat aplikasi baru. Beri nama form utama aplikasi dengan nama MainForm.
Letakkan sebuah komponen ClientDataSet dari component palette Data Access pada MainForm. Beri
nama cdsEmployee. Isi property Filename dengan file data yang akan ditampilkan. Anda dapat
mengisikannya dengan salah satu file dengan ekstensi xml atau cds yang terdapat pada folder contoh
data dari Delphi, biasanya ada di C:\Program Files\Common Files\Borland Shared\Data. Untuk kali ini
isikan dengan file Employee.xml lengkap dengan path nya.

Gambar 5 1. ClientDataSet

Letakkan sebuah komponen DataSource dari component palette Data Access pada MainForm. Beri
nama dsEmployee.
Isi property Dataset dengan komponen ClientDataSet yang telah kita letakkan sebelumnya yaitu
cdsEmployee.
Letakkan sebuah komponen DBGrid dari component palette Data Controls pada MainForm. Beri
nama dbgEmployee. Isi property DataSource dengan dsEmployee.
Set property Active dari cdsEmployee menjadi True.
Jalankan program.

DIKTAT AJAR Page 81


BAHASA PEMROGRAMAN DELPHI
Program akan menampilkan grid yang berisi data dari tabel yang tersimpan pada file Employee.xml.

Gambar 5 2. Employee MyBase

6.2. Mengaktifkan Dataset

Untuk membaca data atau menuliskan data ke Dataset, dataset yang bersangkutan harus diaktifkan
terlebih dahulu. Ada 2 (dua) macam cara dalam mengaktifkan Dataset, yaitu :

Set property Active menjadi True baik saat design time lewat Object Inspector atau saat runtime
melalui kode program.
ClientDataSet1.Active := True;

Memanggil method Open pada saat runtime.


ClientDataSet1.Open;

Setelah data tidak dipergunakan lagi, lakukan proses menonaktifkan dataset yang bersangkutan dengan 2
(dua) macam cara, yaitu :

Set property Active menjadi False baik saat design time lewat Object Inspector atau saat runtime
melalui kode program.
ClientDataSet1.Active := False;

Memanggil method close pada saat runtime.


ClientDataSet1.Close;

Catatan Khusus ClientDataSet


Apabila ClientDataSet digunakan untuk aplikasi MyBase(mengakses langsung file data packet),
mengaktifkan dataset dengan cara di atas hanya bisa digunakan bila property filename diisi dengan nama
file yang akan diakses. Selain itu, kita juga dapat menggunakan method LoadFromFile dari ClientDataSet
untuk mengaktifkannya. Method LoadFromFile mempunyai satu parameter bertipe string yaitu nama file
data packet yang akan diakses.

Pada aplikasi MyBase jika kita mengaktifkan ClientDataSet saat design time, maka file data packet yang
di load akan tersimpan pada property Data dari ClientDataSet yang bersangkutan. Ini berarti file data
packet yang di load akan ikut terkompilasi pada file executable tersebut saat runtime. Jadi, biasakan
mengaktifkan dataset saat runtime. Mengaktifkan dataset saat design time dapat dilakukan untuk
pengetesan dari aplikasi yang sedang dibangun.

DIKTAT AJAR Page 82


BAHASA PEMROGRAMAN DELPHI
6.3. Mengakses Field Dataset

Setelah dataset aktif, kita dapat mengakses field field dari record yang aktif dengan mengakses object
field nya. Ada beberapa cara untuk mengakses field field dari record yang aktif.

Menggunakan property default FieldValues.


Dataset mempunyai property default FieldValues yang bertipe variant. Contoh :
ClientDataSet1.FieldValues[ Customer] := Edit1.text;

Karena FieldValues adalah property yang bersifat default, maka kita dapat mengaksesnya tanpa nama
property nya. Contoh :
ClientDataSet1[ Customer] := edit1.text;

Menggunakan property Fields.


Kita harus mengetahui urutan field yang ada di dataset yang akan diakses. Field pertama mempunyai
indeks 0. Jadi, untuk mengakses field keenam yang bertipe string dari dataset,
Label1.Text := ClientDataSet1.Fields[ 5] .AsString;

Method AsString adalah method dari TField untuk membaca nilai dari TField sebagai string. Ada
banyak method serupa dari TField untuk berbagai tipe data seperti AsInteger, AsFloat, AsBoolean,
AsDateTime, dan lain lain.

Menggunakan Method FieldByName


Method FieldByName dari dataset menghasilkan object field yang diinginkan dan gunakan method
konversi nilai sesuai dengan tipe data yang diinginkan seperti AsString atau AsInteger. Contoh :
SpinEdit1.Value := ClientDataSet1.FieldByName ( QTY) .AsInteger;

6.4. Navigasi Dataset

Setiap dataset yang aktif mempunyai pointer yang menunjuk ke record yang aktif. Ketika dataset aktif
maka pertama kali pointer record aktif akan menunjuk ke record pertama dalam dataset. Jika dataset
mendukung editing data, record aktif dapat di edit datanya.

Navigasi Data Sekuensial


Kita dapat mengubah record aktif dengan cara mengubah pointer record aktif sehingga menunjuk ke
record yang lain. Untuk menggerakkan pointer record aktif, dataset mempunyai beberapa method :
Method First, pointer akan menunjuk ke record pertama dalam dataset.
Method Last, pointer akan menunjuk ke record terakhir dalam dataset.
Method Next, pointer akan menunjuk ke record setelah record aktif sekarang.
Method Prior, pointer akan menunjuk ke record sebelum record aktif sekarang.

Jika dataset bersifat unidirectional maka hanya method First dan Next saja yang bisa digunakan.
Contohnya :

ClientDataSet1.First;

Dataset juga mempunyai dua buah property bernilai Boolean yang berguna jika kita mencacah record
record dalam dataset.

DIKTAT AJAR Page 83


BAHASA PEMROGRAMAN DELPHI
Property Bof (Beginning of File), bernilai True bila pointer record aktif menunjuk record pertama
dalam dataset.
Property Eof (End of File), bernilai True bila pointer record aktif menunjuk record terakhir dalam
dataset.

Berikut ini contoh kode program mencacah sebuah dataset.

if not ClientDataSet1.IsEmpty then


begin
ClientDataSet1.First;
while not ClientDataSet1.EOF do
begin
// proses record aktif

ClientDataSet1.Next;
end;
end.

Method IsEmpty adalah function yang mengembalikan nilai Boolean. Method IsEmpty mengembalikan
nilai True bila dataset tidak mempunyai record dan mengembalikan nilai False bila mempunyai satu atau
lebih record.

MoveBy
Untuk menggerakkan pointer record aktif beberapa langkah ke depan atau ke belakang, gunakan method
MoveBy. Method MoveBy mempunyai satu parameter input yaitu berapa langkah record pointer
digerakkan. Gunakan bilangan negative untuk gerakan ke belakang. Contoh :

ClientDataSet1.MoveBy (9);

Contoh di atas menggerakkan pointer record aktif sebanyak sembilan record ke depan. Method MoveBy
mengembalikan nilai jumlah record lompatan.

Record Numbers
Kita juga dapat memindahkan pointer record aktif dengan mengeset property RecNo. Property RecNo
adalah nomor urut record dari awal dataset.

Kita dapat membaca nilai Property RecNo untuk mengetahui nomor urut record aktif dari suatu dataset.
Atau mengeset nilai property RecNo untuk menjadi record dengan nomor urut tersebut menjadi record
aktif.

Ada 2 (dua) hal penting tentang property RecNo.


Mengeset nilai property RecNo dengan angka lebih kecil dari satu atau lebih besar dari jumlah record
pada dataset akan menimbulkan exception.
Record Number bersifat dinamis. Bila indeks aktif berubah record number juga berubah.

Bookmark
Bookmark digunakan untuk menandai posisi sebuah record pada suatu dataset agar dataset dapat
kembali ke record tersebut dengan cepat. Ada tiga operasi bookmark, yaitu set bookmark, kembali ke
suatu bookmark, dan free bookmark.

DIKTAT AJAR Page 84


BAHASA PEMROGRAMAN DELPHI
Contoh dari penggunaan Bookmark teruraikan dalam listing program berikut ini :

var
MyBookmark : TBookmark;
begin
MyBookmark := ClientDataSet1.SetBookmark;
try
// kerjakan sesuatu sehingga record aktif dataset berubah

ClientDataSet1.GotoBookmark (MyBookmark);
finally
ClientDataSet1.FreeBookmark (MyBookmark);
end;
end.

Method GetBookmark akan menyimpan posisi record active ke variabel Bookmark yang bertipe
TBookmark. Setelah kita mengerjakan sesuatu yang berakibat terjadinya perubahan record aktif, method
GotoBookmark dapat mengembalikan record aktif dataset kembali ke posisi yang dicatat oleh variabel
Bookmark. Jangan lupa untuk memanggil method FreeBookmark setelah sebuah instance TBookmark
tidak diperlukan lagi. Kita dapat membuat lebih dari satu Bookmark untuk sebuah dataset.

6.5. Membuat File Data Packet

Ada banyak cara untuk membuat sendiri file data packet. Kita dapat mencobanya sendiri. Contoh
program tersebut tersedia di <Directory Delphi>\Demos\DbClx\mybaseexplorer. Tetapi contoh program
tersebut hanya bisa membuat field dengan tipe data string dan integer saja. Kita dapat mengubahnya
agar dapat membuat field dengan tipe yang lain.

Komponen ClientDataSet dapat digunakan untuk membuat tabel berformat data packet dengan mudah.
Teknikal nya sebagai berikut ini.
Letakkan sebuah komponen ClientDataSet ke sebuah form.
Set property FieldDefs dari ClientDataSet. Caranya, klick tombol edit property FieldDefs di Object
Inspector untuk menampilkan Collection Editor.

Gambar 5 3. Editing ClientDataSet


Gunakan tombol Add New yang ada pada sebelah atas Collection Editor untuk menambah field.
Isi property nama dan data type dari field yang Anda baru buat, Isi pula beberapa property yang Anda
anggap perlu.
Anda dapat membuat lagi beberapa field yang Anda butuhkan.

DIKTAT AJAR Page 85


BAHASA PEMROGRAMAN DELPHI
Klik kanan komponen ClientDataSet untuk menampilkan menu popup dan pilih menu Create Dataset
atau dengan memanggil method CreateDataSet dari ClientDataSet saat runtime.
Anda dapat menyimpannya ke file dengan cara meng klik kanan komponen ClientDataSet dan
memilih salah satu dari menu berikut ini :
o Save to MyBase Xml Table, untuk menyimpan file dengan format XML.
o Save to MyBase Xml UTF8 Table, untuk menyimpan file dengan format XML yang menggunakan
Unicode UTF8.
o Save to binary MyBase file, untuk menyimpan file dengan format file binary.

Anda juga dapat membuat File Data Packet secara runtime. Untuk mengeset property FieldDefs secara
runtime, Anda dapat menggunakan method Add dari property FieldDefs. Method Add membutuhkan
empat buah parameter, yaitu :
Name : String, nama field yang Anda buat.
DataType : TFieldType, tipe data dari field yang Anda buat.
Size : integer, ukuran field jika dibutuhkan.
Required : Boolean, apakah field harus diisi.

Dua parameter terakhir mempunyai default, yaitu Size bernilai 0 dan Required bernilai False. TFieldType
adalah enumerasi dari tipe data field yang dapat Anda buat. Berikut ini adalah daftar nilai TFieldType yang
tersedia.

TFieldType Keterangan
ftUnknown Field tidak diketahui jenisnya.
ftString Field karakter atau string.
ftSmallint Field 16 bit integer field.
ftInteger Field 32 bit integer field.
ftWord Field 16 bit unsigned integer.
ftBoolean Field Boolean.
ftFloat Field Numerik Floating point.
ftCurrency Field Numerik untuk uang.
ftBCD Binary Coded Decimal.
ftDate Field Date.
ftTime Field Time.
ftDateTime Field DateTime.
ftBytes Field Binary berukuran tetap.
ftVarBytes Field Binary berukuran tidak tetap.
ftAutoInc Field Auto Increment 32 bit integer.
ftBlob Field Binary (Binary Large Object).
ftMemo Field Memo.
ftGraphic Field Bitmap.
ftFmtMemo Field Memo Berformat.
ftParadoxOle Field OLE Paradox.
ftDBaseOle Field OLE dBASE.
ftTypedBinary Field binary bertipe.
ftCursor Output cursor dari Oracle stored procedure.
ftFixedChar Field Fixed character.
ftWideString Field Wide string.

DIKTAT AJAR Page 86


BAHASA PEMROGRAMAN DELPHI
ftLargeint Field Large integer.
ftADT Field Abstract Data Type.
ftArray Field Array.
ftReference Field REF.
ftDataSet Field DataSet digunakan untuk Nested DataSet.
ftOraBlob Field BLOB pada Oracle 8.
ftOraClob Field CLOb pada Oracle 8.
ftVariant Variant.
ftInterface Reference ke Interface unknown.
ftlDispatch Reference ke Interface IDispatch.
ftGuid Globally Unique Identifier (GUID).
ftTimeStamp Field DateTime yang diakses lewat dbExpress.
ftFMTBcd Binary Coded Decimal yang terlalu besar untuk
ftBCD.

Contoh mengeset property FieldDefs secara runtime :

ClientDataSet1.FieldDefs.Add(IDKARYAWAN, ftInteger, 0, true);


ClientDataSet1.FieldDefs.Add(NAMA, ftString, 20, true);
ClientDataSet1.FieldDefs.Add(TGLLAHIR, ftDate);

Setelah daftar field dibuat Anda dapat memanggil method CreateDataSet dari property FieldDefs. Method
CreateDataSet akan membuat obyek obyek field yang telah Anda definisikan sekaligus mengaktifkan
dataset.

ClientDataSet1.CreateDataSe t;

Setelah itu Anda dapat bekerja dengan ClientDataSet kemudian anda dapat menyimpannya menjadi file
data packet dengan menggunakan method SaveToFile dari ClientDataSet. Method SaveToFile mempunyai
2 (dua) buah parameter. Yang pertama adalah nama file data packet, sedangkan kedua adalah format file
data packet yang mempunyai nilai default dfbinary. Format file data packet yang mungkin adalah
dfBinary, dfXML, dan dfXMLUTF8. Contohnya :

ClientDataSet1.SaveToFile (C:\Data\Karyawan.cds);
// atau
ClientDataSet1.SaveToFile (C:\Data\Karyawan.xml, dfXML);

6.6. Data Control

Data control adalah komponen komponen yang dapat menampilkan data dari dataset ke hadapan user
pemakai aplikasi. User dapat mengubah nilai nilai field dari record yang aktif, kemudian data control akan
menyinkronisasinya ke dataset melalu data source.

Ada beberapa data control yang disediakan oleh bahasa pemrograman Delphi. Semuanya terdapat dalam
component palette Data Controls.

DIKTAT AJAR Page 87


BAHASA PEMROGRAMAN DELPHI
Data Control Deskripsi
DBGrid Menampilkan informasi dari data source dalam bentuk tabel.
DBNavigator Menavigasi data record di dataset, meng update record, mem posting record,
menghapus record, membatalkan modifikasi record, dan me refresh tampilan
data.
DBText Menampilkan field data dalam bentuk label.
DBEdit Menampilkan field data dalam bentuk edit box.
DBMemo Menampilkan field data dalam bentuk multi line edit box.
DBCheckBox Menampilkan check box yang merepresentasikan nilai field bertipe Boolean.
DBRadioGroup Menampilkan set pilihan yang bersifat mutually exclusive untuk suatu field.
DBLookupComboBox Menampilkan list data yang berasal dari dataset yang lain yang dapat
mengganti data dari field record yang aktif berbentuk combo.

Data control dapat menampilkan data di dataset dengan dua cara :


Single record view, artinya pada satu saat hanya ditampilkan satu record yaitu record aktif.
Contohnya adalah komponen DBText dan DBEdit.
Multi record view, artinya dapat menampilkan beberapa record sekaligus. Contohnya adalah
komponen DBGrid.

Data control dihubungkan ke sebuah dataset melalui komponen DataSource. Secara umum metode
untuk menghubungkan data control ke dataset adalah :
Set property DataSource dari data control yang bersangkutan dengan sebuah komponen DataSource.
Set property Dataset dari komponen DataSource dengan komponen dataset yang akan ditampilkan
datanya.
Untuk menampilkan single field data control (data control yang hanya menampilkan sebuah field dari
record yang aktif pada dataset), set property DataField dengan salah satu field yang ada di dataset
yang ingin ditampilkan.

Contoh penggunaan dari Data Control :


Buat aplikasi baru. Beri nama form utama aplikasi dengan nama MainForm.
Letakkan sebuah komponen ClientDataSet dari component palette Data Access pada MainForm. Beri
nama cdsBiolife. Isi property Filename dengan file Biolife.xml lengkap dengan path nya, terletak di
directory yaitu C:\Program Files\Common Files\Borland Shared\Data.
Letakkan sebuah komponen DataSource dari component palette Data Access pada MainForm. Beri
nama dsBiolife.
Isi property Dataset dengan komponen ClientDataSet yang telah kita letakkan sebelumnya yaitu
cdsBiolife.
Letakkan sebuah komponen DBGrid dari component palette Data Controls pada MainForm. Beri
nama dbgBiolife. Isi property DataSource dengan dsBiolife.
Letakkan lima buah komponen DBEdit dari component palette Data Controls pada MainForm. Beri
nama yang sesuai untuk kelima komponen DBEdit tersebut. Isi property DataSource kelima
komponen tersebut dengan dsBiolife. Isi property DataField untuk masing masing komponen DBEdit
dengan Species No, Category, Common_Name, Species Name, Length (cm), dan Length_in.
Letakkan lima buah komponen label untuk masing masing komponen DBEdit sebelumnya. Beri nama
dan caption yang sesuai dengan field yang ditampilkan oleh masing masing komponen DBEdit.
Letakkan sebuah komponen DBMemo dari component palette Data Controls pada MainForm. Beri
nama dbmNotes. Isi property DataSource dengan dsBiolife. Isi property DataField dengan Notes.

DIKTAT AJAR Page 88


BAHASA PEMROGRAMAN DELPHI
Letakkan sebuah komponen DBImage dari component palette Data Controls pada MainForm. Beri
nama dbiGraphic. Isi property DataSource dengan dsBiolife. Isi property DataField dengan Graphic.
Letakkan sebuah komponen DBNavigator dari component palette Data Controls pada MainForm. Beri
nama dbnBiolife. Isi property DataSource dengan dsBiolife.
Tuliskan kode untuk event OnShow dari MainForm untuk mengaktifkan dataset saat MainForm
ditampilkan.
procedure TMainForm.FormShow (Sender : TObject);
begin
cdsBiolife.Open;
end;
Tuliskan kode untuk event OnClose dari MainForm untuk menonaktifkan dataset saat MainForm
ditutup.
procedure TMainForm.FormClose (Sender : TObject; var Action : TCloseAction);
begin
cdsBiolife.Close;
end;
Jalankan program.

Gambar 5 4. Gambar Data Control

Contoh program di atas menggunakan lima jenis komponen data control.


DBGrid, menampilkan data dalam bentuk tabular.
DBEdit, menampilkan sebuah field dari record aktif.
DBMemo, menampilkan sebuah field bertipe TMemoField dan record aktif. Field Memo berisikan
baris baris teks.
DBImage, menampilkan sebuah field bertipe TGraphicField dari record aktif.
DBNavigator, berfungsi untuk melakukan navigasi dari dataset yang terhubung dengannya.

DIKTAT AJAR Page 89


BAHASA PEMROGRAMAN DELPHI
6.7. Field

6.7.1 Persistent Field

Jika suatu dataset diaktifkan. Delphi akan membuat object field untuk setiap field dari dataset. Object
field ini di create secara runtime ketika dataset diaktifkan. Object field mempunyai banyak property yang
mengatur berbagai aspek dari field, misalnya bagaimana field ditampilkan. Untuk mengeset property
property field ini tidak dapat dilakukan secara design time karena object nya baru di create ketika dataset
diaktifkan. Delphi menyediakan cara meng create komponen object field pada saat design time, sehingga
Software Engineer dapat mengeset property dari komponen object field tersebut pada saat design time.
Komponen object field ini disebut dengan istilah persistent field.

Anda dapat membuat persistent field lewat field editor. Klik ganda komponen dataset untuk
menampilkan field editor nya. Pilih menu Add all fields untuk membentuk persistent field dari semua field
dataset. Hal ini hanya dapat dijalankan bila dataset telah dihubungkan dengan suatu data di database.
Untuk ClientDataSet dalam aplikasi MyBase, hal ini bisa dilakukan dengan mengisi property FileName
atau telah mengaktifkan dataset dengan melakukan pemanggilan method CreateDataSet.

Gambar 5 5. Persistent Field

Dengan menggunakan Object Inspector Anda dapat mengedit property persistent field yang dipilih lewat
field editor. Ketika persistent field dibuat, Delphi akan membuatnya sesuai dengan tipe data dari field
yang bersangkutan. Misalnya, field bertipe string maka Delphi akan membuat object field bertipe
TStringField. Setiap tipe persistent field mempunyai banyak property yang sama di samping property
property yang khas untuk masing masing tipe. Berikut ini beberapa property yang dipunyai oleh object
field yang dapat Anda set nilainya.

Alignment, menentukan bagaimana posisi data ditampilkan oleh data control apakah rata kiri,
tengah, atau rata kanan.
Currency, hanya untuk field numeric, menentukan apakah field harus ditampilkan dalam bentuk mata
uang.
DisplayWidth, menentukan panjang kolom grid yang akan menampilkannya. Panjang dihitung dalam
karakter.
DisplayLabel, menentukan label dari kolom grid yang akan menampilkannya. Property DisplayLabel
default nya sama dengan nama field.

DIKTAT AJAR Page 90


BAHASA PEMROGRAMAN DELPHI
DisplayFormat, menentukan bagaimana format data ditampilkan. Misalnya, field bertipe date, Anda
dapat menentukan bagaimana tanggal disimpan oleh field tersebut ditampilkan dengan mengisi
property DisplayFormat menjadi d/m/yyyy atau mm/dd/yyyy.
EditMask, menentukan batasan batasan nilai yang dapat diisikan ke data control yang terhubung ke
field yang bersangkutan, termasuk karakter khusus yang digunakan untuk entri data.
EditFormat, sama seperti DisplayFormat tetapi ketika dataset berada pada mode edit.
MaxValue, hanya untuk field numeric, menentukan nilai maksimum yang dapat disimpan dalam field.
MinValue, hanya untuk field numeric, menentukan nilai minimum yang dapat disimpan dalam field.

Delphi secara otomatis memberikan nama untuk setiap object persistent field yang dibuat, biasanya
adalah gabungan nama dataset dan nama field.

6.7.2. Calculated Field

Calculated field adalah field tambahan pada dataset yang didefinisikan oleh user yang nilainya dikalkulasi
secara on the fly. Nilai dari calculated field tidak disimpan oleh dataset.

Untuk membuat field calculated, tampilkan field editor dari dataset, lalu pilih menu New Field . Form
dialog New Field akan seperti di bawah ini.

Gambar 5 6. Calculated Field

Isi Name dengan nama field calculated. Isi Component dengan nama komponen field, biasanya Delphi
akan memberikan nama secara otomatis yang merupakan gabungan dari nama dataset dan nama field.
Isi Type dengan tipe data field. Isi Size dengan ukuran field yang akan dibuat. Untuk beberapa tipe data
seperti integer, Size tidak perlu diisi. Setelah itu pilih Field Type dengan Calculated. Lalu klik tombol OK.

Setelah calculated field terbentuk, Anda harus menuliskan kode program untuk mengisi nilai dari
calculated field. Adapun caranya dengan membuat suatu event handler untuk event OnCalcFields dari
dataset yang bersangkutan. Contohnya :

procedure TMainForm.cdsEmployeeCalcFields (Dataset : TDataSet);


begin
cdsKaryawanUsia.AsInteger := YearsBetween (cdsKaryawanTglLahir.AsDateTime, now);
end;

DIKTAT AJAR Page 91


BAHASA PEMROGRAMAN DELPHI
Calculated field dieksekusi setiap kali nilai calculated field dibutuhkan. Property AutoCalcFields dari
dataset menentukan kapan calculated field dikalkulasi. Jika AutoCalcFields bernilai True (default),
calculated field dikalkulasi ketika dataset diaktifkan, dataset memasuki mode edit, perubahan focus dari
satu data aware control ke data aware control lain atau record aktif berubah. Jika AutoCalcFields bernilai
False, calculated field dikalkulasi ketika dataset diaktifkan, dataset memasuki mode edit dan ketika
record diambil dari database ke dataset.

6.7.3. Lookup Field

Lookup field adalah field tambahan dari dataset yang didefinisikan oleh user yang nilainya diperoleh dari
dataset lain. Sama seperti calculated field, nilai dari lookup field tidak disimpan oleh dataset. Untuk
membuat lookup field, tampilkan field editor dari dataset, lalu pilih menu New Field. Form dialog New
Field akan tampil seperti di bawah ini.

Gambar 5 7. Lookup Field

Isi Name dengan nama field lookup. Isi Component dengan nama komponen field, biasanya Delphi akan
memberikan nama secara otomatis yang merupakan gabungan dari nama dataset dan nama field. Isi
Type dengan tipe data field. Isi Size dengan ukuran field yang akan dibuat. Untuk beberapa tipe data
seperti integer, Size tidak perlu diisi. Setelah itu pilih Field Type dengan Lookup.

Langkah selanjutnya adalah menentukan definisi dari lookup. Isi Key Fields dengan field pada dataset
yang menjadi dasar pencarian nilai pada dataset lookup. Isi Dataset dengan dataset lain yang menjadi
dataset lookup. Isi Lookup Keys dengan primary key pada dataset lookup. Isi result field dengan field pada
dataset lookup yang akan ditampilkan sebagai isi dari field lookup yang Anda buat. Lalu klik tombol OK.

6.8. Modifikasi Data

Aplikasi database dapat melakukan perubahan data pada database. Perubahan data dapat berupa
penambahan data, pengeditan data, atau penghapusan data. Semuanya dilakukan melalui dataset. Setiap
jenis dataset mempunyai perilaku khusus yang berbeda dalam menangani modifikasi data. Pembahasan
kali ini ditujukan untuk mempelajari modifikasi data pada ClientDataSet.

Segera setelah dataset diaktifkan, dataset akan berada dalam state dsBrowse. Untuk melakukan
modifikasi data, Anda harus mengubah state dari dataset sesuai dengan yang Anda butuhkan.

DIKTAT AJAR Page 92


BAHASA PEMROGRAMAN DELPHI
Dataset menyediakan beberapa method untuk keperluan modifikasi data.

Method Keterangan
Edit Mengubah state dari dataset menjadi dsEdit jika state dari dataset bukan dsEdit atau
dsInsert.
Append Posting semua data yang dipending, menggerakkan pointer record aktif ke akhir dataset
dan mengubah state dari dataset menjadi dsInsert.
Insert Posting semua data yang dipending dan mengubah state dari dataset menjadi dsInsert.
Post Mencoba untuk memposting data record aktif ke database.
Cancel Membatalkan operasi dataset yang sedang berlangsung dan mengubah state dari dataset
menjadi dsBrowse.
Delete Menghapus record aktif dan mengubah state dari dataset menjadi dsBrowse.

6.8.1. Operasi Editing Data

Menambah Record
Ubah state dari dataset menjadi dsInsert menggunakan method Insert atau Append.
Contohnya sabagai berikut ini :

ClientDataSet1.Insert;
ClientDataSet1.FieldValues[ CustNo] := 1500;
ClientDataSet1.FieldValues[ CustName] := AMIR;
ClientDataSet1.Post;

Method Insert menambahkan record baru ke dataset pada posisi tepat sebelum record aktif. Sedangkan
method Append menambahkan record baru ke dataset pada posisi setelah record terakhir.

Mengedit Record
Dataset harus dalam state dsEdit sebelum dapat diedit. Gunakan method Edit untuk mengubah state dari
dataset menjadi dsEdit.
Contohnya sebagai berikut ini :

ClientDataSet1.Edit;
ClientDataSet1.FieldValues[ CustNo] := 1450;
ClientDataSet1.Post;

Menghapus Record
Gunakan method Delete untuk menghapus record aktif.
Contohnya sebagai berikut ini :

ClientDataSet1.Delete;

6.8.2. Menuliskan Perubahan Data

Seperti yang telah diuraikan di atas, setelah melakukan Insert, Append, atau Edit Data, Anda harus
menuliskan modifikasi atau data baru yang telah Anda buat dengan memanggil method Post atau
memanggil method Cancel untuk membatalkannya. Sedangkan untuk operasi penghapusan, posting

DIKTAT AJAR Page 93


BAHASA PEMROGRAMAN DELPHI
dilakukan secara otomatis setelah method Delete dipanggil. Implementasi method Post sangat berbeda
untuk masing masing dataset. Yang perlu diingat adalah semua operasi editing data untuk ClientDataSet
di atas hanya meng update data di memory.

Data dan Delta


ClientDataSet mempunyai property LogChanges yang bertipe Boolean. Default nya, bernilai True yang
berarti ClientDataSet akan mencatat semua perubahan data yang terjadi. Catatan perubahan ini dapat
diakses melalui property Delta dan dicatat terpisah dari data aslinya. Anda dapat mengakses data asli
ClientDataSet lewat property Data. Jika anda memanggil method Post, maka ClientDataSet akan
menuliskan perubahan data yang Anda buat ke Delta. Walaupun Data dan Delta dicatat terpisah, Anda
tetap melihat isi data ClientDataSet seolah olah seluruh Delta telah diimplementasikan ke Data. Anda
dapat mengetahui banyaknya perubahan yang telah Anda buat lewat property ChangeCount.

Membatalkan Perubahan Data


Karena semua perubahan data yang terjadi tercatat, Anda dapat membatalkan perubahan yang telah
Anda buat terakhir kali dengan menggunakan method UndoLastChange. Method UndoLastChange
mempunyai satu parameter yaitu FollowChange bertipe Boolean. Bila FollowChange bernilai True maka
ClientDataSet akan memindahkan pointer record aktif nya ke record yang dibatalkan perubahannya.
Method UndoLastChange akan menghapus satu record perubahan di Delta, ini juga berarti nilai property
ChangeCount akan berkurang. Selama ChangeCount masih lebih besar dari 0, Anda dapat terus
menggunakan method UndoLastChange. Anda dapat menggunakan method MergeChangeLog untuk
mengimplementasi semua perubahan data yang tercatat di Delta ke Data. Pemanggilan MergeChangeLog
mengakibatkan Delta dikosongkan kembali dan Data ter update dengan semua perubahan yang Anda
lakukan. Jika property LogChanges bernilai False, semua perubahan data yang Anda buat langsung
dituliskan ke Data ketika method Post dipanggil. Ini berarti Anda tidak memerlukan lagi method
MergeChangeLog, karena Delta selalu kosong. Ini juga berarti Anda tidak dapat membatalkan perubahan
data yang telah Anda posting.

6.8.3. Editing Data Lewat Data Control

Ketika kita mengubah nilai dari data yang ditampilkan oleh sebuah data control, misalnya DBEdit, maka
apabila dataset yang bersangkutan masih dalam state dsBrowse maka secara otomatis state nya berubah
menjadi dsEdit. Dalam hal ini, data control yang bersangkutan memanggil method Edit secara implisit
yang di trigger oleh perubahan nilai di data control. Begitu pula ketika kita menggerakkan pointer record
aktif pada DBGrid ke akhir baris, method Insert dipanggil secara implisit. Hal yang sama terjadi jika
dataset dalam state dsInsert atau dsEdit kemudian lewat data control kita menggerakkan pointer aktif,
maka secara implisit method Post dipanggil.

Anda dapat menggunakan komponen DBLookupComboBox untuk menampilkan lookup field. Komponen
DBLookupComboBox akan secara otomatis menampilkan daftar pilihan nilai yang mungkin dari dataset
lookup nya dalam bentuk combo. Ketika Anda memilih suatu nilai untuk lookup field maka field kunci dari
dataset yang bersangkutan akan secara otomatis terisi oleh nilai dari field kunci di dataset lookup nya.

Berikut ini contoh program untuk editing data lewat Data Control :
Program ini terdiri dari 2 (dua) buah form. Form pertama akan berisi DBGrid yang menampilkan tabel
Employee dan 4 (empat) buah tombol untuk menambah data, mengedit data, menghapus data, dan
membatalkan operasi. Form kedua adalah form entri untuk menambah dan mengedit data.

DIKTAT AJAR Page 94


BAHASA PEMROGRAMAN DELPHI
Persiapan Form
Buat aplikasi baru. Beri nama form utama aplikasi dengan nama MainForm.
Buat sebuah form lagi dan beri nama FormEntry.

Form Utama
Letakkan sebuah komponen ClientDataSet dari Component Palette Data Access pada MainForm
dengan file Employee.xml lengkap dengan path nya, terletak di directory contoh data dari Delphi,
biasanya ada di folder C:\Program Files\Common Files\Borland Shared\Data.
Letakkan sebuah komponen DataSource dari Component Palette Data Access pada MainForm. Beri
nama dsEmployee. Isi property Dataset dengan komponen ClientDataSet yang telah kita letakkan
sebelumnya, yaitu cdsEmployee.
Letakkan sebuah komponen DBGrid dari Component Palette Data Access pada MainForm. Beri nama
dbgEmployee. Isi property DataSource dengan dsEmployee.
Tulis kode untuk event OnShow dari MainForm untuk mengaktifkan dataset saat MainForm
ditampilkan.
procedure TMainForm.FormShow (Sender : TObject);
begin
cdsEmployee.Open;
end;
Tulis kode dari event handler untuk event OnClose dari MainForm dengan tujuan untuk
menonaktifkan dataset pada saat MainForm ditutup.
procedure TMainForm.FormClose (Sender : TObject; var Action : TCloseAction);
begin
cdsEmployee.Close;
end;
Letakkan sebuah komponen Button ke MainForm. Beri nama btnAdd. Set property Caption nya
menjadi Tambah dan tulis kode untuk event OnClick nya.
procedure TMainForm.btnAddClick (Sender : TObject);
begin
cdsEmployee.Append;
if FormEntry.ShowModal =mrOK then
cdsEmployee.Post
else
cdsEmployee.Cancel;
end;
Letakkan sebuah komponen Button ke MainForm. Beri nama btnEdit. Set property Caption nya
menjadi Edit dam tulis kode untuk eventOnClick nya.
procedure TMainForm.btnEditClick (Sender : TObject);
begin
cdsEmployee.Edit;
if FormEntry.ShowModal =mrOK then
cdsEmployee.Post
else
cdsEmployee.Cancel;
end;
Letakkan sebuah komponen Button ke MainForm. Beri nama btnDelete. Set property Caption nya
menjadi Hapus dam tulis kode untuk event OnClick nya.
procedure TMainForm.btnDeleteClick (Sender : TObject);
begin
cdsEmployee.Delete;
end;

DIKTAT AJAR Page 95


BAHASA PEMROGRAMAN DELPHI
Letakkan sebuah komponen Button ke MainForm. Beri nama btnUndo. Set property Caption nya
menjadi Undo dan tulis kode untuk event OnClick nya.
procedure TMainForm.btnUndoClick (Sender : TObject);
begin
if cdsEmployee.ChangeCount > 0 then
cdsEmployee.UndoLastChange
else
raise Exception.Create (Tidak Ada Perubahan Data !)
end;

Setting Form Entry


Letakkan 6 (enam) pasang komponen Label dan DBEdit di FormEntry. Beri nama dan caption untuk
komponen Label dan DBEdit sesuai dengan 6 (enam) buah field yang ada pada tabel Employee. Isi
property DataSource ke 6 komponen DBEdit dengan dsEmployee dari MainForm. Isi property
DataField dari ke 6 komponen DBEdit dengan 6 (enam) field yang terdapat pada tabel Employee.
Letakkan 2 (dua) buah Button di FormEntry. Beri nama btnOK dan btnCancel. Set property
ModalResult dari btnOK menjadi mrOK. Set property ModalResult dari btnCancel menjadi mrCancel.
Jalankan program.

Gambar 5 6. Editing Data lewat Data Control

Cobalah untuk menambah data, mengedit data, dan menghapus data. Batalkan beberapa perubahan
dengan menggunakan tombol Undo.

Gambar 5 7. Entry Data

DIKTAT AJAR Page 96


BAHASA PEMROGRAMAN DELPHI
6.9. Validasi Data

Data yang dituliskan ke database harus tunduk terhadap aturan aturan tertentu yang telah ditetapkan.
Setiap field data mempunyai range nilai tertentu yang dapat diberikan kepadanya atau aturan khusus
yang harus dipenuhi. Pelanggaran terhadap aturan yang telah ditentukan dapat menyebabkan kerusakan
integritas data. Untuk itu, Anda harus melakukan validasi untuk setiap data yang dituliskan ke dataset.
Validasi data juga sangat penting untuk menjaga user sebagai pengguna aplikasi tidak melakukan
kesalahan dalam penggunaan aplikasi.

6.9.1. Constraint Level Record

ClientDataSet mempunyai property Constraint berupa kumpulan constraint. Anda dapat mendefinisikan
beberapa constraint untuk melakukan pengecekan nilai field field dari suatu record apakah telah
memenuhi aturan. Constraint di level record ini biasanya mengecek hubungan nilai sebuah field dengan
field lain. Setiap constraint mempunyai property CustomConstraint untuk menuliskan ekspresi
pengecekan dan property ErrorMessage yang berisi pesan kesalahan yang akan ditampilkan oleh aplikasi
bila constraint dilanggar.
Untuk mengeset constraint di level record pada saat design time, lakukan hal hal berikut ini.
Klik tombol edit property Constraint di Object Inspector dari komponen ClientDataSet untuk
menampilkan collection editor yang berisi daftar constraint.
Klik tombol Add New dari collection editor untuk menambah constraint.
Set property CustomConstraint dan property ErrorMessage untuk setiap constraint yang Anda buat.

6.9.2. Constraint Level Field

Field mempunyai property CustomConstraint yang dapat Anda gunakan untuk memberikan batasan nilai
yang dapat dimasukkan ke dalam sebuah field. Property CustomConstraint bertipe string, yang harus diisi
dengan ekspresi SQL yang valid. Contohnya adalah :

cdsEmployee.FieldByName ( Salary).CustomConstraint := (Salary>=20000) and (Salary<=50000);

6.10. Indeks

Tanpa menggunakan Indeks, pencarian secara sekuensial pada ClientDataSet sudah sangat cepat. Tetapi
sedikitnya ada 3 (tiga) alasan menggunakan indeks pada ClientDataSet, yaitu :
Untuk mempercepat akses data. Operasi Locate pada data yang sangat besar akan lebih cepat
dengan menggunakan indeks.
Untuk mengurutkan data on the fly pada ClientDataSet. Hal ini berguna untuk mengurutkan data
pada data control berupa grid, misalnya pada DBGrid.
Untuk mengimplementasikan aggregate.

6.10.1. Membuat Indeks

Indeks dapat di create pada saat design time atau runtime. Suatu indeks mungkin hanya digunakan untuk
waktu yang singkat, misalnya untuk mengurutkan data pada pembuatan laporan. Dalam kasus seperti itu,
indeks dapat di create, digunakan lalu di destroy pada saat runtime. Jika suatu indeks selalu digunakan,
Anda dapat membuatnya pada saat design time. Sebuah dataset dapat mempunyai banyak indeks.

DIKTAT AJAR Page 97


BAHASA PEMROGRAMAN DELPHI
Membuat Indeks pada saat Design Time
Untuk membuat indeks pada saat design time, klik komponen ClientDataSet yang akan dibuat indeks nya.
Pada Object Inspector klik ganda pada property IndexDefs untuk menampilkan index editor.

Untuk menambah indeks pada ClientDataSet, klik kanan pada index editor untuk menampilkan menu
pop up dan pilih menu Add. Lalu set beberapa property dari indeks pada Object Inspector.

TIndexDef Deskripsi
Name Nama indeks. Buatlah nama indeks se deskriptif mungkin.
Fields Nama field field yang membentuk indeks, dipisahkan oleh titik koma, contoh :
ID or Name;Salary.
DescFields Nama field field yang membentuk indeks pada property Fields yang harus
diindeks secara descending. Contoh : nilai pada property Fields :
Name;Salary dan nilai pada property DescFields : Salary.
CaselnsFields Nama field field yang membentuk indeks pada property Fields yang harus
diindeks tanpa memperdulikan huruf capital atau huruf kecil.
GroupingLevel Digunakan untuk aggregation.
Options Opsi tambahan untuk indeks.
Expression Tidak digunakan oleh ClientDataSet.
Source Tidak digunakan oleh ClientDataSet.

Property Options adalah sebuah set dengan 6 (enam) pilihan, yaitu :

TIndexOptions Deskripsi
IxPrimary Indeks adalah primary index dari dataset.
IxUnique Indeks bersifat unik.
IxDescending Indeks diurutkan secara descending.
IxCaseInsensitive Indeks tidak memperdulikan huruf capital atau huruf kecil.
IxExpression Tidak digunakan oleh ClientDataSet.
IxNonMaintained Tidak digunakan oleh ClientDataSet.

Membuat Indeks pada saat Runtime


Indeks seringkali dibuat pada saat runtime. Alasannya adalah :
Indeks dapat dengan cepat di create dan di destroy.
Informasi indeks tidak disimpan ke file ketika Anda menyimpan data ClientDataSet ke file.

Gunakan method AddIndex dari ClientDataSet. Method AddIndex membutuhkan tiga parameter yang
harus diisi dan tiga parameter opsional.

procedure AddIndex(const Name, Fields : string;


Options : TIndexOptions;
const DescFields : string = ;
const CaseInsFields : string = ;
const GroupingLevel : Integer = 0);

DIKTAT AJAR Page 98


BAHASA PEMROGRAMAN DELPHI
Parameter yang dibutuhkan method AddIndex sama seperti property dari TIndexDef yang dijelaskan di
atas. Contoh :

ClientDataSet.AddIndex(IdxName, LastName;FirstName, [ixUnique]);

Ketika indeks tidak lagi digunakan, Anda dapat menghapusnya dengan menggunakan method
DeleteIndex. Method DeleteIndex membutuhkan satu parameter, yaitu nama indeks yang akan dihapus.
Contoh :

ClientDataSet1.DeleteIndex(IdxName);

6.10.2. Menggunakan Indeks

Setelah indeks dibuat, Anda dapat mengaktifkannya dengan mengeset property IndexName dari dataset.
Contohnya :

ClientDataSet1.IndexName := IdxName;

6.10.3. Mendapatkan Informasi Indeks

Gunakan method GetIndexNames untuk mendapatkan daftar nama indeks yang ada pada suatu dataset.
Method GetIndexNames membutuhkan satu parameter bertipe TStrings sebagai object untuk
menampung daftar indeks. Contohnya adalah memasukkan semua indeks pada sebuah dataset ke
Listbox.

ClientDataSet1.GetIndexName(ListBox1.Items);

Jika kode di atas dieksekusi pada sebuah dataset, ada tambahan 2 (dua) buah indeks, yaitu
DEFAULT_ORDER dan CHANGEINDEX selain yang telah Anda definisikan. Kedua indeks tersebut
merupakan indeks yang digunakan oleh dataset secara internal. DEFAULT_ORDER digunakan untuk
mengurutkan data secara default tanpa indeks sedangkan CHANGEINDEX digunakan untuk mengurutkan
data seolah olah semua perubahan data yang ada pada ClientDataSet telah di apply updates.

6.11. Filter dan Range

Filter dan range digunakan untuk membatasi data yang ditampilkan oleh dataset berdasarkan kriteria
tertentu. Filter dan range tidak mengurangi jumlah record data yang ditampung oleh dataset di memory.

6.11.1. Range

Range berguna jika data yang akan di filter sudah terurut secara sekuensial sepert contoh di bawah ini.

ID Nama Tanggal Lahir Gaji


4 Ali Buana 27/03/1947 $ 10,000.00
2 Fahmi Idrus 08/02/1963 $ 15,000.00
3 Chica Marissa 25/07/1970 $ 20,000.00
1 Gunawan 15/05/1970 $ 20,000.00
5 Sari Permatasari 14/05/1978 $ 10,000.00

DIKTAT AJAR Page 99


BAHASA PEMROGRAMAN DELPHI

Data di tabel tersebut terurut menurut tanggal lahir. Range hanya dapat digunakan bila ada indeks yang
aktif pada suatu dataset.

Jika Anda menginginkan seluruh karyawan yang lahir antara tahun 1960 dan 1970, Anda dapat membuat
range pada dataset dengan cara sebagai berikut ini :

ClientDataSet1.SetRange([01/01/1960], [31/12/1970]);

Range bersifat inclusive, yang berarti nilai awal dan nilai akhir dari range termasuk dalam range. Seperti
contoh di atas, karyawan yang lahir pada tanggal 01 Januari 1960 atau tanggal 31 Desember 1970
termasuk dalam range.
Untuk mengembalikan dataset tanpa range gunakanlah method CancelRange, contoh :

ClientDataSet1.CancelRange;

6.11.2. Filter

Untuk menggunakan filter tidak memerlukan indeks seperti pada range. Filter pada ClientDataSet sangat
powerful. Untuk mem filter suatu dataset, set nilai property Filter dengan kalimat ekspresi filter dan set
nilai property Filtered menjadi True. Untuk mengembalikan dataset tanpa filter, set nilai property Filtered
menjadi False tanpa perlu mengosongkan nilai property Filter.

Ekspresi filter yang dapat digunakan pada ClientDataSet sangat fleksibel. Berikut ini adalah ekspresi filter
yang diperkenankan pada ClientDataSet, ekspresi ini dikelompokkan berdasarkan kepada jenis
operatornya.

Operator Perbandingan
Function Keterangan Contoh
= Tes kesamaan Name = Diego Maradona
<> Tes ketidaksamaan ID <> 100
< Lebih kecil dari Birthday < 1/1/1990
> Lebih besar dari Birthday >12/31/1967
<= Lebih kecil atau sama dengan dari Salary <= 90000
>= Lebih besar atau sama dengan dari Salary >= 40000
BLANK Field dengan string kosong Name = BLANK
IS NULL Tes nilai NULL Birthday IS NULL
IS NOT NULL Tes nilai NON NULL Birthday IS NOT NULL

Operator Logika
Function Contoh
And (Name = Diego Maradona) and (Birthday = 6/6/1966)
Or (Name = Clark Kent) or (Name = Lana Lang)
Not Not (Name = Bruce Wayne)

Page 100
BAHASA PEMROGRAMAN DELPHI
Operator Aritmetika
Function Keterangan Contoh
+ Penambahan. Digunakan untuk angka, string, Birthday + 30 <1/1/1960
atau date/time. Name + X = SmithX Salary +
10000 = 100000
Pengurangan. Digunakan untuk angka, string, Birthday 30 > 1/1/1960
atau date/time. Salary 10000 > 50000
* Perkalian. Digunakan untuk angka. Salary * 0.10 > 5000
/ Pembagian. Digunakan untuk angka. Salary / 10 > 5000

Fungsi fungsi String


Function Keterangan Contoh
Upper Huruf Besar. Upper(Name) = CLARK KENT
Lower Huruf Kecil. Lower(Name) = clark kent
SubString Mengembalikan nilai bagian dari string. SubString(Name,1,4) = John
Trim Trim kiri dan kanan dari string. Trim(Name) Trim(Name, .)
TrimLeft Trim kiri dari string TrimLeft(Name)
TrimLeft(Name, .)
TrimRight Trim kanan dari string TrimRight(Name)
TrimRight(Name, .)

Fungsi fungsi Date/Time


Function Keterangan Contoh
Year Mengembalikan nilai tahun dari date. Year(Birthday) = 1970
Month Mengembalikan nilai bulan dari date. Month(Birthday) = 1
Day Mengembalikan nilai tanggal dari date. Day(Birthday) = 15
Hour Mengembalikan nilai jam dari time. Hour(Appointment) = 15
Minute Mengembalikan nilai menit dari time. Minute(Appointment) = 30
Second Mengembalikan nilai detik dari time. Second(Appointment) = 0
GetDate Mengembalikan nilai date/time sekarang. Appointment < GetDate
Date Mengembalikan nilai date dari date/time. Date(Appointment)
Time Mengembalikan nilai time dari date/time. Time(Appointment)

Operator dan Fungsi Lain


Function Keterangan Contoh
LIKE Perbandingan bagian dari string. Name LIKE %Smith%
IN Tes untuk membandingkan multi nilai. Year(Birthday) IN (1960, 1970,
1980)
* Perbandingan bagian dari string. Name = John

Contoh berikut ini merupakan filter terhadap semua karyawan yang mempunyai nama diawali oleh huruf
M.

ClientDataSet1.Filter := Na me LIKE + QuotedStr(M%);


ClientDataSet1.Filtered := True;

Page 101
BAHASA PEMROGRAMAN DELPHI
6.12. Pencarian Data

ClientDataSet menyediakan berbagai method untuk mencari data pada ClientDataSet. Pencarian dapat
dilakukan dengan indeks atau tanpa indeks.

6.12.1. Locate

Method Locate digunakan untuk pencarian data tanpa menggunakan indeks. Method ini digunakan untuk
mencari record berdasarkan satu field atau lebih. Contohnya sebagai berikut ini.

function Locate(const KeyFields: string;


const KeyValues : Variant;
Options : TLocateOptions) : Boolean; override;

Parameter pertama, KeyFields, adalah nama field field yang akan dicari nilainya, dipisahkan oleh titik
koma bila lebih dari satu field. Contoh : Name;Birthday.

Parameter kedua, KeyValues, berisi nilai nilai field yang akan dicari. Jumlah nilai yang akan dicari harus
sama dengan jumlah field pada parameter KeyFields.

Parameter ketiga, Options, bertipe TLocateOptions, menentukan bagaimana pencarian dilakukan.

TLocateOptions Keterangan
IoPartialKey Method Locate akan mencari record pertama yang nilai field pada
parameter KeyField nya diawali dengan nilai yang terdapat pada
KeyValues. Hal ini hanya berlaku pada field bertipe string.
IoCasseInsensitive Method Locate akan mengabaikan huruf kapitak atau huruf kecil jika
mencari field yang bertipe string.

Method Locate mengembalikan nilai True bila ada record yang sesuai dengan kriteria dan mengembailkan
nilai False jika tak ada record yang sesuai dengan kriteria. Jika Method Locate menemukan record yang
dimaksud, pointer record aktif dari dataset akan melompat ke record tersebut sehingga record yang
diketemukan itu menjadi record aktif. Contoh berikut ini mencari record yang nilai field Name nya
adalah Clark Kent.

ClientDataSet1.Locate(Name, Clark Kent, [ ]);

6.12.2. Lookup

Method Lookup digunakan untuk pencarian data tanpa menggunakan indeks. Method Lookup
mempunyai konsep yang serupa dengan method Locate. Perbedaannya adalah Method Lookup tidak
mengubah pointer record aktif, hanya mengembalikan nilai dari satu atau lebih field dari record yang
ditemukan. Method Lookup didefinisikan sebagai berikut :

function Lookup(const KeyFields : string; const KeyValue :


Variant;
const ResultFields : string) : Variant; override;

Page 102
BAHASA PEMROGRAMAN DELPHI
KeyFields dan KeyValue berisi nama field dan nilai yang akan dicari. ResultFields berisi field field yang
datanya diinginkan dari record yang ditemukan. Contoh berikut ini akan mengembalikan nilai tanggal
lahir dari karyawan yang bernama Ari Siswoyo. :

var
V : Variant;
begin
V := ClientDataSet1.Lookup(Nama, Ari Siswoyo, TglLahir);
end;

6.12.3. FindKey

Method FindKey digunakan untuk pencarian data dengan menggunakan indeks. Method FindKey mencari
record yang nilai field indeks yang aktif sesuai dengan parameter input yang diberikan. Method ini
mempunyai satu parameter, yaitu nilai field yang akan dicari.
Parameter ini berupa array of const. Contoh :

if ClientDataSet.FindKey([ 25]) then


ShowMessage(Found ID 25);

if ClientDataSet.FindKey([ Doe, John]) then


ShowMessage(Found John Doe);

Anda harus memastikan bahwa nilai yang Anda cari sesuai dengan indeks yang aktif. Kode program di
bawah ini memastikan indeks yang digunakan oleh dataset.

ClientDataSet.IndexName := byID;

if ClientDataSet.FindKey([ 25]) then


ShowMessage(Found ID 25);

ClientDataSet.IndexName := byName;
if ClientDataSet.FindKey([ Doe, John]) then
ShowMessage(Found John Doe);

6.12.4. FindNearest

Method FindNearest digunakan untuk pencarian data dengan menggunakan indeks. Method ini sama
dengan method FindKey, hanya saja FindNearest mencari record pertama yang lebih besar atau sama
dengan nilai yang diberikan. Hal ini tergantung kepada nilai property KeyExclusive.

Jika KeyExclusive bernilai False (default), FindNearest akan mencari record pertama yang lebih besar atau
sama dengan nilai yang diberikan. Jika KeyExclusive bernilai True, FindNearest akan mencari record yang
lebih besar dari nilai yang diberikan.

Jika method FindNearest tidak menemukan record yang sesuai, pointer record aktif akan melompat ke
akhir dataset.

Page 103
BAHASA PEMROGRAMAN DELPHI
6.12.5. GotoKey

Method GotoKey digunakan untuk pencarian data dengan menggunakan indeks. Pola kerjanya sama
dengan method FindKey, hanya saja kita dapat mengeset nilai dari field field yang akan dicari sebelum
memanggil method GotoKey. Contoh :

ClientDataSet.IndexName := byID;
ClientDataSet.SetKey;
ClientDataSet.FieldByName (ID).AsInteger := 25;
ClientDataSet.GotoKey;

6.12.6. GotoNearest

Method GotoNearest digunakan untuk pencarian data dengan menggunakan indeks. Method ini
mempunyai pola yang serupa dengan method GotoKey. Perbedaannya adalah GotoNearest mencari
record pertama yang lebih besar atau sama dengan nilai yang diberikan. Hal ini tergantung kepada nilai
property KeyExclusive.

Jika KeyExclusive bernilai False (default), GotoNearest akan mencari record pertama yang lebih besar atau
sama dengan nilai field yang diset setelah pemanggilan method SetKey atau EditKey. Jika KeyExclusive
bernilai True, GotoNearest akan mencari record yang lebih besar dari nilai field yang diset setelah
pemanggilan method SetKey atau EditKey.

Jika method GotoNearest tidak menemukan record yang dicari, pointer record aktif akan melompat ke
akhir dataset.

6.13. Aggregate

ClientDataSet dapat menghasilkan nilai yang dikalkulasi dari sekumpulan record di ClientDataSet. Nilai
yang dihasilkan tersebut di update secara otomatis jika ada perubahan data. Hal ini disebut dengan
istilah maintained aggregate. Aggregate biasanya digunakan untuk mengetahui informasi tentang jumlah
dari field tertentu di ClientDataSet, atau misalnya nilai terbesar, nilai terkecil, nilai rata rata dari nilai field
tertentu dan lain lain.

6.13.1. Membuat Aggregate

ClientDataSet mempunyai property Aggregates yang merupakan kumpulan definisi aggregate yang Anda
buat. Ikuti langkah langkah berikut ini untuk membuat aggregate baru.
Klik tombol edit property Aggregates di Object Inspector dari komponen ClientDataSet untuk
menampilkan collection editor yang berisi daftar aggregate.
Klik tombol Add New dari collection editor untuk menambah aggregate.
Set property Expression untuk setiap aggregate yang Anda buat.

Anda dapat menggunakan beberapa operator untuk membuat ekspresi aggregate, yaitu :
Sum, untuk menghitung total nilai dari suatu field numeric atau ekspresi.
Avg, untuk menghitung nilai rata rata dari suatu field numeric, field date, atau ekspresi.
Count, untuk menghitung jumlah record yang mempunyai nilai tidak blank dari suatu field atau
ekspresi.

Page 104
BAHASA PEMROGRAMAN DELPHI
Min, untuk menghitung nilai minimum dari suatu field numeric, field string, field date, atau ekspresi.
Max, untuk menghitung nilai maksimum dari suatu field numeric, field string, field date, atau
ekspresi.

Contoh ekspresi aggregate yang valid adalah :


Sum(Field1),
Sum(Field1*Field2),
Max(Field1) Max(Field2),
Avg(Field1)*1000.

Contoh ekspresi aggregate yang tidak valid adalah :


Max(Sum(Field1))
Tidak valid karena menggunakan aggregate bertingkat.
Count(Field1)+Field2
Tidak valid karene menggunakan aggregate dan field.

6.13.2. Membuat Aggregate Field

Aggregate field adalah field yang menampilkan nilai daru maintained aggregate. Jangan membuat
aggregate langsung melalui property Aggregate dari ClientDataSet jika Anda ingin membuat field
aggregate nya. Untuk membuat aggregate field, tampilkan field editor dari dataset, lalu pilih menu New
Field. Form dialog New Field akan tampil seperti di bawah ini.

Gambar 5 8. Aggregate Field

Isi Name dengan nama field Aggregate. Isi component dengan nama komponen field, biasanya Delphi
akan memberikan nama secara otomatis merupakan gabungan dari nama dataset dan nama field. Isi
Type dengan tipe data field. Isi Size dengan ukuran dari field. Setelah itu, pilih Field Type dengan
Aggregate. Klik tombol OK.

Page 105
BAHASA PEMROGRAMAN DELPHI
Membangun sebuah aplikasi database, dapat diartikan bekerja dengan dua bagian aplikasi yang berbeda.
Yang pertama adalah bagian back end atau aplikasi server penyedia data, dan yang kedua adalah front
end atau media antarmuka yang berhubungan langsung dengan user. Untungnya bahasa pemrograman
Delphi memberikan banyak alternative koneksi server basis data, diantaranya, adalah MS SQL Server, MS
Access, Oracle, Interbase, Firebird, MySQL, dan lain lain.

Untuk keperluan penulisan materi dalam buku ini, penulis memilih menggunakan komponen ADO
sebagai media koneksi ke MS Access.

7.1. Aplikasi Database

Langkah #1 Buat Datanya Dulu!

Langkah ini merupakan langkah terpenting, karena tanpa data tidak mungkin namanya aplikasi basis data
kan ?

Untuk materi dalam buku ini penulis memilih perangkat lunak (software) MS Access sebagai media Server
basis data. Hal ini penulis lakukan dengan beberapa pertimbangan sebagai berikut ini :
Kemudahan dalam penggunaan.
Tidak membutuhkan spesifikasi perangkat keras (hardware) yang tinggi.
Tidak membutuhkan kapasitas memory yang besar.
Kompabilitas yang tinggi dengan database server lainnya.

Dengan pertimbangan di atas, akan sangat membantu bagi Software Engineer pemula sekalipun. Sebagai
bahan latihan, kita akan membangun sebuah tabel barang dengan struktur data sebagai berikut :

No.Urut Field Tipe Data Ukuran Key


01. Kode_Barang Text 15 Primary Key
02. Nama_Barang Text 30
03. Grup_Barang Text 30
04. Harga_Jual Currency
05. Qty_Ditangan Number
06. Qty_Minimal Number
07. Status Text 30
08. Masuk_Akhir Date/Time

Setelah selesai pembuatan tabel barang dengan menggunakan MS Access, simpanlah tabel tersebut
dengan nama tb_barang.

Page 106
BAHASA PEMROGRAMAN DELPHI
Langkah #2 Desain Form Aplikasinya

Membuat aplikasi atau sering disebut juga media antarmuka atau bahasa primitifnya Graphic User
Interface (GUI) yang terkoneksi dengan basis data dengan menggunakan Delphi adalah sangat sederhana.
Dalam penerapannya Delphi telah menyediakan komponen komponen yang mendukung pembangunan
aplikasi basis data ini, yaitu :

1. ADO

2. Data Access

3. Data Control

Untuk mulai membuat aplikasinya, operasikan Delphi Anda.Tujuan kita kali ini adalah membuat sebuah
aplikasi yang mengakses data barang dari basis data yang telah dibuat sebelumnya. Ikutilah langkah
langkah berikut :
1. Jalankan Delphi, biasanya sesaat dijalankan, Delphi akan menyediakan satu Project, satu form, dan
satu unit. Desain form Anda sesuai dengan data yang ingin diakses. Gunakan komponen komponen
berikut :

Palette Komponen
Standard Panel
Label
Additional BitBtn
Data Control DBEdit
DBComboBox
DBNavigator

Page 107
BAHASA PEMROGRAMAN DELPHI
2. Susunlah komponen tersebut pada form Anda sehingga form terlihat sebagai berikut :

3. Lakukan penyimpanan unit dengan menggunakan menu File > Save As atau langsung saja dengan
menekan Ctrl+S. Pada dialog Save File, simpan unit Anda dengan nama U_Barang.

4. Lanjutkan dengan penyimpanan proyek Anda dengan menggunakan File > Save Project. Pada dialog
Save File, simpan proyek Anda dengan nama DBLatih_01.

Page 108
BAHASA PEMROGRAMAN DELPHI
5. Kembali pada IDE Delphi dan klik pada menu File >New > Data Module, seperti berikut ini :

6. Selanjutnya kita akan mendapatkan sebuah data module yang kosong, sebagai berikut ini :

7. Sekarang gunakan komponen komponen berikut untuk diletakkan pada Data Module Anda :

Palette Komponen
ADO ADOConnection
ADOTable
Data Access DataSource

8. Susunlah komponen komponen tersebut sehingga data module Anda terlihat sebagai berikut :

Page 109
BAHASA PEMROGRAMAN DELPHI
9. Khusus untuk komponen ADOConnection, klik pada Property ConnectionString, berikut

Klik pada tombol [Build], sehingga muncul tampilan berikut:

Perhatikan bahwa untuk koneksi ke database MS Access kita harus menggunakan Microsoft Jet 4.0
OLE DB Provider!

Lalu klik pada tombol [Next>>]. Pada kolom Select or enter . Klik pada tombol [] browse untuk
memilih database Anda. Untuk menghindari pencarian absolute pada folder tertentu, hilangkan teks
yang mengacu pada folder sehingga tinggal nama file nya saja (DBLatihan.mdb).

Tes koneksi Anda dengan meng klik tombol [Test Connection].

Page 110
BAHASA PEMROGRAMAN DELPHI
10. Sekarang kita akan mengatur property komponen komponen pada unit ini dengan mengikuti tabel
berikut :

Komponen Property Value


DataModule1 Name DMLatih
ADOConnection1 Name Koneksi
ConnectionString Lihat langkah no.9
Connected True
ADOTable1 Name TBarang
Connection Koneksi
TableName Tb_Barang
Active True
DataSource1 Name dsBarang
DataSet TBarang

11. Selanjutnya lakukan penyimpanan unit dengan menggunakan menu File > Save atau langsung saja
dengan menekan Ctrl + S. Pada dialog Save File, simpan unit Anda dengan nama U_Data.

12. Klik tombol [View Form] untuk menampilkan kembali form Barang.

Page 111
BAHASA PEMROGRAMAN DELPHI
Agar form Barang (F_Barang) terhubung dengan data module (DMLatih) kita harus menambahkan
nama unit U_Data dalam bagian uses form Barang. Caranya dengan meng klik pada menu File > Use
Unit, lalu pilih nama unit U_Data.

Kemudian atur property komponen sesuai dengan tabel berikut :

Komponen Property Value


Form1 Name F_Barang
Caption Form Barang
Label1 Caption Kode Barang
Label2 Caption Nama Barang
Label3 Caption Grup Barang
Label4 Caption Harga Jual
Label5 Caption Qty Ditangan
Label6 Caption Qty Minimal
Label7 Caption Status
Label8 Caption Masuk Akhir
DBEdit1 DataSource dsBarang
DataField Kode_Barang
DBEdit2 DataSource dsBarang
DataField Nama_Barang
DBComboBox1 DataSource dsBarang
DataField Grup_Barang
Items.TString Elektronik
ART
Aksesoris
DBEdit4 DataSource dsBarang
DataField Harga_Jual
DBEdit5 DataSource dsBarang
DataField Qty_Ditangan
DBEdit6 DataSource dsBarang
DataField Qty_Minimal
DBEdit7 DataSource dsBarang

Page 112
BAHASA PEMROGRAMAN DELPHI
DataField Status
DBEdit8 DataSource dsBarang
DataField Masuk_Akhir
DBNavigator1 DataSource dsBarang
VisibleButton.nbInsert False
VisibleButton.nbEdit False
VisibleButton.nbDelete False
VisibleButton.nbPost False
VisibleButton.nbCancel False
VisibleButton.nbRefresh False
BitBtn1 Name btnBaru
Caption Baru
BitBtn2 Name btnSimpan
Caption Simpan
BitBtn3 Name btnBatal
Caption Batal
BitBtn4 Name btnHapus
Caption Hapus
BitBtn5 Name btnTutup
Caption Tutup

13. Setelah pengaturan property, form Anda akan terlihat sebagai berikut :

14. Simpan hasil kerja Anda dengan menekan tombol Ctrl + S.

Page 113
BAHASA PEMROGRAMAN DELPHI
Langkah #3 Lengkapi Skripnya

Setelah selesai dengan desain form aplikasinya, sekarang kita lanjutkan dengan memberikan rangkaian
perintah/skrip agar program dapat berjalan sesuai dengan keinginan kita.

Form F_Barang btnBaruClick


1. Masih pada form F_Barang, lalu klik 2x pada tombol [Baru], sehingga muncul Unit Editor, lalu
ketikkan skrip berikut :

procedure TF_Barang.btnBaruClick (Sender : TObject);


begin
DMLatih.TBarang.Insert;
end;

2. Tekan Ctrl + S untuk menyimpan hasil kerja.

Form F_Barang btnSimpanClick


3. Masih pada form F_Barang, lalu klik 2x pada tombol [Simpan], sehingga muncul Unit Editor, lalu
ketikkan skrip berikut :

procedure TF_Barang.btnSimpanClick (Sender : TObject);


begin
if DMLatih.TBarang.State in [dsEdit,dsInsert] then
DMLatih.TBarang.Post;
end;

4. Tekan Ctrl + S untuk menyimpan hasil kerja.

Form F_Barang btnBatalClick


5. Masih pada form F_Barang, lalu klik 2x pada tombol [Batal], sehingga muncul Unit Editor, lalu
ketikkan skrip berikut :

procedure TF_Barang.btnBatalClick (Sender : TObject);


begin
DMLatih.TBarang.Cancel;
end;

6. Tekan Ctrl + S untuk menyimpan hasil kerja.

Form F_Barang btnHapusClick


7. Masih pada form F_Barang, lalu klik 2x pada tombol [Hapus], sehingga muncul Unit Editor, lalu
ketikkan skrip berikut :

procedure TF_Barang.btnHapusClick (Sender : TObject);


begin
if MessageDig(Yakin akan menghapus data ini?, mtConfirmation, [mbYes,mbCancel],0) = mrYes then
DMLatih.TBarang.Delete;
end;

8. Tekan Ctrl + S untuk menyimpan hasil kerja.

Page 114
BAHASA PEMROGRAMAN DELPHI
Form F_Barang btnHapusClick
9. Masih pada form F_Barang, lalu klik 2x pada tombol [Hapus], sehingga muncul Unit Editor, lalu
ketikkan skrip berikut :

procedure TF_Barang.btnHapusClick (Sender : TObject);


begin
if MessageDig(yakin akan menghapus data ini?, mtConfirmation, [mbYes,mbCancel], 0) = mrYes then
DMLatih.TBarang.Delete;
end;

10. Tekan Ctrl + S untuk menyimpan hasil kerja.

Form F_Barang btnTutupClick


11. Masih pada form F_Barang, lalu klik 2x pada tombol [Tutup], sehingga muncul Unit Editor, lalu
ketikkan skrip berikut :

procedure TF_Barang.btnTutupClick(Sender : TObject)


begin
if DMLatih.TBarang.State in [dsEdit,dsInsert] then
if MessageDig(Data belum disimpan, Simpan?, mtConfirmation, [mbYes,mbNo], =mrYes then
DMLatih.TBarang.Post
else
DMLatih.TBarang.Cancel;
close;
end;

12. Tekan Ctrl + S untuk menyimpan hasil kerja. Lalu jalankan program Anda dengan menekan tombol
[F9]. Maka hasilnya akan seperti berikut :

Sampai di sini, Anda telah berhasil membuat sebuah aplikasi basis data yang paling sederhana, namun
sebenarnya adalah bagian yang paling pokok dari pembangunan aplikasi database itu sendiri !!!

Page 115
BAHASA PEMROGRAMAN DELPHI
7.2. Aksesoris Umum Aplikasi Database

Sekarang tiba saatnya memberikan beberapa polesan/aksesoris terhadap aplikasi basis data yang telah
kita buat pondasinya. Aksesoris tersebut adalah :

Aksesoris Pencarian Data


Sekarang kita akan membuat sebuah aplikasi kecil untuk melakukan pencarian nama barang sesuai dari
input teks tertentu. Hasil pencarian dengan metode ini adalah menempatkan kursor pada data yang
paling sesuai dengan criteria pencarian. Berikut ini langkah langkahnya :
1. Untuk memastikan bahwa Anda memulai dari sebuah project yang kosong. Klik pada menu New >
Application.

2. Selanjutnya simpan Project dan Unit Anda dengan meng klik menu File > All.

Page 116
BAHASA PEMROGRAMAN DELPHI
3. Pada window dialog Save File, ketiklah nama unit Anda sebagai U_CariBarang.

4. Pada window dialog Save File berikutnya, ketiklah nama project Anda sebagai DB_Pencarian.

5. Karena kita masih menggunakan data yang sama dengan project sebelumnya. Maka tidak perlu
membuat ulang koneksinya. Klik pada menu Project > Add to Project

Lalu pada window dialog Add to Project, pilih unit U_Data.pas

Page 117
BAHASA PEMROGRAMAN DELPHI
6. Kembali ke form kita yang masih kosong. Dengan menggunakan komponen komponen berikut :

Palette Komponen
Standard Panel
Additional BitBtn
Data Controls DBgrid

Desainlah form Anda seperti di bawah ini.

7. Agar form Pencarian terhubung dengan data modulnya (U_Data) kita harus menambahkan nama unit
U_data dalam bagian uses form barang. Caranya dengan meng klik pada menu File > Use Unit ,
lalu pilih nama unit U_data.

8. Sekarang kita akan mengatur property komponen komponen pada form pencarian ini dengan
mengikuti tabel berikut :

Komponen Property Value


Form1 Name F_Pencarian
Caption Pencarian Data Barang

Page 118
BAHASA PEMROGRAMAN DELPHI
DBGrid1 DataSource DMLatih.dsBarang
Edit1 Name edCari
Bitbtn1 Name btnCari
Caption Cari
Bitbtn2 Name btnTutup
Caption Tutup

Sehingga akan tampak sebagai berikut :

9. Untuk memberikan perintah pencarian, klik 2x pada tombol [Cari] untuk menampilkan unit editor.
Lalu pada unit editor ketiklah skrip berikut :

procedure TF_Pencarian.BitBtn1Click ( Sender : TObject ) ;


begin
//------------------------------------------------------------------------------------------------------
// mencari teks yang sesuai pada field nama_barang
//------------------------------------------------------------------------------------------------------
if DMLatih.TBarang.Locate (Nama Barang, EdCari.Text, [loPartialKey, loCaseInsensitive]) then
ShowMessage (Data ditemukan !)
else
ShowMessage (Data tidak ditemukan !)
end;

10. Lalu klik 2x pada tombol [Tutup], dan ketiklah skrip berikut :

procedure TF_Pencarian.BitBtn2Click ( Sender : TObject ) ;


begin
Close;
end;

Page 119
BAHASA PEMROGRAMAN DELPHI
11. Simpanlah hasil kerja dengan menekan Ctrl + S. Lalu compile dengan menekan tombol [F9]. Maka
Anda akan melihat hasil sebagai berikut :

Page 120
BAHASA PEMROGRAMAN DELPHI
Report mempunyai bermacam kegunaan dan fungsi. Pada umumnya, dalam dunia usaha, report
mempunyai fungsi untuk menampilkan data data keuangan secara mendetail. Report dapat terdiri dari
beragam jenis, dari yang berbentuk sederhana sampai yang berbentuk master detail. Report juga
diperlukan dalam proses operasional perusahaan.

Bahasa pemrograman Delphi 7.0 mempunyai fitur untuk pembuatan report. Adapun nama fitur
tersebut adalah Rave Report. Rave Report ini hanya dapat dijalankan apabila IDE Delphi juga berjalan.

9.1. Menggunakan Rave Report

Beberapa langkah yang dapat dilakukan untuk menggunakan Rave Report pada aplikasi Anda adalah :

1. Buatlah sebuah project baru dengan cara meng klik di File > New > Form.

2. Secara default, Anda akan dibuatkan sebuah project baru.

Page 121
BAHASA PEMROGRAMAN DELPHI
3. Ambil komponen Ttable yang berada pada tab BDE yang terdapat dalam Component Palette.

4. Set properties DatabaseName pada komponen TTable menjadi DBDEMOS.

5. Set properties TableName komponen TTable menjadi Country.db.

Page 122
BAHASA PEMROGRAMAN DELPHI
6. Set properties IndexFieldNames komponen TTable menjadi Name.

7. Ubah properties Active komponen TTable, yang semula False menjadi True.

8. Ambil komponen RVDataSetConnection yang berada pada tab Rave yang tersedia di Component
Palette.

Page 123
BAHASA PEMROGRAMAN DELPHI
9. Set properties DataSet komponen RVDataSetConnection dengan Table1.

10. Ambil komponen RVProject1 yang berada pada tab Rave.

11. Ambil komponen RVRenderRTF pada tab Rave. Komponen RVRenderRTF berguna untuk
menghasilkan report berformat *.RTF.

Page 124
BAHASA PEMROGRAMAN DELPHI
12. Ambil komponen RVRenderPDF, yang berguna untuk menghasilkan report berformat *.PDF pada tab
Rave.

13. Ambil komponen RVRenderHTML pada tab Rave. Komponen RVRenderHTML berguna untuk
menghasilkan report berformat *.HTML.

Page 125
BAHASA PEMROGRAMAN DELPHI
14. Susun semua komponen tersebut sehingga form terbentuk tampilan sebagai berikut ini.

15. Klik RVProject1 dan tunggu sampai muncul tampilan seperti ini.

Page 126
BAHASA PEMROGRAMAN DELPHI
16. Sebelum memulai mendesain form, terlebih dahulu Anda harus membuat Data View dengan cara klik
File > New Data Object.

17. Selanjutnya, akan tampil jendela Data Connections seperti di bawah ini.

Page 127
BAHASA PEMROGRAMAN DELPHI
18. Pilih Direct Data View, kemudian klik Next.

19. Selanjutnya, akan tampil jendela Data Connections > Active Data Connections.

20. Klik Finish.


21. Pada jendela RaveDesigner bagian kanan, terdapat jendela Tree View yang mendeskripsikan
hubungan koneksi dengan DataSet.

Page 128
BAHASA PEMROGRAMAN DELPHI
22. Klik Data View Dictionary, lalu lanjutkan dengan meng klik DataView1, lalu perhatikan data apa yang
ditampilkan.

23. Ternyata, yang ditampilakan adalah nama field komponen TTable yang terdapat pada IDE Delphi.
Dengan kata lain, aplikasi Rave Report Designer ini berhubungan dengan IDE Delphi.
24. Untuk mendesain Report Sederhana, klik menu Tool > Report Wizard > Simple Table.

25. Selanjutnya, akan tampil jendela Simple Table, seperti yang terlihat di bawah ini.

Page 129
BAHASA PEMROGRAMAN DELPHI
26. Klik Next, tunggu hingga muncul tampilan seperti di bawah ini.

27. Klik All, dilanjutkan dengan klik Next sehingga muncul tampilan seperti di bawah ini.

Page 130
BAHASA PEMROGRAMAN DELPHI
28. Selanjutnya klik Next sehingga muncul tampilan seperti di bawah ini.

29. Dari tampilan Report Layout Options, klik Next. Lalu tunggu muncul tampilan seperti di bawah ini.

30. Lanjutkan dengan meng klik Generate dan tunggu kembali sampai muncul tampilan seperti di bawah ini.

Page 131
BAHASA PEMROGRAMAN DELPHI
31. Simpan project report tersebut dengan mengakses menu File > Save atau dengan menekan tombol
Ctrl + S dari keyboard.
32. Selanjutnya akan tampil jendela Save Dialog.

33. Isi Object name dengan nama Project1.rav selanjutnya klik Save.
34. Tutup aplikasi Rave Designer.
35. Kembali pada form di IDE Delphi. Pada komponen RVProject1, set properties ProjectFile dengan
menekan tombol [] pada jendela Object Inspector sehingga muncul tampilan jendela Select Rave
Project File.
36. Arahkan ke direktori tempat Anda menyimpan file project Rave yang telah dibuat sebelumnya.
37. Jika telah ditemukan, klik Open.
38. Ambil komponen TButton pada tab Standard, lalu letakkan pada form yang telah didesain
sebelumnya.

Page 132
BAHASA PEMROGRAMAN DELPHI
39. Pada properties caption komponen TButton, ubah menjadi Create Report.
40. Dobel klik komponen TButton tersebut, ketiklah skrip di bawah ini.

procedure TForm1.ButtonClick ( Sender : TObject );


begin
RVProject1.Execute;
end;

41. Susun komponen komponen pada form tersebut, sehingga muncul tampilan seperti di bawah ini.

42. Jalankan program dengan menekan tombol F9 atau klik menu Run > Run, sehingga muncul tampilan
seperti di bawah ini.

Page 133
BAHASA PEMROGRAMAN DELPHI
43. Klik Create Report sehingga muncul tampilan seperti di bawah ini.

44. Pilih Preview, lalu klik OK sehingga muncul tampilan report di bawah ini.

45. Anda sudah berhasil membuat report dengan menggunakan Rave Report.

Page 134
BAHASA PEMROGRAMAN DELPHI
Bekerja dengan komponen tabel memang mudah dan sangat praktis. Apalagi kalau sedang dikejar
deadline.

Tetapi untuk pekerjaan yang melibatkan database yang besar, mengandalkan komponen tabel ini akan
menyebabkan aplikasi yang Anda bangun menjadi lambat. Hal ini, dikarenakan komponen tabel bekerja
berbasiskan data (recordset). Nah, untuk mempercepat aplikasi Anda, sebaiknya pada bagian bagian yang
berpotensi memperlambat aplikasi, Anda gunakan Query yang bekerja berbasiskan kelompok data
(dataset). Berikut ini uraian tentang SQL dan penerapannya dalam bahasa pemrograman Delphi.

9.1. Sekilas Mengenai SQL

SQL (Structure Query Language) adalah bahasa standar untuk query yang meliputi perintah untuk
menyimpan, memelihara, mengatur akses akses ke database, dan mengolah relasi antar database.
Dengan menggunakan SQL, Anda dapat melakukan hal hal berikut :

Memodifikasi struktur database.


Mengubah, mengisi, menghapus isi database.
Mentransfer data antar database yang berbeda.

Dalam SQL, perintah yang sering dipakai adalah SELECT yang berfungsi untuk menampilkan data dari
database. Selain itu, SQL juga menyediakan perintah untuk membuat database, tabel, field, menambah
data, menghapus, serta mengedit data.

SQL ada yang dikembangkan untuk PC dan ada juga yang dikembangkan untuk mengakomodasi database
yang sangat besar. Beberapa contohnya antara lain :

Microsoft Access
Digunakan untuk PC, sangat mudah dipakai di mana perintah SQL dapat langsung dimasukkan atau
melalui fasilitas yang telah digunakan.

Microsoft Query
SQL yang dipaket dengan produk lain dari Microsoft Windows, yaitu Microsoft Visual Studio seperti
Visual Basic dan Visual C++. Untuk terhubung dengan database lain yang menggunakan ODBC.

Oracle
Digunakan untuk perusahaan yang menggunakan database besar.

9.2. Metode SQL

Perintah dalam metode SQL ini dibagi menjadi perintah Select, Insert, Delete, dan Update. Berikut ini
uraian pembahasan dari perintah perintah SQL, di mulai dari perintah Select.

Page 135
BAHASA PEMROGRAMAN DELPHI
Metode Select

Metode Select digunakan untuk menampilkan dan memilih suatu data dengan kondisi kondisi tertentu.
Sintaks dari perintah Select sebagai berikut ini.

SELECT daftar_field
FROM nama_tabel IN nama_basis_data
WHERE kondisi_pencarian
GROUP BY daftar_field
HAVING group_criteria
ORDER BY daftar_field

Perlu Anda ketahui bahwa :


1. Jika terdapat spasi pada nama field, gunakan tanda kurung siku [ ]. Misalkan nama satu field
dalam database adalah kode barang (ada spasi), maka dalam SQL harus dituliskan [Kode Barang].
2. Gunakan AS untuk mengubah judul field.
3. Gunakan WHERE untuk melakukan pencarian data atau melakukan penyaringan informasi seperti
menampilkan semua barang yang berharga 1000 atau semua barang yang berjumlah lebih dari 10.
4. Gunakan ORDER BY untuk mengelompokkan dan melakukan pencarian record. Saat Anda
melakukan pencarian data (record), Anda dapat mengabaikan satu atau beberapa karakter yang tidak
kita ingat dengan Wild Char seperti dalam sistem operasi DOS. Biasanya karakter yang dipakai
adalah * atau ? (untuk mengabaikan karakter apa saja yang terdapat pada lokasi ? ini).
5. Gunakan HAVING untuk menampilkan kelompok data tertentu saja. Pernyataan ini digunakan
untuk memberikan kriteria setelah pengelompokan, berbeda dengan WHERE yang memberikan
kriteria sebelum pengelompokan.

Metode Insert

Dengan menggunakan metode ini Anda dapat memasukkan satu baris data ke dalam tabel atau
memasukkan satu buah record secara satu per satu. Sintaks dari metode Insert sebagai berikut ini.

INSERT INTO nama_tabel (kolom1, kolom2, )


VALUES (Nilai1, Nilai2, )

Dengan perintah ini Anda dapat menambah suatu record ke dalam kolom yang tersedia di tabel dengan
nilai yang disebutkan. Untuk dapat menjalankan perintah ini Anda perlu memperhatikan beberapa hal
berikut ini.

Tipe data untuk nilai yang dimasukkan harus sama dengan tipe data yang terdapat dalam tabel. Jika
kolom1 mempunyai tipe data text, maka nilai1 juga harus bertipe data text.

Lokasi tempat data dimasukkan harus sama dengan lokasi kolom dalam tabel yang akan ditambahkan.
Jadi, nilai1 dimasukkan ke kolom1, begitu seterusnya,

Jika tabel Anda mempunyai kolom unik, data yang sama tidak akan dapat di input.

Page 136
BAHASA PEMROGRAMAN DELPHI
Ukuran/panjang data yang dimasukkan harus sama dengan ukuran kolom dalam tabel. Misalnya lebar
kolom1 bertipe data karakter yang mempunyai ukuran 28, maka nilai1 harus mempunyai ukuran
maksimal 28.

Metode Update

Perintah Update digunakan untuk mengganti satu atau beberapa buah data yang telah ada di dalam tabel
database. Sintaksnya adalah :

UPDATE FROM nama_tabel


WHERE kondisi

Metode Delete

Metode ini digunakan untuk menghapus data yang telah ada di dalam tabel database. Sintaksnya sebagai
berikut ini.

DELETE FROM nama_tabel


WHERE kondisi

Dalam menggunakan metode ini terutama dalam menghapus data, Anda harus berhati hati karena SQL
akan langsung menghapus data begitu perintah delete dijalankan tanpa memberikan konfirmasi terlebih
dahulu apakah data tersebut benar benar akan dihapus atau tidak. Metode delete ini tidak bisa
menghapus hanya satu field database saja melainkan satu baris record secara keseluruhan setiap kali
perintah dijalankan. Perintah ini hanya menghapus record saja bukan tabelnya.

9.3. Implementasi SQL dalam bahasa pemrograman Delphi

Untuk menampilkan data dari database, sebaiknya menggunakan Query untuk mempercepat akses.
Apalagi jika Anda ingin menampilkan data transaksi yang melibatkan beberapa tabel sekaligus dalam satu
informasi. Sebagai ilustrasi kita akan menampilkan data transaksi pembelian yang sudah dikerjakan
sebelumnya. Ikuti langkah langkah berikut.

1. Buatlah 4 (empat) buah tabel dengan menggunakan Microsoft Access, yaitu :

tb_belimaster
No. Field Tipe Data Ukuran Key
01. No_Bon Text 10 Primary
02. Tgl_Bon Date/Time
03. Id_Supplier Text 10
04. Jum_Item Number
05. Total_Hrg Currency

tb_belidetil
No. Field Tipe Data Ukuran Key
01. No_Bon Text 10 Primary
02. Id_Barang Text 10 Primary

Page 137
BAHASA PEMROGRAMAN DELPHI
03. Qty Number 30
04. Hrg_Satuan Currency

tb_barang
No. Field Tipe Data Ukuran Key
01. Id_Barang Text 10 Primary
02. Nama_Barang Text 30
03. Grup_Barang Text 30
04. Harga_Jual Currency
05. Qty_Ditangan Number
06. Qty_Minimal Number
07. Status Text 30
08. Masuk_Akhir Data/Time

tb_supplier
No. Field Tipe Data Ukuran Key
01. Id_Supplier Text 10 Primary
02. Nama Text 50
03. Alamat Text 50
04. Telpon Text 15

2. Simpanlah tabel tabel tersebut dan berikan nama databasenya dengan DBLatihan2.mdb.
3. Kemudian dari menu Delphi, klik menu File > New > Application.Dan gunakan komponen
komponen sebagai berikut ini.

Palette Komponen
Standard Label
Button
Data Controls DBEdit
DBGrid
DBNavigator
ADO ADOConnection
ADOQuery
Data Access DataSource

Page 138
BAHASA PEMROGRAMAN DELPHI
4. Aturlah letak komponen sehingga tampilan dari form seperti di bawah ini.

5. Set ADOConnection1 persis seperti teknik yang telah dibahas pada bab sebelumnya, koneksikan ke
file Access DBLatihan2.mdb. Kemudian aturlah property beberapa komponen berikut sesuai tabel di
bawah ini.

Komponen Property Value


Form1 Name F_TampilQuery
Caption Menampilkan data dengan
Query
ADOConnection Name Koneksi
Connected True
ADOQuery1 Name MyQuery
Connection Koneksi
SQL SELECT tb_belimaster.No_Bon,
tb_belimaster.Tgl_Bon,
tb_barang.Nama_Barang,
tb_belidetil.Qty as Jumlah,
tb_barang.Harga_Jual as
Harga_Satuan,
tb_supplier.Nama as
Nama_Supplier FROM
tb_belimaster, tb_belidetil,
tb_supplier, tb_barang WHERE
tb_belimaster.No_Bon =
tb_belidetil.No_Bon AND
tb_barang.Id_Barang =
tb_belidetil.Id_Barang AND
tb_supplier.Id_Supplier =
tb_belimaster.Id_Supplier
ORDER BY
tb_belimaster.No_Bon ASC
Active True

Page 139
BAHASA PEMROGRAMAN DELPHI
DataSource1 Dataset MyQuery
DBGrid1 Datasource DataSource1
DBNavigator1 Datasource DataSource1
VisibleButton.nbInsert False
VisibleButton.nbEdit False
VisibleButton.nbDelete False
VisibleButton.nbPost False
VisibleButton.nbCancel False
VisibleButton.nbRefresh False
Label1 Caption Data Transaksi
Button1 Caption Tutup

6. Sehingga form Anda akan terlihat sebagai berikut ini.

7. Lakukan penyimpanan unit dengan menggunakan menu File > Save As atau langsung saja dengan
menekan Ctrl + S. Pada dialog Save File, simpan unit Anda dengan nama U_TampilQuery.
8. Lanjutkan dengan penyimpanan proyek Anda dengan menggunakan menu File > SaveProject. Pada
dialog Save File, simpan proyek Anda dengan nama TampilQuery.

Page 140
BAHASA PEMROGRAMAN DELPHI
9. Jalankan program Anda dengan menekan tombol F9. Maka hasilnya akan terlihat sebagai berikut ini.

Page 141
BAHASA PEMROGRAMAN DELPHI

Daftar Pustaka

Leslie Chadwick, 1991, Essence of Financial Accounting, Prentice Hall International (UK), Ltd.

Marco Cantu, Tim Gooch, Jhon F. Lam, 1997, Delphi Developers Handbook, Sybex.

Marco Cantu, 1999, Mastering Delphi 5, Sybex.

Xavier Pacheco, Steve Teixeira, 2000, Delphi 5 Developer Guide, Sams Publishing.

Kok Yung, 2002, Membangun Database dengan Visual Basic 6.0 dan SQL, Elex Media Komputindo.

Scotts Valley, CA, 2002, Delphi 7 Developers Guide, Borland Software Corporation.

Scotts Valley, CA, 2002, Delphi 7 Quick Start, Borland Software Corporation.

Page 142