SlideShare a Scribd company logo
1 of 64
Download to read offline
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 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


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

                                                              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                 LAPORAN DEMO PERPUSTAKAAN
    Header
     Title                         Anggota Yang Aktif
    Header            NoAngg     Nam JKe Alam         Kot   Telp
    Column            ota        a      l     at      a


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


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


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

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
                         LAPORAN DEMO PERPUSTAKAAN
       Header
                           Daftar Anggota Dan Buku Yang
        Title
                                     Dipinjam
                        No Anggota          No Anggota
       Group            No Pinjam           No Pinjam
       Header           Nama                Nama Anggota
                        Masa Berlaku        Tanggal


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

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


                                                               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                      LAPORAN DEMO PERPUSTAKAAN
  Header
   Title                 Jumlah Buku Tersedia Di Perpustakaan

  Group
  Header         Judul   A….
                 Kode Buku      Judul      Penerbit   Category   Persediaan
                 Kode_Buku      Judul      Penerbit   Category   Jumlah

   Detail


  Group
  Header
                 Judul   B….
   Detail        Kode_Buku      Judul      Penerbit   Category   Persediaan
                 Kode_Buku      Judul      Penerbit   Category   Jumlah



250
Group                                      Sub
                                                        Sub Total
  Footer                                     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,


                                                                  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                  LAPORAN DEMO PERPUSTAKAAN
   Header
    Title                Jumlah Buku Tersedia Di Perpustakaan
                 No Pinjam:   No Pinjam Tanggal          Tanggal
   Group         No Anggota: No Anggota Kembali:         No Anggota
   Header                                Nama Anggota:
                 Kode Buku   Judul        Telat       Denda Buku
 Detail Band     Kode_Buku   Judul        Telat       Denda Buku




                                                                   253
Group                                                Sub Denda
   Footer

   Group            No Pinjam : No Pinjam Tanggal Kembali: Tanggal
   Header           No Anggota : No Anggota Nama Anggota: Nama Aggt
                    Kode_Buku   Judul      Telat        Denda Buku
                    Kode_Buku   Judul      Telat        Denda Buku
 Detail Band


   Group                                      Sub Denda Sub Denda
   Footer
                                  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?




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



                                                             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    QuickRep1.Pre
                 menampilkannya       ke     layar.   view;
                 Setelah report muncul, user dapat
                 mencetaknya.

 PreviewModa     Sama seperti preview, tetapi         QuickRep1.Pre
 l               ketika            menggunakan        viewModal;
                 PreviewModal,   report   dibuat
                 tanpa background thread karena
                 beberapa driver database tidak
                 mendukung thread safe yang
                 akan              menyebabkan
                 kemungkinan munculnya error
                 atau program akan crash.

 PreviewModel    Sama     seperti  PreviewModal,      QuickRep1.Pre
 ess             tetapi program akan terus            viewModeless;
                 mengeksekusi baris program
                 setelah Metode PreviewModeLess
                 dipanggil, yaitu saat report
                 sedang dibuat dan ditampilkan.




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, pertama-
tama 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            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;




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

                                                                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                   Keterangan

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


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




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

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

                         Property
        Komponen                                 Property Text
                          Name

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


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

        Komponen       Name       Property          Nilai

                                  DataView    DVAnggotaYgAktif
                     DataTextN
       DataText
                     oAnggota
                                  DataField   NO_ANGGOTA

                                  DataView    DVAnggotaYgAktif
                     DataTextN
       DataText
                     ama
                                  DataField   NO_ANGGOTA

                                  DataView    DVAnggotaYgAktif
                     DataTextJ
       DataText
                     K
                                  DataField   NO_ANGGOTA

                                  DataView    DVAnggotaYgAktif
                     DataTextAl
       DataText
                     amat
                                  DataField   NO_ANGGOTA

                                  DataView    DVAnggotaYgAktif
                     DataTextK
       DataText
                     ota
                                  DataField   NO_ANGGOTA

                                  DataView    DVAnggotaYgAktif
                     DataTextT
       DataText
                     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.



