Your SlideShare is downloading. ×
Spesifikasi:                                           Ukuran: 14x21 cm                                             Tebal:...
BAB 5MEMBUAT REPORTDalam aplikasi database, report adalah hal yang sangat penting danberfungsi untuk memberikan laporan ba...
(www.nevrona.com). Tips dan trik serta download update dandokumentasi Rave Report juga dapat diperoleh pada website ini(ht...
5.2.1 Band pada Quick Report                         Page Header Bank                            Title Band               ...
yang akan dicetak. Band ini akan dicetak berulang-ulang sampaiakhir record pada dataset.Footer BandFooter Band merupakan b...
QRBandQBBand adalah band elemen dasar dari band-band yang ada dandengan mudah dapat diubah tipe band-nya hanya dengan meng...
QRSysDataQRSysData digunakan untuk mencetak informasi sistem seperti titlereport, nomor halaman, jam, tanggal, dan sebagai...
QRChartBand ini digunakan untuk mencetak chart di laporan. QRChartmempunyai fungsi yang sama dengan TDBChart.5.2.3 Report ...
Other BoxMenentukan jenis font dasar yang akan digunakan, ukuran, dansatuan unit dari font tersebut.Page Frame BoxMenentuk...
dimasukan akan dihitung setiap record detail                    dicetak. ForceNewColumn     Untuk menentukan apakah ketika...
5.2.5 Membuat ReportUntuk contoh penggunaan, kita masih meneruskan contoh aplikasiDemo Perpustakaan pada Bab 3. Database y...
Gambar 5.3 Form Laporan Anggota Yang AktifProperti pada form:   Visible               FALSE   FormStyle             fsNorm...
Tambahkan ADOQuery untuk datasetnya serta isi properti      DataSet QuickReport dengan ADOQuery1, dan properti      Connec...
saat runtime, properti tersebut lebih fleksibel pada saat runtime    karena sesuai dengan hasil statement SQL pada ADOQuer...
FROM ANGGOTA AGTWHERE AGT.AKTIF=1 ORDER BY AGT.NO_ANGGOTAPenulis menyarankan untuk selalu menggunakan Query Analyzeruntuk ...
procedure TFrmLapAgtAktif.QRBandDetailBeforePrint(Sender:TQRCustomBand;  var PrintBand: Boolean);begin  if ADOQuery1.Recor...
Kode Buku     Judul      Penerbit                       Kode_Buku   Judul       Penerbit       DetailLangkah-langkah pembu...
QRDBNoAnggota,      QRDBNama,          QRDBNoPinjam,    QRDBMasaBerlaku. Kemudian isi properti DataSet dengan    ADOQuery1...
Gambar 5.7 Query Analizer dengan SQL untuk Anggota yang Pinjam                             BukuUntuk mengakses VIEW dari D...
QRDBKodeBuku.DataField := Fields[4].DisplayName;      QRDBJudul.DataField := Fields[5].DisplayName;      QRDBPenerbit.Data...
with ADOQuery1 dobegin   QRDBNoAnggota.DataField := Fields[0].DisplayName;   …. …. ….   QRGroupHeader.Expression := Fields...
Group                                      Sub                                                        Sub Total  Footer   ...
QRDBPenerbit, QRDBCategory, dan QRDBPerseduaan. Isi      properti DataSet dengan ADOQuery1. Atur Properti FooterBand      ...
DM.ADOConnection.CommitTrans;    except      DM.ADOConnection.RollbackTrans;    end;    QRGroupHeader.Expression := UPPER(...
Group                                                Sub Denda   Footer   Group            No Pinjam : No Pinjam Tanggal K...
Stored Procedure berjalan pada sisi server sehingga prosespengambilan datapun akan lebih cepat dengan asumsi spesifikasipe...
Stored Procedure untuk Laporan Pendapatan Denda Per BulanCREATE Procedure LAP_PEND_DENDA_PERBULAN@TanggalBulan datetime as...
where DP.Tanggal_Kembali is not NULL and DP.Denda <> 0 and           DP.Tanggal_Kembali BETWEEN @TanggalFrom and@TanggalTo...
Kita dapat menggunakan komponen ADOStoredProc untukpemanggilan Stored Procedure yang dalam contoh diletakkan padadatamodul...
DM.ADOConnection.BeginTrans;      with DM.ADOStoredProc do      begin           Active := FALSE;           Active := TRUE;...
end;o Pemanggilan ReportSemua report yang ada pada contoh dipanggil melalui dua form,yaitu frmLaporanAnggota dan frmLapora...
Mencetak ke PrinterUntuk langsung mencetak report ke printer tanpa terlebih dahulumenampilkannya ke layar (preview), prose...
case RGGroupBy.ItemIndex of             0: begin                SpeedCetak.Enabled := FALSE;                if frmLapAgtAk...
if FrmLapAgtTelatKembalikanBuku = nil thenApplication.CreateForm(TFrmLapAgtTelatKembalikanBuku,    FrmLapAgtTelatKembalika...
5.3 Rave ReportRave Report pada Delphi 7 merupakan Rave versi 5 Borland Edition.Rave Designer sendiri dapat berjalan jika ...
PagePada gambar Rave Designer di atas, di bagian tengah terdapat page.Page adalah tempat kita merancang report yang diingi...
Bila node aktif, tulisan node akan menjadi tebal dan berefekbayangan berwarna hijau. Pada Project Tree Panel di bawah node...
Komponen ToolbarTerdapat empat komponen toolbar standar, yaitu:1. Drawing2. Bar Code3. Standard4. Reporto Komponen Drawing...
o Komponen StandardKomponen-komponen ini adalah komponen-komponen yang cukupsering digunakan, yaitu untuk keperluan menamp...
Titik merah pada sudut kanan atas ikon menandakan bahwakomponen tersebut adalah komponen data-aware yang dapatmenampilkan ...
Properti DefaultDes mengatur                             agar     report  yang      dibuat                             dit...
properti ProjectFile yang                       dapat diisi path dan nama                       file Rave Project (.rav). ...
Band pada Rave ReportUntuk mendefinisikan band, kita dapat menggunakan propertiBandStyle yang akan menampilkan Band Style ...
dengan ADOConnection1 (yang sudah terkoneksi ke database   Perpustakaan, dan pastikan nilai dari properti Connected adalah...
Gambar 5.26 Pemberian Nama pada Report Baru5. Untuk membuat report anggota, kita memerlukan data dari   database. Untuk it...
6. Setelah itu terbentuklah DataView dengan nama DataView1   yang terlihat seperti di bawah ini. Gambar 5.29 Data View Ang...
8. Pada Region, letakkan 2 Band dan 1 DataBand.        No    Komponen          Property Name        Property BandType     ...
Properti HeaderBand :              Properti                             Nilai BandStyle                            Body He...
Tambahkan enam DataText (komponen pada page Report)      dalam band tersebut dengan properti masing-masing:        Kompone...
Band                                  Page                                       Region   Body                    LAPORAN ...
Setelah dieksekusi (F9), akan tampil dialog Output Options:                    Gambar 5.32 Output OptionsSetelah itu klik ...
Langkah pertama sampai dengan ketujuh pada dasarnya samadengan contoh report di atas. Untuk membuat koneksi dan DataViewpa...
Detail          [KodeBuk   [Judul    [Penerb    [Categor     [Persedia (Data           u]         ]         it]        y] ...
BandTypes        Group Footer (g)                                   ControllerBand   DetailDataBand GroupFooter           ...
DataView    DVLapJumlahBuku DataTextCategory       DataText                                   DataField   CATEGORY        ...
5.3.4 Laporan Pendapatan DendaMenggunakan ParameterPada DataText terdapat properti DataField. Properti DataFieldtersebut d...
yang sama, kita tidak perlu membuat tiga report yang berbeda. Halini dikarenakan meskipun report ini menggunakan datasetAD...
Untuk membuat koneksi pada report ini, letakkanlah komponenADOStoredProc dan namakan ADOStoredProcLapDenda yangmenggunakan...
Setelah itu isi properti Active pada ADOStoredProcLapDenda dengannilai TRUE. Setelah koneksi siap, kita dapat membuat data...
disimpan pada direktori yang sama dengan aplikasi, kode   programnya sebagai berikut:   procedure TFrmLaporanAnggota.FormC...
Procedure Execute digunakan untuk mengeksekusi report          yang aktif.          Contoh:          if RvProjectAgt.Selec...
SetParam(Param: String; Value: String). SetParam mempunyai duaparameter. Parameter pertama adalah Param, yaitu namaparamet...
FormatDateTime(mmmm,DTPBulan.DateTime));Active := TRUE;if RvProjectBuku.SelectReport(RepLapDenda, FALSE) then   RvProjectB...
Penggunaannya cukup dengan menambahkan komponen-komponen tersebut pada form dimana komponen RvProject berada.Setelah itu a...
Upcoming SlideShare
Loading in...5
×

Pemrograman Delphi dgn SQL Server

5,970

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,970
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
516
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Pemrograman Delphi dgn SQL Server"

  1. 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 desainaplikasi, 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 apayang diajarkan. Tak kalah pentingnya, buku ini juga membahas pembuatan fasilitas help suatu aplikasi dan cara membuat paket distribusi untuk aplikasi yang telah dibuat.
  2. 2. BAB 5MEMBUAT REPORTDalam aplikasi database, report adalah hal yang sangat penting danberfungsi untuk memberikan laporan bagi user. Report adalah suatuhasil akhir dari keseluruhan proses aplikasi database. Pada bab iniAnda akan belajar untuk membuat report pada aplikasiPerpustakaan.5.1 Tools Report pada Delphi5.1.1 Quick ReportQuick Report sebenarnya bukan produk dari Borland, tetapimerupakan komponen yang diproduksi QuSoft AS dan A LocHertdan dijadikan standar report pada Delphi seperti halnya Indy (InternetDirect) pada Delphi 6 yang merupakan produk dari Kudzu (Chad ZHower) dan The Indy Pit Crew yang digunakan untuk komponen-komponen yang berhubungan dengan jaringan dan Internet.5.1.2 Rave ReportRave Report adalah tools untuk pembuatan report dan termasukdalam fitur baru yang diproduksi Nevrona Design untuk Delphi 7.Informasi mengenai produk ini dapat dilihat pada website Nevrona 231
  3. 3. (www.nevrona.com). Tips dan trik serta download update dandokumentasi Rave Report juga dapat diperoleh pada website ini(http://www.nevrona.com/rave/download.html).Tidak seperti Quick Report, Rave Report mempunyai tools sendiriuntuk merancang report. Jika pada Quick Report kita merancangreport dalam lingkungan IDE Delphi, pada Rave Report ada toolssendiri untuk merancang report, yaitu Rave Designer. Hasil reporttersebut disimpan dalam suatu file report (.rav). Kita dapatmemanggilnya dari Delphi dengan komponen-komponen yang adapada page Rave di component pallete Delphi.Rave Report pada Delphi 7 adalah Rave versi 5 Borland Edition. RaveDesigner sendiri dapat berjalan jika Delphi 7 juga dijalankan. Kitadapat memanggil Rave Designer dengan memilih menu Tools | RaveDesigner dari Delphi 7 atau dengan meletakkan komponenRaveProject (yang ada pada page Rave di component palleteDelphi), lalu melakukan klik-kanan pada komponen tersebut danmemilih Rave Visual Designer.5.1.3 Seagate Crystal ReportTools report yang satu ini memang terkenal sekali karenakemudahannya serta kelengkapan fiturnya, khususnya dalam halperancangan dan pembuatan report. Banyak developer Visual Basicatau bahasa pemrograman lain yang menggunakannya. SeagateCrystal Report adalah produk third-party yang harus Anda beli secaraterpisah di luar Delphi jika Anda ingin menggunakannya.5.2 Quick ReportJika Visual Basic menyediakan Data Report untuk keperluanperancangan report, Delphi juga memberikan fasilitas pembuatanreport, yaitu Quick Report yang terletak pada page QReport dicomponent pallete. QReport merupakan singkatan dari Quick Report.Kita dapat merancang laporan yang kita inginkan dengan komponenQReport pada waktu perancangan.232
  4. 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 ReportPage Header BandPage Header Band merupakan band yang dicetak pada setiap bagianatas kertas dan merupakan keterangan dari report. Biasanyaditujukan untuk keperluan judul laporan.Title BandTitle Band merupakan band yang dicetak setelah page header. Titleband hanya dicetak pada halaman pertama saja, untuk halaman-halaman selanjutnya title ini tidak akan dicetak lagi.Column Header BandColumn Header Band merupakan band yang dicetak setelah titleband dan merupakan judul baris. Biasanya digunakan untukmenampilkan judul field yang berkaitan dengan laporan.Detail BandDetail Band merupakan band yang paling berperan dalampembuatan report karena pada band ini diletakkan field dari dataset 233
  5. 5. yang akan dicetak. Band ini akan dicetak berulang-ulang sampaiakhir record pada dataset.Footer BandFooter Band merupakan band yang akan dicetak pada bagian bawahkertas pada tiap halaman. Terdapat pilihan apakah page footer iniakan dicetak pada halaman akhir atau tidak karena dapat digantikanfungsinya oleh summary band (tercetak pada halaman akhir)Summary BandSummary Band adalah band yang hanya dicetak pada halamanterakhir dari laporan dan biasanya digunakan untuk total perhitungansuatu field tertentu di detail band.5.2.2 Komponen Quick ReportQuickRepQuikcRep adalah form dasar dari keseluruhan report yang akandibuat. Untuk menggunakannya, kita dapat langsung meletakkannyapada form. Ketika diletakkan pada form, QuickRep masih kosongdan belum memiliki band. Karenanya kita harus meletakkan bandatau komponen report lainnya pada komponen ini. QuickRep inimerupakan container untuk komponen-komponen quick report yanglain. Dengan kata lain, kita meletakan komponen-komponen quickreport lainnya di atas komponen QuickRep ini.QRSubDetailQRSubDetail biasanya digunakan pada laporan dalam bentukmaster-detail yang akan dicetak setelah detail band. Band inimempunyai dataset sendiri dan dicetak dari awal record sampaidengan akhir record pada dataset tersebut.QRStringsBandQRStringsBand meletakan band yang berisi strings pada report.234
  6. 6. QRBandQBBand adalah band elemen dasar dari band-band yang ada dandengan mudah dapat diubah tipe band-nya hanya dengan mengaturproperti BandType sesuai tujuan band tersebut. Jika kita meletakkanTQRBand pada QuickRep, lalu mengisi BandType dengan “rbTitle”,fungsi band ini menjadi tipe Title Band.QRChildBandQRChildBand digunakan untuk mencetak laporan yangkomponennya panjang dan menyebabkan band yang ada tidakcukup sehingga komponen tersebut harus dipindahkan keQRChildBand pada saat proses.QRGroupBand ini memungkinkan Anda membagi band yang ada menjadibagian-bagian menurut grup. Anda dapat menentukan kapan bandini dicetak dengan rumus. Jika perhitungan rumus pada recordsekarang dan sebelumnya tidak sama, band ini akan dicetak.QRLabelQR Label digunakan untuk mencetak teks pada laporan. Bergunauntuk memberi keterangan seperti label pada form, serta bersifatstatik. Untuk mengatur teks yang akan dicetak label, digunakanproperti caption.QRDBTextQRDBText adalah versi data-aware TQRLabel. Band ini berfungsiuntuk mencetak nilai yang ada pada field suatu database. Didalamnya juga termasuk calculated field, text field, string field, ataumacam field numeric, field tanggal, field memo. Koneksikan padadata field dengan mengatur properti DataSource dan DataField.QRExprBand ini digunakan untuk mencetak field database, kalkulasi danstatic text. Pada properti Expression dapat dimasukkan ekspresiuntuk keperluan seperti menghitung subtotal, total, dan sebagainya. 235
  7. 7. QRSysDataQRSysData digunakan untuk mencetak informasi sistem seperti titlereport, nomor halaman, jam, tanggal, dan sebagainya.QRMemoQRMemo digunakan untuk mencetak text berjumlah besar yangbukan dari suatu field di database.QRRichTextBand ini digunakan untuk memasukkan rich text pada report.QRDBRichTextBand ini digunakan untuk mengakses field DBRichText pada report.QRShapeQRShape digunakan untuk menggambar bentuk bangun sepertikotak, lingkaran, dan garis pada report.QRImageQRImage digunakan untuk menampilkan gambar pada report.Format image yang didukung disesuaikan dengan class TPicture.QRDBImageQRBDImage digunakan untuk mencetak image yang disimpan disuatu field database (BLOB field).QRPreviewBand ini digunakan untuk melihat preview report pada layer.QRTextFilterQRTextFilter digunakan untuk mengekspor isi dari report ke formattext.QRHTMLFilterBand ini digunakan untuk mengekspor isi dari report ke HTML.236
  8. 8. QRChartBand ini digunakan untuk mencetak chart di laporan. QRChartmempunyai fungsi yang sama dengan TDBChart.5.2.3 Report SettingSetelah kita merancang report, kita akan mengatur setting kertas,margin, dan lain-lain menggunakan Report Setting. Klik-kananQuickRep, lalu pilih Report Settings atau klik-ganda QuickRepsehingga muncul kotak dialog seperti Gambar 5.2.Paper Size BoxDigunakan untuk menentukan ukuran kertas yang akan digunakanuntuk laporan yang telah dirancang. Width mengatur lebar kertas,length mengatur panjang kertas, sedangkan pilihan portrait danlandscape mengatur orientasi kertas.Margin BoxBertujuan untuk menentukan batas margin atas (top), bawah(bottom), kiri (left) dan kanan (right) dari ujung kertas. Jika jumlahkolom (number of columns) lebih dari satu, column space diisidengan jarak antarkolom. Gambar 5.2 Report Settings 237
  9. 9. Other BoxMenentukan jenis font dasar yang akan digunakan, ukuran, dansatuan unit dari font tersebut.Page Frame BoxMenentukan frame (garis batas laporan) pada laporan yang terdiriatas batas atas (top), bawah (bottom), kiri (left), kanan (right), warnagaris batas, dan tebal garis frame.Band BoxMenentukan band yang digunakan beserta ukurannya pada kertas.5.2.4 PreviewReport yang telah kita buat dapat kita lihat dengan cara melakukanklik-kanan dan memilih Preview, atau jika Anda di dalam kotakdialog Report Setting, Anda dapat mengklik tombol preview.TQRBandProperti 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 yang238
  10. 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.EventQRBandQRBand hanya memiliki dua event, yaitu OnAfterPrint danOnBeforePrint, sedangkan QRSubDetail memiliki tiga event dengantambahan 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. 11. 5.2.5 Membuat ReportUntuk contoh penggunaan, kita masih meneruskan contoh aplikasiDemo Perpustakaan pada Bab 3. Database yang digunakan masihsama, yaitu database Perpustakaan yang koneksinya menggunakanADOConnection pada DataModule. Untuk memanggil report-reportyang telah dibuat, kita menggunakan dua form, yaitu Form LaporanBuku dan Form Laporan Anggota. Form ini sama seperti form-formchild lainnya dan didefinisikan sebagai MDIChild. Semua report yangdibuat akan dipanggil dari kedua form ini. Pada bab ini tidak semuaform report akan dijelaskan, tetapi hanya form-form tertentu yangdibahas, karena pada dasarnya semua metoda dan pengaturanpropertinya sama. Perbedaan yang ada mungkin hanya padastatement SQL-nya saja.Penulis menekankan SQL dalam pembuatan report karena denganSQL kita dapat dengan mudah mengambil data dan juga kecepatanmenampilkan data pada report sangat cepat.Pembuatan aplikasi Demo Perpustakaan di sini bertujuan bukanhanya untuk menunjukkan bagaimana kita merancang suatu aplikasimenggunakan Delphi, tetapi juga untuk menunjukkan pengaksesandatabase dan mengeksekusi statement SQL (dalam hal inidiujicobakan pada SQL Server) sehingga contoh-contoh statementSQL diberikan dalam pembuatan program. Pada bab ini juga akandibahas penggunaan atau pembuatan VIEW dan STOREDPROCEDURE sederhana yang akan digunakan untuk keperluanpembuatan report, serta cara menggunakan dan mengakses VIEWdan STORED PROCEDURE di SQL Server menggunakan Delphi.Untuk contoh pertama, kita akan mencoba membuat report yangakan menampilkan data-data anggota yang masih aktif dalamperpustakaan.Laporan Anggota AktifUntuk rancangan tampilan yang telah selesai, coba perhatikanGambar 5.3.240
  12. 12. Gambar 5.3 Form Laporan Anggota Yang AktifProperti pada form: Visible FALSE FormStyle fsNormalBentuk bagan dan peletakan komponen seperti tampilan output dibawah 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 DetailBerikut akan dijabarkan langkah-langkah pembuatan laporananggota 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. 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 pada242
  14. 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 menggunakanQRShape dan atur juga properti shape (qrsRectangle, qrsHorLine,qrsCircle, dll) atau gunakan properti Frame. Klik-ganda frame, isiDrawTop, DrawBottom, DrawLeft, dan DrawRight dengan nilaiTRUE/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 hasilstatement 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. 15. FROM ANGGOTA AGTWHERE AGT.AKTIF=1 ORDER BY AGT.NO_ANGGOTAPenulis menyarankan untuk selalu menggunakan Query Analyzeruntuk mencoba sintaks SQL yang dibuat. Setelah terujikebenarannya, barulah Anda pindahkan sintaks SQL tersebut keDelphi. Cara ini adalah cara yang sangat efektif dan menjaminkeakuratan hasil.Statement SQL di atas menampilkan nomor anggota, nama, danjenis kelamin. Jenis kelamin pada database disimpan dalam tipe databit (0 dan 1). Kita dapat manfaatkan fasilitas dari SQL Server, yaitufungsi 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 dengananggota tersebut masih aktif (field Aktif = ‘1’).Gambar 5.4 Query Analyzer dengan Hasil Query Anggota yang Masih AktifSetelah ADOQuery aktif, kita dapat mendefinisikan propertiDataField 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. Pengecekandilakukan dengan memeriksa nilai ADOQuery1.RecordCount <> 0.244
  16. 16. procedure TFrmLapAgtAktif.QRBandDetailBeforePrint(Sender:TQRCustomBand; var PrintBand: Boolean);begin if ADOQuery1.RecordCount = 0 then PrintBand := FALSE;end;Laporan Peminjaman BukuDalam pembuatan report ini juga dicontohkan penggunaan Viewuntuk laporan anggota yang meminjam buku dan daftar buku yangdipinjam. Gambar 5.5 Form Laporan Anggota dan List BukuRancanglah report seperti gambar di atas, atau untuk lebih jelasnyalihat 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. 17. Kode Buku Judul Penerbit Kode_Buku Judul Penerbit DetailLangkah-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. 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 - ViewKetikkan statement SQL di bawah ini pada Query Analyzer atau padaEnterprise Manager di bagian database Perpustakaan. Caranya,buatlah view baru, setelah itu masukkan statement SQL di bawah ini:Create VIEW ANGGOTA_YANG_PINJAM ASSelect distinct AGT.No_Anggota, AGT.Nama as [Nama Anggota],(SELECT top 1 AKHIR FROM MASA_BERLAKU WHERENO_ANGGOTA = AGT.NO_ANGGOTA ORDER BY AKHIR DESC ) asMASA_BERLAKU, PJ.No_Pinjam, DP.Kode_Buku, B.Judul, P.Nama as [Penerbit] fromAnggota AGT,Masa_Berlaku MB, Peminjaman PJ Inner Join Detail_Peminjaman DPonDP.No_pinjam = PJ.No_Pinjam, Buku B, Penerbit P WhereAGT.No_Anggota = PJ.No_Anggota andMB.No_Anggota = AGT.No_Anggota and DP.Kode_Buku = B.Kode_BukuandB.Kode_Penerbit = P.Kode_Penerbit and DP.Tanggal_kembali is nulland DP.denda = 0 247
  19. 19. Gambar 5.7 Query Analizer dengan SQL untuk Anggota yang Pinjam BukuUntuk mengakses VIEW dari Delphi, kita dapat menggunakanADOTable atau ADOCommand. Untuk contoh ini digunakanADOCommand. Letakan ADOCommand pada DataModule.Pada Event OnCreate pada FrmLapAgtListBuku, masukkan kodeberikut: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. 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 padaADOConnection karena jika menggunakan clUseServer akanmenampilkan error. Seperti yang dibahas pada bagianCursorLocation dan CursorType, tidak semua kombinasi dariCursorLocation dan CursorType dapat terlaksana. Biasanya hal inidisebabkan keterbatasan DBMS atau OLE DB Provider.Error yang ditimbulkan adalah pada saat kompilasi: Gambar 5.8 Debugger Exception NotificationKita masukkan statement SQL dan mendefinisikanADOCommand.CommandType cmdText:SELECT * FROM ANGGOTA_YANG_PINJAMANGGOTA_YANG_PINJAM adalah nama dari view yang dibuat.Untuk melihat isi atau hasil View, caranya sama dengan tabel hanyasaja pada view tidak dapat dilakukan perintah yang sifatnyamengubah isi view (insert, update, dan delete).Terakhir ketikkan kode program:ADOQuery1.Recordset := DM.ADOCommand.Execute;Kode program di atas akan menyatakan bahwa recordset dariADOQuery1 adalah hasil eksekusi DM.ADOCommand.Execute.Setelah itu, masukkan properti DataField dari DBText, sama denganreport sebelumnya dan report-report yang lain: 249
  21. 21. with ADOQuery1 dobegin QRDBNoAnggota.DataField := Fields[0].DisplayName; …. …. …. QRGroupHeader.Expression := Fields[3].DisplayName;end;Laporan Jumlah Buku Gambar 5.9 Form Laporan Jumlah BukuBagan 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 Jumlah250
  22. 22. Group Sub Sub Total Footer Total Total Total SummaryLangkah-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. 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 (menggunakanQRShape), diatur tata letaknya, kita mengambil data melaluiADOQuery1 dan ADOConnection, kemudian menampilkannya kereport 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. 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) dankedua QRExpr, yaitu QRExprTotalGroup dan QRExprTotal sepertidibawah 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 fieldyang akan ditampilkan dari frield-field yang ada pada ADOQuery,yaitu disesuaikan statement SQL yang didefinisikan.Laporan Pendapatan DendaBagan 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. 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 DendaUntuk report pendapatan denda, kita akan mencoba melakukanpenyeleksian menggunakan StoredProcedure yang akan kita buatpada SQL Servernya.Mengapa kita memilih menggunakan Stored Procedure?254
  26. 26. Stored Procedure berjalan pada sisi server sehingga prosespengambilan datapun akan lebih cepat dengan asumsi spesifikasiperangkat keras server lebih tinggi dibandingkan clientnya.Kita akan membuat tiga StoredProcedure, yaitu:1. LAP_PEND_DENDA_PERTANGGAL2. LAP_PEND_DENDA_PERBULAN3. LAP_PEND_DENDA_PERPERIODEo Pembuatan Stored ProcedurePada Enterprise Manager:Cara untuk membuatnya sama seperti membuat view, yaitu dapatmenggunakan SQL Query Analyzer dan memasukan statement SQL-nya. Selain itu, dapat juga dengan membuat Strored Procedure barupada database Perpustakaan menggunakan Enterprise Manager.Setelah itu masukkan statement SQL dibawah ini untuk ketiga storedprocedure.Stored Procedure untuk Laporan Pendapatan Denda Per TanggalCREATE Procedure LAP_PEND_DENDA_PERTANGGAL@Tanggal datetime asselect 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. 27. Stored Procedure untuk Laporan Pendapatan Denda Per BulanCREATE Procedure LAP_PEND_DENDA_PERBULAN@TanggalBulan datetime asselect 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_KembaliStored Procedure untuk Laporan Pendapatan Denda Per PeriodeCREATE Procedure LAP_PEND_DENDA_PERPERIODE@TanggalFrom datetime,@TanggalTo datetime asselect 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_Buku256
  28. 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 adalahparameter stored procedure. Parameter ini didefinisikan ataudideklarasikan terlebih dahulu setelah statement Create ProcedureNamaProcedure. Pendefinisian parameter juga memerlukan tipe datadari parameter tersebut. Keempat parameter tersebut didefinisikansebagai input dari statement SQL tersebut dan pada kode programkita masukkan parameter sesuai input user. 257
  29. 29. Kita dapat menggunakan komponen ADOStoredProc untukpemanggilan Stored Procedure yang dalam contoh diletakkan padadatamodule (DM.ADOStoredProc).Pada saat frmLapPendapatanDenda menjalankan event OnCreatekita dapat mengatur ProcedureName (nama prosedur yang akandieksekusi) dan mendefinisikan parameter-parameter sesuai yangada 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 MMMMyyyy,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 MMMMyyyy,DTPFrom.DateTime) + S/D + FormatDateTime(dd MMMMyyyy,DTPTo.DateTime); end; end; end; try258
  30. 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, buatlahparameter dengan CreateParameter.Pada metode CreateParameter terdapat lima parameter. Parameterpertama adalah nama parameternya (string) dan kita buat sesuaidengan parameter yang ada pada Stored Procedure yang telah dibuatpada SQL Server. Parameter kedua adalah tipe data dari parameter.Parameter ketiga adalah jenis parameter. Kita menggunakanparameter hanya untuk input, karenanya isi dengan pdInput.Parameter keempat adalah ukuran (size) dari parameter yang akandibuat. Parameter yang terakhir adalah variabel inputnya.Setelah itu, seperti pada report-report yang lain, aturlah PropertyExpression dari QRGroup (Group header band) agar group headerdicetak setiap kali NO_PINJAM berubah. Hal ini dapat diatur dengankode program di bawah:QRGroup.Expression := DM.ADOStoredProc.NO_PINJAM;Atur Property Datafield pada masing-masing QRDBText menurutfield-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 dobegin 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. 31. end;o Pemanggilan ReportSemua report yang ada pada contoh dipanggil melalui dua form,yaitu frmLaporanAnggota dan frmLaporanBuku. Untuk memanggilreport, kita dapat menggunakan metode Preview Report yangdisiapkan oleh Quick Report.Preview ReportAda 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. 32. Mencetak ke PrinterUntuk langsung mencetak report ke printer tanpa terlebih dahulumenampilkannya ke layar (preview), prosedur Print dapat langsungdipanggil.QuickRep1.Print; Gambar 5.13 Form Laporan Anggota Gambar 5.14 Form Laporan BukuSintaks berikut ada pada event OnClick dalam SpeedCetakFrmLaporanAnggota:procedure TFrmLaporanAnggota.SpeedCetakClick(Sender: TObject);begin case PageControl1.ActivePageIndex of 0: begin 261
  33. 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 ditampilkanberada. Setelah itu baru memanggil dengan prosedur PreviewModal.262
  34. 34. if FrmLapAgtTelatKembalikanBuku = nil thenApplication.CreateForm(TFrmLapAgtTelatKembalikanBuku, FrmLapAgtTelatKembalikanBuku);FrmLapAgtTelatKembalikanBuku.QuickRep1.PreviewModal;Begitu juga pada FrmLaporanBuku, sama seperti padaFrmLaporanAnggota, form-form tersebut hanya menyeleksi formmana yang akan dibuat untuk menampilkan report yang ada padaform tersebut, sesuai dengan yang user pilih.Kode program lengkap pada event OnClick SpeedCetakFrmLaporanBuku 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. 35. 5.3 Rave ReportRave Report pada Delphi 7 merupakan Rave versi 5 Borland Edition.Rave Designer sendiri dapat berjalan jika Delphi 7 juga turutdijalankan. Kita dapat memanggil Rave Designer dengan mengaksesmenu Tools | Rave Designer dari Delphi 7 atau dengan meletakkankomponen RaveProject (yang ada pada page rave pada componentpallete Delphi), lalu mengklik-kanan komponen tersebut dan memilihRave Visual Designer.5.3.1 Rave DesignerRave Designer, seperti dijelaskan namanya, digunakan untukmerancang, mengatur, dan menyimpan report-report yang akandibuat. Pada Rave Report, suatu file Rave Project (.rav) dapat berisibanyak report. Akibatnya dalam satu proyek dapat dibuat banyakreport sesuai yang kita inginkan.5.3.2 Lingkungan Rave DesignerDi bawah ini adalah tampilan Rave Designer: Gambar 5.15 Rave Designer264
  36. 36. PagePada gambar Rave Designer di atas, di bagian tengah terdapat page.Page adalah tempat kita merancang report yang diinginkan. Suatupage juga mempunyai properti yang dapat diatur pada “PropertyPanel”. Di antaranya adalah properti PageHeight, PageWidth, danPaperSize untuk mengatur ukuran kertas, dan juga orientasi kertasreport yang akan dibuat. Gambar 5.16 Rave Designer – PageProject Tree PanelProject Tree terletak pada bagian kanan tampilan utama RaveDesigner. Project Tree berfungsi untuk melakukan navigasi proyekyang dibuat dengan cara menampilkannya dalam bentuk treeview.Mirip dengan Object Treeview pada Delphi, pada project treeditampilkan nama-nama report, Global Pages, dan Data View. Dibawah node report terdapat page dan di dalam node tersebut jugaterdapat informasi komponen apa saja yang ada dalam pagetersebut. Gambar 5.17 Project Tree Panel 265
  37. 37. Bila node aktif, tulisan node akan menjadi tebal dan berefekbayangan berwarna hijau. Pada Project Tree Panel di bawah nodeRaveProject 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 PanelProperty Panel digunakan untuk mengatur properti-propertikomponen yang dipilih. Property Panel berfungsi seperti ObjectInspector pada Delphi. Gambar 5.18 Property Panel266
  38. 38. Komponen ToolbarTerdapat empat komponen toolbar standar, yaitu:1. Drawing2. Bar Code3. Standard4. Reporto Komponen DrawingDigunakan untuk keperluan tampilan yang membutuhkan bentukseperti garis, kotak, lingkaran, elips, atau gabungan dari komponendrawing tersebut. Gambar 5.19 Komponen DrawingKomponen-komponen tersebut adalah · Line · Hline · Vline · Rectangle · Square · Elipse · Circleo Komponen BarcodeTerdapat enam komponen barcode, yaitu: · PostNetBarcode · 2of5BarCode · Code39BarCode · 128BarCode · UPCBarCode · EANBarCode Gambar 5.20 Komponen Barcode 267
  39. 39. o Komponen StandardKomponen-komponen ini adalah komponen-komponen yang cukupsering digunakan, yaitu untuk keperluan menampilkan teks atauimage yang tidak terkait dengan data yang terkoneksi padadatabase. 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 ReportTerdapat 11 komponen report, yaitu:· DataText · Region · CalcOp· DataMemo · Band · CalcTotal· CalcText · DataBand · CalcController· DataMirrorSection · DataCycle Gambar 5.22 Komponen Report268
  40. 40. Titik merah pada sudut kanan atas ikon menandakan bahwakomponen tersebut adalah komponen data-aware yang dapatmenampilkan data dari database. Setiap komponen mempunyaiproperti DataView untuk berinteraksi dengan database.Komponen berwarna hijau adalah komponen nonvisual dan tidakterlihat 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 atauDataBand pada region tersebut. Suatu region dapat menampungbanyak Band dan jumlah region pada Page Designer dapat lebih darisatu.Page Rave Report Gambar 5.23 Page Rave ReportAda dua tipe obyek pada Rave, yaitu komponen Output dan ReportClass.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. 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. Mempunyai270
  42. 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. 43. Band pada Rave ReportUntuk mendefinisikan band, kita dapat menggunakan propertiBandStyle yang akan menampilkan Band Style Editor. Bentuk editorini dapat dilihat di Gambar 5.24.Pada bagian kiri editor, ditampilkan urutan pencetakan Band. Yangdigarisbawahi adalah band yang sedang aktif, yaitu band yangsedang dipilih. Pada grup box Print Location ditampilkan checkboxjenis-jenis band. Gunanya adalah untuk menentukan sebagai bandyang mana saja band akan dicetak. Pada group box Occurrence kitadapat memilih apakah band tersebut akan dicetak hanya padahalaman pertama (First(1)), halaman baru (New Page(P)), ataukolom baru ( New Column (C)). Gambar 5.24 Band Style Editor5.3.3 Laporan Anggota AktifReport ini terdapat pada RepAnggota.rav. Langkah-langkahpembuatannya adalah sebagai berikut:1. Letakkan ADOQuery (beri nama ADOQueryLapAgtAktif) pada DataModule (DM) yang telah ada. Isi properti Connection-nya272
  44. 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 Designer4. 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. 45. Gambar 5.26 Pemberian Nama pada Report Baru5. 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 Connection274
  46. 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. 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. 48. Properti HeaderBand : Properti Nilai BandStyle Body Header ControllerBand DetailBandTambahkan enam Text, masing-masing dengan propertisebagai berikut: Komponen Name Text Text TextNoAnggota No Anggota Text TextNama Nama Text TextJK JK Text TextAlamat Alamat Text TextKota Kota Text TextTelp TelpDengan komponen VLine dan Rectangle, Anda dapat membuatpembatas (seperti tabel). Untuk itu tambahkan dan aturlah agarsemua komponen tersusun rapi.DetailBandProperti DetailBand: Property Nilai BandStyle Detail DataView DVAnggotaYgAktif 277
  49. 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. 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 DataTextyang dihubungkan pada suatu field tertentu pada database melaluiDataView.Untuk melihat hasilnya (preview report yang kita buat), pilih menuFile | Execute Report atau gunakan shortcut F9 (seperti shortcut Runpada Delphi).Gambar rancangan akhir dapat dilihat pada Gambar 5.31. Gambar 5.31 Laporan Anggota Yang Masih Aktif 279
  51. 51. Setelah dieksekusi (F9), akan tampil dialog Output Options: Gambar 5.32 Output OptionsSetelah itu klik OK (Preview), sehingga muncul tampilan sepertiGambar 5.33. Gambar 5.33 Report PreviewGrouping dan Summary pada LaporanReport ini terdapat pada RepBuku.rav. Beri namaRepLapJumlahBuku pada report.280
  52. 52. Langkah pertama sampai dengan ketujuh pada dasarnya samadengan contoh report di atas. Untuk membuat koneksi dan DataViewpada Rave Designer, tambahkan ADOQuery pada DataModuledalam proyek perpustakaan yang telah ada. Beri nama ADOQuerydengan ADOQueryLapJumlahBuku. Isi properti Connection denganADOConnection yang telah dihubungkan dengan databasePerpustakaan 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 [HURUFJUDUL]FROM BUKU B, PENERBIT P WHERE B.KODE_PENERBIT = P.KODE_PENERBITORDER BY JUDULIsi properti Active dengan nilai TRUE. Selanjutnya letakkanRvDataSetConnection yang berada pada page Rave, beri namaRvDataSetConnectionLapJumlahBuku dan isi properti DataSetdengan 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 tersebutdengan DVLapJumlahBuku.Kemudian rancanglah report untuk memberikan laporan jumlah bukuyang 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. 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 DataTextyang dihubungkan pada suatu field tertentu pada database melaluiDataView, sedangkan SubTotal dan GrandTotal adalah komponenCalcText.Seperti gambaran di atas, pada report RepLapJumlahBuku terdapatempat komponen Band, dan satu DataBand. Band-band tersebutadalah: 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 DVLapJumlahBuku282
  54. 54. BandTypes Group Footer (g) ControllerBand DetailDataBand GroupFooter Band Band GroupDataVie DVLapJumlahBuku w GroupKey <HURUF JUDUL> BandTypes Body Footer (b) BodyFooterB Band and ControllerBand DetailDataBandPada GroupHeaderBand dan GroupFooterBand didefinisikanGroupKey <HURUF JUDUL> (field) dari DataViewDVLapJumlahBuku. Field <HURUF JUDUL> adalah huruf pertamadari judul. Dengan demikian GroupHeaderBand danGroupFooterBand akan dicetak setiap kali field huruf judul berubah.Ini dimaksudkan agar report mencetak informasi sesuai dengan hurufpertama judul (pengelompokan dengan huruf pertama dari judulbuku).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. 55. DataView DVLapJumlahBuku DataTextCategory DataText DataField CATEGORY DataView DVLapJumlahBuku DataTextPersediaan DataText DataField JUMLAHPada GroupFooterBand terdapat CalcText yang digunakan untukmencetak subtotal. Properti pada CalcTextSubTotal yang diaturadalah: • ControllerBand • DetailDataBand. • DataView • DVLapJumlahBuku. • DataField • JUMLAH • CalcType • ctSUMDengan demikian pada CalcText akan tercetak subtotal dari record-record yang dicetak pada Group yang berbeda-beda (groupberdasarkan huruf pertama dari judul) yang telah didefinisikan padaGroupHeaderBand dan GroupFooterBand.Pada BodyFooterBand juga terdapat komponen CalcText untukGrandTotal. Properti yang harus diatur sama dengan CalcText padaGroupFooterBand, yaitu: • ControllerBand • DetailDataBand. • DataView • DVLapJumlahBuku. • DataField • JUMLAH • CalcType • ctSUMCalcType menentukan operasi apa yang akan dilakukan CalcText. Diatas digunakan ctSUM untuk operasi penjumlahan. CalcType yanglain adalah ctAverage (mencari nilai rata-rata), ctMIN/ctMAX(mencari nilai minimum/maksimum), dan ctCount (mencari jumlahfield/record yang dicetak). GroupFooterBand akan dicetak setelahGroupHeaderBand.284
  56. 56. 5.3.4 Laporan Pendapatan DendaMenggunakan ParameterPada DataText terdapat properti DataField. Properti DataFieldtersebut dapat diisi dengan field atau nama field yang ada padaDataView.Untuk itu dapat digunakan DataText Editor (klik button elips padaProperty Panel saat properti DataField dipilih).Selain dapat mengatur agar DataText menampilkan suatu field dariDataView, dengan DataText Editor kita dapat memasukkan ReportVariable, Parameter, Post Initialize Variable, atau menggabungkannyadengan suatu string.Parameter sendiri dapat dimasukkan sebagai properti DataField.Properti tersebut nilainya dapat dikirim melalui aplikasimenggunakan komponen RvProject. Pada contoh berikut kita akanmenggunakan parameter, yaitu menggunakan RepLapDenda yangada pada file RepBuku.Rav. Gambar 5.34 Data Text EditorRepLapDenda sendiri digunakan untuk menampilkan tiga laporandenda yang terdiri atas Laporan Pendapatan Denda Pertanggal,Perbulan, atau Perperiode. Karena semua report mempunyai desain 285
  57. 57. yang sama, kita tidak perlu membuat tiga report yang berbeda. Halini dikarenakan meskipun report ini menggunakan datasetADOStoredProc yang memanggil Stored Procedure pada database,ketiga Stored Procedure tersebut mempunyai result set dengan field-field yang sama. Untuk membedakannya, pada subjudul akanditampilkan keterangan sesuai dengan stored procedure yangdipanggil. Untuk keperluan ini dapat digunakan parameter padadatatext, 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 DataTextyang dihubungkan dengan suatu field tertentu pada database melaluiDataView, sedangkan Grand Total adalah komponen CalcText.286
  58. 58. Untuk membuat koneksi pada report ini, letakkanlah komponenADOStoredProc dan namakan ADOStoredProcLapDenda yangmenggunakan koneksi ADOConnection melalui properti Connection.Lalu tambahkan RvDataSetConnection, beri namaRvDataSetConnectionLapDenda. Selanjutnya, seperti pada reportyang lain, isi properti DataSet menjadi ADOStoredProcLapDenda.Pada ADOStoredProcLapDenda isi ProcedureName dengan salahsatu 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 parameteruntuk dapat mengembalikan result set, isi nilai parameternya.Misalkan pada ProcedureName diisi dengan storedProcedureLAP_PEND_DENDA_PERTANGGAL, pilihlah @TanggalBulan padaparameter (klik tombol elips pada property parameter). Pada propertiValue, isi tanggal agar stored procedure tersebut dapatmengembalikan result set yang akan memudahkan pada saat desainmenggunakan Rave Designer. Dengan adanya Result Set, jika kitamelakukan Preview maka akan terlihat hasilnya (apakah sesuai datayang ada pada database). Gambar 5.35 Property Parameter pada ADOStoredProcLapDenda 287
  59. 59. Setelah itu isi properti Active pada ADOStoredProcLapDenda dengannilai TRUE. Setelah koneksi siap, kita dapat membuat dataview padaRave Designer, lalu merancangnya seperti gambar di atas. Setelahmembuat report baru (RepLapDenda) dan merancang tampilannya,buat dataview dari RvDataSetConnectionLapDenda yang sudahdiatur pada Delphi dan beri nama DVLapDenda. Setelah itu kitadapat merancang report (sesuai keinginan) karena DataView telahdidefinisikan.Perancangan band, komponen text, dataText, dan komponen padareport ini sama seperti report-report sebelumnya.Untuk komponen DataText pada Body Header, isi Param.SubTitle.DataText ini tidak diisikan dengan Field yang ada padaDVLapDenda, tetapi diisi dengan Param dengan nama SubTitle(Param.SubTitle). DataText ini tidak akan dicetak sebelum aplikasimengirimkan suatu string. Setelah aplikasi mengirimkan string,report akan menampilkan/mencetak string yang dikirim aplikasipada DataText saat report dieksekusi.Pemanggilan ReportUntuk dapat mamanggil report yang telah dibuat dan disimpandalam file rave project (.rav), dibutuhkan komponen RvProject yangada 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 tersebut288
  60. 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. 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 ReportPada RepLapDenda (file rave project RepBuku.rav) yang telahdibahas di atas, digunakan parameter pada saat perancangan.Parameter tersebut adalah SubTitle (Param.SubTitle). Untuk dapatmengirim string dari aplikasi, dapat diatur parameter dengan metode290
  62. 62. SetParam(Param: String; Value: String). SetParam mempunyai duaparameter. Parameter pertama adalah Param, yaitu namaparameternya. Parameter kedua adalah Value, yaitu nilai string yangakan dikirim ke report. Sebelum report dieksekusi, kirim nilaiparameter terlebih dahulu dengan SetParam.Contoh:RvProjectBuku.SetParam(SubTitle, Pendapatan Denda Tanggal +FormatDateTime(dd MMMM yyyy,DTPTanggal.DateTime));if RvProjectBuku.SelectReport(RepLapDenda, FALSE) thenRvProjectBuku.Execute;Dengan demikian, pada saat RapLapDenda dieksekusi akanditampilkan ‘Pendapatan Denda Tanggal xx-xxxxxxx-xxxx (sesuaitanggal pada DTPTanggal) pada DataText yang menggunakanParameter (Param.SubTitle).Karena RepLapDenda digunakan oleh tiga Stored Procedure,definisikan terlebih dahulu ProcedureName dan Parameter yangdiperlukan Stored Procedure yang bersangkutan pada dataset(ADOStoredProc) sebelum mengeksekusi report.Contoh lengkapnya:case RGPendDenda.ItemIndex of 0: beginwith DM.ADOStoredProcLapDenda dobeginActive := FALSE;Parameters.Clear;ProcedureName := LAP_PEND_DENDA_PERTANGGAL;Parameters.CreateParameter( @Tanggal, ftDateTime, pdInput, 50, DTPTanggal.DateTime);RvProjectBuku.SetParam(SubTitle, Pendapatan Denda Tanggal + FormatDateTime(dd MMMMyyyy,DTPTanggal.DateTime));Active := TRUE;if RvProjectBuku.SelectReport(RepLapDenda, FALSE) then RvProjectBuku.Execute;End;end;1: beginwith DM.ADOStoredProcLapDenda dobeginActive := FALSE;Parameters.Clear;ProcedureName := LAP_PEND_DENDA_PERBULAN; Parameters.CreateParameter( @TanggalBulan, ftDateTime, pdInput, 50, DTPBulan.DateTime);RvProjectBuku.SetParam(SubTitle, Pendapatan Denda Bulan + 291
  63. 63. FormatDateTime(mmmm,DTPBulan.DateTime));Active := TRUE;if RvProjectBuku.SelectReport(RepLapDenda, FALSE) then RvProjectBuku.Execute;end;end; 2: beginwith DM.ADOStoredProcLapDenda dobeginActive := 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 MMMMyyyy,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 TextUntuk menyimpan Report dalam format PDF, HTML, RTF, dan text,Rave Report menyediakan komponen-komponen RvRenderPDF,RvRenderHTML, RvRenderRTF, dan RvRenderText yang berada padapage Rave pada component Pallete. Gambar 5.36 Form Laporan Anggota dengan Empat Komponen Rave292
  64. 64. Penggunaannya cukup dengan menambahkan komponen-komponen tersebut pada form dimana komponen RvProject berada.Setelah itu atur properti Active menjadi TRUE sehingga report yangmempunyai kemampuan untuk menyimpan dalam format tersebut.Sebagai contoh, pada FrmLaporanAnggota ditambahkan empatkomponen rave, yaitu RvRenderPDF, RvRenderHTML, RvRenderRTF,dan RvRenderText. Akibatnya jika program dijalankan Anda dapatmenyimpan report dalam salah satu format file di atas denganmemilih File pada dialog Output Options, bagian Report Destination.Tentukan nama dan direktori file yang akan disimpan, lalu pilihformat file yang diinginkan pada Format, kemudian klik OK. Gambar 5.37 Output Option dengan Format PDFAnda dapat juga melihat Preview Report terlebih dahulu jika padaReport Destination dipilih Preview. Kemudian pilih Save As dari menuFile untuk menyimpan report tersebut. Gambar 5.38 Save File As... 293

×