Pemrograman Delphi dgn SQL Server

64

Click here to load reader

description

 

Transcript of Pemrograman Delphi dgn SQL Server

Page 1: Pemrograman Delphi dgn SQL Server

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.

Page 2: Pemrograman Delphi dgn SQL Server

231

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

Page 3: Pemrograman Delphi dgn SQL Server

232

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

Page 4: Pemrograman Delphi dgn SQL Server

233

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

Page 5: Pemrograman Delphi dgn SQL Server

234

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.

Page 6: Pemrograman Delphi dgn SQL Server

235

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.

Page 7: Pemrograman Delphi dgn SQL Server

236

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.

Page 8: Pemrograman Delphi dgn SQL Server

237

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

Page 9: Pemrograman Delphi dgn SQL Server

238

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

Page 10: Pemrograman Delphi dgn SQL Server

239

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.

Page 11: Pemrograman Delphi dgn SQL Server

240

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.

Page 12: Pemrograman Delphi dgn SQL Server

241

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

LAPORAN DEMO PERPUSTAKAAN

Title Anggota Yang Aktif Header Column

NoAnggota

Nama

JKel

Alamat

Kota

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.

Page 13: Pemrograman Delphi dgn SQL Server

242

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 masing-masing: 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

Page 14: Pemrograman Delphi dgn SQL Server

243

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 menampung record-record hasil statement SQL di bawah ini: 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

Page 15: Pemrograman Delphi dgn SQL Server

244

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 CASE…WHEN… 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 properti DataField dari QRDBText dengan kode program: 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.

Page 16: Pemrograman Delphi dgn SQL Server

245

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 Daftar Anggota Dan Buku Yang

Dipinjam

Group Header

No Anggota No Pinjam Nama Masa Berlaku

No Anggota No Pinjam Nama Anggota Tanggal

Page 17: Pemrograman Delphi dgn SQL Server

246

Kode Buku Judul Penerbit Kode_Buku Judul 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:

Page 18: Pemrograman Delphi dgn SQL Server

247

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

Page 19: Pemrograman Delphi dgn SQL Server

248

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;

Page 20: Pemrograman Delphi dgn SQL Server

249

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 dan mendefinisikan ADOCommand.CommandType cmdText: 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:

Page 21: Pemrograman Delphi dgn SQL Server

250

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:

Band

QuickReport

Page

Header LAPORAN DEMO PERPUSTAKAAN

Title Jumlah Buku Tersedia Di Perpustakaan Judul A….

Group Header

Kode Buku Judul Penerbit Category Persediaan Kode_Buku Judul Penerbit Category Jumlah Detail

Group

Header Judul B….

Kode_Buku Judul Penerbit Category Persediaan Detail

Kode_Buku Judul Penerbit Category Jumlah

Page 22: Pemrograman Delphi dgn SQL Server

251

Group Footer

Sub Total

Sub Total

Total Total Summary

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 caption-nya 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,

Page 23: Pemrograman Delphi dgn SQL Server

252

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;

Page 24: Pemrograman Delphi dgn SQL Server

253

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:

Band

QuickReport

Page

Header LAPORAN DEMO PERPUSTAKAAN

Title Jumlah Buku Tersedia Di Perpustakaan No Pinjam: No Anggota:

No Pinjam No Anggota

Tanggal Kembali: Nama Anggota:

Tanggal No Anggota Group

Header

Kode Buku Judul Telat Denda Buku

Kode_Buku Judul Telat Denda Buku Detail Band

Page 25: Pemrograman Delphi dgn SQL Server

254

Group Footer

Sub Denda

No Pinjam : No Pinjam Tanggal Kembali: Tanggal No Anggota : No Anggota Nama Anggota: Nama Aggt

Group Header

Kode_Buku Judul Telat Denda Buku

Kode_Buku Judul Telat Denda Buku

Detail Band

Group Footer

Sub Denda Sub Denda

Total Pendapatan Denda Total Denda Summary

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?

Page 26: Pemrograman Delphi dgn SQL Server

255

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 SQL-nya. 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

Page 27: Pemrograman Delphi dgn SQL Server

256

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

Page 28: Pemrograman Delphi dgn SQL Server

257

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.

Page 29: Pemrograman Delphi dgn SQL Server

258

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

Page 30: Pemrograman Delphi dgn SQL Server

259

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;

Page 31: Pemrograman Delphi dgn SQL Server

260

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.Preview;

PreviewModal

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.PreviewModal;

PreviewModeless

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

QuickRep1.PreviewModeless;

Page 32: Pemrograman Delphi dgn SQL Server

261

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

Page 33: Pemrograman Delphi dgn SQL Server

262

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, pertama-tama kita buat form report tempat report yang akan ditampilkan berada. Setelah itu baru memanggil dengan prosedur PreviewModal.

Page 34: Pemrograman Delphi dgn SQL Server

263

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 OnClick SpeedCetak FrmLaporanBuku adalah sebagai berikut: 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;

Page 35: Pemrograman Delphi dgn SQL Server

264

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

Page 36: Pemrograman Delphi dgn SQL Server

265

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

Page 37: Pemrograman Delphi dgn SQL Server

266

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

Page 38: Pemrograman Delphi dgn SQL Server

267

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

Page 39: Pemrograman Delphi dgn SQL Server

268

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

Page 40: Pemrograman Delphi dgn SQL Server

269

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 Keterangan

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

Page 41: Pemrograman Delphi dgn SQL Server

270

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 Keterangan

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

Page 42: Pemrograman Delphi dgn SQL Server

271

properti ProjectFile yang dapat diisi path dan nama file Rave Project (.rav). Properti engine dapat diisi dengan TrvSystem. TrvProject juga dapat memperoleh daftar nama-nama 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.

