Anda di halaman 1dari 64

Spesifikasi:

Ukuran: 14x21 cm
Tebal: 360 hlm
Harga: Rp 49.800
Terbit pertama: Mei 2004
Sinopsis singkat:
Buku ini akan mengajarkan Anda bagaimana membuat aplikasi dengan bahasa pemrograman Delphi dan
database Microsoft SQL Server. Pembuatan program dalam buku ini dimulai dari tahap awal seperti
menentukan teknologi Data Access dan jenis database yang digunakan. Juga disinggung tahapan desain
aplikasi, dimulai dari pembuatan DFD (Data Flow Diagram) hingga DSD (Data Structure Diagram) sehingga
pembaca dapat mengetahui pentingnya desain sistem dalam perancangan aplikasi.
Dalam buku ini juga diberikan contoh kasus sehingga pembaca dapat langsung mencoba menerapkan apa
yang diajarkan. Tak kalah pentingnya, buku ini juga membahas pembuatan fasilitas help suatu aplikasi dan cara
membuat paket distribusi untuk aplikasi yang telah dibuat.

BAB 5

MEMBUAT REPORT

Dalam aplikasi database, report adalah hal yang sangat penting dan
berfungsi untuk memberikan laporan bagi user. Report adalah suatu
hasil akhir dari keseluruhan proses aplikasi database. Pada bab ini
Anda akan belajar untuk membuat report pada aplikasi
Perpustakaan.

5.1 Tools Report pada Delphi


5.1.1 Quick Report
Quick Report sebenarnya bukan produk dari Borland, tetapi
merupakan komponen yang diproduksi QuSoft AS dan A LocHert
dan dijadikan standar report pada Delphi seperti halnya Indy (Internet
Direct) pada Delphi 6 yang merupakan produk dari Kudzu (Chad Z
Hower) dan The Indy Pit Crew yang digunakan untuk komponenkomponen yang berhubungan dengan jaringan dan Internet.

5.1.2 Rave Report


Rave Report adalah tools untuk pembuatan report dan termasuk
dalam fitur baru yang diproduksi Nevrona Design untuk Delphi 7.
Informasi mengenai produk ini dapat dilihat pada website Nevrona
231

(www.nevrona.com). Tips dan trik serta download update dan