278
Band                                  Page

                                       Region

   Body                    LAPORAN DEMO PERPUSTAKAAN
  Header                       Anggota Yang Masih Aktif
  (Band)

   Body
                    NoAnggot
  Header                       Nama    JK      Alamat   Kota    Telp
                       a
  (Band)
   Detail           [NoAnggo   [Nam   [JK     [Alama    [Kota   [Telp]
   (Data            ta]        a]     ]       t]        ]
   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


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

280
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

                         LAPORAN DEMO PERPUSTAKAAN
  Body
                      Jumlah Buku Yang Tersedia Di Perpustakaan
 Header
 (Band)

 Group            Judul:   [<Huruf Judul>]
 Header
 (Band)             Kode                Penerbi   Categor   Persedia
                               Judul
                    Buku                   t         y         an



                                                                       281
Detail          [KodeBuk   [Judul    [Penerb    [Categor     [Persedia
 (Data           u]         ]         it]        y]           an]
 Band)              ….        ….          ….        ….            ….
                    ….        ….          ….        ….            ….
                    ….        ….          ….        ….            ….
 Group                                     Subtotal           SubTotal
 Footer
 (Band)
  Body                                   Grandtotal         GrandTotal
 Footer
 (Band)




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
 GroupHeader
                Band
 Band                                GroupDataVie           DVLapJumlahBuku
                                     w

                                     GroupKey           <HURUF JUDUL>

                                     BandTypes          Detail (D)
 DetailDataBa
                DataBand
 nd
                                     DataView               DVLapJumlahBuku


282
BandTypes        Group Footer (g)

                                   ControllerBand   DetailDataBand
 GroupFooter
                 Band
 Band                              GroupDataVie     DVLapJumlahBuku
                                   w

                                   GroupKey         <HURUF JUDUL>

                                   BandTypes        Body Footer (b)
 BodyFooterB
                 Band
 and
                                   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



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



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 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
                        LAPORAN PERPUSTAKAAN
 Header                   PENDAPATAN DENDA
 (Band)           [Param.SubTitle]
                  No Pinjam                     [NoPinjam]
 Group            Tanggal Kembali               [Tanggal_Kembali]
                  No Anggota                    [NoAnggota]
 Header
                  Nama                          [Nama_Anggota]
 (Band)
                   Kode Buku        Judul         Telat         Denda
                  [KodeBuku]   [Judul]          [Telat]     [<Denda
  Detail                                                    Buku>]
  (Data               ….             ….           ….              ….
  Band)               ….             ….           ….              ….
                      ….             ….           ….              ….
 Group                                         Sub Total    [<Sub Denda>]
 Footer
 (Band)
  Body                                        Grand Total   GrandTotal
 Footer
 (Band)




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

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


                                                               293

More Related Content

What's hot

Job Desc HSE Staff
Job Desc HSE StaffJob Desc HSE Staff
Job Desc HSE Staffibadil haqqi
 
Tugas 5 project charter
Tugas 5 project charterTugas 5 project charter
Tugas 5 project charterRifkaAnnisa16
 
Rekayasa Perangkat Lunak software design fundamentals
Rekayasa Perangkat Lunak software design fundamentalsRekayasa Perangkat Lunak software design fundamentals
Rekayasa Perangkat Lunak software design fundamentalsListyowatik (Yanie)
 
PPT Manajemen Quality Control: ISO 17025
PPT Manajemen Quality Control: ISO 17025PPT Manajemen Quality Control: ISO 17025
PPT Manajemen Quality Control: ISO 17025UNESA
 
440360496-TANK-CLEANING-pptx.pptx
440360496-TANK-CLEANING-pptx.pptx440360496-TANK-CLEANING-pptx.pptx
440360496-TANK-CLEANING-pptx.pptxecep nurali
 
Sharing Knowledge ISO 55000 di Pusertif PLN
Sharing Knowledge ISO 55000 di Pusertif PLNSharing Knowledge ISO 55000 di Pusertif PLN
Sharing Knowledge ISO 55000 di Pusertif PLNmuhammad hamdi
 
Penerapan konsep reaksi redoks dalam pengolahan limbah
Penerapan konsep reaksi redoks dalam pengolahan limbahPenerapan konsep reaksi redoks dalam pengolahan limbah
Penerapan konsep reaksi redoks dalam pengolahan limbahAdinda Khairunnisa
 
02.pengawasan instalasi lift
02.pengawasan instalasi lift02.pengawasan instalasi lift
02.pengawasan instalasi liftFirmansyah Kusasi
 
Srs aplikasi darurat bandung 2014
Srs aplikasi darurat bandung 2014Srs aplikasi darurat bandung 2014
Srs aplikasi darurat bandung 2014Dwi Apriyanto
 
Dokumen Test Plan
Dokumen Test Plan Dokumen Test Plan
Dokumen Test Plan EM Nasrul
 
Manajemen Laboratorium - DENAH BIOSAFETY
Manajemen Laboratorium - DENAH BIOSAFETYManajemen Laboratorium - DENAH BIOSAFETY
Manajemen Laboratorium - DENAH BIOSAFETYRiskymessyana99
 
Dokumen perencanaan proyek
Dokumen perencanaan proyekDokumen perencanaan proyek
Dokumen perencanaan proyekFirman Maulana
 
9. dasar dasar inspeksi
9. dasar dasar inspeksi9. dasar dasar inspeksi
9. dasar dasar inspeksiWinarso Arso
 

What's hot (20)

p&id dan sama
 p&id dan sama p&id dan sama
p&id dan sama
 
Project charter
Project charterProject charter
Project charter
 
Pengaplikasian ekstraksi di industri
Pengaplikasian ekstraksi di industriPengaplikasian ekstraksi di industri
Pengaplikasian ekstraksi di industri
 
Job Desc HSE Staff
Job Desc HSE StaffJob Desc HSE Staff
Job Desc HSE Staff
 
Tugas 5 project charter
Tugas 5 project charterTugas 5 project charter
Tugas 5 project charter
 
Software Requirements
Software RequirementsSoftware Requirements
Software Requirements
 
Presentasi pengendali level
Presentasi pengendali levelPresentasi pengendali level
Presentasi pengendali level
 
Rekayasa Perangkat Lunak software design fundamentals
Rekayasa Perangkat Lunak software design fundamentalsRekayasa Perangkat Lunak software design fundamentals
Rekayasa Perangkat Lunak software design fundamentals
 
PPT Manajemen Quality Control: ISO 17025
PPT Manajemen Quality Control: ISO 17025PPT Manajemen Quality Control: ISO 17025
PPT Manajemen Quality Control: ISO 17025
 
440360496-TANK-CLEANING-pptx.pptx
440360496-TANK-CLEANING-pptx.pptx440360496-TANK-CLEANING-pptx.pptx
440360496-TANK-CLEANING-pptx.pptx
 
Sharing Knowledge ISO 55000 di Pusertif PLN
Sharing Knowledge ISO 55000 di Pusertif PLNSharing Knowledge ISO 55000 di Pusertif PLN
Sharing Knowledge ISO 55000 di Pusertif PLN
 
Software reuse
Software reuseSoftware reuse
Software reuse
 
K3 instalasi gas medis
K3 instalasi gas medisK3 instalasi gas medis
K3 instalasi gas medis
 
Penerapan konsep reaksi redoks dalam pengolahan limbah
Penerapan konsep reaksi redoks dalam pengolahan limbahPenerapan konsep reaksi redoks dalam pengolahan limbah
Penerapan konsep reaksi redoks dalam pengolahan limbah
 
02.pengawasan instalasi lift
02.pengawasan instalasi lift02.pengawasan instalasi lift
02.pengawasan instalasi lift
 
Srs aplikasi darurat bandung 2014
Srs aplikasi darurat bandung 2014Srs aplikasi darurat bandung 2014
Srs aplikasi darurat bandung 2014
 
Dokumen Test Plan
Dokumen Test Plan Dokumen Test Plan
Dokumen Test Plan
 
Manajemen Laboratorium - DENAH BIOSAFETY
Manajemen Laboratorium - DENAH BIOSAFETYManajemen Laboratorium - DENAH BIOSAFETY
Manajemen Laboratorium - DENAH BIOSAFETY
 
Dokumen perencanaan proyek
Dokumen perencanaan proyekDokumen perencanaan proyek
Dokumen perencanaan proyek
 
9. dasar dasar inspeksi
9. dasar dasar inspeksi9. dasar dasar inspeksi
9. dasar dasar inspeksi
 

Similar to MEMBANGUN APLIKASI DELPHI DAN SQL SERVER

Listing Program Penjualan Sepatu
Listing Program Penjualan SepatuListing Program Penjualan Sepatu
Listing Program Penjualan SepatuDwi Mardianti
 
Membuat Dokumen dengan Latex
Membuat Dokumen dengan LatexMembuat Dokumen dengan Latex
Membuat Dokumen dengan LatexKresno Aji
 
Layout, listview, gridview, and adapter
Layout, listview, gridview, and adapterLayout, listview, gridview, and adapter
Layout, listview, gridview, and adapterGoogle
 
Bahasa pemograman
Bahasa pemogramanBahasa pemograman
Bahasa pemogramanankg44
 
Panduan Penulisan-DPPL.pdf
Panduan Penulisan-DPPL.pdfPanduan Penulisan-DPPL.pdf
Panduan Penulisan-DPPL.pdfFajar Baskoro
 
belajar statistik
belajar statistikbelajar statistik
belajar statistiksoftscients
 
MODULPELATIHANSWMMnew.pdf
MODULPELATIHANSWMMnew.pdfMODULPELATIHANSWMMnew.pdf
MODULPELATIHANSWMMnew.pdfIwanNovario1
 
6. perancangan sistem terinci
6. perancangan sistem terinci6. perancangan sistem terinci
6. perancangan sistem terinciAlvin Setiawan
 
Amri perencanaan-proyek-rpl
Amri perencanaan-proyek-rplAmri perencanaan-proyek-rpl
Amri perencanaan-proyek-rplDwi Dwi
 
Pertemuan Ke IV.DOC
Pertemuan Ke IV.DOCPertemuan Ke IV.DOC
Pertemuan Ke IV.DOCJurnal IT
 
Pemrograman berorientasi objek lanjutan
Pemrograman berorientasi objek lanjutanPemrograman berorientasi objek lanjutan
Pemrograman berorientasi objek lanjutanTriani Valentina
 
Presentasi (sistem pengolahan data spasial dengan arc view)
Presentasi (sistem pengolahan data spasial dengan arc view)Presentasi (sistem pengolahan data spasial dengan arc view)
Presentasi (sistem pengolahan data spasial dengan arc view)Isya Ansyari
 

Similar to MEMBANGUN APLIKASI DELPHI DAN SQL SERVER (20)

Mapinfo tutorial
Mapinfo tutorialMapinfo tutorial
Mapinfo tutorial
 
Mapinfo tutorial
Mapinfo tutorialMapinfo tutorial
Mapinfo tutorial
 
Listing Program Penjualan Sepatu
Listing Program Penjualan SepatuListing Program Penjualan Sepatu
Listing Program Penjualan Sepatu
 
Membuat Dokumen dengan Latex
Membuat Dokumen dengan LatexMembuat Dokumen dengan Latex
Membuat Dokumen dengan Latex
 
Layout, listview, gridview, and adapter
Layout, listview, gridview, and adapterLayout, listview, gridview, and adapter
Layout, listview, gridview, and adapter
 
Laporan Praktikum ArcGis
Laporan Praktikum ArcGisLaporan Praktikum ArcGis
Laporan Praktikum ArcGis
 
Bahasa pemograman
Bahasa pemogramanBahasa pemograman
Bahasa pemograman
 
Nota slide topik 5
Nota slide topik 5Nota slide topik 5
Nota slide topik 5
 
Pert 3.pptx
Pert 3.pptxPert 3.pptx
Pert 3.pptx
 
Panduan Penulisan-DPPL.pdf
Panduan Penulisan-DPPL.pdfPanduan Penulisan-DPPL.pdf
Panduan Penulisan-DPPL.pdf
 
Sad
SadSad
Sad
 
belajar statistik
belajar statistikbelajar statistik
belajar statistik
 
MODULPELATIHANSWMMnew.pdf
MODULPELATIHANSWMMnew.pdfMODULPELATIHANSWMMnew.pdf
MODULPELATIHANSWMMnew.pdf
 
6. perancangan sistem terinci
6. perancangan sistem terinci6. perancangan sistem terinci
6. perancangan sistem terinci
 
Amri perencanaan-proyek-rpl
Amri perencanaan-proyek-rplAmri perencanaan-proyek-rpl
Amri perencanaan-proyek-rpl
 
Pertemuan Ke IV.DOC
Pertemuan Ke IV.DOCPertemuan Ke IV.DOC
Pertemuan Ke IV.DOC
 
Pemrograman berorientasi objek lanjutan
Pemrograman berorientasi objek lanjutanPemrograman berorientasi objek lanjutan
Pemrograman berorientasi objek lanjutan
 
Presentasi (sistem pengolahan data spasial dengan arc view)
Presentasi (sistem pengolahan data spasial dengan arc view)Presentasi (sistem pengolahan data spasial dengan arc view)
Presentasi (sistem pengolahan data spasial dengan arc view)
 
2.sd 13.ok
2.sd 13.ok2.sd 13.ok
2.sd 13.ok
 
2.sd 13
2.sd 132.sd 13
2.sd 13
 

More from Nurdin Al-Azies

Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)
Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)
Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)Nurdin Al-Azies
 