Page 43: Pemrograman Delphi dgn SQL Server

272

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. Langkah-langkah pembuatannya adalah sebagai berikut:

1. Letakkan ADOQuery (beri nama ADOQueryLapAgtAktif) pada DataModule (DM) yang telah ada. Isi properti Connection-nya

Page 44: Pemrograman Delphi dgn SQL Server

273

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.

Page 45: Pemrograman Delphi dgn SQL Server

274

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

Page 46: Pemrograman Delphi dgn SQL Server

275

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

Page 47: Pemrograman Delphi dgn SQL Server

276

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

No Komponen Property Name Property BandType

1 Band TitleBand Body Header

2 Band BodyHeaderBand Body Header

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

Komponen Property Name

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.

Page 48: Pemrograman Delphi dgn SQL Server

277

Properti HeaderBand :

Properti Nilai

BandStyle Body Header

ControllerBand DetailBand

Tambahkan enam Text, masing-masing dengan properti sebagai berikut:

Komponen Name 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

Page 49: Pemrograman Delphi dgn SQL Server

278

Tambahkan enam DataText (komponen pada page Report) dalam band tersebut dengan properti masing-masing:

Komponen Name Property Nilai

DataView DVAnggotaYgAktif DataText DataTextN

oAnggota DataField NO_ANGGOTA

DataView DVAnggotaYgAktif DataText DataTextN

ama DataField NO_ANGGOTA

DataView DVAnggotaYgAktif DataText DataTextJ

K DataField NO_ANGGOTA

DataView DVAnggotaYgAktif DataText DataTextAl

amat DataField NO_ANGGOTA

DataView DVAnggotaYgAktif DataText DataTextK

ota DataField NO_ANGGOTA

DataView DVAnggotaYgAktif DataText DataTextT

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

Page 50: Pemrograman Delphi dgn SQL Server

279

Band

Page

Region

Body Header (Band)

LAPORAN DEMO PERPUSTAKAAN Anggota Yang Masih Aktif

Body Header (Band)

NoAnggota

Nama JK Alamat Kota Telp

[NoAnggota]

[Nama]

[JK]

[Alamat]

[Kota]

[Telp]

…. …. … …. …. …. …. …. … …. …. ….

Detail (Data Band)

…. …. ... …. …. ….

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

Page 51: Pemrograman Delphi dgn SQL Server

280

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 RepBuku.rav. Beri nama RepLapJumlahBuku pada report.

Page 52: Pemrograman Delphi dgn SQL Server

281

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:

Band

Page

Region

Body Header (Band)

LAPORAN DEMO PERPUSTAKAAN Jumlah Buku Yang Tersedia Di Perpustakaan

Judul: [<Huruf Judul>] Group Header (Band)

Kode Buku

Judul Penerbi

t Categor

y Persedia

an

Page 53: Pemrograman Delphi dgn SQL Server

282

[KodeBuku]

[Judul]

[Penerbit]

[Category]

[Persediaan]

…. …. …. …. …. …. …. …. …. ….

Detail (Data Band)

…. …. …. …. …. Group Footer (Band)

Subtotal SubTotal

Body Footer (Band)

Grandtotal 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 Komponen Properti Nilai

BandTypes Body Header (B) TitleBand Band

ControllerBand DetailDataBand

BandTypes Group Header (G)

ControllerBand DetailDataBand

GroupDataView

DVLapJumlahBuku GroupHeader Band Band

GroupKey <HURUF JUDUL>

BandTypes Detail (D) DetailDataBand DataBand

DataView DVLapJumlahBuku

Page 54: Pemrograman Delphi dgn SQL Server

283

BandTypes Group Footer (g)

ControllerBand DetailDataBand

GroupDataView

DVLapJumlahBuku GroupFooterBand Band

GroupKey <HURUF JUDUL>

BandTypes Body Footer (b) BodyFooterBand Band

ControllerBand DetailDataBand

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 Komponen Properti Nilai

DataView DVLapJumlahBuku DataTextKodeBuku DataText

DataField KODE_BUKU

DataView DVLapJumlahBuku DataTextJudul DataText

DataField JUDUL

DataView DVLapJumlahBuku DataTextPenerbit DataText

DataField PENERBIT

Page 55: Pemrograman Delphi dgn SQL Server

284

DataView DVLapJumlahBuku DataTextCategory DataText

DataField CATEGORY

DataView DVLapJumlahBuku DataTextPersediaan DataText

DataField JUMLAH

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

Page 56: Pemrograman Delphi dgn SQL Server

285

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

Page 57: Pemrograman Delphi dgn SQL Server

286

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

Band Page

Region

Body Header (Band)

LAPORAN PERPUSTAKAAN PENDAPATAN DENDA

[Param.SubTitle] No Pinjam Tanggal Kembali No Anggota Nama

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

Group Header (Band)

Kode Buku Judul Telat Denda

[KodeBuku] [Judul] [Telat] [<Denda Buku>]

…. …. …. …. …. …. …. ….

Detail (Data Band)

…. …. …. …. Group Footer (Band)

Sub Total [<Sub Denda>]

Body Footer (Band)

Grand Total 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.

Page 58: Pemrograman Delphi dgn SQL Server

287

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

Page 59: Pemrograman Delphi dgn SQL Server

288

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

Page 60: Pemrograman Delphi dgn SQL Server

289

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; FullName:

boolean): boolean dan Procedure Execute.

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.

Page 61: Pemrograman Delphi dgn SQL Server

290

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

Page 62: Pemrograman Delphi dgn SQL Server

291

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 ' +

Page 63: Pemrograman Delphi dgn SQL Server

292

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

Page 64: Pemrograman Delphi dgn SQL Server

293

Penggunaannya cukup dengan menambahkan komponen-komponen 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...