dokumentasi Rave Report juga dapat diperoleh pada website ini
(http://www.nevrona.com/rave/download.html).
Tidak seperti Quick Report, Rave Report mempunyai tools sendiri
untuk merancang report. Jika pada Quick Report kita merancang
report dalam lingkungan IDE Delphi, pada Rave Report ada tools
sendiri untuk merancang report, yaitu Rave Designer. Hasil report
tersebut disimpan dalam suatu file report (.rav). Kita dapat
memanggilnya dari Delphi dengan komponen-komponen yang ada
pada page Rave di component pallete Delphi.
Rave Report pada Delphi 7 adalah Rave versi 5 Borland Edition. Rave
Designer sendiri dapat berjalan jika Delphi 7 juga dijalankan. Kita
dapat memanggil Rave Designer dengan memilih menu Tools | Rave
Designer dari Delphi 7 atau dengan meletakkan komponen
RaveProject (yang ada pada page Rave di component pallete
Delphi), lalu melakukan klik-kanan pada komponen tersebut dan
memilih Rave Visual Designer.

5.1.3 Seagate Crystal Report


Tools report yang satu ini memang terkenal sekali karena
kemudahannya serta kelengkapan fiturnya, khususnya dalam hal
perancangan dan pembuatan report. Banyak developer Visual Basic
atau bahasa pemrograman lain yang menggunakannya. Seagate
Crystal Report adalah produk third-party yang harus Anda beli secara
terpisah di luar Delphi jika Anda ingin menggunakannya.

5.2 Quick Report


Jika Visual Basic menyediakan Data Report untuk keperluan
perancangan report, Delphi juga memberikan fasilitas pembuatan
report, yaitu Quick Report yang terletak pada page QReport di
component pallete. QReport merupakan singkatan dari Quick Report.
Kita dapat merancang laporan yang kita inginkan dengan komponen
QReport pada waktu perancangan.

232

5.2.1 Band pada Quick Report


Page Header Bank
Title Band
Column Header Band

Detail Band

Footer Band
Summary Band
5.1 Band pada Quick Report

Page Header Band


Page Header Band merupakan band yang dicetak pada setiap bagian
atas kertas dan merupakan keterangan dari report. Biasanya
ditujukan untuk keperluan judul laporan.
Title Band
Title Band merupakan band yang dicetak setelah page header. Title
band hanya dicetak pada halaman pertama saja, untuk halamanhalaman selanjutnya title ini tidak akan dicetak lagi.
Column Header Band
Column Header Band merupakan band yang dicetak setelah title
band dan merupakan judul baris. Biasanya digunakan untuk
menampilkan judul field yang berkaitan dengan laporan.
Detail Band
Detail Band merupakan band yang paling berperan dalam
pembuatan report karena pada band ini diletakkan field dari dataset
233

yang akan dicetak. Band ini akan dicetak berulang-ulang sampai


akhir record pada dataset.
Footer Band
Footer Band merupakan band yang akan dicetak pada bagian bawah
kertas pada tiap halaman. Terdapat pilihan apakah page footer ini
akan dicetak pada halaman akhir atau tidak karena dapat digantikan
fungsinya oleh summary band (tercetak pada halaman akhir)
Summary Band
Summary Band adalah band yang hanya dicetak pada halaman
terakhir dari laporan dan biasanya digunakan untuk total perhitungan
suatu field tertentu di detail band.

5.2.2 Komponen Quick Report


QuickRep
QuikcRep adalah form dasar dari keseluruhan report yang akan
dibuat. Untuk menggunakannya, kita dapat langsung meletakkannya
pada form. Ketika diletakkan pada form, QuickRep masih kosong
dan belum memiliki band. Karenanya kita harus meletakkan band
atau komponen report lainnya pada komponen ini. QuickRep ini
merupakan container untuk komponen-komponen quick report yang
lain. Dengan kata lain, kita meletakan komponen-komponen quick
report lainnya di atas komponen QuickRep ini.
QRSubDetail
QRSubDetail biasanya digunakan pada laporan dalam bentuk
master-detail yang akan dicetak setelah detail band. Band ini
mempunyai dataset sendiri dan dicetak dari awal record sampai
dengan akhir record pada dataset tersebut.
QRStringsBand
QRStringsBand meletakan band yang berisi strings pada report.

234

QRBand
QBBand adalah band elemen dasar dari band-band yang ada dan
dengan mudah dapat diubah tipe band-nya hanya dengan mengatur
properti BandType sesuai tujuan band tersebut. Jika kita meletakkan
TQRBand pada QuickRep, lalu mengisi BandType dengan rbTitle,
fungsi band ini menjadi tipe Title Band.
QRChildBand
QRChildBand
digunakan
untuk
mencetak
laporan
yang
komponennya panjang dan menyebabkan band yang ada tidak
cukup sehingga komponen tersebut harus dipindahkan ke
QRChildBand pada saat proses.
QRGroup
Band ini memungkinkan Anda membagi band yang ada menjadi
bagian-bagian menurut grup. Anda dapat menentukan kapan band
ini dicetak dengan rumus. Jika perhitungan rumus pada record
sekarang dan sebelumnya tidak sama, band ini akan dicetak.
QRLabel
QR Label digunakan untuk mencetak teks pada laporan. Berguna
untuk memberi keterangan seperti label pada form, serta bersifat
statik. Untuk mengatur teks yang akan dicetak label, digunakan
properti caption.
QRDBText
QRDBText adalah versi data-aware TQRLabel. Band ini berfungsi
untuk mencetak nilai yang ada pada field suatu database. Di
dalamnya juga termasuk calculated field, text field, string field, atau
macam field numeric, field tanggal, field memo. Koneksikan pada
data field dengan mengatur properti DataSource dan DataField.
QRExpr
Band ini digunakan untuk mencetak field database, kalkulasi dan
static text. Pada properti Expression dapat dimasukkan ekspresi
untuk keperluan seperti menghitung subtotal, total, dan sebagainya.
235

QRSysData
QRSysData digunakan untuk mencetak informasi sistem seperti title
report, nomor halaman, jam, tanggal, dan sebagainya.
QRMemo
QRMemo digunakan untuk mencetak text berjumlah besar yang
bukan dari suatu field di database.
QRRichText
Band ini digunakan untuk memasukkan rich text pada report.
QRDBRichText
Band ini digunakan untuk mengakses field DBRichText pada report.
QRShape
QRShape digunakan untuk menggambar bentuk bangun seperti
kotak, lingkaran, dan garis pada report.
QRImage
QRImage digunakan untuk menampilkan gambar pada report.
Format image yang didukung disesuaikan dengan class TPicture.
QRDBImage
QRBDImage digunakan untuk mencetak image yang disimpan di
suatu field database (BLOB field).
QRPreview
Band ini digunakan untuk melihat preview report pada layer.
QRTextFilter
QRTextFilter digunakan untuk mengekspor isi dari report ke format
text.
QRHTMLFilter
Band ini digunakan untuk mengekspor isi dari report ke HTML.
236

QRChart
Band ini digunakan untuk mencetak chart di laporan. QRChart
mempunyai fungsi yang sama dengan TDBChart.

5.2.3 Report Setting


Setelah kita merancang report, kita akan mengatur setting kertas,
margin, dan lain-lain menggunakan Report Setting. Klik-kanan
QuickRep, lalu pilih Report Settings atau klik-ganda QuickRep
sehingga muncul kotak dialog seperti Gambar 5.2.
Paper Size Box
Digunakan untuk menentukan ukuran kertas yang akan digunakan
untuk laporan yang telah dirancang. Width mengatur lebar kertas,
length mengatur panjang kertas, sedangkan pilihan portrait dan
landscape mengatur orientasi kertas.
Margin Box
Bertujuan untuk menentukan batas margin atas (top), bawah
(bottom), kiri (left) dan kanan (right) dari ujung kertas. Jika jumlah
kolom (number of columns) lebih dari satu, column space diisi
dengan jarak antarkolom.

Gambar 5.2 Report Settings

237

Other Box
Menentukan jenis font dasar yang akan digunakan, ukuran, dan
satuan unit dari font tersebut.
Page Frame Box
Menentukan frame (garis batas laporan) pada laporan yang terdiri
atas batas atas (top), bawah (bottom), kiri (left), kanan (right), warna
garis batas, dan tebal garis frame.
Band Box
Menentukan band yang digunakan beserta ukurannya pada kertas.

5.2.4 Preview
Report yang telah kita buat dapat kita lihat dengan cara melakukan
klik-kanan dan memilih Preview, atau jika Anda di dalam kotak
dialog Report Setting, Anda dapat mengklik tombol preview.
TQRBand
Properti yang sering digunakan:
Properti

Keterangan

BandType

Memutuskan jenis band apa yang dipilih.


Dapat dipilih dengan tombol dropdown.

Color

Menentukan warna dasar band.

Enabled

Menentukan apakah band akan dicetak atau


tidak.

Font

Menentukan jenis font yang digunakan oleh


komponen-komponen yang ada di band
tersebut.

Expression

Hanya pada QRGroup, yaitu rumus yang

238

dimasukan akan dihitung setiap record detail


dicetak.
ForceNewColumn

Untuk menentukan apakah ketika band


dicetak, report akan membuat kolom yang
baru (jumlah kolom lebih dari satu).
ForceNewPage akan dicetak pada halaman
baru.

FooterBand

Hanya dimiliki QRGroup dan QRSubDetail,


yaitu band pada Footer yang akan dicetak
setelah band selesai dicetak.

Frame

Menentukan garis (top, bottom, left, right) pada


band.

HasChild

Menentukan apakah band tersebut memiliki


band child.

HeaderBand

Hanya dimiliki QRSubDetail, yaitu band untuk


mencetak master-detail.

EventQRBand
QRBand hanya memiliki dua event, yaitu OnAfterPrint dan
OnBeforePrint, sedangkan QRSubDetail memiliki tiga event dengan
tambahan event OnNeedData.
Event

Keterangan

OnAfterPrint

Terjadi setelah band yang bersangkutan dicetak.

OnBeforePrint

Terjadi sebelum QRBand dicetak, biasanya


digunakan untuk perubahan jenis dan ukuran
font atau untuk mengganti caption.

OnNeedData

Terjadi saat pengambilan data.

239

5.2.5 Membuat Report


Untuk contoh penggunaan, kita masih meneruskan contoh aplikasi
Demo Perpustakaan pada Bab 3. Database yang digunakan masih
sama, yaitu database Perpustakaan yang koneksinya menggunakan
ADOConnection pada DataModule. Untuk memanggil report-report
yang telah dibuat, kita menggunakan dua form, yaitu Form Laporan
Buku dan Form Laporan Anggota. Form ini sama seperti form-form
child lainnya dan didefinisikan sebagai MDIChild. Semua report yang
dibuat akan dipanggil dari kedua form ini. Pada bab ini tidak semua
form report akan dijelaskan, tetapi hanya form-form tertentu yang
dibahas, karena pada dasarnya semua metoda dan pengaturan
propertinya sama. Perbedaan yang ada mungkin hanya pada
statement SQL-nya saja.
Penulis menekankan SQL dalam pembuatan report karena dengan
SQL kita dapat dengan mudah mengambil data dan juga kecepatan
menampilkan data pada report sangat cepat.
Pembuatan aplikasi Demo Perpustakaan di sini bertujuan bukan
hanya untuk menunjukkan bagaimana kita merancang suatu aplikasi
menggunakan Delphi, tetapi juga untuk menunjukkan pengaksesan
database dan mengeksekusi statement SQL (dalam hal ini
diujicobakan pada SQL Server) sehingga contoh-contoh statement
SQL diberikan dalam pembuatan program. Pada bab ini juga akan
dibahas penggunaan atau pembuatan VIEW dan STORED
PROCEDURE sederhana yang akan digunakan untuk keperluan
pembuatan report, serta cara menggunakan dan mengakses VIEW
dan STORED PROCEDURE di SQL Server menggunakan Delphi.
Untuk contoh pertama, kita akan mencoba membuat report yang
akan menampilkan data-data anggota yang masih aktif dalam
perpustakaan.
Laporan Anggota Aktif
Untuk rancangan tampilan yang telah selesai, coba perhatikan
Gambar 5.3.

240

Gambar 5.3 Form Laporan Anggota Yang Aktif

Properti pada form:


Visible

FALSE

FormStyle

fsNormal

Bentuk bagan dan peletakan komponen seperti tampilan output di


bawah ini:

Band

QuickReport

Page
Header
Title
Header
Column

LAPORAN DEMO PERPUSTAKAAN

NoAngg
ota

Anggota Yang Aktif


Nam JKe Alam
Kot
a
l
at
a

Telp

Detail

Berikut akan dijabarkan langkah-langkah pembuatan laporan


anggota yang aktif:
1. Letakan komponen QuickReport pada form. Atur agar dapat
menampung komponen yang cukup banyak karena
QuickReport akan menampung band dan setiap band akan
menampung
komponen-komponen
QuickReport
lain.
241

Tambahkan ADOQuery untuk datasetnya serta isi properti


DataSet QuickReport dengan ADOQuery1, dan properti
Connection ADOQuery1 dengan DM.ADOConnection.
2. Pada
QuickReport,
klik-ganda
properti
bands.
Isi
HasPageHeader dengan nilai TRUE (atau klik-ganda
QuickReport sehingga menampilkan Report setting dan berilah
tanda centang di bagian Page Header pada group bands) untuk
menambahkan band Header Column. Tambahkan TQRLabel,
beri nama QRLblPageHeader dan isi caption-nya dengan
LAPORAN DEMO PERPUSTAKAAN. Atur hurufnya (font)
dengan memperbesar font size dan cetak tebal (bold).
3. Pada QuickReport, klik-ganda properti bands. Isi properti
HasTitle dengan nilai TRUE (atau klik-ganda pada QuickReport
sehingga menampilkan Report Setting. Pada Group bands, beri
tanda centang di bagian Title) untuk menambahkan band
Header Column. Tambahkan TQRLabel, beri nama QRLblTitle,
dan isi Caption-nya dengan Anggota Yang Aktif, lalu cetak
tebal.
4. Pada
QuickReport,
klik-ganda
properti
bands.
Isi
HasColumnHeader dengan nilai TRUE (atau klik-ganda
QuickReport sehingga menampilkan Report Setting dan beri
tanda centang di bagian Column Header pada group bands)
untuk menambahkan band Header Column. Tambahkan enam
TQRLabel, beri nama masing-masing: QRLblNoAnggota,
QRLblNama, QRLblJkel, QRLblAlamat, QRLblKota, QRLblTelp.
Atur posisinya agar terlihat rapi.
5. Pada QuickReport, klik-ganda properti bands. Isi HasDetail
dengan nilai TRUE (atau klik-ganda QuickReport yang akan
menampilkan Report Setting dan beri tanda centang di bagian
Detail pada group bands) untuk menambahkan band Header
Column. Tambahkan enam TQRDBText, beri nama masingmasing:
QRDBNoAnggota,
QRDBNama,
QRDBJkel,
QRDBAlamat, QRDBKota, QRDBTelp. Isi Properti DataSet
menjadi ADOQuery1 (dataset yang ditambahkan pada Tahap
1) Properti DataFiled diisi pada saat runtime dan akan
menerangkan field apa yang akan ditampilkan oleh QRDBText.
Karena kita menggunakan dan mengisikan ADOQuery pada
242

saat runtime, properti tersebut lebih fleksibel pada saat runtime


karena sesuai dengan hasil statement SQL pada ADOQuery.
Pada kode programnya, masukkan proses eksekusi statement
SQL dan pendefinisian properti DataField pada QRDBText pada
saat Form Laporan Aggota Aktif dibuat.
Untuk membuat garis atau kotak, Anda dapat menggunakan
QRShape dan atur juga properti shape (qrsRectangle, qrsHorLine,
qrsCircle, dll) atau gunakan properti Frame. Klik-ganda frame, isi
DrawTop, DrawBottom, DrawLeft, dan DrawRight dengan nilai
TRUE/FALSE pada komponen yang bersangkutan.
Berikut adalah kode program pada saat FrmLapAgtAktif dibuat
(Event OnCreate).
procedure TFrmLapAgtAktif.FormCreate(Sender: TObject);
begin
try
DM.ADOConnection.BeginTrans;
with ADOQuery1 do
begin
Active := FALSE;
SQL.Text := 'SELECT AGT.NO_ANGGOTA, AGT.NAMA, ' +
'CASE AGT.JENIS_KELAMIN ' +
'WHEN ' + QuotedStr('1') + 'THEN ' +
QuotedStr('PRIA') + ' ELSE ' +
QuotedStr('WANITA') + 'END AS JK ' +
', AGT.ALAMAT1, ' +
'AGT.KOTA, AGT.TELP FROM ANGGOTA AGT ' +
'WHERE AGT.AKTIF=' + QuotedStr('1') +
' ORDER BY AGT.NO_ANGGOTA';
Active := TRUE;
end;
DM.ADOConnection.CommitTrans;
except
DM.ADOConnection.RollbackTrans;
end;
QRDBNoAnggota.DataField := ADOQuery1.Fields[0].DisplayName;
QRDBNamaAnggota.DataField := ADOQuery1.Fields[1].DisplayName;
QRDBJK.DataField := ADOQuery1.Fields[2].DisplayName;
QRDBAlamat.DataField: ADOQuery1.Fields[3].DisplayName;
QRDBKota.DataField := ADOQuery1.Fields[4].DisplayName;
QRDBTelp.DataField := ADOQuery1.Fields[5].DisplayName;
end;

Pada dasarnya ADOQuery


statement SQL di bawah ini:

menampung

record-record

hasil

SELECT AGT.NO_ANGGOTA, AGT.NAMA,


CASE AGT.JENIS_KELAMIN
WHEN '1' THEN 'PRIA'
ELSE 'WANITA'
END AS JK, AGT.ALAMAT1, AGT.KOTA, AGT.TELP

243

FROM ANGGOTA AGT


WHERE AGT.AKTIF='1' ORDER BY AGT.NO_ANGGOTA

Penulis menyarankan untuk selalu menggunakan Query Analyzer


untuk mencoba sintaks SQL yang dibuat. Setelah teruji
kebenarannya, barulah Anda pindahkan sintaks SQL tersebut ke
Delphi. Cara ini adalah cara yang sangat efektif dan menjamin
keakuratan hasil.
Statement SQL di atas menampilkan nomor anggota, nama, dan
jenis kelamin. Jenis kelamin pada database disimpan dalam tipe data
bit (0 dan 1). Kita dapat manfaatkan fasilitas dari SQL Server, yaitu
fungsi CASEWHEN ELSE END. Contohnya jika jenis_kelamin
= 1 maka cetak PRIA else WANITA. Juga ditampilkan alamat,
kota dan telepon anggota yang didapat dari Tabel Anggota dengan
anggota tersebut masih aktif (field Aktif = 1).

Gambar 5.4 Query Analyzer dengan Hasil Query Anggota yang Masih
Aktif

Setelah ADOQuery aktif, kita dapat mendefinisikan


DataField dari QRDBText dengan kode program:

properti

QRDBNoAnggota.DataField := ADOQuery1.Fields[0].DisplayName;

Datafield QRDBNoAnggota diisi dengan NO_ANGGOTA (field ke-0).


Event OnBeforePrint dapat kita manfaatkan untuk pengecekan data.
Jika tidak ada data, band tersebut tidak akan dicetak. Pengecekan
dilakukan dengan memeriksa nilai ADOQuery1.RecordCount <> 0.
244

procedure TFrmLapAgtAktif.QRBandDetailBeforePrint(Sender:
TQRCustomBand;
var PrintBand: Boolean);
begin
if ADOQuery1.RecordCount = 0 then PrintBand := FALSE;
end;

Laporan Peminjaman Buku


Dalam pembuatan report ini juga dicontohkan penggunaan View
untuk laporan anggota yang meminjam buku dan daftar buku yang
dipinjam.

Gambar 5.5 Form Laporan Anggota dan List Buku

Rancanglah report seperti gambar di atas, atau untuk lebih jelasnya


lihat bagan berikut untuk output:

Band

QuickReport

Page
Header

LAPORAN DEMO PERPUSTAKAAN

Title
Group
Header

Daftar Anggota Dan Buku Yang


Dipinjam
No Anggota
No Anggota
No Pinjam
No Pinjam
Nama
Nama Anggota
Masa Berlaku
Tanggal

245

Kode Buku
Kode_Buku

Judul
Judul

Penerbit
Penerbit

Detail

Langkah-langkah pembuatannya adalah sebagai berikut:


1. Letakkan komponen QuickReport pada form. Aturlah agar dapat
menampung komponen yang cukup banyak karena
QuickReport ini akan menampung band dengan setiap band
menampung
komponen-komponen
QuickReport
lain.
Tambahkan ADOQuery untuk datasetnya, lalu isi properti
DataSet QuickReport dengan ADOQuery1 dan properti
Connection ADOQuery1 dengan DM.ADOConnection.
2. Klik-ganda properti bands pada QuickReport. Isi HasPageHeader
dengan nilai TRUE (atau klik-ganda QuickReport yang akan
menampilkan Report setting dan beri tanda centang di bagian
Page Header pada group bands) untuk menambahkan band
Header Column. Tambahkan TQRLabel dan beri nama
QRLblPageHeader. Isi caption-nya dengan LAPORAN DEMO
PERPUSTAKAAN. Perbesar ukuran font (font size) dan cetak
tebal (bold).
3. Pada QuickReport, klik-ganda properti bands. Isi HasTitle
dengan nilai TRUE (atau klik-ganda pada QuickReport yang
akan menampilkan Report Settings. Pada Group bands beri
tanda centang di bagian Title) untuk menambahkan band
Header Column. Tambahkan TQRLabel, beri nama QRLblTitle
dan isi caption-nya dengan Daftar Anggota dan Buku Yang
Dipinjam, lalu cetak tebal.
4. Tambahkan
komponen
TQRGroup
dan
beri
nama
QRGroupHeader. Properti Expression akan diisi pada saat
runtime. Tambahkan tujuh TQRLabel seperti pada gambar dan
bagan, dan beri nama masing-masing: QRLblNoAnggota,
QRLblNama,
QRNoPinjam,
QRLblMasaBerlaku,
QRLblKodeBuku, QRLblJudul, QRLblPenerbit. Tambahkan juga
empat TQRDBText, dan beri nama masing-masing:
246

QRDBNoAnggota,
QRDBNama,
QRDBNoPinjam,
QRDBMasaBerlaku. Kemudian isi properti DataSet dengan
ADOQuery1.
5. Pada QuickReport, klik-ganda properti bands. Isi HasDetail
dengan nilai TRUE (atau klik-ganda QuickReport yang akan
menampilkan Report Settings dan beri tanda centang di bagian
Detail pada Group bands). Tambahkan tiga TQRDBText dan
beri nama masing-masing: QRDBKodeBuku, QRDBJudul,
QRDBPenerbit. Kemudian isi properti DataSet dengan
ADOQuery1.

Membuat View untuk Report

Gambar 5.6 SQL Server Enterprise Manager - View

Ketikkan statement SQL di bawah ini pada Query Analyzer atau pada
Enterprise Manager di bagian database Perpustakaan. Caranya,
buatlah view baru, setelah itu masukkan statement SQL di bawah ini:
Create VIEW ANGGOTA_YANG_PINJAM AS
Select distinct AGT.No_Anggota, AGT.Nama as [Nama Anggota],
(SELECT top 1 AKHIR FROM MASA_BERLAKU WHERE
NO_ANGGOTA = AGT.NO_ANGGOTA ORDER BY AKHIR DESC ) as
MASA_BERLAKU
, PJ.No_Pinjam, DP.Kode_Buku, B.Judul, P.Nama as [Penerbit] from
Anggota AGT,
Masa_Berlaku MB, Peminjaman PJ Inner Join Detail_Peminjaman DP
on
DP.No_pinjam = PJ.No_Pinjam, Buku B, Penerbit P Where
AGT.No_Anggota = PJ.No_Anggota and
MB.No_Anggota = AGT.No_Anggota and DP.Kode_Buku = B.Kode_Buku
and
B.Kode_Penerbit = P.Kode_Penerbit and DP.Tanggal_kembali is null
and DP.denda = 0

247

Gambar 5.7 Query Analizer dengan SQL untuk Anggota yang Pinjam
Buku

Untuk mengakses VIEW dari Delphi, kita dapat menggunakan


ADOTable atau ADOCommand. Untuk contoh ini digunakan
ADOCommand. Letakan ADOCommand pada DataModule.
Pada Event OnCreate pada FrmLapAgtListBuku, masukkan kode
berikut:
procedure TFrmLapAgtListBuku.FormCreate(Sender: TObject);
begin
try
DM.ADOConnection.CursorLocation := clUseClient;
DM.ADOConnection.BeginTrans;
with ADOQuery1 do
begin
DM.ADOCommand.CommandType := cmdText;
DM.ADOCommand.CommandText := 'SELECT * FROM
ANGGOTA_YANG_PINJAM';
// atau
//
//
//
//
//

DM.ADOCommand.CommandType := cmdTable;
DM.ADOCommand.CommandText := 'ANGGOTA_YANG_PINJAM';
ANGGOTA_YANG_PINJAM adalah View Yang telah dibuat di SQL
Server, cara Akses sama seperti tabel , dapat dengan
ADOTable, ADOCommand, ADOQuery seperti Nama Tabel Umumnya
ADOQuery1.Recordset := DM.ADOCommand.Execute;
end;
DM.ADOConnection.CommitTrans;
except
DM.ADOConnection.RollbackTrans;
end;
DM.ADOConnection.CursorLocation := clUseServer;
with ADOQuery1 do
begin
QRDBNoAnggota.DataField := Fields[0].DisplayName;
QRDBNamaAnggota.DataField := Fields[1].DisplayName;
QRDBNoPinjam.DataField := Fields[3].DisplayName;
QRDBMasaBerlaku.DataField := Fields[2].DisplayName;

248

QRDBKodeBuku.DataField := Fields[4].DisplayName;
QRDBJudul.DataField := Fields[5].DisplayName;
QRDBPenerbit.DataField := Fields[6].DisplayName;
QRGroupHeader.Expression := Fields[3].DisplayName;
end;
end;

Kita
menggunakan
CursorLocation
=
clUseClient
pada
ADOConnection karena jika menggunakan clUseServer akan
menampilkan error. Seperti yang dibahas pada bagian
CursorLocation dan CursorType, tidak semua kombinasi dari
CursorLocation dan CursorType dapat terlaksana. Biasanya hal ini
disebabkan keterbatasan DBMS atau OLE DB Provider.
Error yang ditimbulkan adalah pada saat kompilasi:

Gambar 5.8 Debugger Exception Notification

Kita
masukkan
statement
SQL
ADOCommand.CommandType cmdText:

dan

mendefinisikan

SELECT * FROM ANGGOTA_YANG_PINJAM

ANGGOTA_YANG_PINJAM adalah nama dari view yang dibuat.


Untuk melihat isi atau hasil View, caranya sama dengan tabel hanya
saja pada view tidak dapat dilakukan perintah yang sifatnya
mengubah isi view (insert, update, dan delete).
Terakhir ketikkan kode program:
ADOQuery1.Recordset := DM.ADOCommand.Execute;

Kode program di atas akan menyatakan bahwa recordset dari


ADOQuery1 adalah hasil eksekusi DM.ADOCommand.Execute.
Setelah itu, masukkan properti DataField dari DBText, sama dengan
report sebelumnya dan report-report yang lain:
249

with ADOQuery1 do
begin
QRDBNoAnggota.DataField := Fields[0].DisplayName;
. . .
QRGroupHeader.Expression := Fields[3].DisplayName;
end;

Laporan Jumlah Buku

Gambar 5.9 Form Laporan Jumlah Buku

Bagan outputnya adalah seperti berikut:

QuickReport

Band
Page
Header
Title
Group
Header

LAPORAN DEMO PERPUSTAKAAN


Jumlah Buku Tersedia Di Perpustakaan

Judul

A.

Kode Buku
Kode_Buku

Judul
Judul

Penerbit
Penerbit

Category
Category

Persediaan
Jumlah

Judul
Judul

Penerbit
Penerbit

Category
Category

Persediaan
Jumlah

Detail

Group
Header
Detail

250

Judul

B.

Kode_Buku
Kode_Buku

Group
Footer
Summary

Sub
Total

Sub Total

Total

Total

Langkah-langkah pembuatannya adalah sebagai berikut :


1. Letakkan komponen QuickReport pada form. Aturlah agar dapat
menampung komponen yang cukup banyak karena
QuickReport ini akan menampung band dan setiap band akan
menampung
komponen-komponen
QuickReport
lain.
Tambahkan ADOQuery untuk datasetnya. Isi properti DataSet
QuickReport dengan ADOQuery1 dan properti Connection
ADOQuery1 dengan DM.ADOConnection.
2. Klik-ganda properti bands pada QuickReport. Isi HasPageHeader
dengan nilai TRUE (atau klik-ganda QuickReport sehingga
menampilkan Report Settings dan beri tanda centang di bagian
Page Header pada group bands) untuk menambahkan band
Header
Column. Tambahkan TQRLabel, beri nama
QRLblPageHeader, dan isi caption-nya dengan LAPORAN
DEMO PERPUSTAKAAN. Perbesar ukuran font-nya dan cetak
tebal (bold).
3. Pada QuickReport, klik-ganda properti bands. Isi HasTitle
dengan nilai TRUE (atau klik-ganda QuickReport sehingga
menampilkan Report Settings. Pada group bands beri tanda
centang di bagian Title) untuk menambah band Header Column.
Tambahkan TQRLabel dan beri nama QRLblTitle. Isi captionnya dengan Jumlah Buku Tersedia di Perpustakaan, lalu cetak
tebal.
4. Tambahkan
komponen
TQRGroup
dan
beri
nama
QRGroupHeader. Properti Expression diisi pada saat runtime.
Tambahkan tujuh TQRLabel seperti pada gambar dan bagan,
beri nama masing-masing: QRLblGroupBy, QRLblHuruf,
QRLblKodeBuku, QRLblJudul, QRLblPenerbit, QRLblCategory,
dan QRLblPersediaan. Tambahkan juga empat TQRDBText,
masing-masing dinamakan QRDBKodeBuku, QRDBJudul,
251

QRDBPenerbit, QRDBCategory, dan QRDBPerseduaan. Isi


properti DataSet dengan ADOQuery1. Atur Properti FooterBand
menjadi QRFooterBand.
5. Pada QuickReport, klik-ganda properti bands. Isi HasDetail
dengan nilai TRUE (atau klik-ganda QuickReport aehingga
menampilkan Report Settings dan beri tanda centang di bagian
Detail pada group bands). Tambahkan lima TQRDBText, beri
nama dengan QRDBKodeBuku, QRDBJudul, QRDBPenerbit,
QRDBCategory, dan QRDBJumlah. Isi properti DataSet dengan
ADOQuery1.
6. Tambahkan band (QRBand) dan isi properti BandType menjadi
rbGroupFooter. Lalu tambahkan QRLabel dan isi caption-nya
dengan Sub Total. Tambahkan QRExpr dan beri nama
QRExprTotalGroup. Isi properti ResetAfterPrint dengan nilai
TRUE. Properti Expression akan didefinisikan saat runtime.
7. Pada QuickReport, klik-ganda properti bands. Isi HasSummary
dengan nilai TRUE (atau klik-ganda pada QuickReport sehingga
menampilkan Report Settings dan beri tanda centang di bagian
Summary pada group bands). Tambahkan QRLabel dan isi
properti caption dengan Total. Tambahkan juga QRExpr dan
beri nama dengan QRExprTotal. Isi properti ResetAfterPrint
dengan nilai FALSE. Properti Expression akan didefinisikan
pada saat runtime.
Setelah semua komponen, termasuk garis-garis (menggunakan
QRShape), diatur tata letaknya, kita mengambil data melalui
ADOQuery1 dan ADOConnection, kemudian menampilkannya ke
report melalui QRDBText dengan mendefinisikan properti DataField.
procedure TFrmLapJumlahBuku.FormCreate(Sender: TObject);
begin
try
DM.ADOConnection.BeginTrans;
With ADOQuery1 do
begin
Active := FALSE;
SQL.Text := 'SELECT B.KODE_BUKU, B.JUDUL, ' +
'P.NAMA as PENERBIT, B.CATEGORY, B.JUMLAH '
+
'FROM BUKU B, PENERBIT P ' +
'WHERE B.KODE_PENERBIT = P.KODE_PENERBIT ' +
'ORDER BY JUDUL';
Active := TRUE;
end;

252

DM.ADOConnection.CommitTrans;
except
DM.ADOConnection.RollbackTrans;
end;
QRGroupHeader.Expression := 'UPPER(Copy(ADOQuery1.JUDUL, 1,
1))';
QRExprTotalGroup.Expression := 'SUM(ADOQuery1.Jumlah)';
QRExprTotal.Expression := 'SUM(ADOQuery1.Jumlah)';
QRDBKodeBuku.DataField := ADOQuery1.Fields[0].DisplayName;
QRDBJudul.DataField := ADOQuery1.Fields[1].DisplayName;
QRDBPenerbit.DataField := ADOQuery1.Fields[2].DisplayName;
QRDBCategory.DataField := ADOQuery1.Fields[3].DisplayName;
QRDBJumlah.DataField := ADOQuery1.Fields[4].DisplayName;
end;