Daftar riwayat hidup Jusuf Kalla
Daftar riwayat hidup Jusuf KallaDaftar riwayat hidup Jusuf Kalla
Daftar riwayat hidup Jusuf KallaNurdin Al-Azies
 
Daftar riwayat hidup Joko Widodo
Daftar riwayat hidup Joko WidodoDaftar riwayat hidup Joko Widodo
Daftar riwayat hidup Joko WidodoNurdin Al-Azies
 
Panduan Tour Taman Safari Indonesia
Panduan Tour Taman Safari Indonesia Panduan Tour Taman Safari Indonesia
Panduan Tour Taman Safari Indonesia Nurdin Al-Azies
 
Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)
Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)
Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)Nurdin Al-Azies
 
Interpersonal skill and creativity (nurdin al azies)
Interpersonal skill and creativity (nurdin al azies)Interpersonal skill and creativity (nurdin al azies)
Interpersonal skill and creativity (nurdin al azies)Nurdin Al-Azies
 
Desain grafis ver1 2-pdf
Desain grafis ver1 2-pdfDesain grafis ver1 2-pdf
Desain grafis ver1 2-pdfNurdin Al-Azies
 
Biar ngampus tak sekedar status
Biar ngampus tak sekedar statusBiar ngampus tak sekedar status
Biar ngampus tak sekedar statusNurdin Al-Azies
 
