Modul Lengkap Pemrograman Delphi
Modul Lengkap Pemrograman Delphi
DAFTAR ISI
KATA PENGANTAR i
Curriculum Vitae Penulis ii
Ucapan Terima Kasih iii
DAFTAR ISI iv
BAB 9 SQL
9.1. SEKILAS MENGENAI SQL 129
9.2. METODE SQL 129
9.3. IMPLEMENTASI SQL DALAM BAHASA PEMROGRAMAN DELPHI 131
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.
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
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.
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.
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.
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).
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.
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.
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.
Component Palette, Form Designer, dan Object Inspector secara bersama sama digunakan untuk
membuat tampilan program.
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.
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.
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.
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.
Dan page kedua adalah Events yang berfungsi sebagai trigger/pemicu komponen yang bersangkutan
untuk menjalankan perintah tertentu.
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.
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.
Fitur fitur lain yang tersedia dalam code editor sebagai berikut ini.
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.
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.
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.
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
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.
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).
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 :
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.
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.
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.
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.
3.1.2. Identifier
Identifier adalah nama untuk meng identifikasi konstanta, tipe data, variabel, procedure, function, unit,
program, dan field pada record.
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.
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 :
{ $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.
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 :
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.
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.
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.
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
implementation
initialization
Writeln(Initialization Unit1);
finalization
Writeln(Finalization Unit1);
end.
unit Unit2;
interface
uses Unit3;
implementation
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.
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
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;
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;
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
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.
Untuk mengubah precedence, kita bisa menggunakan tanda kurung, misalnya : (A+B)*C, maka operator +
akan diproses terlebih dahulu.
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.
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).
(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.
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;
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.
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.
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.
Real
Tipe fundamental bilangan real dalam Delphi Pascal sebagai berikut.
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.
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.
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;
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.
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.
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.
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.
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;
Variabel Nilai adalah nilai ujian yang akan diperiksa untuk menghasilkan nilai index.
For
Loop jenis ini dilakukan untuk pengulangan dengan banyaknya pengulangan yang sudah diketahui.
Format dari loop jenis ini 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.
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.
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 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.
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).
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
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 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.
type
<NamaTipe> = array of <Tipe Dasar>;
var
<Nama Variabel> : array of <Tipe Dasar>;
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.
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.
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
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;
Dengan menggunakan kata kunci with, kita dapat menyederhanakan perintah di atas sebagai berikut ini.
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
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.
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.
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.
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.
Pendeklarasian Procedure
Seperti telah disebutkan di atas, perbedaan antara function dan procedure sangatlah tipis. Deklarasinya
pun sangat mirip seperti terlihat di bawah ini.
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.
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.
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.
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.
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;
implementation
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.
implementation
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.
type
TIntegerFunction = function : Integer;
TProcedure = procedure;
TStrProc = procedure(const S: string);
TMathFunc = function (X : Double) : Double;
var
F : TIntegerFunction;
Proc : TProcedure;
Contoh berikut ini adalah tipe prosedural yang digunakan dalam parameter sebuah procedure.
Misalkan kita mempunyai function atau procedure yang kompatibel dengan tipe tipe prosedural yang
sudah kita definisikan.
function F1 : Integer;
begin
result := 0;
end;
procedure F1;
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.
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.
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.
Inheritance (Pewarisan) adalah hubungan antar object yang memungkinkan disusunnya hirarki object.
Setiap objek anak akan mempunyai sifat dari moyangnya.
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.
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.
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.
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;
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.
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;
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.
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.
Y := X.MyFunc(10);
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.
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.
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.
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.
TBentuk = class
private
FBound : TRect;
public
constructor Create(vBound : TRect);
procedure Gambar (vCanvas : TCanvas) ; virtual;
end;
Implementasi untuk constructor create dan method Gambar dari TBentuk sebagai berikut ini.
{ TBentuk }
Method Gambar dari TBentuk tidak melakukan apa apa, karena bentuk memang tidak bisa digambar.
Biasanya yang seperti ini dibuat menjadi abstract method.
{ TKotak }
{ TEllipse }
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.
initialization
InitArray;
finalization
RemoveArray;
end.
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.
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.
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.
(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.
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.
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.
Bila terjadi exception EDivByZero, maka hasil yang muncul ketika nilai MyData2 = 0 adalah Data tidak
dapat dihitung, dan program terus melanjutkan menghitung data berikutnya.
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.
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;
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
Kita dapat memanggil class method ataupun constructor melalui variabel yang sudah kita definisikan di
atas dengan contoh sebagai berikut :
AnObject := AClassRef.Create;
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 :
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 :
end;
6. Gunakan cara yang sama untuk tombol [Selesai], klik 2x pada tombol tersebut, lalu ketikkan sebagai
berikut :
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.
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 :
4. Untuk menuliskan skrip program, Anda harus meng klik 2x pada tombol [Hitung], lalu ketikkan listing
di bawah ini :
end;
5. Dan skrip terakhir, Anda lakukan klik 2x pada tombol [Selesai], lalu ketikkanlah :
6. Simpanlah program dengan nama unit Ulatihan02 dan nama Project Latihan02.
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 :
3. Klik 2x pada komponen chart1, lalu pada dialog editing chart1, tambahkan data series1 :
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 :
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 :
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.
Aplikasi database stand alone atau file share termasuk dalam aplikasi single tiered application, karena
aplikasi dan database berbagi file system yang sama.
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.
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.
dbExpress adalah library yang sangat ringan dan cepat untuk mengakses SQL Server. dbExpress mulai
diperkenalkan mulai dari Delphi 6.
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.
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.
Data Module
Data Module adalah container tempat seluruh komponen data akses diletakkan. Data module berfungsi
untuk melakukan sentralisasi seluruh business rule dari aplikasi database.
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 :
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.
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.
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.
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;
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;
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.
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.
Karena FieldValues adalah property yang bersifat default, maka kita dapat mengaksesnya tanpa nama
property nya. Contoh :
ClientDataSet1[ Customer] := edit1.text;
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.
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.
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.
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.
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.
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.
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.
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.
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);
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.
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.
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.
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.
Delphi secara otomatis memberikan nama untuk setiap object persistent field yang dibuat, biasanya
adalah gabungan nama dataset dan nama 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.
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 :
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.
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.
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.
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.
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;
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
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.
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;
Cobalah untuk menambah data, mengedit data, dan menghapus data. Batalkan beberapa perubahan
dengan menggunakan tombol Undo.
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.
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.
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 :
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.
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.
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.
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.
Gunakan method AddIndex dari ClientDataSet. Method AddIndex membutuhkan tiga parameter yang
harus diisi dan tiga parameter opsional.
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);
Setelah indeks dibuat, Anda dapat mengaktifkannya dengan mengeset property IndexName dari dataset.
Contohnya :
ClientDataSet1.IndexName := IdxName;
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.
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.
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
Contoh berikut ini merupakan filter terhadap semua karyawan yang mempunyai nama diawali oleh huruf
M.
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.
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.
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.
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 :
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 :
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;
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.
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.
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.
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.
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 :
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
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).
Page 110
BAHASA PEMROGRAMAN DELPHI
10. Sekarang kita akan mengatur property komponen komponen pada unit ini dengan mengikuti tabel
berikut :
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.
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 :
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.
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 :
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 :
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
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
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 :
Page 118
BAHASA PEMROGRAMAN DELPHI
DBGrid1 DataSource DMLatih.dsBarang
Edit1 Name edCari
Bitbtn1 Name btnCari
Caption Cari
Bitbtn2 Name btnTutup
Caption Tutup
9. Untuk memberikan perintah pencarian, klik 2x pada tombol [Cari] untuk menampilkan unit editor.
Lalu pada unit editor ketiklah skrip berikut :
10. Lalu klik 2x pada tombol [Tutup], dan ketiklah skrip berikut :
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.
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.
Page 121
BAHASA PEMROGRAMAN DELPHI
3. Ambil komponen Ttable yang berada pada tab BDE yang terdapat dalam Component Palette.
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.
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.
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.
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.
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 :
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.
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
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.
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 :
Metode Delete
Metode ini digunakan untuk menghapus data yang telah ada di dalam tabel database. Sintaksnya sebagai
berikut ini.
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.
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.
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.
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
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.
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