Seperti biasa, ambil data dari database dengan ADOQuery1,


connection dan DM.ADOConnection dengan statement SQL.
Lalu isi properti Expression dari QRGroupHeader (untuk grup) dan
kedua QRExpr, yaitu QRExprTotalGroup dan QRExprTotal seperti
dibawah ini:
QRGroupHeader.Expression := 'UPPER(Copy(ADOQuery1.JUDUL, 1, ))';
QRExprTotalGroup.Expression := 'SUM(ADOQuery1.Jumlah)';
QRExprTotal.Expression := 'SUM(ADOQuery1.Jumlah)';

Terakhir, isi properti DataField pada semua QRDBText sesuai field


yang akan ditampilkan dari frield-field yang ada pada ADOQuery,
yaitu disesuaikan statement SQL yang didefinisikan.
Laporan Pendapatan Denda
Bagan outputnya adalah seperti berikut:

QuickReport

Band
Page
Header
Title
Group
Header
Detail Band

LAPORAN DEMO PERPUSTAKAAN


Jumlah Buku Tersedia Di Perpustakaan
No Pinjam:
Tanggal
No Pinjam Tanggal
No Anggota: No Anggota Kembali:
No Anggota
Nama Anggota:
Kode Buku

Judul

Telat

Denda Buku