Kreatif entreupreneur workshop
Kreatif entreupreneur workshopKreatif entreupreneur workshop
Kreatif entreupreneur workshopNurdin Al-Azies
 
Strategi Penyambutan Mahasiswa Baru UNTUK LDK
Strategi Penyambutan Mahasiswa Baru UNTUK LDKStrategi Penyambutan Mahasiswa Baru UNTUK LDK
Strategi Penyambutan Mahasiswa Baru UNTUK LDKNurdin Al-Azies
 
7 international linkages
7 international linkages7 international linkages
7 international linkagesNurdin Al-Azies
 
04 ekonomi mikro rancang bangun ekonomi islam
04 ekonomi mikro     rancang bangun ekonomi islam04 ekonomi mikro     rancang bangun ekonomi islam
04 ekonomi mikro rancang bangun ekonomi islamNurdin Al-Azies
 
03 ekonomi mikro permintaan dan penawaran
03 ekonomi mikro     permintaan dan penawaran03 ekonomi mikro     permintaan dan penawaran
03 ekonomi mikro permintaan dan penawaranNurdin Al-Azies
 
02 ekonomi mikro pendahulan tentang ekonomi mikro
02 ekonomi mikro    pendahulan tentang ekonomi mikro02 ekonomi mikro    pendahulan tentang ekonomi mikro
02 ekonomi mikro pendahulan tentang ekonomi mikroNurdin Al-Azies
 
