P> Pengguna sering membuat laporan saat menggunakan aplikasi database. Di sini, kami menggunakan laporan tata kelola perangkat sebagai contoh untuk menggambarkan cara menggunakan komponen qreport dan komponen kueri untuk merancang untuk menghasilkan laporan dari beberapa tabel data.
1. Database yang digunakan
Di sini kami menggunakan tiga tabel data FoxPro, DLBMK (kode kategori peralatan), SBXHK (model peralatan dan konfigurasi), dan BMSBK (departemen peralatan), yang disimpan dalam direktori D:/SB. Struktur perpustakaan adalah sebagai berikut:
(I) Nama bidang DLBMK Jenis bidang Penjelasan 1 DLBH N3 Kategori Perangkat Nomor 2 DLMC C20 Nama Kategori Perangkat (ii) SBXHK Nama bidang Nama Bidang Jenis Penjelasan 1 XHBM N3 Kode Model Perangkat 2 DLBH N3 DLBH Bidang dalam DLBMK 3 SBXH C30 Model perangkat DLBMK 3 SBXH C30 Model Device 4 SBPZ C30 Konfigurasi Perangkat 5 SBSL N3 Jumlah Perangkat (iii) BMSBK Nama bidang Jenis bidang Penjelasan 1 BMMC C20 Nama Departemen 2 XHBM N3 XHBM Bidang di SBXHK 3 SL N3 Kuantitas Gunakan ketiga tabel data ini untuk menghasilkan model perangkat yang hanya tersedia yang hanya tersedia yang tersedia yang hanya tersedia. di departemen komputer tetapi tidak di departemen lain.
2?
Ada dua formulir dalam program: MainForm MainForm dan Laporan Formulir RepForm. Ada dua bagian tbutton di MainForm MainForm, dan pengaturannya adalah sebagai berikut:
Bagian Properti dan Nilai Atribut
Previewbtn: Tbutton Caption: Pratinjau
PrintBTN: TBUTTON CAPTION: Komponen dan properti dalam bentuk print RepForm yang ditetapkan sebagai berikut:
Bagian Properti dan Nilai Atribut
Query1: TQuery Databasename: D:/SB
Aktif: Benar
QREP1: Dataset Tquickrep: Query1
TitleBand1: TQRBand Bandtype: RBtitle
Headband1: TQRBand Bandtype: RBColumnheader
Drawleft: Benar
Drawright: Benar
Drawtop: Benar
Drawbottom: Benar
Detailband1: TQRBand Bandtype: RBDetail
Drawleft: Benar
Drawright: Benar
Drawtop: Benar
Drawbottom: Benar
ChildBand1: TQRChildband Parentband: Detailband1
Drawleft: Benar
Drawright: Benar
Drawtop: Benar
Drawbottom: Benar
Titlelabel: TQRLabel Caption: Tabel Statistik Perangkat
Dlmclabel: TQRLabel Caption: Kategori
SBXHLABEL: TQRLabel Caption: Model
SBPZLabel: Keterangan TQRLabel: Konfigurasi
Sbsllabel: TQRLabel Caption: Kuantitas
DLMCDBTEXT: Dataset TQRDBTEXT: Query1
DataField: DLMC
SBXHDBTEXT: Dataset TQRDBTEXT: Query1
DataField: SBXH
SBPZDBTEXT: Dataset TQRDBTEXT: Query1
DataField: SBPZ
SBSLDBTEXT: Dataset TQRDBTEXT: Query1
DataField: SBSL
Shape1 ~ 9: TQRShape Shape: Qrsvertline
Atas: 0
Lebar: 1
Properti SQL Query1 diatur ke:
Pilih a.dlbh, a.dlmc, b.sbxh, b.sbpz, b.sbsl
dari dlbmk a, sbxhk b
dimana a.dlbh = b.dlbh dan b.xhbm tidak masuk
(Pilih XHBM dari BMSBK WHERE TRIM (BMMC) $#@60; $#@62; 'Departemen Komputer')
pesanan oleh a.dlbh atur nilai atribut drawft, drawright, drawtop, dan drawbottom dari beberapa komponen tqrband ke true, untuk mencetak batas tabel dan garis horizontal. Komponen TQRShape digunakan untuk mencetak garis vertikal tabel. DLMCDBTEXT ditempatkan pada detailband1, beberapa komponen TQRDBtext lainnya ditempatkan pada childband1, Shape1 ~ 3 ditempatkan pada ikat kepala1, bentuk4 ~ 6 ditempatkan pada detailband1, bentuk7 ~ 9 ditempatkan pada pita anak1.
3. Tambahkan kode ke program
1. Dua acara tombol dalam prosedur MainForm tMainForm.previewBtnClick (pengirim: TOBJEKS)
Mulai
repform.qrep1.preview;
akhir;
Prosedur tMAintFormPrintBtnClick (pengirim: TOBJEKS)
Mulai
repform.qrep1.print;
akhir;
2. Peristiwa Beforeprint dari Headband1, Detailband1 dan Childband1 adalah proses trepform. HEADBAND1BEFOREPRINT (Pengirim: TQRCUSTOMBAND; Var Printband: Boolean)
Mulai
Bentuk1.height: = headband1.height;
Bentuk2.Height: = headband1.height;
Bentuk3.HEIGHT: = headband1.height;
Akhir;
Prosedur trepform.detailband1beforeprint (pengirim: tqrcustomband; var printband: boolean)
Mulai
Printband: = bh $#@60; $#@62; query1 ['dlbh'];
Jika printband maka
Mulai
bh: = query1 ['dlbh'];
Bentuk4.Height: = detailband1.height;
Bentuk5.height: = detailband1.height;
Bentuk6.height: = detailband1.height;
akhir
akhir;
Prosedur trepform.childband1beforeprint (pengirim: tqrcustomband; var printband: boolean)
Mulai
Bentuk7.height: = childband1.height;
Bentuk8.height: = childband1.height;
Bentuk9.Height: = childband1.height;
Akhir;
BH harus didefinisikan dalam bagian definisi variabel: var bh: shortint = 0;
Ketinggian beberapa bagian tqrshape konsisten dengan bagian tqrband, membuat garis vertikal dicetak dengan rapi. Jika ketinggian komponen tqrband disesuaikan selama tahap desain, tidak akan ada kerusakan garis vertikal atau panjang berlebihan.
Dikontrol dengan printband dalam acara beforeprint dari detailband1, nama kategori utama masing -masing perangkat dapat dicetak hanya sekali, daripada nama kategori utama yang sesuai dengan masing -masing model. Karena nilai -nilai bidang DLBH lebih besar dari 0, nilai awal BH diatur ke 0 sehingga berbeda dari nilai bidang DLBH dari catatan apa pun untuk memastikan bahwa nama kelas utama pertama dicetak . Ini menghasilkan laporan data yang mengekstraksi data dari beberapa tabel data dan memiliki baris tabel.
Catatan: File proyek dalam contoh ini adalah SBGL.DPR, dan file program asli adalah Main.pas dan SBREP.PAS. di direktori D:/SB.