Kode_Buku

Judul

Telat

Denda Buku

253

Sub Denda

Group
Footer
Group
Header

No Pinjam : No Pinjam Tanggal Kembali: Tanggal


No Anggota : No Anggota Nama Anggota: Nama Aggt
Kode_Buku

Judul

Telat

Denda Buku

Kode_Buku

Judul

Telat

Denda Buku

Detail Band

Group
Footer
Summary

Sub Denda Sub Denda


Total Pendapatan Denda Total Denda

Gambar 5.10 Form laporan Pendapatan Denda

Untuk report pendapatan denda, kita akan mencoba melakukan


penyeleksian menggunakan StoredProcedure yang akan kita buat
pada SQL Servernya.
Mengapa kita memilih menggunakan Stored Procedure?

254

Stored Procedure berjalan pada sisi server sehingga proses


pengambilan datapun akan lebih cepat dengan asumsi spesifikasi
perangkat keras server lebih tinggi dibandingkan clientnya.
Kita akan membuat tiga StoredProcedure, yaitu:
1. LAP_PEND_DENDA_PERTANGGAL
2. LAP_PEND_DENDA_PERBULAN
3. LAP_PEND_DENDA_PERPERIODE
o Pembuatan Stored Procedure
Pada Enterprise Manager:
Cara untuk membuatnya sama seperti membuat view, yaitu dapat
menggunakan SQL Query Analyzer dan memasukan statement SQLnya. Selain itu, dapat juga dengan membuat Strored Procedure baru
pada database Perpustakaan menggunakan Enterprise Manager.
Setelah itu masukkan statement SQL dibawah ini untuk ketiga stored
procedure.
Stored Procedure untuk Laporan Pendapatan Denda Per Tanggal
CREATE Procedure LAP_PEND_DENDA_PERTANGGAL
@Tanggal datetime as
select distinct DP.No_Pinjam, A.No_Anggota,
(convert(varchar,day(DP.Tanggal_Kembali)) + ' ' +
convert(varchar,datename(month,DP.Tanggal_Kembali)) + ' ' +
convert(varchar,year(DP.Tanggal_Kembali))) as Tanggal_Kembali,
A.Nama as [Nama Anggota], DP.Kode_Buku, B.Judul,
convert(varchar,
datediff(day, DP.Tanggal_Pinjam, DP.Tanggal_Kembali))
+ ' Hari' as TELAT,
(select Denda from Detail_Peminjaman where
Kode_Buku = DP.Kode_Buku and No_Pinjam = DP.No_Pinjam) as
[Denda Buku],
(select sum(Denda) from Detail_Peminjaman
where No_Pinjam = DP.No_Pinjam
group by No_Pinjam)
as [SUB Denda],
(select sum(Denda) from Detail_Peminjaman) as [TOTAL Denda]
from Detail_Peminjaman DP inner join Peminjaman P
on DP.No_Pinjam = P.No_Pinjam inner join Anggota A
on A.No_Anggota = P.No_Anggota inner join Buku B
on B.Kode_Buku = DP.Kode_Buku
where DP.Tanggal_Kembali is not NULL and DP.Denda <> 0 and
datediff(day, DP.Tanggal_Kembali, @Tanggal) = 0
group by DP.No_Pinjam, A.No_Anggota, A.Nama, DP.Kode_Buku,
B.Judul, DP.Tanggal_Pinjam, DP.Tanggal_Kembali

255

Stored Procedure untuk Laporan Pendapatan Denda Per Bulan


CREATE Procedure LAP_PEND_DENDA_PERBULAN
@TanggalBulan datetime
as
select distinct DP.No_Pinjam, A.No_Anggota,
(convert(varchar,day(DP.Tanggal_Kembali)) + ' ' +
convert(varchar,datename(month,DP.Tanggal_Kembali)) + ' ' +
convert(varchar,year(DP.Tanggal_Kembali))) as Tanggal_Kembali,
A.Nama as [Nama Anggota],
DP.Kode_Buku, B.Judul,
convert(varchar, datediff(day, DP.Tanggal_Pinjam,
DP.Tanggal_Kembali)) + ' Hari' as TELAT,
(select Denda from Detail_Peminjaman where Kode_Buku =
DP.Kode_Buku and
No_Pinjam = DP.No_Pinjam) as [Denda Buku],
(select sum(Denda) from Detail_Peminjaman where No_Pinjam =
DP.No_Pinjam
group by No_Pinjam) as [SUB Denda],
(select sum(Denda) from Detail_Peminjaman) as [TOTAL Denda]
from Detail_Peminjaman DP inner join Peminjaman P
on DP.No_Pinjam = P.No_Pinjam inner join Anggota A
on A.No_Anggota = P.No_Anggota inner join Buku B
on B.Kode_Buku = DP.Kode_Buku
where DP.Tanggal_Kembali is not NULL and DP.Denda <> 0 and
month(DP.Tanggal_Kembali) = month(@TanggalBulan)
group by DP.No_Pinjam, A.No_Anggota, A.Nama, DP.Kode_Buku,
B.Judul,
DP.Tanggal_Pinjam, DP.Tanggal_Kembali

Stored Procedure untuk Laporan Pendapatan Denda Per Periode


CREATE Procedure LAP_PEND_DENDA_PERPERIODE
@TanggalFrom datetime,
@TanggalTo datetime
as
select distinct DP.No_Pinjam, A.No_Anggota,
(convert(varchar,day(DP.Tanggal_Kembali)) + ' ' +
convert(varchar,datename(month,DP.Tanggal_Kembali)) + ' ' +
convert(varchar,year(DP.Tanggal_Kembali))) as Tanggal_Kembali,
A.Nama as [Nama Anggota],
DP.Kode_Buku, B.Judul,
convert(varchar, datediff(day, DP.Tanggal_Pinjam,
DP.Tanggal_Kembali))
+ ' Hari' as TELAT,
(select Denda from Detail_Peminjaman where
Kode_Buku = DP.Kode_Buku and No_Pinjam = DP.No_Pinjam) as
[Denda Buku],
(select sum(Denda) from Detail_Peminjaman where No_Pinjam =
DP.No_Pinjam
group by No_Pinjam) as [SUB Denda],
(select sum(Denda) from Detail_Peminjaman) as [TOTAL Denda]
from Detail_Peminjaman DP inner join Peminjaman P
on DP.No_Pinjam = P.No_Pinjam inner join Anggota A
on A.No_Anggota = P.No_Anggota inner join Buku B
on B.Kode_Buku = DP.Kode_Buku

256

where DP.Tanggal_Kembali is not NULL and DP.Denda <> 0 and


DP.Tanggal_Kembali BETWEEN @TanggalFrom and
@TanggalTo
group by DP.No_Pinjam, A.No_Anggota, A.Nama,
DP.Kode_Buku, B.Judul,
DP.Tanggal_Pinjam, DP.Tanggal_Kembali

Gambar 5.11 Stored Procedure pada Enterprise Manager

Gambar 5.12 Stored Procedure pada SQL Query Anlyzer

@Tanggal, @TanggalBulan, @TanggalFrom, dan @TanggalTo adalah


parameter stored procedure. Parameter ini didefinisikan atau
dideklarasikan terlebih dahulu setelah statement Create Procedure
NamaProcedure. Pendefinisian parameter juga memerlukan tipe data
dari parameter tersebut. Keempat parameter tersebut didefinisikan
sebagai input dari statement SQL tersebut dan pada kode program
kita masukkan parameter sesuai input user.

257

Kita dapat menggunakan komponen ADOStoredProc untuk