(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )
(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )
(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )Nurdin Al-Azies
 

More from Nurdin Al-Azies (20)

Jadwal Piala Dunia 2014
Jadwal Piala Dunia 2014Jadwal Piala Dunia 2014
Jadwal Piala Dunia 2014
 
Visi misi prabowo-hatta
Visi misi prabowo-hattaVisi misi prabowo-hatta
Visi misi prabowo-hatta
 
Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)
Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)
Buku Studi Islam 3 (Dr. Ahmad Alim, LC. MA.)
 
Daftar riwayat hidup Jusuf Kalla
Daftar riwayat hidup Jusuf KallaDaftar riwayat hidup Jusuf Kalla
Daftar riwayat hidup Jusuf Kalla
 
Daftar riwayat hidup Joko Widodo
Daftar riwayat hidup Joko WidodoDaftar riwayat hidup Joko Widodo
Daftar riwayat hidup Joko Widodo
 
Panduan Tour Taman Safari Indonesia
Panduan Tour Taman Safari Indonesia Panduan Tour Taman Safari Indonesia
Panduan Tour Taman Safari Indonesia
 
Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)
Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)
Jadwal imsyakiyah Ramadhan 1435 H (Terbaru)
 
Brosur dan biaya
Brosur dan biayaBrosur dan biaya
Brosur dan biaya
 