pemanggilan Stored Procedure yang dalam contoh diletakkan pada
datamodule (DM.ADOStoredProc).
Pada saat frmLapPendapatanDenda menjalankan event OnCreate
kita dapat mengatur ProcedureName (nama prosedur yang akan
dieksekusi) dan mendefinisikan parameter-parameter sesuai yang
ada pada prosedur-prosedur yang bersangkutan.
With DM.ADOStoredProc, FrmLaporanBuku do
begin
case FrmLaporanBuku.RGPendDenda.ItemIndex of
0: begin
DM.ADOStoredProc.Active := FALSE;
Parameters.Clear;
ProcedureName := 'LAP_PEND_DENDA_PERTANGGAL';
Parameters.CreateParameter('@Tanggal',
ftDateTime, pdInput, 50,
DTPTanggal.DateTime);
QRLblTitle.Caption := 'Pendapatan Denda Tanggal
' +
FormatDateTime('dd MMMM
yyyy',DTPTanggal.DateTime);
end;
1: begin
DM.ADOStoredProc.Active := FALSE;
Parameters.Clear;
ProcedureName := 'LAP_PEND_DENDA_PERBULAN';
Parameters.CreateParameter('@TanggalBulan',
ftDateTime, pdInput, 50,
DTPBulan.DateTime);
QRLblTitle.Caption := 'Pendapatan Denda Bulan '
+
FormatDateTime('mmmm',
DTPBulan.DateTime);
end;
2: begin
DM.ADOStoredProc.Active := FALSE;
Parameters.Clear;
ProcedureName := 'LAP_PEND_DENDA_PERPERIODE';
Parameters.CreateParameter('@TanggalFrom',
ftDateTime, pdInput, 50,
DTPFrom.DateTime);
Parameters.CreateParameter('@TanggalTo',
ftDateTime, pdInput, 50,
DTPTo.DateTime);
QRLblTitle.Caption := 'Pendapatan Denda Periode
' +
FormatDateTime('dd MMMM
yyyy',DTPFrom.DateTime) +
' S/D ' +
FormatDateTime('dd MMMM
yyyy',DTPTo.DateTime);
end;
end;
end;
try

258

DM.ADOConnection.BeginTrans;
with DM.ADOStoredProc do
begin
Active := FALSE;
Active := TRUE;
end;
DM.ADOConnection.CommitTrans;
except
DM.ADOConnection.RollbackTrans;
end;

Sebelum parameter dibuat, tutup terlebih dahulu ADOStoredProc,


lalu kosongkan parameter pada ADOStoredProc. Setelah itu, buatlah
parameter dengan CreateParameter.
Pada metode CreateParameter terdapat lima parameter. Parameter
pertama adalah nama parameternya (string) dan kita buat sesuai
dengan parameter yang ada pada Stored Procedure yang telah dibuat
pada SQL Server. Parameter kedua adalah tipe data dari parameter.
Parameter ketiga adalah jenis parameter. Kita menggunakan
parameter hanya untuk input, karenanya isi dengan pdInput.
Parameter keempat adalah ukuran (size) dari parameter yang akan
dibuat. Parameter yang terakhir adalah variabel inputnya.
Setelah itu, seperti pada report-report yang lain, aturlah Property
Expression dari QRGroup (Group header band) agar group header
dicetak setiap kali NO_PINJAM berubah. Hal ini dapat diatur dengan
kode program di bawah:
QRGroup.Expression := 'DM.ADOStoredProc.NO_PINJAM';

Atur Property Datafield pada masing-masing QRDBText menurut


field-field yang ada pada ADOStoredProc.
{HASIL Query pada StoredProc NO_PINJAM(0), NO_ANGGOTA(1),
TANGGAL_KEMBALI(2), NAMA ANGGOTA(3), KODE BUKU(4), JUDUL(5),
TELAT(6), DENDA BUKU(7), SUBDENDA(8), TOTAL DENDA(9)}
with DM.ADOStoredProc do
begin
QRDBNoPinjam.DataField := Fields[0].DisplayName;
QRDBNoAnggota.DataField :=
FieldByName('NO_ANGGOTA').DisplayName;
QRDBTglKembali.DataField := Fields[2].DisplayName;
QRDBNamaAnggota.DataField := Fields[3].DisplayName;
QRDBKodeBuku.DataField := Fields[4].DisplayName;
QRDBJudul.DataField := Fields[5].DisplayName;
QRDBTelat.DataField := Fields[6].DisplayName;
QRDBDendaBuku.DataField := Fields[7].DisplayName;
QRDBSubDenda.DataField := Fields[8].DisplayName;
QRDBTotalDenda.DataField := Fields[9].DisplayName;

259

end;

o Pemanggilan Report
Semua report yang ada pada contoh dipanggil melalui dua form,
yaitu frmLaporanAnggota dan frmLaporanBuku. Untuk memanggil
report, kita dapat menggunakan metode Preview Report yang
disiapkan oleh Quick Report.
Preview Report
Ada tiga metode atau prosedur untuk menampilkan report (preview)
ke layar:
Metode

Keterangan

Contoh

Preview

Membuat
report
dan
menampilkannya
ke
layar.
Setelah report muncul, user dapat
mencetaknya.

QuickRep1.Pre
view;

PreviewModa
l

Sama seperti preview, tetapi


ketika
menggunakan
PreviewModal,
report
dibuat
tanpa background thread karena
beberapa driver database tidak
mendukung thread safe yang
akan
menyebabkan
kemungkinan munculnya error
atau program akan crash.

QuickRep1.Pre
viewModal;

PreviewModel
ess

Sama
seperti
PreviewModal,
tetapi program akan terus
mengeksekusi baris program
setelah Metode PreviewModeLess
dipanggil, yaitu saat report
sedang dibuat dan ditampilkan.

QuickRep1.Pre
viewModeless;

260

Mencetak ke Printer
Untuk langsung mencetak report ke printer tanpa terlebih dahulu
menampilkannya ke layar (preview), prosedur Print dapat langsung
dipanggil.
QuickRep1.Print;

Gambar 5.13 Form Laporan Anggota

Gambar 5.14 Form Laporan Buku

Sintaks berikut ada pada event OnClick dalam SpeedCetak


FrmLaporanAnggota:
procedure TFrmLaporanAnggota.SpeedCetakClick(Sender: TObject);
begin
case PageControl1.ActivePageIndex of
0: begin

261

case RGGroupBy.ItemIndex of
0: begin
SpeedCetak.Enabled := FALSE;
if frmLapAgtAktif = nil then
Application.CreateForm(TfrmLapAgtAktif,
frmLapAgtAktif);
FrmLapAgtAktif.QuickRep1.PreviewModal;
if FrmLaporanAnggota = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
1: begin
SpeedCetak.Enabled := FALSE;
if FrmLapAgtTidakAktif = nil then
Application.CreateForm(TFrmLapAgtTidakAktif,
FrmLapAgtTidakAktif);
FrmLapAgtTidakAktif.QuickRep1.PreviewModal;
if FrmLaporanAnggota = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
2: begin
SpeedCetak.Enabled := FALSE;
if FrmLapSemuaAgt = nil then
Application.CreateForm(TFrmLapSemuaAgt,
FrmLapSemuaAgt);
FrmLapSemuaAgt.QuickRep1.PreviewModal;
if FrmLaporanAnggota = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
end;
end;
1: begin
if CheckPinjam.Checked then
begin
SpeedCetak.Enabled := FALSE;
if FrmLapAgtListBuku = nil then
Application.CreateForm(TFrmLapAgtListBuku,
FrmLapAgtListBuku);
FrmLapAgtListBuku.QuickRep1.PreviewModal;
if FrmLaporanAnggota = nil then exit;
SpeedCetak.Enabled := TRUE;
end else if CheckTelat.Checked then
begin
SpeedCetak.Enabled := FALSE;
if FrmLapAgtTelatKembalikanBuku = nil then
Application.CreateForm(TfrmLapAgtTelat
KembalikanBuku,FrmLapAgtTelatKembalikanBuku);
FrmLapAgtTelatKembalikanBuku.QuickRep1.PreviewModal;
if FrmLaporanAnggota = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
end;
end;
end;

Untuk menampilkan report inti pada kode program di atas, pertamatama kita buat form report tempat report yang akan ditampilkan
berada. Setelah itu baru memanggil dengan prosedur PreviewModal.

262

if FrmLapAgtTelatKembalikanBuku = nil then


Application.CreateForm(TFrmLapAgtTelatKembalikanBuku,
FrmLapAgtTelatKembalikanBuku);
FrmLapAgtTelatKembalikanBuku.QuickRep1.PreviewModal;

Begitu juga pada FrmLaporanBuku, sama seperti pada


FrmLaporanAnggota, form-form tersebut hanya menyeleksi form
mana yang akan dibuat untuk menampilkan report yang ada pada
form tersebut, sesuai dengan yang user pilih.
Kode program lengkap pada event
FrmLaporanBuku adalah sebagai berikut:

OnClick

SpeedCetak

procedure TFrmLaporanBuku.SpeedCetakClick(Sender: TObject);


begin
case PageControl1.ActivePageIndex of
0: begin
SpeedCetak.Enabled := FALSE;
if FrmLapBuku = nil then
Application.CreateForm(TFrmLapBuku, FrmLapBuku);
FrmLapBuku.QuickRep1.PreviewModal;
if FrmLaporanBuku = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
1: case RGGroupPersediaan.ItemIndex of
0: begin
SpeedCetak.Enabled := FALSE;
if FrmLapJumlahBuku = nil then
Application.CreateForm(TFrmLapJumlahBuku,
FrmLapJumlahBuku);
FrmLapJumlahBuku.QuickRep1.PreviewModal;
if FrmLaporanBuku = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
1: begin
SpeedCetak.Enabled := FALSE;
if FrmLapBukuYgKeluar = nil then
Application.CreateForm(TFrmLapBukuYgKeluar,
FrmLapBukuYgKeluar);
FrmLapBukuYgKeluar.QuickRep1.PreviewModal;
if FrmLaporanBuku = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
end;
2: begin
SpeedCetak.Enabled := FALSE;
if FrmLapPendapatanDenda = nil then
Application.CreateForm(TFrmLapPendapatanDenda,
FrmLapPendapatanDenda);
FrmLapPendapatanDenda.QuickRep1.Preview;
if FrmLaporanBuku = nil then exit;
SpeedCetak.Enabled := TRUE;
end;
end;
end;

263

5.3 Rave Report


Rave Report pada Delphi 7 merupakan Rave versi 5 Borland Edition.
Rave Designer sendiri dapat berjalan jika Delphi 7 juga turut
dijalankan. Kita dapat memanggil Rave Designer dengan mengakses
menu Tools | Rave Designer dari Delphi 7 atau dengan meletakkan
komponen RaveProject (yang ada pada page rave pada component
pallete Delphi), lalu mengklik-kanan komponen tersebut dan memilih
Rave Visual Designer.

5.3.1 Rave Designer


Rave Designer, seperti dijelaskan namanya, digunakan untuk
merancang, mengatur, dan menyimpan report-report yang akan
dibuat. Pada Rave Report, suatu file Rave Project (.rav) dapat berisi
banyak report. Akibatnya dalam satu proyek dapat dibuat banyak
report sesuai yang kita inginkan.

5.3.2 Lingkungan Rave Designer


Di bawah ini adalah tampilan Rave Designer:

Gambar 5.15 Rave Designer

264

Page
Pada gambar Rave Designer di atas, di bagian tengah terdapat page.
Page adalah tempat kita merancang report yang diinginkan. Suatu
page juga mempunyai properti yang dapat diatur pada Property
Panel. Di antaranya adalah properti PageHeight, PageWidth, dan
PaperSize untuk mengatur ukuran kertas, dan juga orientasi kertas
report yang akan dibuat.

Gambar 5.16 Rave Designer Page

Project Tree Panel


Project Tree terletak pada bagian kanan tampilan utama Rave
Designer. Project Tree berfungsi untuk melakukan navigasi proyek
yang dibuat dengan cara menampilkannya dalam bentuk treeview.
Mirip dengan Object Treeview pada Delphi, pada project tree
ditampilkan nama-nama report, Global Pages, dan Data View. Di
bawah node report terdapat page dan di dalam node tersebut juga
terdapat informasi komponen apa saja yang ada dalam page
tersebut.

Gambar 5.17 Project Tree Panel

265

Bila node aktif, tulisan node akan menjadi tebal dan berefek
bayangan berwarna hijau. Pada Project Tree Panel di bawah node
RaveProject terdapat tiga node utama, yaitu:

Report Library
Menampilkan nama-nama report pada proyek yang aktif. Pada
tiap report mungkin saja terdapat lebih dari satu page yang
berisi komponen-komponen.

Global Page Catalog


Berisi report templates dan mengatur report templates yang
dapat berisi komponen-komponen. Report templates dapat
digunakan kembali dengan menggunakan Mirroring.

Data View Dictionary


Menampilkan koneksi-koneksi yang telah didefinisikan. Data
diambil dari aplikasi melalui koneksi yang ada pada aplikasi
yang bersangkutan.

Property Panel
Property Panel digunakan untuk mengatur properti-properti
komponen yang dipilih. Property Panel berfungsi seperti Object
Inspector pada Delphi.

Gambar 5.18 Property Panel

266

Komponen Toolbar
Terdapat empat komponen toolbar standar, yaitu:
1. Drawing
2. Bar Code
3. Standard
4. Report
o Komponen Drawing
Digunakan untuk keperluan tampilan yang membutuhkan bentuk
seperti garis, kotak, lingkaran, elips, atau gabungan dari komponen
drawing tersebut.

Gambar 5.19 Komponen Drawing

Komponen-komponen tersebut adalah

Line

Hline

Vline

Rectangle

Square

Elipse

Circle

o Komponen Barcode
Terdapat enam komponen barcode, yaitu:

PostNetBarcode

2of5BarCode

Code39BarCode

128BarCode

UPCBarCode

EANBarCode

Gambar 5.20 Komponen Barcode

267

o Komponen Standard
Komponen-komponen ini adalah komponen-komponen yang cukup
sering digunakan, yaitu untuk keperluan menampilkan teks atau
image yang tidak terkait dengan data yang terkoneksi pada
database.

Gambar 5.21 Komponen Standard

Text, digunakan untuk menampilkan teks (satu baris). Teks


dapat diubah melalui properti text.

Memo, digunakan untuk menampilkan beberapa baris teks.

Section yang dapat menampung beberapa komponen sekaligus


(seperti komponen panel pada Delphi).

Bitmap dan MetaFile, digunakan untuk menampilkan images.

FontMaster, digunakan untuk mendefinisikan font standar untuk


bagian dari report, seperti header, body, dan footer.

PageNumInit, untuk penomoran page.

o Komponen Report
Terdapat 11 komponen report, yaitu:

DataText

Region

CalcOp

DataMemo

Band

CalcTotal

CalcText

DataBand

CalcController

DataMirrorSection

DataCycle

Gambar 5.22 Komponen Report

268

Titik merah pada sudut kanan atas ikon menandakan bahwa


komponen tersebut adalah komponen data-aware yang dapat
menampilkan data dari database. Setiap komponen mempunyai
properti DataView untuk berinteraksi dengan database.
Komponen berwarna hijau adalah komponen nonvisual dan tidak
terlihat pada Page Designer, tetapi terlihat pada Project Tree Panel.
Komponen Band dan DataBand harus diletakkan bersama region.
Sebelum meletakkan Band atau Databand pada Page Designer,
letakkan region terlebih dahulu. Selanjutnya letakkan Band atau
DataBand pada region tersebut. Suatu region dapat menampung
banyak Band dan jumlah region pada Page Designer dapat lebih dari
satu.
Page Rave Report

Gambar 5.23 Page Rave Report

Ada dua tipe obyek pada Rave, yaitu komponen Output dan Report
Class.
o Komponen Output
Icon

Nama
TrvSystem

Keterangan
Merupakan komponen yang
menggabungkan fungsi tiga
komponen,
yaitu
TRvRenderPrinter,
TRvRenderPreview,
dan
TRvNDRWriter.
Melalui
komponen ini kita dapat
mengatur preview report, setting
printer, dan setting lainnya
secara terintegrasi dalam satu
komponen.
269

Properti DefaultDes mengatur


agar
report
yang
dibuat
ditampilkan
di
layar
(rdPreview), dicetak ke printer
(rdPrinter), maupun dicetak
atau disimpan pada file (rdFile).
TRvNDRWriter

Membuat stream atau file


format NDR pada saat eksekusi
report.

TRvRenderPreview

Menampilkan dialog preview


untuk stream atau file NDR.

TRvRenderPDF

Mengkonversi Stream atau file


NDR ke format PDF.

TRvRenderHTML

Mengkonversi Stream atau file


NDR ke format HTML.

TRvRenderRTF

Mengkonversi Stream atau file


NDR ke format RTF.

TRvRenderText

Mengkonversi Stream atau file


NDR ke format Teks.

o Report Class
Icon

Nama
TRvProject

270

Keterangan
Menghubungkan
aplikasi
dengan report proyek yang
telah dibuat pada Rave
Designer.
Mempunyai

properti ProjectFile yang


dapat diisi path dan nama
file Rave Project (.rav).
Properti engine dapat diisi
dengan
TrvSystem.
TrvProject
juga
dapat
memperoleh daftar namanama report yang ada pada
file
rave
project
dan
mengeksekusi suatu report
tertentu berdasarkan nama
report atau FullName dari
report tersebut.
TRvCustomConnection

Menghubungkan
custom
data yang dihasilkan event
pada DirectDataViews dan
dibuat pada Rave Visual
Designer.

TRvDataSetConnection

Menghubungkan data pada


TDataSet atau turunannya
dengan
DirectDataViews
yang dibuat pada Rave
Visual Designer.

TRvTableConnection

Menghubungkan komponen
TTable
dengan
DirectDataViews yang dibuat
pada Rave Visual Designer.

TRvQueryConnection

Menghubungkan komponen
TQuery
dengan
DirectDataViews yang dibuat
pada Rave Visual Designer.

271

Band pada Rave Report


Untuk mendefinisikan band, kita dapat menggunakan properti
BandStyle yang akan menampilkan Band Style Editor. Bentuk editor
ini dapat dilihat di Gambar 5.24.
Pada bagian kiri editor, ditampilkan urutan pencetakan Band. Yang
digarisbawahi adalah band yang sedang aktif, yaitu band yang
sedang dipilih. Pada grup box Print Location ditampilkan checkbox
jenis-jenis band. Gunanya adalah untuk menentukan sebagai band
yang mana saja band akan dicetak. Pada group box Occurrence kita
dapat memilih apakah band tersebut akan dicetak hanya pada
halaman pertama (First(1)), halaman baru (New Page(P)), atau
kolom baru ( New Column (C)).

Gambar 5.24 Band Style Editor

5.3.3 Laporan Anggota Aktif


Report ini terdapat pada RepAnggota.rav.
pembuatannya adalah sebagai berikut:

Langkah-langkah

1. Letakkan ADOQuery (beri nama ADOQueryLapAgtAktif) pada


DataModule (DM) yang telah ada. Isi properti Connection-nya
272

dengan ADOConnection1 (yang sudah terkoneksi ke database


Perpustakaan, dan pastikan nilai dari properti Connected adalah
TRUE). Kemudian masukkan query berikut pada properti SQL:
SELECT AGT.NO_ANGGOTA, AGT.NAMA,
CASE AGT.JENIS_KELAMIN
WHEN '1' THEN 'PRIA'
ELSE 'WANITA'
END AS JK, AGT.ALAMAT1, AGT.KOTA, AGT.TELP
FROM ANGGOTA AGT
WHERE AGT.AKTIF= '1' ORDER BY AGT.NO_ANGGOTA

Isi properti Active dengan nilai TRUE. Selanjutnya letakkan


RvDataSetConnection yang berada pada Page Rave dan beri
nama RvDataSetConnectionLapAgtAktif. Isi properti DataSet
menjadi ADOQueryLapAgtAktif.
2. Jalankan Rave Designer melalui menu Tools | Rave Designer
pada Delphi.
3. Setelah itu, masuk pada Rave Designer, dan buatlah proyek
baru dari menu File | New. Hasilnya akan terlihat seperti Gambar
5.25.

Gambar 5.25 Project baru pada Rave Designer

4. Perhatikan Gambar 5.26. Namakan report baru tersebut


sebagai RepAnggotaYgAktif. Caranya klik tanda + Report
Library, lalu pilih Report1 pada Project Tree, dan ketikkan
RepAnggotatYgAktif di properti Name pada Property Panel.

273

Gambar 5.26 Pemberian Nama pada Report Baru

5. Untuk membuat report anggota, kita memerlukan data dari


database. Untuk itu kita memerlukan DataView. Caranya, klik
Menu File | New Data Object. Setelah itu pilih Direct Data
View, lalu klik Next. Lihat Gambar 5.27 untuk lebih jelasnya.

Gambar 5.27 Data Connection Direct Data View

Selanjutnya
akan
tampil
koneksi
yang
aktif
(RvDataSetConnectionLapAgtAktif) pada aplikasi yang sedang
kita buat. Pilih Active Data Connection tersebut, lalu klik Finish.

Gambar 5.28 Data Connection Active Data Connection

274

6. Setelah itu terbentuklah DataView dengan nama DataView1


yang terlihat seperti di bawah ini.

Gambar 5.29 Data View Anggota Yang Aktif Berikut Field-fieldnya

Setelah itu, ganti nama DataView1 menjadi DVAnggotaYgAktif


(gambar sebelah kanan).
7. Setelah DataView sudah ada, report sudah siap dirancang.
Letakkanlah komponen Region (pada page report) pada page
yang aktif sehingga seperti Gambar 5.30 (sebelah kanan):

Gambar 5.30 Region pada Page Report Yang Aktif

275

8. Pada Region, letakkan 2 Band dan 1 DataBand.


No

Komponen

Property Name

Property BandType

Band

TitleBand

Body Header

Band

BodyHeaderBand

Body Header

DataBand

DetailBand

Detail

TitleBand
Digunakan untuk memberi judul pada laporan.
Properti TitleBand:
Properti

Nilai

BandStyle

Body Header

ControllerBand

DetailBand

Pada TitleBand letakkan dua komponen text (page standard).


Property
Name

Komponen

Property Text

Text

TitleText1

LAPORAN PERPUSTAKAAN

Text

TitleText2

Anggota Yang Masih Aktif

Atur letak dan ukuran huruf (font) serta beri nama yang sesuai.
BodyHeaderBand
Berfungsi sebagai header nama-nama field (pada Quick Report
Column Header), band ini akan dicetak setiap kali dibuat
halaman baru.

276

Properti HeaderBand :
Properti

Nilai

BandStyle

Body Header

ControllerBand

DetailBand

Tambahkan enam
sebagai berikut:

Text,

Komponen

masing-masing

Name

dengan

properti

Text

Text

TextNoAnggota

No Anggota

Text

TextNama

Nama

Text

TextJK

JK

Text

TextAlamat

Alamat

Text

TextKota

Kota

Text

TextTelp

Telp

Dengan komponen VLine dan Rectangle, Anda dapat membuat


pembatas (seperti tabel). Untuk itu tambahkan dan aturlah agar
semua komponen tersusun rapi.
DetailBand
Properti DetailBand:
Property

Nilai

BandStyle

Detail

DataView

DVAnggotaYgAktif
277

Tambahkan enam DataText (komponen pada page Report)


dalam band tersebut dengan properti masing-masing:
Komponen

DataText

DataText

DataText

DataText

DataText

DataText

Name
DataTextN
oAnggota

DataTextN
ama

DataTextJ
K

DataTextAl
amat

DataTextK
ota

DataTextT
elp

Property

Nilai

DataView

DVAnggotaYgAktif

DataField

NO_ANGGOTA

DataView

DVAnggotaYgAktif

DataField

NO_ANGGOTA

DataView

DVAnggotaYgAktif

DataField

NO_ANGGOTA

DataView

DVAnggotaYgAktif

DataField

NO_ANGGOTA

DataView

DVAnggotaYgAktif

DataField

NO_ANGGOTA

DataView

DVAnggotaYgAktif

DataField

NO_ANGGOTA

Dengan komponen VLine dan HLine, Anda dapat membuat


pembatas (seperti tabel). Untuk itu tambahkan dan aturlah
semua komponen agar tersusun rapi. Properti pada Hline dan
Vline yang perlu diperhatikan adalah properti Anchor yang
menentukan bagaimana line tersebut akan dicetak pada band
tempat komponen Line tersebut diletakkan. Properti tersebut
juga ada pada komponen lain.

278

Band

Page
Region

Body
Header
(Band)
Body
Header
(Band)
Detail
(Data
Band)

LAPORAN DEMO PERPUSTAKAAN


Anggota Yang Masih Aktif

NoAnggot
a

Nama

JK

Alamat

Kota

Telp

[NoAnggo
ta]
.
.
.

[Nam
a]
.
.
.

[JK
]

...

[Alama
t]
.
.
.

[Kota
]
.
.
.

[Telp]
.
.
.

Bagian yang diapit tanda [ dan ] adalah komponen DataText


yang dihubungkan pada suatu field tertentu pada database melalui
DataView.
Untuk melihat hasilnya (preview report yang kita buat), pilih menu
File | Execute Report atau gunakan shortcut F9 (seperti shortcut Run
pada Delphi).
Gambar rancangan akhir dapat dilihat pada Gambar 5.31.

Gambar 5.31 Laporan Anggota Yang Masih Aktif

279

Setelah dieksekusi (F9), akan tampil dialog Output Options:

Gambar 5.32 Output Options

Setelah itu klik OK (Preview), sehingga muncul tampilan seperti


Gambar 5.33.

Gambar 5.33 Report Preview

Grouping dan Summary pada Laporan


Report
ini
terdapat
pada
RepLapJumlahBuku pada report.
280

RepBuku.rav.

Beri

nama

Langkah pertama sampai dengan ketujuh pada dasarnya sama


dengan contoh report di atas. Untuk membuat koneksi dan DataView
pada Rave Designer, tambahkan ADOQuery pada DataModule
dalam proyek perpustakaan yang telah ada. Beri nama ADOQuery
dengan ADOQueryLapJumlahBuku. Isi properti Connection dengan
ADOConnection yang telah dihubungkan dengan database
Perpustakaan melalui Connection String.
Pada properti SQL, masukkan query sebagai berikut:
SELECT B.KODE_BUKU, B.JUDUL, P.NAMA as PENERBIT,
B.CATEGORY, B.JUMLAH, UPPER(SUBSTRING(B.JUDUL,1,1)) AS [HURUF
JUDUL]
FROM BUKU B, PENERBIT P WHERE B.KODE_PENERBIT = P.KODE_PENERBIT
ORDER BY JUDUL

Isi properti Active dengan nilai TRUE. Selanjutnya letakkan


RvDataSetConnection yang berada pada page Rave, beri nama
RvDataSetConnectionLapJumlahBuku dan isi properti DataSet
dengan ADOQueryLapJumlahBuku.
Setelah itu masuk ke dalam Rave Designer dan buat report baru (File
| New Report). Namakan report tersebut dengan RepLapJumlahBuku
(Property Name).
Untuk DataView, gunakan RvDataSetConnectionLapJumlahBuku
(koneksi yang telah aktif pada Delphi). Beri nama DataView tersebut
dengan DVLapJumlahBuku.
Kemudian rancanglah report untuk memberikan laporan jumlah buku
yang tersedia dengan gambaran seperti di bawah ini:

Page

Band

Region
Body
Header
(Band)
Group
Header
(Band)

LAPORAN DEMO PERPUSTAKAAN


Jumlah Buku Yang Tersedia Di Perpustakaan

Judul:
Kode
Buku

[<Huruf Judul>]
Judul

Penerbi
t

Categor
y

Persedia
an

281

Detail
(Data
Band)

[KodeBuk
u]
.
.
.

[Judul
]
.
.
.

Group
Footer
(Band)
Body
Footer
(Band)

[Penerb
[Categor
it]
y]
.
.
.
.
.
.
Subtotal

Grandtotal

[Persedia
an]
.
.
.
SubTotal

GrandTotal

Komponen yang diapit tanda [ dan ] adalah komponen DataText


yang dihubungkan pada suatu field tertentu pada database melalui
DataView, sedangkan SubTotal dan GrandTotal adalah komponen
CalcText.
Seperti gambaran di atas, pada report RepLapJumlahBuku terdapat
empat komponen Band, dan satu DataBand. Band-band tersebut
adalah:
Name

TitleBand

GroupHeader
Band

DetailDataBa
nd

282

Komponen

Properti

Nilai

BandTypes

Body Header (B)

ControllerBand

DetailDataBand

BandTypes

Group Header (G)

ControllerBand

DetailDataBand

GroupDataVie
w

DVLapJumlahBuku

GroupKey

<HURUF JUDUL>

BandTypes

Detail (D)

DataView

DVLapJumlahBuku

Band

Band

DataBand

GroupFooter
Band

BodyFooterB
and

Band

BandTypes

Group Footer (g)

ControllerBand

DetailDataBand

GroupDataVie
w

DVLapJumlahBuku

GroupKey

<HURUF JUDUL>

BandTypes

Body Footer (b)

ControllerBand

DetailDataBand

Band

Pada GroupHeaderBand dan GroupFooterBand didefinisikan


GroupKey
<HURUF
JUDUL>
(field)
dari
DataView
DVLapJumlahBuku. Field <HURUF JUDUL> adalah huruf pertama
dari
judul.
Dengan
demikian
GroupHeaderBand
dan
GroupFooterBand akan dicetak setiap kali field huruf judul berubah.
Ini dimaksudkan agar report mencetak informasi sesuai dengan huruf
pertama judul (pengelompokan dengan huruf pertama dari judul
buku).
DataText pada DetailDataBand:
Name

DataTextKodeBuku

DataTextJudul

DataTextPenerbit

Komponen

Properti

Nilai

DataView

DVLapJumlahBuku

DataField

KODE_BUKU

DataView

DVLapJumlahBuku

DataField

JUDUL

DataView

DVLapJumlahBuku

DataField

PENERBIT

DataText

DataText

DataText

283

DataTextCategory

DataTextPersediaan

DataView

DVLapJumlahBuku

DataField

CATEGORY

DataView

DVLapJumlahBuku

DataField

JUMLAH

DataText

DataText

Pada GroupFooterBand terdapat CalcText yang digunakan untuk


mencetak subtotal. Properti pada CalcTextSubTotal yang diatur
adalah:

ControllerBand

DetailDataBand.

DataView

DVLapJumlahBuku.

DataField

JUMLAH

CalcType

ctSUM

Dengan demikian pada CalcText akan tercetak subtotal dari recordrecord yang dicetak pada Group yang berbeda-beda (group
berdasarkan huruf pertama dari judul) yang telah didefinisikan pada
GroupHeaderBand dan GroupFooterBand.
Pada BodyFooterBand juga terdapat komponen CalcText untuk
GrandTotal. Properti yang harus diatur sama dengan CalcText pada
GroupFooterBand, yaitu:

ControllerBand

DetailDataBand.

DataView

DVLapJumlahBuku.

DataField

JUMLAH

CalcType

ctSUM

CalcType menentukan operasi apa yang akan dilakukan CalcText. Di


atas digunakan ctSUM untuk operasi penjumlahan. CalcType yang
lain adalah ctAverage (mencari nilai rata-rata), ctMIN/ctMAX
(mencari nilai minimum/maksimum), dan ctCount (mencari jumlah
field/record yang dicetak). GroupFooterBand akan dicetak setelah
GroupHeaderBand.

284

5.3.4 Laporan Pendapatan Denda


Menggunakan Parameter
Pada DataText terdapat properti DataField. Properti DataField
tersebut dapat diisi dengan field atau nama field yang ada pada
DataView.
Untuk itu dapat digunakan DataText Editor (klik button elips pada
Property Panel saat properti DataField dipilih).
Selain dapat mengatur agar DataText menampilkan suatu field dari
DataView, dengan DataText Editor kita dapat memasukkan Report
Variable, Parameter, Post Initialize Variable, atau menggabungkannya
dengan suatu string.
Parameter sendiri dapat dimasukkan sebagai properti DataField.
Properti tersebut nilainya dapat dikirim melalui aplikasi
menggunakan komponen RvProject. Pada contoh berikut kita akan
menggunakan parameter, yaitu menggunakan RepLapDenda yang
ada pada file RepBuku.Rav.

Gambar 5.34 Data Text Editor

RepLapDenda sendiri digunakan untuk menampilkan tiga laporan


denda yang terdiri atas Laporan Pendapatan Denda Pertanggal,
Perbulan, atau Perperiode. Karena semua report mempunyai desain
285

yang sama, kita tidak perlu membuat tiga report yang berbeda. Hal
ini dikarenakan meskipun report ini menggunakan dataset
ADOStoredProc yang memanggil Stored Procedure pada database,
ketiga Stored Procedure tersebut mempunyai result set dengan fieldfield yang sama. Untuk membedakannya, pada subjudul akan
ditampilkan keterangan sesuai dengan stored procedure yang
dipanggil. Untuk keperluan ini dapat digunakan parameter pada
datatext, lalu nilai tersebut (string) dikirimkan.
Di bawah ini adalah gambaran desain RepLapDenda.
Page

Band

Region
Body
Header
(Band)

Group
Header
(Band)

LAPORAN PERPUSTAKAAN
PENDAPATAN DENDA
[Param.SubTitle]
No Pinjam
Tanggal Kembali
No Anggota
Nama
Kode Buku
[KodeBuku]

Detail
(Data
Band)
Group
Footer
(Band)
Body
Footer
(Band)

.
.
.

[NoPinjam]
[Tanggal_Kembali]
[NoAnggota]
[Nama_Anggota]
Judul

[Judul]
.
.
.

Telat
[Telat]
.
.
.
Sub Total

Grand Total

Denda
[<Denda
Buku>]
.
.
.
[<Sub Denda>]

GrandTotal

Bagian yang diapit tanda [ dan ] adalah komponen DataText


yang dihubungkan dengan suatu field tertentu pada database melalui
DataView, sedangkan Grand Total adalah komponen CalcText.

286

Untuk membuat koneksi pada report ini, letakkanlah komponen


ADOStoredProc dan namakan ADOStoredProcLapDenda yang
menggunakan koneksi ADOConnection melalui properti Connection.
Lalu
tambahkan
RvDataSetConnection,
beri
nama
RvDataSetConnectionLapDenda. Selanjutnya, seperti pada report
yang lain, isi properti DataSet menjadi ADOStoredProcLapDenda.
Pada ADOStoredProcLapDenda isi ProcedureName dengan salah
satu nama Stored Procedure yang sudah ada:
LAP_PEND_DENDA_PERBULAN,
LAP_PEND_DENDA_PERTANGGAL, atau
LAP_PEND_DENDA_PERPERIODE).
Karena stored procedure yang telah dibuat memerlukan parameter
untuk dapat mengembalikan result set, isi nilai parameternya.
Misalkan pada ProcedureName diisi dengan storedProcedure
LAP_PEND_DENDA_PERTANGGAL, pilihlah @TanggalBulan pada
parameter (klik tombol elips pada property parameter). Pada properti
Value, isi tanggal agar stored procedure tersebut dapat
mengembalikan result set yang akan memudahkan pada saat desain
menggunakan Rave Designer. Dengan adanya Result Set, jika kita
melakukan Preview maka akan terlihat hasilnya (apakah sesuai data
yang ada pada database).

Gambar 5.35 Property Parameter pada ADOStoredProcLapDenda

287

Setelah itu isi properti Active pada ADOStoredProcLapDenda dengan


nilai TRUE. Setelah koneksi siap, kita dapat membuat dataview pada
Rave Designer, lalu merancangnya seperti gambar di atas. Setelah
membuat report baru (RepLapDenda) dan merancang tampilannya,
buat dataview dari RvDataSetConnectionLapDenda yang sudah
diatur pada Delphi dan beri nama DVLapDenda. Setelah itu kita
dapat merancang report (sesuai keinginan) karena DataView telah
didefinisikan.
Perancangan band, komponen text, dataText, dan komponen pada
report ini sama seperti report-report sebelumnya.
Untuk komponen DataText pada Body Header, isi Param.SubTitle.
DataText ini tidak diisikan dengan Field yang ada pada
DVLapDenda, tetapi diisi dengan Param dengan nama SubTitle
(Param.SubTitle). DataText ini tidak akan dicetak sebelum aplikasi
mengirimkan suatu string. Setelah aplikasi mengirimkan string,
report akan menampilkan/mencetak string yang dikirim aplikasi
pada DataText saat report dieksekusi.
Pemanggilan Report
Untuk dapat mamanggil report yang telah dibuat dan disimpan
dalam file rave project (.rav), dibutuhkan komponen RvProject yang
ada pada page rave pada component pallete.
Langkah-langkahnya adalah sebagai berikut:
1. Letakkan komponen RvProject pada form yang akan memanggil
report (frmLaporanAnggota, frmLaporanBuku, atau form lain).
Tambahkan komponen RvSystem, lalu atur properti Engine
pada komponen RvProject menjadi RvSystem tersebut.
RvSystem mempunyai properti untuk mengatur bagaimana
report yang dipanggil dengan RvProject ditampilkan, ini
termasuk caption dari report yang akan ditampilkan, mengatur
ukuran report saat ditampilkan (maximized, minimized, atau
normal), dan sebagainya.
2. Pada event OnCreate (pada saat form dibuat), aturlah properti
Project File, isi path dan nama file rave project(.rav) berada.
Kemudian buka RvProject dengan Open. Misalkan file tersebut

288

disimpan pada direktori yang sama dengan aplikasi, kode


programnya sebagai berikut:
procedure TFrmLaporanAnggota.FormCreate(Sender: TObject);
begin
..
RvProjectAgt.ProjectFile :=
ExtractFilePath(Application.ExeName) + '\RepAnggota.rav';
RvProjectAgt.Open;
.
end;

3. Sebelum menampilkan atau mengeksekusi report, lakukan


pengambilan data kembali pada DataSet yang digunakan report
agar report akan menampilkan hasil yang up-to-date, lalu
panggil report dengan procedure dan function pada RvProject:

Procedure ExecuteReport(ReportName: String)


Parameter yang harus dimasukkan adalah nama report
yang akan eksekusi yang diberikan pada file rave project
(.rav) yang digunakan RvProject.
Contoh:
RvProjectAgt.ExecuteReport('RepAnggotaYgAktif');

Function SelectReport(ReportName: String;


boolean): boolean dan Procedure Execute.

FullName:

Function SelectReport digunakan untuk memilih report


yang aktif. Nilai kembalian berupa boolean yang
memberitahukan apakah report yang dimaksud terdapat
pada file rave project yang digunakan RvProject.
SelectReport mempunyai dua parameter. Parameter
pertama adalah ReportName, yaitu nama report yang akan
dipilih. Kedua adalah FullName dengan tipe boolean.
FullName menentukan apakah nama report yang akan
dicari berdasarkan properti Name atau FullName (pada
Rave Designer). Jika bernilai FALSE, akan dicari report
dengan nama (properti Name) sesuai dengan parameter
ReportName. Jika bernilai TRUE, report akan diseleksi
dengan FullName dengan mencocokan apakah report yang
mempunyai properti FullName yang sama dengan
parameter ReportName.
289

Procedure Execute digunakan untuk mengeksekusi report


yang aktif.
Contoh:
if RvProjectAgt.SelectReport('RepAnggotaYgAktif', FALSE)
then
RvProjectAgt.Execute;
if RvProjectAgt.SelectReport('Report Laporan Anggota
Tidak Aktif', TRUE) then
RvProjectAgt.Execute;

Contoh lengkapnya:

With DM.ADOQueryLapAgtAktif do
Begin
Active := FALSE;
SQL.Text := 'SELECT AGT.NO_ANGGOTA, AGT.NAMA, ' +
'CASE AGT.JENIS_KELAMIN ' +
'WHEN ' + QuotedStr('1') + 'THEN ' +
QuotedStr('PRIA') + ' ELSE ' +
QuotedStr('WANITA') + 'END AS JK ' +
', AGT.ALAMAT1, ' +
'AGT.KOTA, AGT.TELP FROM ANGGOTA AGT ' +
'WHERE AGT.AKTIF=' + QuotedStr('1') +
ORDER BY AGT.NO_ANGGOTA';
Active := TRUE;
End;
if RvProjectAgt.SelectReport('RepAnggotaYgAktif', FALSE)
then
RvProjectAgt.Execute;

3. Setelah tidak digunakan, tutup RvProject dengan Close.


Misalkan digunakan pada saat event OnClose:
procedure TFrmLaporanAnggota.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
..
RvProjectAgt.Close;
..
end;

Mengirim Parameter yang ada Pada Report


Pada RepLapDenda (file rave project RepBuku.rav) yang telah
dibahas di atas, digunakan parameter pada saat perancangan.
Parameter tersebut adalah SubTitle (Param.SubTitle). Untuk dapat
mengirim string dari aplikasi, dapat diatur parameter dengan metode
290

SetParam(Param: String; Value: String). SetParam mempunyai dua


parameter. Parameter pertama adalah Param, yaitu nama
parameternya. Parameter kedua adalah Value, yaitu nilai string yang
akan dikirim ke report. Sebelum report dieksekusi, kirim nilai
parameter terlebih dahulu dengan SetParam.
Contoh:
RvProjectBuku.SetParam('SubTitle', 'Pendapatan Denda Tanggal ' +
FormatDateTime('dd MMMM yyyy',DTPTanggal.DateTime));
if RvProjectBuku.SelectReport('RepLapDenda', FALSE) then
RvProjectBuku.Execute;

Dengan demikian, pada saat RapLapDenda dieksekusi akan


ditampilkan Pendapatan Denda Tanggal xx-xxxxxxx-xxxx (sesuai
tanggal pada DTPTanggal) pada DataText yang menggunakan
Parameter (Param.SubTitle).
Karena RepLapDenda digunakan oleh tiga Stored Procedure,
definisikan terlebih dahulu ProcedureName dan Parameter yang
diperlukan Stored Procedure yang bersangkutan pada dataset
(ADOStoredProc) sebelum mengeksekusi report.
Contoh lengkapnya:
case RGPendDenda.ItemIndex of
0: begin
with DM.ADOStoredProcLapDenda do
begin
Active := FALSE;
Parameters.Clear;
ProcedureName := 'LAP_PEND_DENDA_PERTANGGAL';
Parameters.CreateParameter(
'@Tanggal', ftDateTime, pdInput, 50,
DTPTanggal.DateTime);
RvProjectBuku.SetParam('SubTitle', 'Pendapatan Denda Tanggal ' +
FormatDateTime('dd MMMM
yyyy',DTPTanggal.DateTime));
Active := TRUE;
if RvProjectBuku.SelectReport('RepLapDenda', FALSE) then
RvProjectBuku.Execute;
End;
end;
1: begin
with DM.ADOStoredProcLapDenda do
begin
Active := FALSE;
Parameters.Clear;
ProcedureName := 'LAP_PEND_DENDA_PERBULAN';
Parameters.CreateParameter(
'@TanggalBulan', ftDateTime, pdInput, 50,
DTPBulan.DateTime);
RvProjectBuku.SetParam('SubTitle', 'Pendapatan Denda Bulan ' +

291

FormatDateTime('mmmm',DTPBulan.DateTime));
Active := TRUE;
if RvProjectBuku.SelectReport('RepLapDenda', FALSE) then
RvProjectBuku.Execute;
end;
end;
2: begin
with DM.ADOStoredProcLapDenda do
begin
Active := FALSE;
Parameters.Clear;
ProcedureName := 'LAP_PEND_DENDA_PERPERIODE';
Parameters.CreateParameter(
'@TanggalFrom', ftDateTime, pdInput, 50,
DTPFrom.DateTime);
Parameters.CreateParameter(
'@TanggalTo', ftDateTime, pdInput, 50,
DTPTo.DateTime);
RvProjectBuku.SetParam('SubTitle', 'Pendapatan Denda Periode ' +
FormatDateTime('dd MMMM yyyy',DTPFrom.DateTime)
+ ' S/D ' +
FormatDateTime('dd MMMM
yyyy',DTPTo.DateTime));
Active := TRUE;
if RvProjectBuku.SelectReport('RepLapDenda', FALSE) then
RvProjectBuku.Execute;
end;
end;
end;

5.3.5 Konversi Report ke Format PDF, HTML, RTF dan


Text
Untuk menyimpan Report dalam format PDF, HTML, RTF, dan text,
Rave Report menyediakan komponen-komponen RvRenderPDF,
RvRenderHTML, RvRenderRTF, dan RvRenderText yang berada pada
page Rave pada component Pallete.

Gambar 5.36 Form Laporan Anggota dengan Empat Komponen Rave

292

Penggunaannya cukup dengan menambahkan komponenkomponen tersebut pada form dimana komponen RvProject berada.
Setelah itu atur properti Active menjadi TRUE sehingga report yang
mempunyai kemampuan untuk menyimpan dalam format tersebut.
Sebagai contoh, pada FrmLaporanAnggota ditambahkan empat
komponen rave, yaitu RvRenderPDF, RvRenderHTML, RvRenderRTF,
dan RvRenderText. Akibatnya jika program dijalankan Anda dapat
menyimpan report dalam salah satu format file di atas dengan
memilih File pada dialog Output Options, bagian Report Destination.
Tentukan nama dan direktori file yang akan disimpan, lalu pilih
format file yang diinginkan pada Format, kemudian klik OK.

Gambar 5.37 Output Option dengan Format PDF

Anda dapat juga melihat Preview Report terlebih dahulu jika pada
Report Destination dipilih Preview. Kemudian pilih Save As dari menu
File untuk menyimpan report tersebut.

Gambar 5.38 Save File As...

293

Anda mungkin juga menyukai