Interpersonal skill and creativity (nurdin al azies)
Interpersonal skill and creativity (nurdin al azies)Interpersonal skill and creativity (nurdin al azies)
Interpersonal skill and creativity (nurdin al azies)
 
Desain grafis ver1 2-pdf
Desain grafis ver1 2-pdfDesain grafis ver1 2-pdf
Desain grafis ver1 2-pdf
 
Biar ngampus tak sekedar status
Biar ngampus tak sekedar statusBiar ngampus tak sekedar status
Biar ngampus tak sekedar status
 
Kreatif entreupreneur workshop
Kreatif entreupreneur workshopKreatif entreupreneur workshop
Kreatif entreupreneur workshop
 
Strategi Penyambutan Mahasiswa Baru UNTUK LDK
Strategi Penyambutan Mahasiswa Baru UNTUK LDKStrategi Penyambutan Mahasiswa Baru UNTUK LDK
Strategi Penyambutan Mahasiswa Baru UNTUK LDK
 
Dakwah Kreatif
Dakwah KreatifDakwah Kreatif
Dakwah Kreatif
 
Adobe Flash:
Adobe Flash: Adobe Flash:
Adobe Flash:
 
7 international linkages
7 international linkages7 international linkages
7 international linkages
 
04 ekonomi mikro rancang bangun ekonomi islam
04 ekonomi mikro     rancang bangun ekonomi islam04 ekonomi mikro     rancang bangun ekonomi islam
04 ekonomi mikro rancang bangun ekonomi islam
 
03 ekonomi mikro permintaan dan penawaran
03 ekonomi mikro     permintaan dan penawaran03 ekonomi mikro     permintaan dan penawaran
03 ekonomi mikro permintaan dan penawaran
 
02 ekonomi mikro pendahulan tentang ekonomi mikro
02 ekonomi mikro    pendahulan tentang ekonomi mikro02 ekonomi mikro    pendahulan tentang ekonomi mikro
02 ekonomi mikro pendahulan tentang ekonomi mikro
 
(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )
(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )
(KULIAH S2 UIKA) 01 ekonomi mikro (DR. H. IRWAN CH, SE,MM )
 

MEMBANGUN APLIKASI DELPHI DAN SQL SERVER

  • 1. 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.
  • 2. 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 231
  • 3. (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
  • 4. 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 233
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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 LAPORAN DEMO PERPUSTAKAAN Header Title Anggota Yang Aktif Header NoAngg Nam JKe Alam Kot Telp Column ota a l at a 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
  • 13. 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 242
  • 14. 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 243
  • 15. 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. 244
  • 16. 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 LAPORAN DEMO PERPUSTAKAAN Header Daftar Anggota Dan Buku Yang Title Dipinjam No Anggota No Anggota Group No Pinjam No Pinjam Header Nama Nama Anggota Masa Berlaku Tanggal 245
  • 17. 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: 246
  • 18. 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
  • 19. 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
  • 20. 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: 249
  • 21. 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 LAPORAN DEMO PERPUSTAKAAN Header Title Jumlah Buku Tersedia Di Perpustakaan Group Header Judul A…. Kode Buku Judul Penerbit Category Persediaan Kode_Buku Judul Penerbit Category Jumlah Detail Group Header Judul B…. Detail Kode_Buku Judul Penerbit Category Persediaan Kode_Buku Judul Penerbit Category Jumlah 250
  • 22. Group Sub Sub Total Footer 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, 251
  • 23. 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
  • 24. 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 LAPORAN DEMO PERPUSTAKAAN Header Title Jumlah Buku Tersedia Di Perpustakaan No Pinjam: No Pinjam Tanggal Tanggal Group No Anggota: No Anggota Kembali: No Anggota Header Nama Anggota: Kode Buku Judul Telat Denda Buku Detail Band Kode_Buku Judul Telat Denda Buku 253
  • 25. Group Sub Denda Footer Group No Pinjam : No Pinjam Tanggal Kembali: Tanggal Header No Anggota : No Anggota Nama Anggota: Nama Aggt Kode_Buku Judul Telat Denda Buku Kode_Buku Judul Telat Denda Buku Detail Band Group Sub Denda Sub Denda Footer 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? 254
  • 26. 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 255
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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 QuickRep1.Pre menampilkannya ke layar. view; Setelah report muncul, user dapat mencetaknya. PreviewModa Sama seperti preview, tetapi QuickRep1.Pre l ketika menggunakan viewModal; PreviewModal, report dibuat tanpa background thread karena beberapa driver database tidak mendukung thread safe yang akan menyebabkan kemungkinan munculnya error atau program akan crash. PreviewModel Sama seperti PreviewModal, QuickRep1.Pre ess tetapi program akan terus viewModeless; mengeksekusi baris program setelah Metode PreviewModeLess dipanggil, yaitu saat report sedang dibuat dan ditampilkan. 260
  • 32. 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
  • 33. 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. 262
  • 34. 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; 263
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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. 269
  • 41. 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 270
  • 42. 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. 271
  • 43. 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 272
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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). Property Komponen Property Text Name 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
  • 48. 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 277
  • 49. Tambahkan enam DataText (komponen pada page Report) dalam band tersebut dengan properti masing-masing: Komponen Name Property Nilai DataView DVAnggotaYgAktif DataTextN DataText oAnggota DataField NO_ANGGOTA DataView DVAnggotaYgAktif DataTextN DataText ama DataField NO_ANGGOTA DataView DVAnggotaYgAktif DataTextJ DataText K DataField NO_ANGGOTA DataView DVAnggotaYgAktif DataTextAl DataText amat DataField NO_ANGGOTA DataView DVAnggotaYgAktif DataTextK DataText ota DataField NO_ANGGOTA DataView DVAnggotaYgAktif DataTextT DataText 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. 278
  • 50. Band Page Region Body LAPORAN DEMO PERPUSTAKAAN Header Anggota Yang Masih Aktif (Band) Body NoAnggot Header Nama JK Alamat Kota Telp a (Band) Detail [NoAnggo [Nam [JK [Alama [Kota [Telp] (Data ta] a] ] t] ] 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 279
  • 51. 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. 280
  • 52. 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 LAPORAN DEMO PERPUSTAKAAN Body Jumlah Buku Yang Tersedia Di Perpustakaan Header (Band) Group Judul: [<Huruf Judul>] Header (Band) Kode Penerbi Categor Persedia Judul Buku t y an 281
  • 53. Detail [KodeBuk [Judul [Penerb [Categor [Persedia (Data u] ] it] y] an] Band) …. …. …. …. …. …. …. …. …. …. …. …. …. …. …. Group Subtotal SubTotal Footer (Band) Body Grandtotal GrandTotal Footer (Band) 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 GroupHeader Band Band GroupDataVie DVLapJumlahBuku w GroupKey <HURUF JUDUL> BandTypes Detail (D) DetailDataBa DataBand nd DataView DVLapJumlahBuku 282
  • 54. BandTypes Group Footer (g) ControllerBand DetailDataBand GroupFooter Band Band GroupDataVie DVLapJumlahBuku w GroupKey <HURUF JUDUL> BandTypes Body Footer (b) BodyFooterB Band and 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 283
  • 55. 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. 284
  • 56. 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
  • 57. 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 LAPORAN PERPUSTAKAAN Header PENDAPATAN DENDA (Band) [Param.SubTitle] No Pinjam [NoPinjam] Group Tanggal Kembali [Tanggal_Kembali] No Anggota [NoAnggota] Header Nama [Nama_Anggota] (Band) Kode Buku Judul Telat Denda [KodeBuku] [Judul] [Telat] [<Denda Detail Buku>] (Data …. …. …. …. Band) …. …. …. …. …. …. …. …. Group Sub Total [<Sub Denda>] Footer (Band) Body Grand Total GrandTotal Footer (Band) 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
  • 58. 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
  • 59. 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
  • 60. 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. 289
  • 61. 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
  • 62. 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
  • 63. 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
  • 64. 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... 293