SlideShare a Scribd company logo
© mztolo 2006 – PB pemula 1
DAFTAR ISI
POWERBUILDER #1 (Langkah Pertama dan exe)
POWERBUILDER #2(pembuatan menu utama)
POWERBUILDER #3(Pembuatan Database)
POWERBUILDER #4(entri data)
POWERBUILDER #5(memodifikasi tampilan entri data)
POWERBUILDER #6(script event entri data)
POWERBUILDER #7(PB Object Function)
POWERBUILDER #8(script tombol entri data)
POWERBUILDER #9(Data freeform)
POWERBUILDER #9 bag. 2(Data freefrom 2)
POWERBUILDER #9 bag. 3(Data freeform master list)
POWERBUILDER #10(Membuat pesan eror)
POWERBUILDER #11(menu)
POWERBUILDER #12(mencetak data window)
POWERBUILDER #12b(mencetak data window)
POWERBUILDER #12c(mencetak data window)
POWERBUILDER #12 d(mencetak data window)
POWERBUILDER #13(membuat parameter sheet)
PB#14 (tambahan)
© mztolo 2006 – PB pemula 2
POWERBUILDER #1
Powerbuilder adalah bahasa pemrograman database visual, dg fitur dan kelebihan-
kelebihan antara lain :
- termasuk golongan 4GL/bhs pemrograman generasi keempat
- memakai metodologi RAD (Rapid Application Development) sehingga
pengerjaan program akan cepat.
- client/server (2-tier maupun 3-tier)
- oop atau berorientasi object dll.
Untuk latihan sample yg anda perlukan adalah :
- PowerBuilder product www.sybase.com
- Database dengan mysql product www.mysql.com
Mari kita mulai……jalankan PB anda spt ini :
Penjelasan gambar di atas adalah :
1. Menu Bar (menu-menu dari PB)
2. Toolbar (icon-icon toolbar PB)
3. Window System Tree (berisi informasi sistem object dan object aplikasi yg lain
semacam function, events, window dll.)
4. Window Clip (digunakan untuk menempatkan output ke dlm window clip)
5. Window Output (output informasi spt error message dan proses yg lain)
6. Painter (layar editor tempat membuat object)
Anda bisa menampilkan atau tidak window yg ada dengan mengaturnya di menu
“Window” spt tampak di gambar atas.
© mztolo 2006 – PB pemula 3
Selanjutnya untuk memulai pembuatan program klik icon “New” spt ini :
Di bahasa pemrograman lain di sebut juga project, di PB di sebut Workspace atau area
kerja kita.
Tampak modul spt ini :
Perhatikan di page “Workspace” pilih icon Workspace dan klik OK
Ketik nama workspace nya “siswa” dan saya simpan di folder “c:samplePB”
© mztolo 2006 – PB pemula 4
Klik tombol SAVE
Tampak workspace “siswa” telah tercipta :
Klik tombol “New” lagi dan pilih page “Target” :
Pilih target type nya, yaitu “Application” karena kita akan membuat aplikasi.
Klik tombol OK
© mztolo 2006 – PB pemula 5
Ketik nama targetnya misal “siswa” juga….spt ini :
Waktu anda klik di entrian bawah selanjutnya akan tampak spt ini….
© mztolo 2006 – PB pemula 6
Klik tombol FINISH maka target tercipta dan hasilnya akan tampak spt ini :
Dan kalau anda lihat di direktory “samplePB” akan tampak spt ini :
Keterangan :
siswa.pbw adalah nama file workspacenya
siswa.pbt adalah nama file targetnya
siswa.pbl adalah nama file librarynya
© mztolo 2006 – PB pemula 7
Ok selanjutnya klik tombol “New” kembali untuk membuat window :
Pilih page “PB Object” dan klik “Window” serta tombol OK
Tampak “window” atau form yg anda buat sudah tampak di “painter” anda…..
© mztolo 2006 – PB pemula 8
Agar view tampak luas anda bisa close terlebih dahulu window clip dan window output,
dan hanya menyisakan “window system tree” serta “painter”.
Selanjutnya mari kita tambahkan text di dalam window itu…..
Klik kontrol “command button” spt tampak di atas…sampai tampil spt ini :
Pilih “Static text” spt tampak di gambar atas dan klik di area window/form anda spt ini :
© mztolo 2006 – PB pemula 9
Seperti tampak pada gambar di atas…..selanjutnya ganti text/caption “none” anda
misalnya dg tulisan spt ini “Latihan 1st
ku”
Anda bisa atur font nya spt ini di properties-nya
Atau bisa anda atur lewat ini ……
© mztolo 2006 – PB pemula 10
Selanjutnya tambahkan command button /tombol di window/form itu….caranya klik
control command buttonnya dulu dan pilih “command button” spt ini :
Selanjutnya klik di area window spt ini dan atur text nya shg menjadi spt di bawah….
Untuk title/caption window nya sendiri anda klik di area kosong window dan ganti tiltle
nya :
© mztolo 2006 – PB pemula 11
Menjadi spt ini…..misalnya…
Selanjutnya double click di tombol “Close” untuk mengisi click eventnya spt ini :
Anda ketik “close(parent)”… yg artinya menutup parent dari tombol itu ..parent adalah
tempat tombol berada …dg arti lain “window” itu….
Untuk kembali ke desain window tadi klik page/tab/frame “Layout” spt tampak di
gambar di bawah.
Spt ini……
© mztolo 2006 – PB pemula 12
Klik tombol save sampai tampil modul spt ini :
Ketik nama window-nya “w_utama” dan klik tombol OK
Tampak juga jika anda ingin menambahkan comments/komentar….dan nama library dari
window yg anda buat.
Hasilnya spt ini…tampak di window system tree anda :
© mztolo 2006 – PB pemula 13
Anda bisa close window yg anda buat dg klik tombol close spt ini :
Selanjutnya untuk memanggil form ini pada saat aplikasi jalan pertama kali….
Double klik di object aplikasi “siswa” dan ketik koding spt berikut :
Anda perhatikan comments/komentar di event di mulai dg tanda “//”
“open(w_utama)” artinya buka/jalankan window utama ini.
Catatan :
Dalam koding command button “Close” di window “w_utama” bisa anda ganti menjadi
“close(w_utama)” karena nama window itu adalah “w_utama”
Selanjutnya close dan save …spt ini :
© mztolo 2006 – PB pemula 14
Untuk test run program anda …klik icon ini dan lihat hasilnya…
Inilah latihan aplikasi 1st
anda …. 
Klik tombol “close” untuk release/close window/form tersebut…..
Ok…lalu bagaimana membuat file EXE nya ?!
Langkah selanjutnya adalah kita harus membuat “project” nya dg klik tombol “New”
….pilih tab/page “Project” pilih item “Application” dan klik tombol OK spt ini :
© mztolo 2006 – PB pemula 15
Tampak modul spt ini dan isi spt tampak di gambar :
Perhatikan nama Execute File Name nya……harus komplit termasuk direktorynya…
Klik tombol “close” atau klik icon save untuk menyimpan “project” ini :
© mztolo 2006 – PB pemula 16
Ketik nama project dan komentar yg di inginkan serta klik tombol OK
Hasilnya spt ini……
Selanjutnya klik menu “Run” di atas serta klik ….”Full Build Workspace” spt ini
Tampak report build nya di window output :
Kalo ada error akan tampil juga di window output ini…..
© mztolo 2006 – PB pemula 17
Berikutnya klik menu “Run” lagi dan pilih “Deploy Workspace”
Tampilan di window outputnya spt ini…….finish dan sukses !
Tampak isi direktory samplePB anda spt ini :
Klik file “siswa.exe” ….yap…running well 
Untuk selanjutnya jika anda mau implementasi atau install di client cukup file
“siswa.exe”, file “siswa.pbd” dan file2 runtime PB –nya …yg anda sertakan….
Ok…dengan demikian sample 1st
untuk PB cukup sekian dulu…nantikan sample2
berikutnya yg sudah mulai dg database 
Siapkan diri anda dg database mysql, myodbc, mysqlfront tentunya atau interface mysql
yg lain.
Akhir kata….sukses untuk anda !!
© mztolo 2006 – PB pemula 18
POWERBUILDER #2
Dalam PB #2 ini anda akan belajar membuat window type “mdi!” dan cara membuat
“menu”, buka workspace yg pernah anda buat di latihan PB #1 :
Rancangan aplikasi yg akan di buat nantinya adalah …berupa aplikasi dg layar utama dan
ada menu untuk menjalankan window/form/modul entri yg ada.
Jadi tidak spt waktu latihan 1st
di PB #1 yg tampil hanya berupa window tunggal saja.
Tipe data window utama untuk aplikasi dan bersifat spt screen, di PB dikenal sebagai
type window mdi! (multiple document interface)
Sebuah type window mdi!, type window ini sendiri harus memiliki “menu”
Ok sebelum anda tambah bingung…..ikuti saja langkah2 berikut….
Membuat MENU :
Klik tombol “New” ……pilih tab “PB Object” pilih “Menu” dan klik tombol OK…
© mztolo 2006 – PB pemula 19
Tampak di painter anda modul menu painter…tempat anda membuat menu…
Klik kanan pada text “untitled0” … spt ini dan klik “Insert Submenu Item”
Ketik “&File” spt tampak di gambar di bawah ini….
Tanda “&” pada nama2 menu di gunakan sbg shortcut…sehingga bisa di panggil dengan
menekan ALT+F
© mztolo 2006 – PB pemula 20
Tampak juga di propertiesnya spt ini…..
Klik kanan di “&File” dan klik “Insert Submenu Item” untuk membuat sub-menunya…
Ketik “Entri &Siswa” spt tampak di gambar bawah…
© mztolo 2006 – PB pemula 21
Ulangi langkah2 di atas untuk membuat sub-menu berikutnya…sehingga hasilnya spt ini
Di layar sebelah kanan tampak layout/display/preview tampilan menu yg telah di buat….
Selanjutnya buat menu item lain …dg cara klik kanan “&File” dan klik spt di bawah ini..
Ketik spt tampak berikut ini….
Dan buat sub-menu “Transaksi” serta menu item berikutnya sehingga hasilnya spt ini…
© mztolo 2006 – PB pemula 22
Save dan beri nama “mn_siswa” spt tampak di gambar bawah…
Dengan demikian proses pembuatan menu sudah selesai… 
Tampak “mn_siswa” sudah ada di tree system anda :
© mztolo 2006 – PB pemula 23
Ok selanjutnya double click window “w_utama” ….
© mztolo 2006 – PB pemula 24
Perhatikan :
Title =“Program Entri Data Siswa”
WindowType =mdi!
WindowState =maximized!
Icon =Form!
Selanjutnya klik tombol di kanan entrian “MenuName”
Tampak modul spt ini…
© mztolo 2006 – PB pemula 25
Dan klik tombol OK……sehingga tampak di properties spt gambar di bawah ini….
Save perubahan window “w_utama”….
……dan coba run aplikasi …klik icon
Yap…..sukses……. 
© mztolo 2006 – PB pemula 26
Hapus text “Latihan 1st
ku” dan tombol “Close”…..maka jika di run akan spt ini…
Note :
Menu-menu di atas belum berisi command/koding, sehingga jika anda klik menu “Exit”
pun window/aplikasi tdk akan “Close” atau “Exit”
Bagaimana cara mengisinya ?
Mari kita lakukan………..
Double click di “mn_siswa” untuk melakukan modifikasi menu tersebut…
Selanjutnya double click di menu item “E&xit” agar event click nya aktif….
Ketik koding spt tampak di gambar bawah….
© mztolo 2006 – PB pemula 27
Perhatikan :
if messagebox('Exit','Anda Yakin ?',question!,YesNo!) = 1 then
halt
end if
Note :
“m_file.m_exit” artinya m_exit (“E&xit”) merupakan sub-menu dari m_file (“&File”)
Pada saat anda klik menu “Exit” maka akan keluar pertanyaan spt ini…
Jika anda klik tombol “Yes” maka sistem akan “HALT” alias berhenti atau close…(nilai
return valuenya 1, kalo 2 adalah “No” … perhatikan susunan “YesNo!” …yes=1 ..no=2)
Perhatikan gambar di atas dan perhatikan koding-nya…anda bisa ambil kesimpulan
sendiri….misal “question!” itu simbol “?” spt tampak di gambar….begitu juga text yg
lainnya….
Untuk koding yg lain akan dibuat sambil jalan…nantikan sample berikutnya 
Sukses untuk anda !!
© mztolo 2006 – PB pemula 28
POWERBUILDER #3
Untuk latihan berikut ini Anda siapkan database “sekolah” dengan table “tblsiswa” di
mysql anda, adapun struktur tablenya spt ini :
1. nis char(8)
2. nama varchar(50)
3. kota varchar(15)
4. tgllhr date
5. jkel char(1)
6. tabungan float(10,0)
Spt tampak di bawah ini, dg mySQLFront 2.5 :
Selanjutnya buka workspace yg pernah anda buat di latihan PB sebelumnya :
© mztolo 2006 – PB pemula 29
Setelah database mysql anda create selanjutnya adalah membuat koneksi database dengan
cara….klik icon “Database”
Klik tombol “+” di depan ODB ODBC sehingga …ter-expand….
Klik kanan di ODB ODBC …dan klik “New Profile….“
© mztolo 2006 – PB pemula 30
Tampil modul “Database Profile Setup – ODBC” spt ini……
Isi data/value spt tampak di atas…..
Profile Name: =sekolah
User ID: =root
Isolation Level: =Read Uncommitted
Driver-Specific Parameters: =
DRIVER={MySQL ODBC 3.51 Driver};DESC=;DATABASE=sekolah;
SERVER=guzrud;UID=root;PASSWORD=;PORT=3306;OPTION=3;STMT=;
Note :
sekolah adalah nama databasenya
guzrud adalah nama servernya, sesuaikan dg nama server anda
root adalah id standard koneksi ke mysql nya
“Commit on Disconnect” jangan di centang !
Klik tombol “Apply”
© mztolo 2006 – PB pemula 31
Klik tab “Preview” sehingga tampak spt ini…..
Klik tombol “Copy” untuk mengcopy listing profile koneksinya….(perhatikan kalo copy
listing tersebut masih dlm kondisi ter-blok spt tampak di gambar atas)
Gunanya untuk apa ?! …nanti anda tahu 
Klik tombol “Test Connection” untuk memastikan connection successful…..
Yap….sukses…. !!
Klik tombol OK…..
Selanjutnya untuk keluar dari modul profile ini klik tombol OK lagi……
© mztolo 2006 – PB pemula 32
Tampak profile koneksi “sekolah” telah tercipta…..
Klik kanan dan “Connect” …
Perhatikan tanda centang warna hijau yg menandakan koneksi yg aktif.
© mztolo 2006 – PB pemula 33
Ok selanjutnya double click “object application” siswa….
Dalam “open” event nya di atas command “open(w_utama)” klik kanan mouse dan
“paste” listing kode profile koneksinya ….shg hasilnya spt ini…( jadi tahu kan kenapa
tadi anda diminta untuk click tombol “Copy” lihat hal. 4)
Tambahkan command untuk “connect” stl listing tersebut sbl “open(w_utama)”
connect;
if SQLCA.SQLDBCode<>0 then
messagebox('Koneksi Gagal',SQLCA.SQLErrText,stopsign!)
halt close
end if
Note :
connect; adalah perintah untuk konek ke database sesuai listing SQLCA nya…
jika SQLCA.SQLDBCode bernilai selain 0 (nol) maka koneksi gagal…jika koneksi gagal
maka sistem close.
SQLCA sendiri di PB adalah sebuah object dg type “Transaction” yg berfungsi
menangani koneksi ke database, SQLCA di deklarasikan sbg variable yg bersifat global
dan merupakan object standard PB untuk koneksi ke database.
© mztolo 2006 – PB pemula 34
Sehingga menjadi spt ini…
Mmmmm kenapa harus ada 2x koneksi …lalu yg di pakai yg mana ?
Dua-duanya di pakai…..
Koneksi di “Database” akan kepakai pada saat kita desain datawindow….interface untuk
datanya (baik sbg query maupun editing dan report)
Sedangkan koneksi di object aplikasi dipakai untuk koneksi pada saat aplikasi itu running
Simpan perubahan yg terjadi …ini akan terpakai pada saat pembuatan datawindow, ada
di sample berikutnya 
Dengan demikian proses pembuatan profile koneksi data sudah selesai 
Sukses untuk anda !!
© mztolo 2006 – PB pemula 35
POWERBUILDER #4
Sample kali ini adalah membuat modul entry untuk data “siswa”….
Modul ini berupa window dgn beberapa tombol dan datawindow sbg interface datanya.
Datawindow sendiri berfungsi sbg display, serta memungkinkan user untuk
memanipulasi, update data dan informasi yg lain.
Window sendiri dalam hal ini berfungsi sbg tempat datawindow tersebut.
Jadi kalo digambarkan akan memiliki urutan sb :
Data – Datawindow – Window
Mari kita mulai…….Klik tombol “New” sampai tampil spt ini…..
Pilih tab “DataWindow”, pilih “Freeform” dan klik tombol OK
Klik tombol “Next >”
© mztolo 2006 – PB pemula 36
Klik table “tblsiswa” dan klik tombol “Add All” serta diikuti tombol OK, sampai tampil
modul spt ini……
Klik tombol “Next >”
© mztolo 2006 – PB pemula 37
Untuk mengakhiri klik tombol “Finish” …datawindow anda sudah jadi…
© mztolo 2006 – PB pemula 38
Setup/lihat update properties… datawindow-nya….klik menu “Rows” dan klik menu
“Update Propertiesnya”……spt ini
Perhatikan ….setting updatenya sudah benar….klik OK
Note :
Allow Updates–nya sudah di centang
Table to Update–nya sudah benar
Updateable Columns–nya sudah benar
Unique Key Column(s)–nya juga sudah benar sesuai primary key mysql sbg databasenya.
Begitu juga klausa dan key modifikasinya juga sudah benar.
© mztolo 2006 – PB pemula 39
Save datawindow tersebut……dg nama “dw_entri_siswa”……dan klik OK
Tampak di system tree anda ……
Selanjutnya membuat window sbg tempat kontrol datawindow “dw_entri_siswa” tersebut
Tidak perlu saya jelaskan secara rinci langkah2 nya karena di sample sebelumnya telah
ada sample membuat window.
© mztolo 2006 – PB pemula 40
Perhatikan di window ini ada 9 tombol spt tampak di gambar atas…..
Perhatikan propertiesnya ….anda buat spt contoh ini..
Klik datawindow “dw_entri_siswa” yg ada di system tree dan drag ke window….spt ini
© mztolo 2006 – PB pemula 41
Rapikan sehingga menjadi spt ini…(atur lebar dan tata letakknya)
Perhatikan properties datawindow “dw_entri_siswa”….
Name control datawindow ini adalah “dw_1” ….nama ini bisa anda ganti sesuai
keinginan anda…sementara kita pakai “dw_1” dulu…..
© mztolo 2006 – PB pemula 42
Double click di area kosong window untuk mengaktifkan “open” event nya dan ketik :
dw_1.setTransObject(SQLCA)
Selanjutnya mari kita isi click event dari masing2 tombolnya…..
Kita mulai dari tombol “Retrieve”….. double click tombol tsb….ketik koding ini :
dw_1.retrieve()
Note :
dw_1 adalah nama dari kontrol datawindownya spt yg dijelaskan di atas
setTransObject(SQLCA) berfungsi untuk memberikan sepisifikasi object transaksi yg di
pergunakan, dalam hal ini adalah SQLCA.
retrieve() adalah perintah untuk SELECT (table/view) atau EXEC (store procedure).
Double click tombol “Add” dan ketik koding berikut….(untuk menambah)
dw_1.ScrollToRow(dw_1.insertrow(0))
dw_1.setcolumn(1)
dw_1.setfocus()
Note :
insertrow(0) berfungsi untuk menambahkan data baru
scrolltorow() tersendiri berfungsi untuk mengeser pointer ke row baru/kosong tsb.
setcolumn(1) aktifkan kolom 1
setfocus() aktifkan kursor
Double click tombol “Update” dan ketik koding berikut…(untuk menyimpan)
if dw_1.update()=1 then
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Note :
Jka update() sukses, return value =1 maka “commit” jika tidak akan di “rollback” atau di
kembalikan spt keadaan sbl proses editing.
Double click tombol “Delete” dan ketik koding berikut…(untuk hapus data)
if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return -1
if dw_1.rowcount()>0 then
dw_1.deleterow(0)
dw_1.setfocus()
if dw_1.update()=1 then
commit;
messagebox('Info..','Penghapusan Sukses !',information!,ok!)
© mztolo 2006 – PB pemula 43
else
rollback;
messagebox('Info..','Penghapusan Gagal !',information!,ok!)
return -1
end if
else
return -1
end if
Note :
deleterow(0) berfungsi untuk menghapus row aktif.
Double click tombol “Close” dan ketik koding berikut…(untuk close window)
close(parent)
Double click tombol “<<” dan ketik koding berikut…(untuk go top)
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrolltorow(1)
end if
Note :
getrow() berfungsi untuk mengecek row aktif di datawindow ….jika = 1 artinya di row
pertama.
scrolltorow(1) artinya mengeser pointer ke record/row 1
Double click tombol “<” dan ketik koding berikut…(untuk ke row sebelumnya)
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrollpriorrow()
end if
Note
scrollpriorrow() untuk menggeser pointer ke row sebelumnya
Double click tombol “>” dan ketik koding berikut…(untuk ke row berikutnya)
if dw_1.getrow() =dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrollnextrow()
end if
© mztolo 2006 – PB pemula 44
Note :
rowcount() untuk mengetahui jml row/record yg ada di datawindow
scrollnextrow() untuk ke row berikutnya
Double click tombol “>>” dan ketik koding berikut…(untuk go bottom)
if dw_1.getrow() = dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrolltorow(dw_1.rowcount() )
end if
Note :
scrolltorow(jml row datawindow) artinya sama juga ke row terakhir
Ok…..koding sudah selesai …save window anda dg nama “w_entri_siswa”
Selanjutnya double click menu “Entri &Siswa” dan ketik koding untuk memanggil
window “w_entri_siswa” spt ini……
Perhatikan koding di m_file.m_entrisiswa :
opensheet(w_entri_siswa,w_utama,2,original!)
Note :
Membuka window “w_entri_siswa” sbg sheet atau lembar kerja yg bernaung di bawah/di
dalam window “w_utama”.
Angka 2 menunjukkan nomor menu item yg diasosiasikan dg sheet yg di buka.
original! menandakan window di open sesuai ukuran aslinya.
(anda bisa melihat detail penjelasan di help PB….blok command yg ingin dilihat detail
helpnya dan tekan tombol Shift + F1)
Kenapa dipakai opensheet() bukan open(w_utama) spt contoh sebelumnya ?
Kalo anda pakai open(w_utama) maka akan di anggap window terpisah dari window
mdi!-nya dan bersifat tdk “always on the top” atau modeless
© mztolo 2006 – PB pemula 45
Save perubahan di menu “mn_siswa” …..
Jalankan aplikasi anda…..klik tombol “Run” klik menu File > Entri Siswa
Begitulah tampilan sheet/window entri anda…..jika data sudah ada klik tombol
“Retrieve” untuk menampilkan data yg pernah di entri….
Klik tombol “ADD” isi data spt ini dan klik tombol “Update”…
© mztolo 2006 – PB pemula 46
Yap….data tersimpan dg sukses  klik OK
Ok dengan demikian sample datawindow dan window entri sudah selesai 
Apakah sample di atas sudah maksimal ?! Jelas belum….
Anda masih bisa mempercantik tampilan-nya dan memberikan toolbars sheetnya…
Akan di bahas di sample berikutnya……
Sukses untuk anda !!
© mztolo 2006 – PB pemula 47
POWERBUILDER #5
Perhatikan sheet/window entri yg pernah anda buat sebelumnya……
Masih lugu dan belom di make-up 
Dari system tree double click window entri siswa “w_entri_siswa” shg tampak spt ini…
Dan rightclick di area datawindow control nya….shg tampak spt berikut
Untuk modifikasi datawindow nya…klik “Modify DataWindow…”
© mztolo 2006 – PB pemula 48
Sehingga tampak spt di bawah….
Paling atas adalah design layout dari datawindownya…spt anda pernah buat
Bawahnya adalah preview dari datawindownya
Sedang yg paling bawah adalah list dari field2 databasenya.
Tekan dan tahan tombol control dan klik text keterangan dari field2 yg ada spt ini…
© mztolo 2006 – PB pemula 49
Lalu di propertiesnya anda setting border nya spt ini…”underline”
Hasilnya spt ini….
Selanjutnya coba click area kosong dari datawindow anda dan klik lagi text “Tgllhr :”
seperti ini :
© mztolo 2006 – PB pemula 50
Ubah property text “Tgllhr :” di kolom textnya spt tampak…..berikut ini :
Ganti “Text” yg ada dg “Lahir :” saja….shg tampak spt ini dan hasilnya….
Anda coba ubah “Jkel :” menjadi “Sex :” …shg tampak spt ini hasil akhirnya….
© mztolo 2006 – PB pemula 51
Tekan dan tahan tombol control lagi serta click semua field yg ada….spt ini :
Atur property “border” nya…spt ini :
Hasilnya spt ini :
© mztolo 2006 – PB pemula 52
Anda juga bisa coba pilihan tampilan border yg lain :
Selanjutnya rapikan dan rapatkan item2 atau field yg ada di situ…spt ini :
Serta rapatkan “band” detail anda ke atas….klik mouse dan geser ke atas …spt ini :
Ok…close painter editing datawindow ini dan jgn lupa save perubahan yg ada….
© mztolo 2006 – PB pemula 53
Perhatikan window anda…….spt ini :
Rapikan datawindow control dan tombol2 yg ada di window/sheet tersebut….spt ini :
Anda juga bisa atur “border/borderstyle” datawindow control nya shg menjadi spt ini :
© mztolo 2006 – PB pemula 54
Close dan save perubahan tersebut…..lalu jalankan aplikasi dan panggil window/sheet :
Lebih indah bukan ….. 
Dengan demikian sample “make-up” text, control field, window dan datawindow control
sudah selesai 
Anda bisa coba sendiri dg efek bold, italic dan warna sesuai selera anda ….
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 55
POWERBUILDER #6
Jalankan aplikasi anda dan buku sheet/window entri data siswa …spt ini
Klik data di “nis” dan tekan tombol ENTER ! Apa yg terjadi ?!
Data akan bergeser/bergerak ke record selanjutnya.
Untuk menggeser pointer dari satu field/kolom ke field/kolom lain, misal dari “nis” ke
“nama” bisa anda pakai tombol “tab” atau “tabulator”
Bagimana jika kita ingin mengeser pointer antar field/data dg tombol panah atas/bawah
atau tombol enter ?
Anda harus menambahkan “event” di datawindow controlnya.
Mari kita lakukan 
Pada kondisi window painter editing …klik datawindow control anda….
Selanjutnya klik tab “Event List” yg ada di bawah…spt tampak di gambar
© mztolo 2006 – PB pemula 56
Selanjutnya klik kanan mouse dan pilih “Add” untuk menambah event baru.
Pilih powerbuilder object-nya datawindow control yg bernama “dw_1”
© mztolo 2006 – PB pemula 57
Ketik di “Return Type” pilih “long” dan untuk “Event Name” ketik “ue_tombol”
Selanjutnya di “Event ID:” pilih “pbm_dwnkey”
Dan hasilnya akan spt ini…..
Selanjutnya anda bisa mengetik koding di dalam event “ue_tombol” ini….(ingat nama ini
bebas ya….tdk harus ue_tombol, justru yg penting adalah “Event ID” nya.
© mztolo 2006 – PB pemula 58
Anda perhatikan argument type “keycode” dan namenya “key” serta “keyflags” adalah
default value yg di punyai “pbm_dwnkey” jika ini blom keluar/ada biarkan saja, pada
saat close event editor ini nantinya jika keluar info untuk “Ignore” tekan “Yes” saja….
Isi koding event-nya spt ini :
int li_column_number,li_column_count,first_column
boolean lb_enter,lb_dwnrow,lb_uparrow
lb_enter =keydown(keyenter!)
lb_dwnrow =keydown(keydownarrow!)
lb_uparrow =keydown(keyuparrow!)
li_column_number =dw_1.getcolumn()
li_column_count =integer(dw_1.object.datawindow.column.count)
first_column =1
if keyflags=0 then
if lb_enter or lb_dwnrow then
if li_column_number=integer(dw_1.object.datawindow.column.count) then
dw_1.setcolumn(first_column)
else
dw_1.setcolumn(li_column_number + 1)
end if
elseif lb_uparrow then
if li_column_number=1 then
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
else
dw_1.setcolumn(li_column_number - 1)
end if
end if
elseif keyflags=1 then
if lb_uparrow then
if li_column_number=integer(dw_1.object.datawindow.column.count) then
dw_1.setcolumn(first_column)
else
dw_1.setcolumn(li_column_number + 1)
end if
elseif lb_enter or lb_dwnrow then
if li_column_number=1 then
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
else
dw_1.setcolumn(li_column_number - 1)
end if
end if
else
return 0
end if
© mztolo 2006 – PB pemula 59
return 1
Keterangan :
Keyflags = 0 artinya tanpa ada penekanan tombol kombinasi dg tombol function lain.
Keyflags = 1 ada penekanan tombol dg Shift
Keyflags = 2 ada penekanan tombol dg Ctrl
Keyflags = 3 ada penekanan tombol dg Shift + Ctrl
Keyflags = 4 ada penekanan tombol dg Alt dst-nya.
Keydown berfungsi untuk menentukan tombol apakah yg di tekan user.
Keydown(enter!) artinya jika/apakah yg di tekan ENTER…..
Anda perhatikan koding berikut ini….
li_column_number =dw_1.getcolumn()
// getcolumn() untuk mengetahui posisi kolom aktif
li_column_count =integer(dw_1.object.datawindow.column.count)
// untuk mengetahui jml kolom dlm 1 row/record
Selanjutnya……..
if lb_enter or lb_dwnrow then
// apakah yg di tekan enter atau panah bawah ?
if li_column_number=integer(dw_1.object.datawindow.column.count) then
// jika posisi kolom aktif = kolom terakhir/jml kolom
dw_1.setcolumn(first_column)
// posisi pointer kembali ke kolom pertama
else
dw_1.setcolumn(li_column_number + 1)
// jika tidak maka jalankan pointer ke kolom berikutnya
end if
elseif lb_uparrow then
// jika yg di tekan tombol panah atas
if li_column_number=1 then
// jika di posisi kolom 1 (pertama)
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
// jalankan pointer di kolom terakhir
else
dw_1.setcolumn(li_column_number - 1)
// jika tdk di posisi terakhir maka jlnkan pointer ke kolom sblm nya
end if
end if
Demikianlah semoga bisa memberikan gambaran event penekanan tombol di datawindow
Note :
Lalu apakah kita harus membuat “event” ini di semua datawindow ? Yap benar…
Tidak efisien dong kalo hrs ketik koding lagi ? Benar sekali…
© mztolo 2006 – PB pemula 60
Lalu solusinya bagaimana ? Yaitu dg membuat function yg bisa di panggil oleh “event”
ini, jadi cukup koding 1x saja.
Nanti anda akan belajar cara membuat function…..tunggu aja 
Coba jalankan aplikasi dan buka sheet entri data siswa…spt ini
Klik di kolom “Nama” dan coba tekan tombol ENTER atau panah atas/bawah
Dan coba juga dikombinasikan dg tombol Shift
Dengan demikian sample pembuatan “event” keydown di datawindow control sudah
selesai 
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 61
POWERBUILDER #7
Berikut ini cara membuat function……
Spt biasa dari kondisi workspace aplikasi anda klik tombol “New”..
Pilih tab “PB Object” terus pilih “Function” dan klik tombol OK
Dan ketik spt tampak di gambar bawah…
Return type = integer (0 tdk ada action, 1 ada action)
Function name = f_tekantombol (nama functionnya)
Argument name = dw_1 dg argument type “datawindow”
Selanjutnya untuk menambah “parameter” klik kanan mouse dan pilih “Add Parameter”
Tambahkan…..
Argument name = keyflags (untuk kontrol tombol kombinasi apa yg di tekan)
© mztolo 2006 – PB pemula 62
Lakukan langkah yg sama untuk menambah “parameter” lagi….spt gambar di bawah…
Selanjutnya copy saja koding “ue_tombol” ke dalam fungsi ini…
Perhatikan…..
int li_column_number,li_column_count
“first_column” jgn disertakan di dlm koding ini…sbg ganti kita sudah buat di argument
name-nya.
© mztolo 2006 – PB pemula 63
Berikut koding komplitnya :
int li_column_number,li_column_count
boolean lb_enter,lb_dwnrow,lb_uparrow
lb_enter =keydown(keyenter!)
lb_dwnrow =keydown(keydownarrow!)
lb_uparrow =keydown(keyuparrow!)
li_column_number =dw_1.getcolumn()
li_column_count =integer(dw_1.object.datawindow.column.count)
if isnull(first_column) then
first_column =1
end if
if keyflags=0 then
if lb_enter or lb_dwnrow then
if li_column_number=integer(dw_1.object.datawindow.column.count) then
dw_1.setcolumn(first_column)
else
dw_1.setcolumn(li_column_number + 1)
end if
elseif lb_uparrow then
if li_column_number=1 then
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
else
dw_1.setcolumn(li_column_number - 1)
end if
end if
elseif keyflags=1 then
if lb_uparrow then
if li_column_number=integer(dw_1.object.datawindow.column.count) then
dw_1.setcolumn(first_column)
else
dw_1.setcolumn(li_column_number + 1)
end if
elseif lb_enter or lb_dwnrow then
if li_column_number=1 then
dw_1.setcolumn(integer(dw_1.object.datawindow.column.count))
else
dw_1.setcolumn(li_column_number - 1)
end if
end if
else
return 0
end if
return 1
© mztolo 2006 – PB pemula 64
Simpan function yg baru saja anda buat……..
Tampak di system tree anda….fungsi sudah tercipta….
Buka event “ue_tombol” di datawindow control dan ganti dg spt ini…
Anda cukup ketik “return f_tekantombol(this,keyflags,1)”
© mztolo 2006 – PB pemula 65
Note :
Anda ingat waktu membuat function “f_tekantombol” ?
Disana ada 3 parameter….dw_1, keyflags dan first_column
Oleh karena itu value yg di lewatkan jg berjumlah 3 spt ini :
f_tekantombol(this,keyflags,1)
this = merujuk datawindow itu sendiri
keyflags = keyflags yg di tekan….
1 = merujuk posisi pointer di kolom 1
Close dan save perubahan yg ada di “ue_tombol”…
Jalankan aplikasi dan test fungsinya…yap berjalan sukses !!
Fungsi ini bisa anda pakai untuk datawindow control yg lain….
Untuk fungsi yg lain cara pembuatannya sama, tinggal sesuaikan parameter yg ada.
Dengan demikian sample pembuatan “function” sudah selesai 
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 66
POWERBUILDER #8
Coba jalankan dan buka sheet entri data siswa anda spt ini….
Perhatikan modul di atas …ada 9 tombol yg di pakai…
Bagaimana jika kita ingin buat semacam toolbar saja ?
Atau di PB istilahnya menu sheet/window…..
Langkah2 nya sama dg waktu anda membuat “menu” yg ada di sample terdahulu
Klik “New” pilih “Menu” di tab “PB Object” dan klik tombol OK
Selanjutnya buat menu pertama “Retrieve” dg icon spt tampak di bawah ini :
© mztolo 2006 – PB pemula 67
Lanjutkan dg item menu yg lain shg hasilnya spt ini…
Perhatikan picture2 yg ada sudah disediakan oleh PB…..
Klik tombol save …beri nama “mn_sheet” …dan klik OK
Untuk koding isinya biarkan kosong dulu…….
© mztolo 2006 – PB pemula 68
Selanjutnya buka dan modifikasi form entri data siswa….spt ini
Perhatikan di “MenuName” isi dg menu sheet nya….dan simpan/save perubahan form ini
Pada saat modul sheet entri data siswa di jalankan …akan tampak spt ini…
Langkah selanjutnya ?
1. Membuat event untuk retrieve, add, update, delete, close, top, prior, next dan bottom.
2. Mengisi event2 tersebut dg koding spt yg ada di tombol2 itu
3. Delete semua tombol yg ada……krn sudah tdk kita pakai lagi
4. Isi koding di menu sheet anda untuk menjalankan koding yg ada di sheet/window
Ok…mari kita lakukan satu per satu 
© mztolo 2006 – PB pemula 69
Membuat event di sheet/window :
ue_retrive = untuk event retrieve
ue_add = untuk event add
ue_update = untuk event update
ue_delete = untuk event delete
ue_close = untuk event close
ue_top = untuk event top
ue_prior = untuk event prior/previous
ue_next = untuk event next
ue_bottom = untuk event bottom
Double click “w_entri_siswa” dari system tree anda untuk modifikasi….
Klik tab “event” di bawah dan ..dari modul event itu klik kanan mouse….lalu pilih “Add”
Ketik nama event-nya “ue_retrieve” spt ini..dan isi koding event-nya
© mztolo 2006 – PB pemula 70
Klik kanan di event tersebut dan pilih “New Event”
Ketik nama event-nya “ue_add” ….
Lakukan hal yg sama untuk event2 berikutnya….
Isi “ue_update” :
if dw_1.update()=1 then
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
© mztolo 2006 – PB pemula 71
Isi “ue_delete” :
if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return
if dw_1.rowcount()>0 then
dw_1.deleterow(0)
dw_1.setfocus()
if dw_1.update()=1 then
commit;
messagebox('Info..','Penghapusan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penghapusan Gagal !',information!,ok!)
return
end if
else
return
end if
Isi “ue_close” :
close(this)
Isi “ue_top” :
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrolltorow(1)
end if
Isi “ue_prior” :
if dw_1.getrow() = 1 then
messagebox(":)","Data pertama !",Information!,Ok!)
else
dw_1.scrollpriorrow()
end if
Isi “ue_next” :
if dw_1.getrow() =dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrollnextrow()
end if
Isi “ue_bottom” :
if dw_1.getrow() = dw_1.rowcount() then
messagebox(":)","Data terakhir !",Information!,Ok!)
else
dw_1.scrolltorow(dw_1.rowcount() )
end if
© mztolo 2006 – PB pemula 72
Kalo anda perhatikan koding yg di tulis di event2 tersebut ada yg mirip sekali dg koding
yg ada di click event tombol dan ada juga yg perlu di sesuaikan….
Misal di tombol “close” dan di event “ue_close”
Yg pertama tertulis “close(parent)” yg ke dua tertulis “close(this)”
Bagi anda yg sudah memahami bahwa koding mengacu pada object yg ada pasti sudah
tahu….ketika di tombol pake “parent” krn sheet tersebut adalah parent dari tombol, tetapi
ketika di event yg notabene ada di sheet tersebut maka cukup pake kata “this”.
Begitu jg return value, krn event ini semua “(None)” untuk return type/value nya maka,
koding yg dulu di tombol ada “return -1” cukup kita tuliskan “return” saja…..
Ok..selanjutnya hapus semua tombol yg ada…..serta save….
Dan isi koding di menu sheet nya ….
Doubleclick “mn_sheet” untuk modifikasi….kemudian doubleclick item “retrieve” serta
isi koding spt ini…
Lakukan hal yg sama untuk item menu yg lain…...
© mztolo 2006 – PB pemula 73
Untuk “ue_add” spt ini parentwindow.triggerevent ("ue_add") dst-nya….
Setelah semua di isi dan di simpan/save jalankan aplikasi dan open sheet nya …yap…
Atau spt ini….
Atau spt ini….
© mztolo 2006 – PB pemula 74
Anda juga bisa memakai menu text nya…spt ini
Perlu saya jelaskan juga bahwa logika tombol pada dasarnya sama juga dg apa yg pernah
saya berikan samplenya untuk aplikasi developer yg lain……
Begitu juga koding yg ada masih dpt dikembangkan, semisal untuk data master – detail.
Ok ..saya harapkan anda tekun dan teliti serta jgn patah semangat…itu lah yg akan
membawa anda ke level selanjutnya dan level yg tak akan anda duga nantinya 
(jgn lupa perbanyak doa dan rasa syukur kepada –Nya)
Dengan demikian sample pembuatan “menu sheet” sudah selesai 
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 75
POWERBUILDER #9
Latihan kali ini kita akan mencoba membuat sample untuk entri sheet master – detail,
atau header – detail.
Maka di perlukan 2 table lagi spt ini (untuk mySQL saya pake myISAM) :
Master ”tblhujian” dg key “nis”
Detail “tbldujian” dg key “kode” yg merupakan nilai hasil “autoincrement”
Sebelum anda membuat datawindownya, pastikan koneksi ke database “sekolah” masih
aktif atau terkoneksi :
© mztolo 2006 – PB pemula 76
Untuk selanjutnya mari kita buat datawindow untuk masternya terlebih dahulu.
Klik tombol “new” di dalam tab “DataWindow” pilih type datawindow “Freeform”
dan klik tombol OK
Pilih “Quick Select” ….terus perhatikan “Retrieve on Preview” tdk usah di centang
maksudnya apa….agar pada waktu window tercipta tdk langsung tampil di “preview”
Mengapa ? Jika data kosong no problem tapi kalo data anda jutaan maka anda harus
nunggu preview selesai dulu setiap kali anda modifikasi datawindow itu.
Selanjutnya stl memilih spt di atas …klik tombol “Next”
Pilih “tblhujian” …pilih semua field/kolomnya …dan klik OK
© mztolo 2006 – PB pemula 77
Klik tombol “NEXT” dan klik “FINISH” sampai tampil spt ini :
Rapikan menjadi spt ini :
Bagaimana jika untuk “nis” saya ingin tampilkan “nama siswa” jadi bukan “nis” nya.
Atau dg kata lain dlm bentuk “combobox”
Untuk membuat combobox yg me-refer ke data lain di PB anda harus membuat suatu
“datawindow” baru yg diistilahkan “dropdown datawindow”
Nah krn data “nis” ini nanti me-refer dari data “tblsiswa” maka waktu membuat
drowdown datawindow kita memakai data dari “tblsiswa” tersebut.
Coba save dulu window yg baru saja anda buat ini dg nama “dw_entri_h_ujian”
Selanjutnya buat window baru, langkahnya sama dg cara di atas hanya anda pilih type
window “tabular”.
Dengan sumber data “tblsiswa” dan di ambil kolom “nis” dan “nama” spt ini :
Anda tarik band header ke atas dg mouse anda, sehingga judul kolom tertutup (atau anda
hapus dan tarik band header ke atas jg boleh).
Tujuannya apa ? Kita tidak mau memakai header/judul kolom tersebut.
Selanjutnya klik detail “nis” dan hapus…dg menekan tombol “DEL”
© mztolo 2006 – PB pemula 78
Kenapa kolom “nis” disertakan diwaktu awal membuat dropdown datawindow ini jika
akhirnya di hapus ?
Memang benar data ini di hapus …tetapi pada dasarnya hanya di hapus di tampilan saja,
sedangkan data “nis” sebenarnya tetap harus ada dan nantinya dipakai untuk dikirimkan
ke datawindow parentnya yaitu dlm hal ini “dw_entri_h_ujian”
Geser kolom nama merapat ke depan…..
Terus percantik dg merubah properti “bordernya” …..
Hasilnya spt ini….
Simpan dg nama “dddw_siswa”
Selanjutnya buka kembali datawindow “dw_entri_h_ujian”.
Klik kolom “nis” dan tarik perlebar spt ini dg mouse :
© mztolo 2006 – PB pemula 79
Selanjutnya klik tab “EDIT” di properties datawindow ini….
Setting spt tampak di gambar bawah…
Style Type nya : DropDownDW
Always Show Arrow di centang
H ScrollBar di centang
DataWindow isi dg nama “dddw_siswa”
Display Column atau kolom data yg ingin di tampilkan adalah “nama”
Data Column atau data yg ingin disimpankan ke datawindow “dw_entri_h_ujian” di
kolom “nis”
(dengan demikian sewaktu kita memilih nama siswanya, data “nis” dari dddw_siswa akan
dikirim ke “nis” yg ada di dw_entri_h_ujian)
© mztolo 2006 – PB pemula 80
Tampak hasilnya spt ini :
Rapikan shg menjadi spt ini….(kasih jarak sedikit di bagian bawah detail)
Simpan kembali perubahan ini………
Selanjutnya buat sheet/window master – detailnya…
Mmmmmm….. cara cepatnya adalah buka sheet anda yg sudah jadi “w_entri_siswa”
Save As sebagai “w_entri_ujian”
Hapus datawindow yg ada di situ yg merupakan datawindow “w_entri_siswa”
Selanjutnya ganti dg datawindow “dw_entri_h_ujian”
Tampak hasilnya spt di gambar atas….
Jangan lupa ganti title sheet nya dg “Entri Data Ujian”
Simpan modifikasi terserbut dan close……….
© mztolo 2006 – PB pemula 81
Selanjutnya modifikasi menu “mn_siswa” dan double click di item “&Ujian Susulan”
serta ketik kodingnya….. spt ini “opensheet(w_entri_ujian,w_utama,2,original!)”
Simpan perubahan menu “mn_siswa” dan coba jalankan aplikasi ini…..
Klik menu “Transaksi => Ujian Susulan” sampai tampil sheetnya…..
Jika ada datanya klik tombol “retrieve”….jika belum klik tombol “new”
© mztolo 2006 – PB pemula 82
Klik combobox nya dan pilih nama siswanya sesuai data yg telah di entrikan di modul
entri data siswa.
Sehingga hasilnya spt ini…..
Ok sementara header/masternya dulu… detail akan di lanjutkan di bagian berikutnya…
Pastikan latihan di atas sukses terlebih dahulu…shg kita bisa melanjutkan ke bagian
detailnya….. 
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 83
POWERBUILDER #9 bag. 2
Selanjutnya mari kita buat detail nya berdasar table “tbldujian” di bawah :
Ok…. mari kita review prinsip master – detail terlebih dahulu 
Data master anda secara database tersimpan spt ini….
NIS dan PENGAWAS
NIS berisi data spt “001”, “ABC007” dsb-nya sbg nomor induk siswanya
PENGAWAS berisi data spt “AMIR”, “KROMO ATEMO” yaitu nama2 pengawas
Data detail anda secara database tersimpan spt ini….
KODE, NIS, PELAJARAN dan NILAI
KODE merupakan data auto_increment yg akan diisi otomatis oleh databasenya dan
berisi angka 1, 2, 3 dst nya. Data ini jg berfungsi sbg key master/update untuk data
detailnya.
NIS berisi data “001” dst nya. Kenapa data ini diperlukan di detail ? Yap…diperlukan
krn data ini berfungsi dan bersifat sbg data untuk merelasikan data detail ke masternya.
Jadi semua data detail dg NIS=”001” merupakan data detail dari master dg NIS=”001”
juga, hal inilah yg di sebut dg konsep one to many.
PELAJARAN dan NILAI akan berisi nama pelajaran dg nilai nya.
Lalu bagaimana dg cara menampilkan data detailnya ?
PELAJARAN dan NILAI adalah data yg perlu disajikan di detailnya.
Untuk KODE dan NIS itu tidak perlu ditampilkan, krn kedua data ini hanya di pakai dlm
kaitannya dg procedure update dan relasi dg master.
User/pemakai aplikasi anda tidak perlu tahu KODE dan NIS yg di replacekannya.
Ok selanjutnya …buat datawindow type tabular spt ini :
© mztolo 2006 – PB pemula 84
Hapus header dan kolom KODE serta NIS… rapikan shg menjadi spt ini :
Klik menu “Rows” dan klik “Update Properties…” spt ini….
Tampak modul “specify Update Properties” – nya :
Untuk table yg memakai key auto_increment atau key yg tercreate otomatis maka
“Identity Column:” nya harus di isi sesuai kolom-nya.
© mztolo 2006 – PB pemula 85
Karena table “tbldujian” ini memakai “KODE” sbg key auto_increment-nya maka isi
“Identity Column” nya spt ini :
Selanjutnya klik tombol OK…dan kembali ke paint datawindow-nya.
Selanjutnya buat “Retrieval Arguments” dg klik tombol shg tampli spt ini :
© mztolo 2006 – PB pemula 86
Klik menu “Design” dan klik “Retrieval Arguments…” spt ini :
Sampai tampil modul spt ini :
Ketik spt di bawah ini dan klik OK
© mztolo 2006 – PB pemula 87
Selanjutnya klik tab “WHERE” dan ketik command spt ini :
Selanjutnya close dan save dg nama “dw_entri_d_ujian”…..
Datawindow dg retrieval argument jika anda retrieve akan menampilkan modul spt ini :
Modul ini meminta anda untuk memasukkan “value” sesuai type data argument-nya.
Lalu apakah waktu aplikasi jalan akan selalu tampil modul di atas ? Mengganggu dong ?
Modul di atas tidak akan tampil krn sewaktu kita retrieve datawindow tsb kita sertakan
langsung value argumentnya spt ini : dw_2.retrieve(“001”)
Note :
Kenapa retrieval argument harus di buat ?
Yap…sekenarionya spt ini….data master detail terdiri atas 2 datawindow.
Pertama atau yg di atas (spt yg telah anda buat berdasar artikel #9a) adalah data master.
Yg kedua atau yg bawah adalah data detailnya.
Asumsinya begini…setiap data master digeser ke data/row untuk siswa yg berbeda maka
data detail akan mengikuti/berisi dg data detail yg sesuai dg masternya.
Nah untuk “memfilter” data detail ini agar sesuai dg data masternya di perlukanlah
“retrieval argument” di datawindow detailnya.
Jadi “retrieval arguments” sama dg “filter” ? Tidak juga krn PB mengenal “filter” sendiri.
© mztolo 2006 – PB pemula 88
Ok..mari kita lanjutkan….buka sheet master detail (w_entri_ujian) yg telah anda buat
sebelumnya :
Drag n drop datawindow “dw_entri_d_ujian” dan tambahkan 2 tombol spt ini :
Jika anda perhatikan di sheet anda sekarang sudah ada 2 datawindow untuk master dg
nama “dw_1” dan detail dg nama “dw_2”.
Selanjutnya buka event “OPEN” dan modifikasi kodingnya spt ini :
dw_1.setTransObject(SQLCA)
dw_2.setTransObject(SQLCA)
dw_1.retrieve()
dw_2.setrowfocusindicator(hand!)
Note :
Semua datawindow harus sudah di set transaksi objectnya dg SQLCA
Setrowfocusindicator(hand!) untuk menampilkan penunjuk row berbentuk tangan/jari
telunjuk…mmm nanti anda bisa melihatnya sendiri 
© mztolo 2006 – PB pemula 89
Event “ue_update” anda ganti spt ini :
if dw_1.getrow()=0 or dw_1.rowcount()=0 then return
dw_1.accepttext()
dw_2.accepttext()
if dw_1.update()=1 and dw_2.update()=1 then
if sqlca.sqlnrows<0 then
rollback ;
messagebox("Info..","Penyimpanan Gagal !",information!,ok!)
return
end if
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Note :
Getrow dan rowcount dipakai untuk memastikan bahwa data window tdk dlm kondisi
kosong.
Acceptext() berfungsi untuk menyimpan isi data baris aktif pada kontrol datawindow ke
dlm buffer kontrol datawindow. Jika fungsi ini tdk di jalankan maka baris aktif adalah
baris aktif sebelumnya.
Doubleclick di dw_1 dan isi event “rowfocuschanged” dg ini :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
string ls_nis
if dw_1.rowcount() > 0 then
ls_nis=dw_1.getitemstring(dw_1.getrow(),"nis")
end if
dw_2.retrieve(ls_nis)
Note :
Rowfocuschanged diperlukan jika user mengeser row master/header maka detail akan di
retrieve sesuai key relasinya. Perhatikan koding dw_2.retrieve(ls_nis)
Ls_nis sendiri diambil dari data nis yg ada di dw_1.
Perhatikan koding ini ls_nis=dw_1.getitemstring(dw_1.getrow(),"nis")
Inilah kenapa di awal tadi kita harus membuat retrieval arguments di datawindow detail.
© mztolo 2006 – PB pemula 90
Semoga anda semakin paham dan jelas 
Isi click event tombol “Add detail” dg ini :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
dw_1.accepttext()
string ls_nis
ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis')
dw_2.scrolltorow(dw_2.insertrow(0))
dw_2.setcolumn(3)
dw_2.setfocus()
dw_2.setitem(dw_2.getrow(),'nis',ls_nis)
Note :
Agar setiap data detail yg ditambahkan terelasi dg data masternya maka di datadetail
harus di set/simpan data key relasi yaitu berupa data “nis”
Perhatikan koding ini dw_2.setitem(dw_2.getrow(),'nis',ls_nis)
dw_2.setcolumn(3) kenapa 3 ? Betul krn kolom “pelajaran” adalah kolom urutan ke 3 yg
ada di “tbldujian”
Isi click event tombol “Del detail” dg ini :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
if messagebox("Hapus Data","Hapus ?",Exclamation!,YesNo!,2)=1 then
dw_2.deleterow(0)
parent.triggerevent("ue_update")
end if
Ok..selanjutnya coba jalankan aplikasi anda ….dan buka sheet master detailnya spt ini :
© mztolo 2006 – PB pemula 91
Klik tombol “Add detail” dan anda isi spt ini :
© mztolo 2006 – PB pemula 92
** mmmm ada gambar telunjuk ! itulah setrowfocusindicator(hand!) 
Ok …form master detail sudah selesai …selamat mencoba 
Dan nantikan sample berikutnya…..
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 93
POWERBUILDER #9 bag. 3
Masih seputar sheet master detail, coba anda buka event “ue_delete” modifikasi koding
deletenya dg koding berikut agar detailnya jg ikut terhapus :
if dw_1.rowcount()=0 or dw_1.getrow()=0 then return
if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return
dw_1.accepttext()
string ls_nis
ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis')
dw_1.deleterow(0)
dw_1.setfocus()
if dw_1.update()=1 then
commit;
delete from tbldujian where nis=:ls_nis ;
messagebox('Info..','Penghapusan Sukses !',information!,ok!)
else
rollback;
messagebox('Info..','Penghapusan Gagal !',information!,ok!)
return
end if
Note :
Perhatikan cara penulisan SQL Command untuk “delete” –nya.
delete from tbldujian where nis=:ls_nis ;
(ditulis dg memakai “:” titik dua setelah tanda sama dengan dan setiap perintah SQL ini
agar di jalankan selalu diakhiri dg tanda “;” titik koma)
Ok sekarang coba anda tambahkan di detailnya data yg banyak….spt ini :
Jml row di detail sebenarnya ada 6, yg tampak 4 row.
Agar memudahkan user dlm melihat data yg tersembunyi/dibagian bawah anda bisa
menambahkan “vertical scrollbar” di datawindownya. Bagaimana caranya ?
© mztolo 2006 – PB pemula 94
Klik datawindow detailnya di painter/editor dan centang “VscrollBar” spt di bawah :
Simpan kembali perubahan dan coba jalankan……… 
Note :
Anda jg bisa tambahkan “horizontal scrollbar” jika datawindow anda lebar.
Hal ini jg bisa anda terapkan untuk “dropdown datawindow” anda.
© mztolo 2006 – PB pemula 95
Untuk dropdown datawindow caranya klik dddw-nya dan centang “VscrollBar” nya.
OK mari kita lanjutkan………..
Validasi proses penghapusan pada dasarnya bisa anda kembangkan lagi… misal jika
master akan dihapus akan keluar pesan kalo detail sudah berisi alias transaksi sudah
terjadi. Logikanya bagaimana ? Yaitu dg mengecek keberadaan data detail untuk kode
master yg akan di hapus.
Selain itu anda bisa dg memberikan relasi di databasenya (mis: MsSQL) yg tentunya
akan memberikan pesan error atau informasi tentang sudah adanya relasi/transaksi jika
ada proses delete/penghapusan data.
Berikutnya saya akan memberikan sample yg menarik, coba buka sheet ujian spt ini :
Dalam kondisi data sudah terisi spt tampak di sheet atas….seharusnya combo untuk nama
siswa terproteksi atau disable artinya tdk memberikan kesempatan user untuk
merubahnya krn ini menyangkut primary key-nya.
Sekarang coba kita bikin suatu kesalahan editing misalnya dg mengganti nama siswa di
atas dg nama lain yg sebenarnya data itu jg sudah pernah di entrikan.
© mztolo 2006 – PB pemula 96
Dengan kata lain kita coba bikin error krn primary key yg sudah kita masukkan kita entri
kembali spt ini :
Coba nama Rudy anda ganti menjadi Tini dan save perubahan itu…apa yg terjadi ?
Tampak modul error dari odbc mysql-nya yg menyatakan adanya duplikasi entri 
Lalu coba anda lihat lagi apakah data dg nama siswa Rudy tersebut masih ada ?
Ternyata sudah tidak ada !! Kenapa ?
Close aplikasi anda …dan coba modifikasi datawindow “dw_entri_h_ujian”
Setelah itu coba lihat “Update Properties…” nya tampak spt ini :
Perhatikan di bagian “Key Modification” nya….. 
© mztolo 2006 – PB pemula 97
Tampak “rule” proses updatenya adalah “Delete” dulu baru “Insert” sehingga jika terjadi
kasus spt tadi maka data “tblhujian” sbg master akan di hapus terlebih dahulu baru
dilakukan insert yg ternyata gagal krn primary key terjadi duplikat.
Sedangkan proses hapus sudah terjadi..itulah yg menyebabkan data siswa Rudy terhapus.
Lalu bagaimana pemecahannya ? Ada 2 cara…. 
Cara PERTAMA :
Dengan menganti rule update di atas dg memilih “Use Update” di key modificationnya.
Klik OK dan save kembali datawindow anda …dan coba kembali kasus spt di atas tadi.
Krn data Rudy sudah terhapus coba input ulang lagi untuk latihan kali ini.
Detailnya tdk usah di entri kembali, krn untuk kasus di atas yg terhapus hanya data di
masternya alias “tblhujian” nya.
Sekarang coba anda lakukan langkah penggantian nama siswa yg notabene sudah pernah
di inputkan spt di hal. 3 dan save.
Apa yg terjadi ? Tampak pesan errornya tetapi data siswa Rudy tdk terhapus !!
Benarkah ? Coba klik tombol “Retrieve” ..yap data masih spt semula 
Semoga anda bisa mengambil kesimpulan dari contoh kasus di atas….amien.
Cara KEDUA :
Modifikasi datawindow master anda serta klik kolom “nis”
Setelah itu di propertiesnya klik icon warna merah di kanan tulisan “Protect” spt tampak
pada gambar di atas.
© mztolo 2006 – PB pemula 98
Tampak modul untuk mengetik koding …
Ketik koding berikut “if (isrownew(),0,1)” dan klik tombol OK.
Tampak ada perubahan di propertiesnya spt ini :
Note :
Properties “Protect” berfungsi untuk melakukan proteksi terhadap kolom yg ada dengan
nilai true/1 atau false/0.
Untuk kasus di atas jika row/kolom bukan kolom baru maka kolom tersebut akan di
protect/disabled. Dengan kata lain kolom hanya enabled jika pada saat row baru atau
pada saat penambahan data baru.
© mztolo 2006 – PB pemula 99
Dan tentu saja hal ini bisa anda terapkan untuk datawindow yg lain juga.
Save datawindow krn perubahan tersebut..dan jalankan sheet ujian spt ini :
Sekarang jika anda klik combo nama siswa tersebut tidak akan bisa dlm kondisi data
sudah ada spt tampak di gambar atas 
Lain halnya jika anda klik tombol tambah/new/add spt ini :
Ok…dengan demikian sampai disini dulu penambahan dari saya 
Nantikan sample2 dan kasus2 yg lain dan berbeda selanjutnya……
Tetaplah kreatif dg selalu memaksimalkan logika anda….dan jangan lupa untuk selalu
berdoa dan bersyukur kepada-Nya.
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 100
POWERBUILDER #10
Coba jalankan aplikasi anda dan buka sheet entri data siswa nya spt ini :
Tampak disana “nis” 007 adalah milik Tini Pratiwi……
Coba anda klik tombol/new ….dan isi data spt ini (dg nis=007 juga) :
Terus coba lakukan save/penyimpanan data…..apa yg terjadi ?!
Tampak informasi error updatenya yg mengatakan adanya duplikasi entry…..
Modul datawindow error ini masih standar dengan informasi sesuai informasi error yg
dikeluarkan oleh odbc mysql nya.
© mztolo 2006 – PB pemula 101
Bagaimana jika kita ingin membuat pesan error yg kita definisikan sendiri ?
Caranya adalah dengan membuat function untuk itu …. 
(jika lupa caranya baca2 lagi artikel sebelum2 nya ya )
Klik tombol new dan pilih function di tab “PB Object” sampai tampil modul untuk
membuat fungsi. Isi nama fungsi dan arguments yg dipakai spt ini :
Anda isi dg koding spt ini :
/* mztolo 2006
anda bisa melihat message error mysql yg lain di help mysql nya
pesan error ini akan berbeda antara 1 database dg database yg lainnya
*/
long kodeerror
string pesan,judul
kodeerror = sqldbcode
pesan =sqlerrtext
judul =title
string ls_pesan,ls_kodeerror
ls_kodeerror="("+string(kodeerror)+")"
if kodeerror=1062 then
ls_pesan=ls_kodeerror+' Data pernah di entri !'
messagebox(judul,ls_pesan,Information!,Ok!,1)
elseif kodeerror=1048 then
ls_pesan=ls_kodeerror+ ' Kode kosong !'
messagebox(judul,ls_pesan,Information!,Ok!,1)
elseif kodeerror=1027 then
ls_pesan=ls_kodeerror+' Data sedang di edit user lain !'
messagebox(judul,ls_pesan,Information!,Ok!,1)
else
ls_pesan=ls_kodeerror+pesan
messagebox(judul,ls_pesan,Information!,Ok!,1)
end if
return 1
© mztolo 2006 – PB pemula 102
Selanjutnya anda save dg nama “f_dberror”
Lalu modifikasi sheet entri data siswa anda “w_entri_siswa” spt ini :
Doubleclick di kontrol datawindow-nya…..
Kemudian di method/event “dberror” anda ketik koding spt ini :
return f_dberror (sqldbcode,sqlerrtext,'Master Siswa')
Selanjutnya save dan coba jalankan serta buka sheet entri data siswa…anda coba kembali
entri dg “nis” yg sama spt di atas (hal. 1)
Tampak pesan error yg tampil adalah pesan error yg telah anda definisikan di fungsi
“f_dberror” tadi.
© mztolo 2006 – PB pemula 103
Sekarang anda coba add data baru lagi…”nis” kosongin dan isi data yg lain spt ini :
Terus anda coba save….apa yg tampak ?!
Pesan error atau informasi kalo kode/primary key kosong !!
Sekarang coba add data baru lagi dan biarkan semua kosong spt ini :
Terus coba save …dan apa yg terjadi ?!
Tampak informasi proses penyimpanan sukses !! Nah lho ?
© mztolo 2006 – PB pemula 104
Tapi jika anda lihat di database mysql anda jelas tidak ada penambahan data kosong.
Artinya apa ? Capture error 1048 untuk primary key tidak terjadi dan jika di cek di
message errornya juga tidak keluar pesan apa-apa.
Ini sulitnya  jika masih keluar pesan error nomor 10xx maka anda bisa menambahkan
message errornya di fungsi “f_dberror”
Nah lalu bagaimana jika pesan yg tampil akan mengatakan kalo data harus di isi
semuanya atau tidak boleh kosong ?
Anda ubah koding savenya “ue_update” menjadi spt ini :
string ls_nis
dw_1.accepttext()
if dw_1.update()=1 then
ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis')
if isnull(ls_nis) then
messagebox('Info..','Data tdk boleh kosong !',information!,ok!)
return
else
commit;
messagebox('Info..','Penyimpanan Sukses !',information!,ok!)
end if
else
rollback;
messagebox('Info..','Penyimpanan Gagal !',information!,ok!)
return
end if
Sample di atas hanya mengecek 1 kolom null atau tidak…untuk kolom2 yg lain silahkan
di coba sendiri….. 
Sekarang jika data kosong anda save akan keluar pesan spt ini :
Terapkan juga fungsi “f_dberror” ini untuk kontrol datawindow yg lain…..
Ok cukup ini dulu…..silahkan anda kembangkan menjadi lebih bagus lagi 
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 105
POWERBUILDER #11
Anda pasti ingat waktu pertama kali membuat sample PB ini….
Anda membuat suatu aplikasi yg mempunyai sheet yg bersifat MDI (multiple document
interface).
Lalu apakah sample yg sudah dikerjakan masih bersifat SDI ? Tidak ! Hanya memang
menu sheet yg dibuat tidak mendukung MDI (atau bahasa lainnnya kurang
memaksimalkan kemampuan MDI nya)
Berikut cara memaksimalkannya 
Pertama ubah menu utama anda “mn_siswa” menjadi spt ini :
Perhatikan ada penambahan item menu “Edit” , “Window” dan “Help” yg penting adalah
“Edit” dan “Window” dlm kaitannya dg konsep MDI.
Untuk “Edit” tdk perlu ada sub-item menu-nya.
Setting visible dan enablenya jgn dicentang alias tidak mau di tampilkan di menu utama.
Begitu juga untuk menu “Window” jgn dicentang juga.
Kemudian untuk koding click event dari masing2 sub-menu item “Window” adalah sbb :
Clicked event Tile Vertical : w_utama.ArrangeSheets ( Tile! )
Clicked event Tile Horizontal : w_utama.ArrangeSheets ( TileHorizontal! )
Clicked event Layer : w_utama.ArrangeSheets ( Layer! )
© mztolo 2006 – PB pemula 106
Clicked event Cascade : w_utama.ArrangeSheets ( Cascade! )
Untuk “Help” dan “About” biarkan aja dulu 
Selanjutnya kita akan membuat menu yg merupakan “turunan” dari “mn_siswa” sbg
menu sheet yg baru.
Caranya klik menu “File” dan klik “Inherit…”
Selanjutnya tampil spt ini :
Pastikan “Objects of Type:” nya “Menus”
Terus di kolom atasnya pilih menu “mn_siswa” dan klik tombol OK
© mztolo 2006 – PB pemula 107
Selanjutnya tampak menu baru yg merupakan inherit dari mn_siswa spt ini :
Kemudian tambahkan sub-menu item untuk “Edit” spt ini :
Dengan koding clicked event yg sama dg menu sheet yg pernah anda buat.
Jangan lupa di propertiesnya untuk menu “Window” dan “Edit” dicentang visible dan
enabled nya.
© mztolo 2006 – PB pemula 108
Selanjutnya save dg nama “mn_sheet2”
Buka sheet “w_entri_siswa” dan ubah menunya menjadi “mn_sheet2”
Lakukan juga untuk sheet “w_entri_ujian” dan jangan lupa di save perubahan itu.
Sekarang coba jalankan aplikasi anda ….
© mztolo 2006 – PB pemula 109
Perhatikan anda bisa membuka sheet lebih dari satu secara bersamaan ( MDI  )
Pada saat anda aktif atau click sheet entri data siswa maka fungsi toolbar akan berlaku
untuk sheet itu, begitu juga sebaliknya jika anda click sheet entri data ujian.
Anda lihat daftar sheet yg aktif ada di menu “Transaksi” bagaimana jika kita ingin
letakkan di menu “Window” ?
Caranya mudah ubah saja clicked event di menu yg menjalankan masing2 sheet dari
koding spt ini :
opensheet(w_entri_siswa,w_utama,2,original!)
menjadi spt ini…..
opensheet(w_entri_siswa,w_utama,5,original!)
Perhatikan angka “2” dan angka “5” di atas ….
Menu “Transaksi” adalah urutan menu ke 2 pada “mn_siswa”
Sedangkan menu “Window” ada di urutan ke 5
Mudah bukan ?!
Save perubahan dan jalankan aplikasinya…serta buka sheet serta buktikan 
© mztolo 2006 – PB pemula 110
Anda juga bisa coba susunan window tile/vertical spt ini :
Atau cascade spt ini :
© mztolo 2006 – PB pemula 111
Ok…sampai disini dulu dan nantikan sample berikutnya….
Tambahan……..
Coba cek di “target” untuk event open kodingnya spt ini :
// mztolo 260106
// Profile sekolah
SQLCA.DBMS = "ODBC"
SQLCA.Lock = "RU"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DRIVER={MySQL ODBC 3.51 Driver};DESC=;
DATABASE=sekolah;SERVER=guzrud;UID=root;PASSWORD=;
PORT=3306;OPTION=3;STMT=;'"
connect ;
if SQLCA.SQLDBCode<>0 then
messagebox('Koneksi Gagal',SQLCA.SQLErrText,stopsign!)
halt close
end if
open(w_utama)
Untuk event close isi koding spt ini :
disconnect ;
Note :
Mungkin anda pernah ketemu penulisan spt ini “connect using sqlca ;”
Kenapa di atas hanya di tulis connect ; saja tanpa statement using sqlca ?
Pada dasarnya default transaksi koneksi adalah SQLCA maka penulisan “connect ;” saja
sudah cukup, pemakaian using sqlca jika adanya lebih dari 1 transaksi koneksi.
Sehingga kita harus menjelaskan secara detail ke sistem koneksi yg mana yg dipakai.
Semoga ini bisa menambah pemahaman anda…..amien
© mztolo 2006 – PB pemula 112
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 113
POWERBUILDER #12
Berikut ini sample mencetak data (datawindow) siswa…. 
Pertama anda buat datawindow sbg layout cetakkannya…..
Mmmmm jadi cetak juga pake datawindow ? Betul sekali….
Baik interface entri ataupun layout cetakan data…semua memakai datawindow….
Jadi buat data window spt ini :
Selanjutnya anda tarik “band” header ke bawah untuk mengetik judul laporan tersebut
shg menjadi spt ini :
Dan blok serta geser ke bawah judul kolom yg tampak masih di atas….mjd spt ini :
Selanjutnya klik object text spt ini ….
© mztolo 2006 – PB pemula 114
Selanjutnya klik di area kosong di atas judul2 kolom …spt ini :
Ganti “value” text dengan “SMA 1 SUNTER” dan perhatikan perubahan di detailnya
Buat lagi text judul yg lain dan rapikan dg menggeser-geser dg mouse sehingga hasilnya
akan menjadi spt ini :
© mztolo 2006 – PB pemula 115
Kemudian blok/soroti semua judul kolom dan ubah properti bordernya mjd spt ini :
Sekarang jika anda klik kanan dan retrieve di previewnya akan tampak spt ini :
Anda perhatikan nilai tabungan masih “polos” belum ada pemisah di nilai ribuannya…
Sekarang mari kita kasih format untuk memberikan tanda pemisah ribuan….
Pertama klik kolom “tabungan” di detail dan ubah propertie nya spt ini :
Perhatikan di tab “Format” anda ketik saja spt ini ‘#,###.00’
© mztolo 2006 – PB pemula 116
Selanjutnya membuat total dari semua tabungan siswa....caranya klik kolom “tabungan”
Dan klik object “sum” spt ini :
Simsalabim……..summary tercipta spt ini :
Jangan lupa format display-nya di setting juga agar pemisah ribuan-nya ada
© mztolo 2006 – PB pemula 117
Selanjutnya rapikan tampilan layout cetakan dan atur size kertasnya spt ini :
Untuk menambahkan tulisan “halaman sekian dari total halaman” caranya “
Klik object “compute page” spt ini :
Selanjutnya geser ke bawah band “footer” spt ini :
Dan klik di area kosong di bawah total tabungan spt ini….
© mztolo 2006 – PB pemula 118
Tampak sudah tercipta……. 
Selanjutnya save datawindow tersebut dg nama “dw_lap_tabungan”
Kemudian anda buat window untuk preview form cetak tersebut spt ini :
Dengan title window = “Form cetak data tabungan....”
Tambahkan 2 tombol :
Tombol Print dg click event “dw_1.print()”
Tombol Close dg click event “Close(parent)”
Adapun properti datawindow-nya spt ini :
© mztolo 2006 – PB pemula 119
Isi koding “Open” event window tersebut spt ini :
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Tampak di koding itu spt biasa akan di set transaksi object nya.
Selanjutnya di retrieve data-nya dan tampilkan data secara print “preview”
Ok…kemudian save window tersebut dg nama “w_lap_tab”
Di menu untuk menjalankan window tersebut isi dengan koding spt ini :
© mztolo 2006 – PB pemula 120
opensheet(w_lap_tab,w_utama,5,original!)
Jalankan aplikasi dan buka window/sheet laporang tersebut…
© mztolo 2006 – PB pemula 121
Anda bisa desain window dg lebih lebar agar tampilan bisa penuh..silahkan
Dan jika anda klik tombol “Print” maka data akan tercetak….. 
Bagiamana jika ingin mencetak dari kode sekian s/d kode sekian ?
Bagaimana jika ingin merubah ukuran kertas dan jenis printer ?
Bagaimana jika ingin outputnya ke FILE ?
Bagaimana jika ingin mencetak dari halaman sekian s/d halaman sekian ?
Bagaimana jika ingin mencetak 2 copies ?
Bagaimana jika ingin mencetak dg besar 1 ½ kali dari besar normal ?
Mmmmm… kelak semua akan saya coba berikan samplenya 
Ok …cukup dulu ya ……
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 122
POWERBUILDER #12 (b)
Ok mari kita melangkah ke depan lagi 
Coba modifikasi window preview cetak anda menjadi spt ini….
Note :
Ada tambahan 5 radio button
1 checkbox
1 tombol preview (jadi sekenarionya nanti kita tdk mau data langsung tampil spt sample
sebelumnya, tetapi user hrs klik tombol preview dahulu)
Terus ubah lebar window menjadi = 4078 dan tinggi = 2748
Ubah juga lebar datawindow menjadi = 3941 dan tinggi = 1976
Judul dan icon window/sheet silahkan juga kalo mau di ubah 
Kemudian hapus koding yg ada di event “Open” agar datawindow tdk langsung
“retrieve” atau di tampilkan.
Coba klik datawindow “dw_1” dan hapus “dataobject” dw_lap_tabungan spt ini :
© mztolo 2006 – PB pemula 123
Menjadi spt ini…..maksudnya apa agar data siswa tdk langsung di tampilkan/preview :
Dan isi koding di click event tombol “Preview” spt ini :
dw_1.dataobject='dw_lap_tabungan'
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Perhatikan dw_1 adalah nama kontrol datawindow yg ada di window/sheet
Isi dataobject-nya pada saat klik tombol ini dg perintah dw_1.dataobject= ….
Selanjutnya spt biasa set transaksi objectnya, retrieve dan preview-kan.
Isi koding click event radio button “50%” dg ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.print.preview.zoom =50
dw_1.Modify("datawindow.zoom =50 ")
end if
Isi koding click event radio button “85%” dg ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.print.preview.zoom =85
dw_1.Modify("datawindow.zoom =85 ")
end if
dst-nya………………
Note :
Perintah2 yg berhubungan dg “preview” dapat diterapkan/dijalankan jika datawindow
ada di posisi “preview” juga.
Untuk mengetahui atau mendapatkan indormasi apakah datawindow dlm kondisi
“preview” dipakai perintah “describe”
© mztolo 2006 – PB pemula 124
Jadi anda tambah perbendaharaan 1 perintah lagi yaitu perintah “describe” lebih detailnya
baca help PB 
Selanjutnya preview datawindownya di set zoom dahulu agar tampilan previewnya ikut
berubah sesuai besaran angka prosentasenya (100% = ukuran normal)
Selanjutnya agar waktu tercetak datawindow besarnya sesuai yg kita inginkan maka
lakukan modifikasi di zoom datawindow-nya.
Nanti anda bisa buktikan waktu anda cetak di printer…….
Simsalabim…tercetak sesuai besar zoom nya …SECARA FISIK !! 
Isi koding click event checkbox “Rulers” dg ini :
if dw_1.describe('datawindow.print.preview')='yes' then
if this.checked then
dw_1.object.datawindow.print.preview.rulers='yes'
else
dw_1.object.datawindow.print.preview.rulers='no'
end if
end if
Perintah ini untuk menampilkan “rulers” di pinggiran tampilan preview anda.
Spt tampak di bawah ini :
Berikut jika tdk pake rulers :
Coba juga tampilan “zoom” 85% nya spt ini :
© mztolo 2006 – PB pemula 125
Note :
Garis biru yg tampak di gambar atas adalah garis pembatas untuk area cetak.
Anda bisa menggeser ke arah “dalam” yg akan menandakan margin kiri dan kanan dari
layout cetakan anda.
Yg ini untuk “zoom” 150% :
Selanjutnya mari kita buat “range” untuk mencetak kode “nis” sekian s/d sekian.
Tambahkan 2 buah “SingleLineEdit” kontrol spt ini :
Tujuannya adalah untuk entri kode “nis”
Anda juga bisa mencoba dg membuat datawindow untuk hal tsb di atas, tentunya dg
membuat dropdown datawindow-nya.
Atau dg memakai kontrol spt combobox…..silahkan di kembangkan 
Selanjutnya anda ubah koding tombol “Preview” dg spt ini :
string kode1,kode2,dwfilter
kode1 =righttrim(sle_1.text)
kode2 =righttrim(sle_2.text)
dw_1.dataobject='dw_lap_tabungan'
dw_1.settransobject(sqlca)
© mztolo 2006 – PB pemula 126
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Note :
Ntuk kasus ini saya berikan sample dg perintah “FILTER”
Anda bisa lihat cara memasukkan data “nis” ke variable yg ada (kode1 dan kode2),
begitu jg cara menyiapkan variablenya.
Selain itu perhatikan validasi untuk pengecekan apakah kode1 dan kode2 ada isi-nya.
Begitu juga dg cara penulisannya untuk variable “setfilter” yaitu “dwfilter”
Setelah itu agar filter jalan atau dilakukan maka lakukan “setfilter” sbg kondisinya dan
lakukan “filter” untuk datawindow tersebut…dan retrieve tentunya.
Jika “setfilter” diisi variable yg kosong ( dwfilter=” “) maka filter tdk akan berlaku atau
berarti data akan ditampilkan semua.
Simpan perubahan dan coba tampilkan……spt ini :
Mmmm…..ok sampai ini dulu…..
Sedikit2 aja…biar anda bisa meresapi koding, kegunaan dan artinya 
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 127
© mztolo 2006 – PB pemula 128
POWERBUILDER #12 (c)
Ok mari kita melangkah ke depan lagi 
Coba tambahkan 3 radio button spt ini :
Jangan lupa anda tempatkan didalam “GroupBox”
Dan berinama groupbox itu “Paper Orientation” spt tampak di gambar atas.
Paper Orientation berguna untuk mengatur tampilan cetak apakah ingin “Portrait”
potret/berdiri atau “Landscape” membentang/melintang.
Paper Orientation ini mengacu pada properti datawindow di “tab” Print Specifications :
Adapun isi koding untuk event click radiobutton “Default” adalah spt ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.Print.orientation = 0
dw_1.Modify(' datawindow.paper.orientation = 0')
end if
© mztolo 2006 – PB pemula 129
Perhatikan perintah ini jg berlaku jika kondisi datawindow sedang “preview”
Isi click event radiobutton “Portrait” sbb :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.Print.orientation = 2
dw_1.Modify(' datawindow.paper.orientation = 2')
end if
Isi click event radiobutton “Landscape” sbb :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Object.DataWindow.Print.orientation = 1
dw_1.Modify(' datawindow.paper.orientation = 1')
end if
Coba jalankan dan coba tampilkan secara “Landscape” spt ini :
Dan jika anda cetak maka akan tercetak secara “Landscape” juga.
Note :
Jika anda hanya ingin menampilkan secara preview saja maka cukup dg perintah ini :
dw_1.Object.DataWindow.Print.orientation = 1
Tetapi jika anda ingin perubahan di preview itu juga agar sama hasilnya di cetakan
berupa “landscape” maka di tambahkan perintah ini :
dw_1.Modify(' datawindow.paper.orientation = 1')
© mztolo 2006 – PB pemula 130
Selanjutnya tambahkan spt ini 3 radiobutton, 1 SingleLineEdit dan 1 EditMask untuk
“Copies” spt ini :
Atur properties untuk EditMask “Copies” spt ini :
Isi koding click event untuk radiobutton “All” spt ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Modify(' datawindow.print.page.range =" "')
end if
sle_3.enabled=false
Note :
Perhatikan masih sama konsepnya yaitu dg memberikan modify kepada datawindow.
Modify ini bisa sekaligus banyak, atau dg kata lain datawindow bisa di modifikasi dg
perintah2 secara bersamaan.
© mztolo 2006 – PB pemula 131
Sle_3.enabled=false artinya agar SingleLineEdit yg di kanan tulisan “Pages” dibuat
disable agar tdk bisa di entri. Karena memang itu tempat kita mengisi nomor halaman yg
akan di cetak, dan jika kita pilih “all” atau “current” maka disabled.
Isi koding click event untuk radiobutton “Current page” spt ini :
if dw_1.describe('datawindow.print.preview')='yes' then
long row
string tmp
row = dw_1.getrow()
tmp = dw_1.describe("evaluate('page()',"+string(row)+")")
dw_1.Modify(" datawindow.print.page.range ='"+tmp+"'")
end if
sle_3.enabled=false
Note :
Pertama kita akan mengetahui default row dari datawindow preview aktif ini ada
dihalaman berapa (tentunya sesuai dg ukuran kertas yg telah di setting).
Selanjutnya sama….modify juga.
Isi koding click event untuk radiobutton “Pages” spt ini :
if dw_1.describe('datawindow.print.preview')='yes' then
string tmp
tmp = sle_3.text
dw_1.Modify(" datawindow.print.page.range ='"+tmp+"'")
end if
sle_3.enabled=true
Note :
Perhatikan datawindow akan dicetak sesuai data nomor halaman yg di entrikan di
SingleLineEdit (sle_3.text)
Contoh pengisiannya :
5 artinya halaman 5 saja
1-5 artinya halaman 1 s/d 5
1,4 artinya halaman 1 dan 4 saja
1,3,5-12 artinya halaman 1,3 terus 5 s/d 12
Untuk EditMask “Copies” tdk perlu ada koding ..hanya saja koding di click event tombol
“Print” anda ubah menjadi spt ini :
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Modify(" datawindow.print.copies ='"+em_1.text +"'")
dw_1.print()
end if
Note :
Em_1.text adalah nama dari object/control EditMask “Copies”
Ok…sekarang anda bisa coba cetak dg mencoba-coba kriteria2 di atas 
© mztolo 2006 – PB pemula 132
Kemudian kita coba “destination” dari cetakan itu sendiri…..
Mau ke kertas/printer ? Atau ke file Excel ? Atau ke file Text ?
Coba tambahkan 3 radiobutton “Print To :” spt ini :
Tidak perlu ada koding hanya anda untuk masing2 radiobutton-nya.
Anda tambahkan/ubah saja koding di tombol “Print” nya spt ini :
if rb_10.checked=true then
if dw_1.describe('datawindow.print.preview')='yes' then
dw_1.Modify(" datawindow.print.copies ='"+em_1.text +"'")
dw_1.print()
end if
else
string docname, named
int value
if rb_11.checked=true then
value=GetFileSaveName("Save As To File",docname, named, "XLS", "*.XLS,*.XLS")
if value = 1 then
dw_1.saveAs(docname,Excel!,TRUE)
else
return
end if
else
value=GetFileSaveName("Save As To File",docname, named, "TXT", "*.TXT,*.TXT")
if value = 1 then
dw_1.saveAs(docname,Text!,TRUE)
else
return
end if
end if
messagebox("www.mztolo.com","Proses Selesai !!")
end if
© mztolo 2006 – PB pemula 133
Note :
Anda perhatikan koding berwarna biru yg merupakan tambahannya.
Rb_10 = radiobutton untuk “print to” PAPER.
Rb_11 = untuk ke file EXCEL
Rb_12 = untuk ke file TEXT.
Sebenarnya ini tdk murni cetak/print tetapi “SaveAs” dg type dari file/hasil yg dipilih.
Anda perhatikan bentuk perintah “SaveAs” …dw_1.saveAs(docname,Excel!,TRUE)
“TRUE” berarti header/nama kolom dari data diikutsertakan.
“FALSE” header/nama kolom tdk diikutsertakan, jadi hanya data saja.
GetFileSaveName(…) dipakai untuk menampilkan modul/dialogbox “SaveAs” :
Jadi user diberikan kesempatan untuk menulis nama file nya serta lokasi tempat file itu
akan di simpan.
Hasilnya spt ini :
Dan ini :
© mztolo 2006 – PB pemula 134
Sekarang jika anda tampilkan penuh maka window/sheet cetak anda akan spt ini :
Note :
Untuk kedepannya sebaiknya window preview dibuat 1 khusus dan bisa dipakai untuk
semua preview laporan yg ada di aplikasi.
Setting print spt paper orientation, page range dll. bisa dibuatkan sheet tersendiri…jadi
tdk menggabung spt itu.
Memang langkah2 yg saya berikan berurutan dan satu demi satu agar rekan2 lebih mudah
memahami dan mengerti 
© mztolo 2006 – PB pemula 135
Kedepannya bisa spt contoh berikut ini :
Dan ini :
Ok…semoga….sample2 ini menambah pengetahuan anda dan membuat anda bahagia
juga 
© mztolo 2006 – PB pemula 136
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 137
POWERBUILDER #12 (d)
Ok mari kita melangkah ke depan lagi 
Selanjutnya mari kita mencoba untuk membuat report dg “group”
Sebagai sample kita pakai data master – detail….sehingga nantinya di laporan akan
dibuat daftar ujian group per group untuk masing2 siswa.
Ok…mari kita mulai….
(langkah ini mungkin bukan langkah yg ideal tetapi saya pakai untuk memudahkan anda
memahaminya )
Ok…klik new dan buat datawindow spt ini :
Klik OK…..
Retrieve on Preview jika tdk anda centang maka datawindow akan ter-create tanpa
langsung menampilkan/preview data yg ada.
(seandainya data anda ribuan/milyaran dan harus preview maka akan memakan waktu)
Selanjutnya klik NEXT
Pilih table “tbldujian” dan pilih kolomnya spt tampak di gambar bawah ini…
© mztolo 2006 – PB pemula 138
Klik OK…tampak spt ini :
Klik dan tahan pakai mouse kolom “nis” dan drag ke tempat sebelah kanan spt ini :
Ini artinya group yg kita pakai adalah berdasar “nis”
Selanjutnya klik tombol NEXT sampai keluar spt ini :
© mztolo 2006 – PB pemula 139
Ganti tulisan “Tbldujian Report” dengan “DAFTAR UJIAN SISWA” spt ini :
Untuk membuat baris ke dua…letakkan pointer di belakang kata SISWA dan tekan
Ctrl+Enter….dan tulis “SMA 1 SUNTER” spt ini :
Selanjuntya klik tombol NEXT…..
Klik NEXT lagi…..dan klik FINISH
Tampak hasilnya spt ini :
© mztolo 2006 – PB pemula 140
Dan jika anda preview akan tampak spt ini :
Anda perhatikan total untuk per group dan untuk summary sudah ada dan data
ditampilkan group berdasar “nis”.
Selanjutnya jika anda perhatikan data di atas belum informatif….artinya itu nilai ujian
untuk siswa bernama siapa ? dengan pengawas siapa ?
Lalu caranya bagaimana ? Ok…mari kita tambahkan nama pengawasnya…..
© mztolo 2006 – PB pemula 141
Dari painter datawindow klik icon ini …. sampai tampak spt ini :
Klik kanan di area kosong spt ini :
Dan pilih/klik “Select Tables..” sampai keluar modul untuk memilih table yg lain spt ini :
Pilih “tblhujian” dan klik tombol OPEN
© mztolo 2006 – PB pemula 142
Sampai tampil spt ini :
Pilih kolom “pengawas” untuk di tampilkan di datawindow spt ini :
Tampak kolom “pengawas” di bagian atas sudah ada…..
Selanjutnya coba cek setting “join” diantara kedua table itu…..
Double klik tanda “=” spt tampak di gambar atas….sampai tampil spt ini :
Perhatikan sudah benar……  dan klik tombol OK
© mztolo 2006 – PB pemula 143
Klik icon RETURN untuk kembali ke datawindow painter…..
Tampak kolom “pengawas” sudah ditambahkan…
Selanjutnya anda atur dan rapikan spt ini …
Hasilnya akan spt ini…..
Ok selanjutnya kita tambahkan nama siswa dg mengambil kolom dari table “tblsiswa”.
Langkahnya sama dg menekan tombol
Dan dari datawindow painter anda bisa klik kanan atau menekan icon spt ini :
© mztolo 2006 – PB pemula 144
Tampil kolom2 dari table “tblsiswa” pilih kolom nama …dan hasilnya spt ini :
Tampak datawindow di painternya spt ini :
Geser menjadi spt ini :
Sehingga tampak di preview akan menjadi spt ini :
© mztolo 2006 – PB pemula 145
Atau anda bisa rapikan spt ini juga ….
Perhatikan judul kolom di pindah di header per-group dan tanggal dipindah ke footer.
Untuk centering judul anda bisa lakukan spt ini :
Klik judul di atas dan pilih “Center” di properti alignment-nya…shg hasilnya spt ini :
© mztolo 2006 – PB pemula 146
Anda juga bisa tambahkan computed field spt ini :
Perhatikan isi “Compute Expression” nya…..dan hasilnya tampak spt ini :
Selanjuntya coba tambahkan “line” di atas dan bawah dari total per groupnya spt ini :
© mztolo 2006 – PB pemula 147
Atur ketebalan “line” dg “Pen Width” yg ada di properties-nya….
Serta tambahkan text spt tampak di atas….. “Rata2 per group” dan “Rata2 dari seluruh
siswa”.
Upppsss….ada yg salah….. ?
Yap…. itu rata2 tetapi kok rumusnya “SUM” bagaimana nih ?
Anda tinggal edit di propertisnya menjadi “AVG”
Untuk rata2 per group spt ini avg(nilai for group 1)
Untuk rata2 semua ubah menjadi spt ini avg(nilai for all)
Jangan lupa format untuk kedua nya pakai ###.00
Previewnya akan spt ini ….
Ok…..simpan datawindow ini dg nama “dw_lap_ujian”
Buka window “w_lap_tab” dan save as menjadi “w_lap_ujian”
© mztolo 2006 – PB pemula 148
Selanjutnya ubah koding di click event tombol PREVIEW menjadi spt ini :
// mztolo 2006
string kode1,kode2,dwfilter
kode1 =righttrim(sle_1.text)
kode2 =righttrim(sle_2.text)
dw_1.dataobject='dw_lap_ujian'
dw_1.settransobject(sqlca)
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Perhatikan yg dicetak tebal…..
Selanjuntya isi koding di click event menu lap per group spt ini :
© mztolo 2006 – PB pemula 149
opensheet(w_lap_ujian,w_utama,5,original!)
Sekarang coba cetak per group dijalankan…..
© mztolo 2006 – PB pemula 150
Dan ini contoh output ke excel-nya….
Ok…. Ini hanyalah sebuah awal….
Masih banyak sample datawindow yg lain…baik untuk entri ataupun report….
Silahkan terus dicoba…terus membaca…dan terus belajar…..
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 151
POWERBUILDER #13
Setelah membaca sample 12(e) mungkinkah ada timbul pertanyaan dalam benak anda ?
Apakah setiap proses cetak harus memerlukan masing2 1 window/sheet cetak….
Jadi kalo ada proses cetak 10 maka perlu juga 10 sheet preview ?
Sedangkan jika kita lihat semua koding sama dan hanya 1 perbedaan yaitu tentang
datawindow object-nya saja.
Ok ..benar sekali… kenapa kita tidak membuat atau cukup 1 sheet preview saja ?
Artinya sheet preview tersebut harus bisa menerima parameter untuk object datawindow
yg berbeda. Jika PB bisa….tentunya…lalu dg perintah apa ?
Untuk membuka sheet biasa anda memakai ini :
opensheet(w_lap_tab,w_utama,5,original!)
Nah untuk opensheet dg parameter dg perintah ini :
OpenSheetWithParm ( sheetrefvar, parameter {, windowtype }, mdiframe{, position {, arrangeopen } } )
Ok sebelum kita melangkah lebih jauh coba buka/modify sheet “w_lap_tab” dan save as
dengan nama “w_preview”.
“w_preview” inilah yg akan kita pakai…window preview yg sudah anda buat biarkan
saja sbg dokumentasi anda untuk belajar.
Selanjutnya di click event masing2 menu cetak coba anda ganti dg perintah2 ini :
Untuk “laporan data siswa”…..
OpenSheetWithParm(w_preview,”dw_lap_tabungan”,w_utama,5,original!)
Untuk “laporan per group” …..
OpenSheetWithParm(w_preview,”dw_lap_ujian”,w_utama,5,original!)
Lalu apakah langsung bisa dijalankan …perintah ini dari menu ?
Mmmmm……sheet “w_preview” anda harus diberikan perintah untuk menangkap
parameter yg disertakan di perintah tersebut di atas. Caranya ?
Ok….perlu anda ketahui untuk meng-capture/menangkap/store data parameter itu PB
mengenal 3 perintah :
Message.DoubleParm Numeric
Message.PowerObjectParm PowerObject (PowerBuilder objects, including user-defined structures)
Message.StringParm String
Anda perhatikan…jika yg dilewatkan berupa data numeric dipakai perintah
“Message.DoubleParm”.
Jika data string pakai “Message.StringParm”
Dan jika berupa “structure”, PB object yg lain maka pakai “Message.PowerObjectParm”.
Karena yg dilewatkan berupa data string contoh : ”dw_lap_ujian”
© mztolo 2006 – PB pemula 152
Maka modify sheet “w_preview” anda di clickevent tombol PREVIEW dg koding ini :
// mztolo 2006
string kode1,kode2,dwfilter
string ls_nama_window
ls_nama_window = Message.StringParm
kode1 =righttrim(sle_1.text)
kode2 =righttrim(sle_2.text)
dw_1.dataobject=ls_nama_window
dw_1.settransobject(sqlca)
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
Penjelasan…….
Perhatikan perubahan koding di click event tombol PREVIEW di atas….
Terutama yg saya ketik dg warna merah……..
Pertama spt biasa anda siapkan variable untuk tempat nama datawindow itu
string ls_nama_window
Setelah itu store data sesuai yg dilewatkan parameter dg perintah ini…
ls_nama_window = Message.StringParm
Dan anda isikan dataobject untuk dw_1 dengan perintah ini…..
dw_1.dataobject=ls_nama_window
Dengan demikian “w_preview” sudah bisa anda pakai untuk type cetakan laporan
tabungan dan daftar nilai ujian.
Hebatnya lagi capture parameter itu bisa dilakukan di koding sebuah click event tombol.
Jadi tdk harus anda set di open event sheet….atau event lain yg running atau dijalankan
waktu sheet pertama kali ditampilkan.
Bagaimana jika data hasil store parameter itu mau kita pakai disemua event sheet ?
Karena kalo spt sample di atas itu hanya bisa dipakai di event click tombol PREVIEW
saja.
© mztolo 2006 – PB pemula 153
Pertama anda harus declare variable untuk datanya di “Instance Variables” spt ini :
string ls_nama_window
Terus capture datanya anda ketik di open event dari sheet tersebut spt ini :
ls_nama_window = Message.StringParm
Sehingga koding di click event PREVIEW bisa ditulis spt ini :
// mztolo 2006
string kode1,kode2,dwfilter
kode1 =righttrim(sle_1.text)
kode2 =righttrim(sle_2.text)
dw_1.dataobject=ls_nama_window
dw_1.settransobject(sqlca)
if len(kode1)>0 and len(kode2)>0 then
dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'"
elseif len(kode1) > 0 and len(kode2)=0 then
dwfilter ="nis ='"+kode1+"'"
elseif len(kode1) = 0 and len(kode2) >0 then
dwfilter ="nis ='"+kode2+"'"
else
dwfilter=" "
end if
dw_1.setfilter(dwfilter)
dw_1.filter()
dw_1.retrieve()
dw_1.object.datawindow.print.preview='yes'
© mztolo 2006 – PB pemula 154
Note :
Cara atau aturan spt ini juga berlaku untuk variable atau parameter lain yg anda mau
pakai di seluruh event sheet anda atau object yg ada di sheet anda.
Bagaimana jika variable itu kita ingin pakai untuk seluruh aplikasi, artinya bersifat
“public” atau global ?
Anda bisa ketikkan di “Global Variables” spt ini :
“Global Variables” ini bisa diakses dari semua lokasi di aplikasi.
Sedangkan “Instance Variables” bisa diakses dalam lingkup object tersebut atau bisa juga
disamakan/dianggap sbg property sebuah object.
Ok lebih detailnya anda bisa baca di help PB 
Mmmm….saya pikir sudah cukup sampai disini 
Eiiiittt… nanti dulu …apakah anda sudah puas ?!
Belum ? Mmmm….kenapa ?
Ok…coba jalankan kembali aplikasi anda….dan jalankan/buka sheet cetak data
siswa/tabungan.
Previewkan….mmmm sukses !!
Sekarang dlm kondisi sheet preview ini aktif coba jalankan sheet cetak data ujian siswa…
Apa yg terjadi ? Window preview untuk yg kedua kali tdk mau tampil !
Benar sekali krn memang “w_preview” sudah tampil untuk data tabungan siswa.
Hal ini akan sama terjadi jika anda mencetak data ujian dan kemudian dlm kondisi masih
preview anda coba cetak juga data tabungan siswa.
Lalu bagaimana solusinya ? Anda ketik koding spt ini di click event menu laporan anda :
w_preview w_pre1
OpenSheetWithParm(w_pre1,"dw_lap_tabungan",w_utama,5,original!)
Dan spt ini….
w_preview w_pre2
OpenSheetWithParm(w_pre2,"dw_lap_ujian",w_utama,5,original!)
Note :
Perintah di atas dipakai untuk membuka 2 window yaitu “w_pre1” dan “w_pre2” dari
type window/sheet yg sama yaitu “w_preview”
Dengan cara di atas barulah di mungkinkan untuk membuka sheet preview secara
bersamaan dari 2 atau lebih laporan yg ada.
© mztolo 2006 – PB pemula 155
Tampak di gambar bawah isi click event menu “lap data tabungan siswa” :
Tampak di gambar bawah isi click event menu “lap data nilai ujian siswa” :
© mztolo 2006 – PB pemula 156
Buktikan….dan…inilah hasilnya :
Tampak sheet preview tampil untuk 2 buah laporan yg ada 
Perlu dicatat juga cara ini berlaku jg untuk sheet/window yg lain yg mungkin anda mau
tampilkan berulang.
Mmmm sekarang anda sudah puas ? Blom juga ?
Apa kegunaan opensheetwithparm() yg lain ?
Datawindow memungkinkan kejadian spt ini…..
Misal ada sebuah tampilan “tabular” berbentuk row per row ke bawah tentunya….
Kemudian anda double click salah satu row…..tampilah modul edit untuk atau khusus
row/data tersebut.
Bagaimana membuka sheet editing ini agar sesuai dg row/data yg di click ?
Dengan opensheetwithparm() atau openwithparm() !! Benar sekali…… 
Masih blom puas juga ?! Mmmmm……..tetaplah untuk membaca dan belajar….
Kembangkan juga sheet preview yg ada sehingga benar2 bisa untuk preview semua
bentuk laporan yg ada…….
Akhir kata…..Sukses untuk anda !!
© mztolo 2006 – PB pemula 157
PB#14 (tambahan)
Sebelum melangkah lebih jauh di pemrograman PB saya ingin menambahkan beberapa
hal yg mungkin kelaknya berguna dan memudahkan…..
Coba anda buka workspace latihan anda sebelumnya….spt ini :
Kalo kita perhatikan mungkin ini adalah layout favorite anda…..ada system tree nya ada
paint untuk datawindow…..nama2 kolomnya dan tentunya properties…
Tapi mungkin karena suatu hal maka….tampilan “berantakan” spt ini…
© mztolo 2006 – PB pemula 158
Perhatikan tampilan “kolom” ada diantara datawindow painter dan properties….
Lalu jika kita ingin mengembalikan keposisi semula bagaimana ?
Caranya ….klik menu spt gambar di bawah :
Dan anda bisa perhatikan tampilan akan rapi kembali…..
© mztolo 2006 – PB pemula 159
Sekarang anda juga bisa membuat “custom” layout sendiri…..
Misal…dari tampilan “Default” di atas saya tdk mau modul “Export/Import Template
XML” ditampilkan….jadi cukup spt ini :
© mztolo 2006 – PB pemula 160
Caranya ?
Close dulu modul “Export/Import Template XML” tersebut….
Terus klik menu VIEW -> LAYOUT -> MANAGE
Sampai tampil modul spt ini….
Selanjutnya klik icon nomor 2 dari kiri…. “New Layout” sampai tampil spt ini…
© mztolo 2006 – PB pemula 161
Anda ketik misal “mztolo” …..
Terus klik tombol “Apply Layout”….
Sekarang anda coba bedakan…antara “Default” dg “mztolo” 
Mmmmm…..bedakan ?! 
Berikutnya adalah mengenai “control” yg invisible…alias tdk tampak…
© mztolo 2006 – PB pemula 162
Atau di setting propertiesnya….visible tdk di centang…
Perhatikan gambar berikut ini…
Dlm sheet ada command button tapi tdk tampil …kenapa ?
Lihat propertiesnya….
Visible tdk di centang !! Alias button ini di setting secara invisible 
Satu sisi memang di PB spt itu…tapi satu sisi…mmm jadi kita nggak tahu dimana itu
kontrol command buttonnya….
Lalu bagaimana jika kita maunya invisible tetapi tetap tampil di waktu desainnya…
Caranya adalah…. Klik menu DESIGN -> SHOW INVISIBLES
Sehingga akan tampil spt ini…walau invisible….
© mztolo 2006 – PB pemula 163
Berikutnya adalah…membuat file library baru…
Apa itu ? Perhatikan gambar berikut…..
© mztolo 2006 – PB pemula 164
Itu adalah system tree workspace anda….tampak di sana hanya ada 1 file library yaitu
“siswa.pbl”.
Anda tahu di PB kita bisa membuat aplikasi dg beberapa library….misalnya
begini….main program..function…custom object dan menu di library “siswa.pbl”
Kemudian window sheet ada di library “transaksi.pbl” dan semua report ada di library
“laporan.pbl”.
Dengan demikian nanti di PB ada 1 exe misalnya dan beberapa file “PBD” ……”pbl”
kali ?! Bukan ….tapi “pbd” krn “pbl” setelah di build dan deploy jadinya “pbd”
Dan jika anda perlu ubah di laporannya…anda cukup update di library “laporan.pbl” nya
Demikianlah….PB…lalu bagaimana cara menambah library baru ?
Klik kanan di “target” dan pilih “properties” spt ini…
Sampai tampil spt ini….
© mztolo 2006 – PB pemula 165
Klik tombol “NEW” untuk membuat library baru…..
Ketik nama library-nya misal ….”transaksi” dank klik tombol SAVE
Tampil modul spt ini…dan anda bisa menambahkan keterangan untuk library tsb…
Klik tombol OK….dan hasilnya spt ini….
© mztolo 2006 – PB pemula 166
Dan tampak juga di system tree anda….
Nah pada saat membuat sheet atau modul yg lain…..jgn lupa simpan di library
“transaksi.pbl” tersebut….
Hasilnya spt ini…….
Ada cara lain ?
Ada dong…… 
© mztolo 2006 – PB pemula 167
Klik kanan di “target” dan pilih “NEW”
Pilih “library painter” dan klik tombol OK
Perhatikan di PB anda tampil toolbar untuk “library” spt ini…
Klik tombol pertama untuk membuat library baru….
Ikutin langkah2 selanjutnya spt yg ada pada halaman 8….
© mztolo 2006 – PB pemula 168
Hanya saja blm ada di system tree anda….. 
Lalu cara menambahkannya bagaimana ?
Klik kanan lagi “target” ….pilih properties….sampai tampil spt ini
Klik tombol “BROWSE”
Pilih library yg anda mau “add” dan klik tombol OPEN
Akan kembali ke posisi modul sebelumnya ….Terus klik tombol OK
© mztolo 2006 – PB pemula 169
Maka tampak di system tree anda spt ini…..
Ok……saya pikir tambahannya ini dulu….
Tetap untuk semangat…dan terus lah menggali….
Jangan lupa tetap kreatif….dan tentunya perbanyak rasa syukur 
Akhir kata ….sukses untuk anda !!

More Related Content

What's hot

Adobe dreamwaver
Adobe dreamwaverAdobe dreamwaver
Adobe dreamwaver
zhafdiana
 
Mengidentifikasi berbagai komponen perangkat keras
Mengidentifikasi berbagai komponen perangkat kerasMengidentifikasi berbagai komponen perangkat keras
Mengidentifikasi berbagai komponen perangkat keras
Faridiraf Sama Aja
 
1. Menggunakan Peralatan Peripheral.pdf
1. Menggunakan Peralatan Peripheral.pdf1. Menggunakan Peralatan Peripheral.pdf
1. Menggunakan Peralatan Peripheral.pdf
MAN4BANTUL
 
Materi ms word kelas x
Materi ms word kelas xMateri ms word kelas x
Materi ms word kelas x
samrin khan
 

What's hot (20)

Manual Book Aplikasi Mobile DavestPay.com
Manual Book Aplikasi Mobile DavestPay.comManual Book Aplikasi Mobile DavestPay.com
Manual Book Aplikasi Mobile DavestPay.com
 
Buku informasi Menerapkan Desain Brief
Buku informasi Menerapkan Desain BriefBuku informasi Menerapkan Desain Brief
Buku informasi Menerapkan Desain Brief
 
Belajar Ms. Word, Ms. Excel, Ms. Powerpoint dan Internet.
Belajar Ms. Word, Ms. Excel, Ms. Powerpoint dan Internet.Belajar Ms. Word, Ms. Excel, Ms. Powerpoint dan Internet.
Belajar Ms. Word, Ms. Excel, Ms. Powerpoint dan Internet.
 
icon icon power point
icon icon power pointicon icon power point
icon icon power point
 
Pengenalan Microsoft Excel
Pengenalan Microsoft ExcelPengenalan Microsoft Excel
Pengenalan Microsoft Excel
 
Flowchart.ppt
Flowchart.pptFlowchart.ppt
Flowchart.ppt
 
Buku Informasi Mengoperasikan Perangkat Lunak Desain
Buku Informasi Mengoperasikan Perangkat Lunak DesainBuku Informasi Mengoperasikan Perangkat Lunak Desain
Buku Informasi Mengoperasikan Perangkat Lunak Desain
 
Metode pengembangan game digital
Metode pengembangan game digitalMetode pengembangan game digital
Metode pengembangan game digital
 
Latihan powerpoint
Latihan powerpointLatihan powerpoint
Latihan powerpoint
 
Adobe dreamwaver
Adobe dreamwaverAdobe dreamwaver
Adobe dreamwaver
 
Modul praktikum corel draw
Modul praktikum corel drawModul praktikum corel draw
Modul praktikum corel draw
 
Penggunaan radio button dan checkbox dalam vb.net
Penggunaan radio button dan checkbox dalam vb.netPenggunaan radio button dan checkbox dalam vb.net
Penggunaan radio button dan checkbox dalam vb.net
 
Bài 7 Làm việc với SMART OBJECT sử dụng FILTER - Giáo trình FPT
Bài 7 Làm việc với SMART OBJECT sử dụng FILTER - Giáo trình FPTBài 7 Làm việc với SMART OBJECT sử dụng FILTER - Giáo trình FPT
Bài 7 Làm việc với SMART OBJECT sử dụng FILTER - Giáo trình FPT
 
Design grafis adobe illustrator
Design grafis adobe illustratorDesign grafis adobe illustrator
Design grafis adobe illustrator
 
Ms excel presentasi
Ms excel presentasiMs excel presentasi
Ms excel presentasi
 
Desain grafis percetakan menganalisis pemberian efek pada gambar vektor
Desain grafis percetakan menganalisis pemberian efek pada gambar vektorDesain grafis percetakan menganalisis pemberian efek pada gambar vektor
Desain grafis percetakan menganalisis pemberian efek pada gambar vektor
 
Mengidentifikasi berbagai komponen perangkat keras
Mengidentifikasi berbagai komponen perangkat kerasMengidentifikasi berbagai komponen perangkat keras
Mengidentifikasi berbagai komponen perangkat keras
 
LATIHAN PRAKTIKUM MICROSOFT WORD
LATIHAN PRAKTIKUM MICROSOFT WORDLATIHAN PRAKTIKUM MICROSOFT WORD
LATIHAN PRAKTIKUM MICROSOFT WORD
 
1. Menggunakan Peralatan Peripheral.pdf
1. Menggunakan Peralatan Peripheral.pdf1. Menggunakan Peralatan Peripheral.pdf
1. Menggunakan Peralatan Peripheral.pdf
 
Materi ms word kelas x
Materi ms word kelas xMateri ms word kelas x
Materi ms word kelas x
 

Viewers also liked (8)

dasar program berorientasi objek pada power builder
dasar program berorientasi objek pada power builderdasar program berorientasi objek pada power builder
dasar program berorientasi objek pada power builder
 
manual-power-builder
manual-power-buildermanual-power-builder
manual-power-builder
 
Silabus xi-2011-2012
Silabus xi-2011-2012Silabus xi-2011-2012
Silabus xi-2011-2012
 
Product design analysys
Product design analysysProduct design analysys
Product design analysys
 
Process design & steps
Process design & stepsProcess design & steps
Process design & steps
 
Process design
Process design  Process design
Process design
 
Product and process design
Product and process designProduct and process design
Product and process design
 
Process design
Process designProcess design
Process design
 

Similar to membuat program sederhana menggunakan power builder

URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)
URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)
URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)
Nastiti Rahajeng
 
Bahan ajar presentasi
Bahan ajar presentasiBahan ajar presentasi
Bahan ajar presentasi
Aris Saputro
 
Laporan tugas akhir
Laporan tugas akhirLaporan tugas akhir
Laporan tugas akhir
ahmadranddy
 
Laporan tugas akhir
Laporan tugas akhirLaporan tugas akhir
Laporan tugas akhir
ahmadranddy
 
Bab 1 tik
Bab 1 tikBab 1 tik
Bab 1 tik
EniVita
 
Tutorial ms power point
Tutorial ms power pointTutorial ms power point
Tutorial ms power point
kamaruddinhz
 
Tutorial Microsoft Visual FoxPro 9.0
Tutorial Microsoft Visual FoxPro 9.0Tutorial Microsoft Visual FoxPro 9.0
Tutorial Microsoft Visual FoxPro 9.0
Ollie Ollie
 
Powerpoint
PowerpointPowerpoint
Powerpoint
mutia123
 

Similar to membuat program sederhana menggunakan power builder (20)

Powerbuilder tutorial
Powerbuilder tutorialPowerbuilder tutorial
Powerbuilder tutorial
 
Modul 11 mendisain menu
Modul 11 mendisain menuModul 11 mendisain menu
Modul 11 mendisain menu
 
URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)
URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)
URAIAN KEGIATAN MINDJET MINDMANAGER (PRAKTIKUM 1)
 
Bahan ajar presentasi
Bahan ajar presentasiBahan ajar presentasi
Bahan ajar presentasi
 
E book vb.net+mysql(cara cepat)
E book vb.net+mysql(cara cepat)E book vb.net+mysql(cara cepat)
E book vb.net+mysql(cara cepat)
 
Sim,agus saiful,prof.dr.ir hapzi ali, mm ,cma,membuat dan mengelola blog &amp...
Sim,agus saiful,prof.dr.ir hapzi ali, mm ,cma,membuat dan mengelola blog &amp...Sim,agus saiful,prof.dr.ir hapzi ali, mm ,cma,membuat dan mengelola blog &amp...
Sim,agus saiful,prof.dr.ir hapzi ali, mm ,cma,membuat dan mengelola blog &amp...
 
Laporan tugas akhir
Laporan tugas akhirLaporan tugas akhir
Laporan tugas akhir
 
Laporan tugas akhir
Laporan tugas akhirLaporan tugas akhir
Laporan tugas akhir
 
Bab 1 tik
Bab 1 tikBab 1 tik
Bab 1 tik
 
Tutorial ms power point
Tutorial ms power pointTutorial ms power point
Tutorial ms power point
 
TIK Bab 1
TIK Bab 1TIK Bab 1
TIK Bab 1
 
18010976 diktat-visual-basic-1-2009
18010976 diktat-visual-basic-1-200918010976 diktat-visual-basic-1-2009
18010976 diktat-visual-basic-1-2009
 
Bab 1 tik
Bab 1 tikBab 1 tik
Bab 1 tik
 
Tutorial Microsoft Visual FoxPro 9.0
Tutorial Microsoft Visual FoxPro 9.0Tutorial Microsoft Visual FoxPro 9.0
Tutorial Microsoft Visual FoxPro 9.0
 
Cara Cepat Belajar VB.Net 2010 dengan Mysql
Cara Cepat Belajar VB.Net 2010 dengan MysqlCara Cepat Belajar VB.Net 2010 dengan Mysql
Cara Cepat Belajar VB.Net 2010 dengan Mysql
 
Modul pembuatan multimedia interaktif menggunakan power point
Modul pembuatan multimedia interaktif menggunakan power pointModul pembuatan multimedia interaktif menggunakan power point
Modul pembuatan multimedia interaktif menggunakan power point
 
Bab 2
Bab 2Bab 2
Bab 2
 
Materi TIK Power Point 2007 kelas 9 Bab 2
Materi TIK Power Point 2007 kelas 9 Bab 2Materi TIK Power Point 2007 kelas 9 Bab 2
Materi TIK Power Point 2007 kelas 9 Bab 2
 
Powerpoint
PowerpointPowerpoint
Powerpoint
 
CD Interaktif
CD InteraktifCD Interaktif
CD Interaktif
 

More from Fariszal Nova

More from Fariszal Nova (20)

12. yw algoritma dan pemrograman
12.  yw algoritma dan pemrograman12.  yw algoritma dan pemrograman
12. yw algoritma dan pemrograman
 
Rumus python ii
Rumus python iiRumus python ii
Rumus python ii
 
Rumus dasar python
Rumus dasar pythonRumus dasar python
Rumus dasar python
 
Operator python
Operator pythonOperator python
Operator python
 
Kode warna rgb
Kode warna rgbKode warna rgb
Kode warna rgb
 
Sql (4)
Sql (4)Sql (4)
Sql (4)
 
Model data relasional (3)
Model data relasional (3)Model data relasional (3)
Model data relasional (3)
 
Materi kuliah-sistem-basis-data1
Materi kuliah-sistem-basis-data1Materi kuliah-sistem-basis-data1
Materi kuliah-sistem-basis-data1
 
Materiku erd
Materiku erdMateriku erd
Materiku erd
 
Erd (entity relationship diagram)
Erd (entity relationship diagram)Erd (entity relationship diagram)
Erd (entity relationship diagram)
 
Teknik pengumpulan persyaratan
Teknik pengumpulan persyaratanTeknik pengumpulan persyaratan
Teknik pengumpulan persyaratan
 
Materiku bpr
Materiku bprMateriku bpr
Materiku bpr
 
Erp
ErpErp
Erp
 
Bpr bussiness process reengineering
Bpr   bussiness process reengineeringBpr   bussiness process reengineering
Bpr bussiness process reengineering
 
Bahan kuliah analisa proses bisnis
Bahan kuliah analisa proses bisnisBahan kuliah analisa proses bisnis
Bahan kuliah analisa proses bisnis
 
Generasi sistem operasi
Generasi sistem operasiGenerasi sistem operasi
Generasi sistem operasi
 
Euler
EulerEuler
Euler
 
Osi layer
Osi layerOsi layer
Osi layer
 
Perbedaan badan usaha
Perbedaan badan usahaPerbedaan badan usaha
Perbedaan badan usaha
 
Materi struktur organisasi smt 2
Materi struktur organisasi smt 2Materi struktur organisasi smt 2
Materi struktur organisasi smt 2
 

Recently uploaded

Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdfPaparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
SEMUELSAMBOKARAENG
 
PETUNJUK TEKNIS PPDB JATIM 2024-sign.pdf
PETUNJUK TEKNIS PPDB JATIM 2024-sign.pdfPETUNJUK TEKNIS PPDB JATIM 2024-sign.pdf
PETUNJUK TEKNIS PPDB JATIM 2024-sign.pdf
Hernowo Subiantoro
 

Recently uploaded (20)

Bab 3 Sejarah Kerajaan Hindu-Buddha.pptx
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptxBab 3 Sejarah Kerajaan Hindu-Buddha.pptx
Bab 3 Sejarah Kerajaan Hindu-Buddha.pptx
 
Susi Susanti_2021 B_Analisis Kritis Jurnal.pdf
Susi Susanti_2021 B_Analisis Kritis Jurnal.pdfSusi Susanti_2021 B_Analisis Kritis Jurnal.pdf
Susi Susanti_2021 B_Analisis Kritis Jurnal.pdf
 
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docxRUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
RUBRIK OBSERVASI KINERJA KEPALA SEKOLAH.docx
 
PPT Aksi Nyata Diseminasi Modul 1.4.pptx
PPT Aksi Nyata Diseminasi Modul 1.4.pptxPPT Aksi Nyata Diseminasi Modul 1.4.pptx
PPT Aksi Nyata Diseminasi Modul 1.4.pptx
 
Seminar: Sekolah Alkitab Liburan (SAL) 2024
Seminar: Sekolah Alkitab Liburan (SAL) 2024Seminar: Sekolah Alkitab Liburan (SAL) 2024
Seminar: Sekolah Alkitab Liburan (SAL) 2024
 
Laporan Piket Guru untuk bukti dukung PMM.pdf
Laporan Piket Guru untuk bukti dukung PMM.pdfLaporan Piket Guru untuk bukti dukung PMM.pdf
Laporan Piket Guru untuk bukti dukung PMM.pdf
 
ppt-menghindari-marah-ghadab-membiasakan-kontrol-diri-dan-berani-membela-kebe...
ppt-menghindari-marah-ghadab-membiasakan-kontrol-diri-dan-berani-membela-kebe...ppt-menghindari-marah-ghadab-membiasakan-kontrol-diri-dan-berani-membela-kebe...
ppt-menghindari-marah-ghadab-membiasakan-kontrol-diri-dan-berani-membela-kebe...
 
ALUR TUJUAN PEMBELAJARAN (ATP) B. Inggris kelas 7.pdf
ALUR TUJUAN PEMBELAJARAN (ATP) B. Inggris kelas 7.pdfALUR TUJUAN PEMBELAJARAN (ATP) B. Inggris kelas 7.pdf
ALUR TUJUAN PEMBELAJARAN (ATP) B. Inggris kelas 7.pdf
 
MODUL AJAR MATEMATIKA KELAS 1 KURIKULUM MERDEKA.pdf
MODUL AJAR MATEMATIKA KELAS 1 KURIKULUM MERDEKA.pdfMODUL AJAR MATEMATIKA KELAS 1 KURIKULUM MERDEKA.pdf
MODUL AJAR MATEMATIKA KELAS 1 KURIKULUM MERDEKA.pdf
 
Presentasi visi misi revisi sekolah dasar.pptx
Presentasi visi misi revisi sekolah dasar.pptxPresentasi visi misi revisi sekolah dasar.pptx
Presentasi visi misi revisi sekolah dasar.pptx
 
LAPORAN EKSTRAKURIKULER SEKOLAH DASAR NEGERI
LAPORAN EKSTRAKURIKULER SEKOLAH DASAR NEGERILAPORAN EKSTRAKURIKULER SEKOLAH DASAR NEGERI
LAPORAN EKSTRAKURIKULER SEKOLAH DASAR NEGERI
 
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdfPaparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
Paparan Kurikulum Satuan Pendidikan_LOKAKARYA TPK 2024.pptx.pdf
 
1. Standar Operasional Prosedur PPDB Pada paud
1. Standar Operasional Prosedur PPDB Pada paud1. Standar Operasional Prosedur PPDB Pada paud
1. Standar Operasional Prosedur PPDB Pada paud
 
Teori Profetik Kuntowijoyo (Dosen Pengampu: Khoirin Nisai Shalihati)
Teori Profetik Kuntowijoyo (Dosen Pengampu: Khoirin Nisai Shalihati)Teori Profetik Kuntowijoyo (Dosen Pengampu: Khoirin Nisai Shalihati)
Teori Profetik Kuntowijoyo (Dosen Pengampu: Khoirin Nisai Shalihati)
 
PETUNJUK TEKNIS PPDB JATIM 2024-sign.pdf
PETUNJUK TEKNIS PPDB JATIM 2024-sign.pdfPETUNJUK TEKNIS PPDB JATIM 2024-sign.pdf
PETUNJUK TEKNIS PPDB JATIM 2024-sign.pdf
 
Konflik dan Negosiasi dalam perilaku organisai
Konflik dan Negosiasi dalam perilaku organisaiKonflik dan Negosiasi dalam perilaku organisai
Konflik dan Negosiasi dalam perilaku organisai
 
Najwa Qarina_2021 B_Analisis Kritis Jurnal.pdf
Najwa Qarina_2021 B_Analisis Kritis Jurnal.pdfNajwa Qarina_2021 B_Analisis Kritis Jurnal.pdf
Najwa Qarina_2021 B_Analisis Kritis Jurnal.pdf
 
Solusi Masalah Pendidikan Kelompok 9 Wawasan Pendidikan.pptx
Solusi Masalah Pendidikan Kelompok 9 Wawasan Pendidikan.pptxSolusi Masalah Pendidikan Kelompok 9 Wawasan Pendidikan.pptx
Solusi Masalah Pendidikan Kelompok 9 Wawasan Pendidikan.pptx
 
KERAJINAN DARI BAHAN LIMBAH BERBENTUK BANGUN RUANG
KERAJINAN DARI BAHAN LIMBAH BERBENTUK BANGUN RUANGKERAJINAN DARI BAHAN LIMBAH BERBENTUK BANGUN RUANG
KERAJINAN DARI BAHAN LIMBAH BERBENTUK BANGUN RUANG
 
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawas
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawasPrensentasi Visi Misi Sekolah dalam rangka observasi pengawas
Prensentasi Visi Misi Sekolah dalam rangka observasi pengawas
 

membuat program sederhana menggunakan power builder

  • 1. © mztolo 2006 – PB pemula 1 DAFTAR ISI POWERBUILDER #1 (Langkah Pertama dan exe) POWERBUILDER #2(pembuatan menu utama) POWERBUILDER #3(Pembuatan Database) POWERBUILDER #4(entri data) POWERBUILDER #5(memodifikasi tampilan entri data) POWERBUILDER #6(script event entri data) POWERBUILDER #7(PB Object Function) POWERBUILDER #8(script tombol entri data) POWERBUILDER #9(Data freeform) POWERBUILDER #9 bag. 2(Data freefrom 2) POWERBUILDER #9 bag. 3(Data freeform master list) POWERBUILDER #10(Membuat pesan eror) POWERBUILDER #11(menu) POWERBUILDER #12(mencetak data window) POWERBUILDER #12b(mencetak data window) POWERBUILDER #12c(mencetak data window) POWERBUILDER #12 d(mencetak data window) POWERBUILDER #13(membuat parameter sheet) PB#14 (tambahan)
  • 2. © mztolo 2006 – PB pemula 2 POWERBUILDER #1 Powerbuilder adalah bahasa pemrograman database visual, dg fitur dan kelebihan- kelebihan antara lain : - termasuk golongan 4GL/bhs pemrograman generasi keempat - memakai metodologi RAD (Rapid Application Development) sehingga pengerjaan program akan cepat. - client/server (2-tier maupun 3-tier) - oop atau berorientasi object dll. Untuk latihan sample yg anda perlukan adalah : - PowerBuilder product www.sybase.com - Database dengan mysql product www.mysql.com Mari kita mulai……jalankan PB anda spt ini : Penjelasan gambar di atas adalah : 1. Menu Bar (menu-menu dari PB) 2. Toolbar (icon-icon toolbar PB) 3. Window System Tree (berisi informasi sistem object dan object aplikasi yg lain semacam function, events, window dll.) 4. Window Clip (digunakan untuk menempatkan output ke dlm window clip) 5. Window Output (output informasi spt error message dan proses yg lain) 6. Painter (layar editor tempat membuat object) Anda bisa menampilkan atau tidak window yg ada dengan mengaturnya di menu “Window” spt tampak di gambar atas.
  • 3. © mztolo 2006 – PB pemula 3 Selanjutnya untuk memulai pembuatan program klik icon “New” spt ini : Di bahasa pemrograman lain di sebut juga project, di PB di sebut Workspace atau area kerja kita. Tampak modul spt ini : Perhatikan di page “Workspace” pilih icon Workspace dan klik OK Ketik nama workspace nya “siswa” dan saya simpan di folder “c:samplePB”
  • 4. © mztolo 2006 – PB pemula 4 Klik tombol SAVE Tampak workspace “siswa” telah tercipta : Klik tombol “New” lagi dan pilih page “Target” : Pilih target type nya, yaitu “Application” karena kita akan membuat aplikasi. Klik tombol OK
  • 5. © mztolo 2006 – PB pemula 5 Ketik nama targetnya misal “siswa” juga….spt ini : Waktu anda klik di entrian bawah selanjutnya akan tampak spt ini….
  • 6. © mztolo 2006 – PB pemula 6 Klik tombol FINISH maka target tercipta dan hasilnya akan tampak spt ini : Dan kalau anda lihat di direktory “samplePB” akan tampak spt ini : Keterangan : siswa.pbw adalah nama file workspacenya siswa.pbt adalah nama file targetnya siswa.pbl adalah nama file librarynya
  • 7. © mztolo 2006 – PB pemula 7 Ok selanjutnya klik tombol “New” kembali untuk membuat window : Pilih page “PB Object” dan klik “Window” serta tombol OK Tampak “window” atau form yg anda buat sudah tampak di “painter” anda…..
  • 8. © mztolo 2006 – PB pemula 8 Agar view tampak luas anda bisa close terlebih dahulu window clip dan window output, dan hanya menyisakan “window system tree” serta “painter”. Selanjutnya mari kita tambahkan text di dalam window itu….. Klik kontrol “command button” spt tampak di atas…sampai tampil spt ini : Pilih “Static text” spt tampak di gambar atas dan klik di area window/form anda spt ini :
  • 9. © mztolo 2006 – PB pemula 9 Seperti tampak pada gambar di atas…..selanjutnya ganti text/caption “none” anda misalnya dg tulisan spt ini “Latihan 1st ku” Anda bisa atur font nya spt ini di properties-nya Atau bisa anda atur lewat ini ……
  • 10. © mztolo 2006 – PB pemula 10 Selanjutnya tambahkan command button /tombol di window/form itu….caranya klik control command buttonnya dulu dan pilih “command button” spt ini : Selanjutnya klik di area window spt ini dan atur text nya shg menjadi spt di bawah…. Untuk title/caption window nya sendiri anda klik di area kosong window dan ganti tiltle nya :
  • 11. © mztolo 2006 – PB pemula 11 Menjadi spt ini…..misalnya… Selanjutnya double click di tombol “Close” untuk mengisi click eventnya spt ini : Anda ketik “close(parent)”… yg artinya menutup parent dari tombol itu ..parent adalah tempat tombol berada …dg arti lain “window” itu…. Untuk kembali ke desain window tadi klik page/tab/frame “Layout” spt tampak di gambar di bawah. Spt ini……
  • 12. © mztolo 2006 – PB pemula 12 Klik tombol save sampai tampil modul spt ini : Ketik nama window-nya “w_utama” dan klik tombol OK Tampak juga jika anda ingin menambahkan comments/komentar….dan nama library dari window yg anda buat. Hasilnya spt ini…tampak di window system tree anda :
  • 13. © mztolo 2006 – PB pemula 13 Anda bisa close window yg anda buat dg klik tombol close spt ini : Selanjutnya untuk memanggil form ini pada saat aplikasi jalan pertama kali…. Double klik di object aplikasi “siswa” dan ketik koding spt berikut : Anda perhatikan comments/komentar di event di mulai dg tanda “//” “open(w_utama)” artinya buka/jalankan window utama ini. Catatan : Dalam koding command button “Close” di window “w_utama” bisa anda ganti menjadi “close(w_utama)” karena nama window itu adalah “w_utama” Selanjutnya close dan save …spt ini :
  • 14. © mztolo 2006 – PB pemula 14 Untuk test run program anda …klik icon ini dan lihat hasilnya… Inilah latihan aplikasi 1st anda ….  Klik tombol “close” untuk release/close window/form tersebut….. Ok…lalu bagaimana membuat file EXE nya ?! Langkah selanjutnya adalah kita harus membuat “project” nya dg klik tombol “New” ….pilih tab/page “Project” pilih item “Application” dan klik tombol OK spt ini :
  • 15. © mztolo 2006 – PB pemula 15 Tampak modul spt ini dan isi spt tampak di gambar : Perhatikan nama Execute File Name nya……harus komplit termasuk direktorynya… Klik tombol “close” atau klik icon save untuk menyimpan “project” ini :
  • 16. © mztolo 2006 – PB pemula 16 Ketik nama project dan komentar yg di inginkan serta klik tombol OK Hasilnya spt ini…… Selanjutnya klik menu “Run” di atas serta klik ….”Full Build Workspace” spt ini Tampak report build nya di window output : Kalo ada error akan tampil juga di window output ini…..
  • 17. © mztolo 2006 – PB pemula 17 Berikutnya klik menu “Run” lagi dan pilih “Deploy Workspace” Tampilan di window outputnya spt ini…….finish dan sukses ! Tampak isi direktory samplePB anda spt ini : Klik file “siswa.exe” ….yap…running well  Untuk selanjutnya jika anda mau implementasi atau install di client cukup file “siswa.exe”, file “siswa.pbd” dan file2 runtime PB –nya …yg anda sertakan…. Ok…dengan demikian sample 1st untuk PB cukup sekian dulu…nantikan sample2 berikutnya yg sudah mulai dg database  Siapkan diri anda dg database mysql, myodbc, mysqlfront tentunya atau interface mysql yg lain. Akhir kata….sukses untuk anda !!
  • 18. © mztolo 2006 – PB pemula 18 POWERBUILDER #2 Dalam PB #2 ini anda akan belajar membuat window type “mdi!” dan cara membuat “menu”, buka workspace yg pernah anda buat di latihan PB #1 : Rancangan aplikasi yg akan di buat nantinya adalah …berupa aplikasi dg layar utama dan ada menu untuk menjalankan window/form/modul entri yg ada. Jadi tidak spt waktu latihan 1st di PB #1 yg tampil hanya berupa window tunggal saja. Tipe data window utama untuk aplikasi dan bersifat spt screen, di PB dikenal sebagai type window mdi! (multiple document interface) Sebuah type window mdi!, type window ini sendiri harus memiliki “menu” Ok sebelum anda tambah bingung…..ikuti saja langkah2 berikut…. Membuat MENU : Klik tombol “New” ……pilih tab “PB Object” pilih “Menu” dan klik tombol OK…
  • 19. © mztolo 2006 – PB pemula 19 Tampak di painter anda modul menu painter…tempat anda membuat menu… Klik kanan pada text “untitled0” … spt ini dan klik “Insert Submenu Item” Ketik “&File” spt tampak di gambar di bawah ini…. Tanda “&” pada nama2 menu di gunakan sbg shortcut…sehingga bisa di panggil dengan menekan ALT+F
  • 20. © mztolo 2006 – PB pemula 20 Tampak juga di propertiesnya spt ini….. Klik kanan di “&File” dan klik “Insert Submenu Item” untuk membuat sub-menunya… Ketik “Entri &Siswa” spt tampak di gambar bawah…
  • 21. © mztolo 2006 – PB pemula 21 Ulangi langkah2 di atas untuk membuat sub-menu berikutnya…sehingga hasilnya spt ini Di layar sebelah kanan tampak layout/display/preview tampilan menu yg telah di buat…. Selanjutnya buat menu item lain …dg cara klik kanan “&File” dan klik spt di bawah ini.. Ketik spt tampak berikut ini…. Dan buat sub-menu “Transaksi” serta menu item berikutnya sehingga hasilnya spt ini…
  • 22. © mztolo 2006 – PB pemula 22 Save dan beri nama “mn_siswa” spt tampak di gambar bawah… Dengan demikian proses pembuatan menu sudah selesai…  Tampak “mn_siswa” sudah ada di tree system anda :
  • 23. © mztolo 2006 – PB pemula 23 Ok selanjutnya double click window “w_utama” ….
  • 24. © mztolo 2006 – PB pemula 24 Perhatikan : Title =“Program Entri Data Siswa” WindowType =mdi! WindowState =maximized! Icon =Form! Selanjutnya klik tombol di kanan entrian “MenuName” Tampak modul spt ini…
  • 25. © mztolo 2006 – PB pemula 25 Dan klik tombol OK……sehingga tampak di properties spt gambar di bawah ini…. Save perubahan window “w_utama”…. ……dan coba run aplikasi …klik icon Yap…..sukses……. 
  • 26. © mztolo 2006 – PB pemula 26 Hapus text “Latihan 1st ku” dan tombol “Close”…..maka jika di run akan spt ini… Note : Menu-menu di atas belum berisi command/koding, sehingga jika anda klik menu “Exit” pun window/aplikasi tdk akan “Close” atau “Exit” Bagaimana cara mengisinya ? Mari kita lakukan……….. Double click di “mn_siswa” untuk melakukan modifikasi menu tersebut… Selanjutnya double click di menu item “E&xit” agar event click nya aktif…. Ketik koding spt tampak di gambar bawah….
  • 27. © mztolo 2006 – PB pemula 27 Perhatikan : if messagebox('Exit','Anda Yakin ?',question!,YesNo!) = 1 then halt end if Note : “m_file.m_exit” artinya m_exit (“E&xit”) merupakan sub-menu dari m_file (“&File”) Pada saat anda klik menu “Exit” maka akan keluar pertanyaan spt ini… Jika anda klik tombol “Yes” maka sistem akan “HALT” alias berhenti atau close…(nilai return valuenya 1, kalo 2 adalah “No” … perhatikan susunan “YesNo!” …yes=1 ..no=2) Perhatikan gambar di atas dan perhatikan koding-nya…anda bisa ambil kesimpulan sendiri….misal “question!” itu simbol “?” spt tampak di gambar….begitu juga text yg lainnya…. Untuk koding yg lain akan dibuat sambil jalan…nantikan sample berikutnya  Sukses untuk anda !!
  • 28. © mztolo 2006 – PB pemula 28 POWERBUILDER #3 Untuk latihan berikut ini Anda siapkan database “sekolah” dengan table “tblsiswa” di mysql anda, adapun struktur tablenya spt ini : 1. nis char(8) 2. nama varchar(50) 3. kota varchar(15) 4. tgllhr date 5. jkel char(1) 6. tabungan float(10,0) Spt tampak di bawah ini, dg mySQLFront 2.5 : Selanjutnya buka workspace yg pernah anda buat di latihan PB sebelumnya :
  • 29. © mztolo 2006 – PB pemula 29 Setelah database mysql anda create selanjutnya adalah membuat koneksi database dengan cara….klik icon “Database” Klik tombol “+” di depan ODB ODBC sehingga …ter-expand…. Klik kanan di ODB ODBC …dan klik “New Profile….“
  • 30. © mztolo 2006 – PB pemula 30 Tampil modul “Database Profile Setup – ODBC” spt ini…… Isi data/value spt tampak di atas….. Profile Name: =sekolah User ID: =root Isolation Level: =Read Uncommitted Driver-Specific Parameters: = DRIVER={MySQL ODBC 3.51 Driver};DESC=;DATABASE=sekolah; SERVER=guzrud;UID=root;PASSWORD=;PORT=3306;OPTION=3;STMT=; Note : sekolah adalah nama databasenya guzrud adalah nama servernya, sesuaikan dg nama server anda root adalah id standard koneksi ke mysql nya “Commit on Disconnect” jangan di centang ! Klik tombol “Apply”
  • 31. © mztolo 2006 – PB pemula 31 Klik tab “Preview” sehingga tampak spt ini….. Klik tombol “Copy” untuk mengcopy listing profile koneksinya….(perhatikan kalo copy listing tersebut masih dlm kondisi ter-blok spt tampak di gambar atas) Gunanya untuk apa ?! …nanti anda tahu  Klik tombol “Test Connection” untuk memastikan connection successful….. Yap….sukses…. !! Klik tombol OK….. Selanjutnya untuk keluar dari modul profile ini klik tombol OK lagi……
  • 32. © mztolo 2006 – PB pemula 32 Tampak profile koneksi “sekolah” telah tercipta….. Klik kanan dan “Connect” … Perhatikan tanda centang warna hijau yg menandakan koneksi yg aktif.
  • 33. © mztolo 2006 – PB pemula 33 Ok selanjutnya double click “object application” siswa…. Dalam “open” event nya di atas command “open(w_utama)” klik kanan mouse dan “paste” listing kode profile koneksinya ….shg hasilnya spt ini…( jadi tahu kan kenapa tadi anda diminta untuk click tombol “Copy” lihat hal. 4) Tambahkan command untuk “connect” stl listing tersebut sbl “open(w_utama)” connect; if SQLCA.SQLDBCode<>0 then messagebox('Koneksi Gagal',SQLCA.SQLErrText,stopsign!) halt close end if Note : connect; adalah perintah untuk konek ke database sesuai listing SQLCA nya… jika SQLCA.SQLDBCode bernilai selain 0 (nol) maka koneksi gagal…jika koneksi gagal maka sistem close. SQLCA sendiri di PB adalah sebuah object dg type “Transaction” yg berfungsi menangani koneksi ke database, SQLCA di deklarasikan sbg variable yg bersifat global dan merupakan object standard PB untuk koneksi ke database.
  • 34. © mztolo 2006 – PB pemula 34 Sehingga menjadi spt ini… Mmmmm kenapa harus ada 2x koneksi …lalu yg di pakai yg mana ? Dua-duanya di pakai….. Koneksi di “Database” akan kepakai pada saat kita desain datawindow….interface untuk datanya (baik sbg query maupun editing dan report) Sedangkan koneksi di object aplikasi dipakai untuk koneksi pada saat aplikasi itu running Simpan perubahan yg terjadi …ini akan terpakai pada saat pembuatan datawindow, ada di sample berikutnya  Dengan demikian proses pembuatan profile koneksi data sudah selesai  Sukses untuk anda !!
  • 35. © mztolo 2006 – PB pemula 35 POWERBUILDER #4 Sample kali ini adalah membuat modul entry untuk data “siswa”…. Modul ini berupa window dgn beberapa tombol dan datawindow sbg interface datanya. Datawindow sendiri berfungsi sbg display, serta memungkinkan user untuk memanipulasi, update data dan informasi yg lain. Window sendiri dalam hal ini berfungsi sbg tempat datawindow tersebut. Jadi kalo digambarkan akan memiliki urutan sb : Data – Datawindow – Window Mari kita mulai…….Klik tombol “New” sampai tampil spt ini….. Pilih tab “DataWindow”, pilih “Freeform” dan klik tombol OK Klik tombol “Next >”
  • 36. © mztolo 2006 – PB pemula 36 Klik table “tblsiswa” dan klik tombol “Add All” serta diikuti tombol OK, sampai tampil modul spt ini…… Klik tombol “Next >”
  • 37. © mztolo 2006 – PB pemula 37 Untuk mengakhiri klik tombol “Finish” …datawindow anda sudah jadi…
  • 38. © mztolo 2006 – PB pemula 38 Setup/lihat update properties… datawindow-nya….klik menu “Rows” dan klik menu “Update Propertiesnya”……spt ini Perhatikan ….setting updatenya sudah benar….klik OK Note : Allow Updates–nya sudah di centang Table to Update–nya sudah benar Updateable Columns–nya sudah benar Unique Key Column(s)–nya juga sudah benar sesuai primary key mysql sbg databasenya. Begitu juga klausa dan key modifikasinya juga sudah benar.
  • 39. © mztolo 2006 – PB pemula 39 Save datawindow tersebut……dg nama “dw_entri_siswa”……dan klik OK Tampak di system tree anda …… Selanjutnya membuat window sbg tempat kontrol datawindow “dw_entri_siswa” tersebut Tidak perlu saya jelaskan secara rinci langkah2 nya karena di sample sebelumnya telah ada sample membuat window.
  • 40. © mztolo 2006 – PB pemula 40 Perhatikan di window ini ada 9 tombol spt tampak di gambar atas….. Perhatikan propertiesnya ….anda buat spt contoh ini.. Klik datawindow “dw_entri_siswa” yg ada di system tree dan drag ke window….spt ini
  • 41. © mztolo 2006 – PB pemula 41 Rapikan sehingga menjadi spt ini…(atur lebar dan tata letakknya) Perhatikan properties datawindow “dw_entri_siswa”…. Name control datawindow ini adalah “dw_1” ….nama ini bisa anda ganti sesuai keinginan anda…sementara kita pakai “dw_1” dulu…..
  • 42. © mztolo 2006 – PB pemula 42 Double click di area kosong window untuk mengaktifkan “open” event nya dan ketik : dw_1.setTransObject(SQLCA) Selanjutnya mari kita isi click event dari masing2 tombolnya….. Kita mulai dari tombol “Retrieve”….. double click tombol tsb….ketik koding ini : dw_1.retrieve() Note : dw_1 adalah nama dari kontrol datawindownya spt yg dijelaskan di atas setTransObject(SQLCA) berfungsi untuk memberikan sepisifikasi object transaksi yg di pergunakan, dalam hal ini adalah SQLCA. retrieve() adalah perintah untuk SELECT (table/view) atau EXEC (store procedure). Double click tombol “Add” dan ketik koding berikut….(untuk menambah) dw_1.ScrollToRow(dw_1.insertrow(0)) dw_1.setcolumn(1) dw_1.setfocus() Note : insertrow(0) berfungsi untuk menambahkan data baru scrolltorow() tersendiri berfungsi untuk mengeser pointer ke row baru/kosong tsb. setcolumn(1) aktifkan kolom 1 setfocus() aktifkan kursor Double click tombol “Update” dan ketik koding berikut…(untuk menyimpan) if dw_1.update()=1 then commit; messagebox('Info..','Penyimpanan Sukses !',information!,ok!) else rollback; messagebox('Info..','Penyimpanan Gagal !',information!,ok!) return end if Note : Jka update() sukses, return value =1 maka “commit” jika tidak akan di “rollback” atau di kembalikan spt keadaan sbl proses editing. Double click tombol “Delete” dan ketik koding berikut…(untuk hapus data) if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return -1 if dw_1.rowcount()>0 then dw_1.deleterow(0) dw_1.setfocus() if dw_1.update()=1 then commit; messagebox('Info..','Penghapusan Sukses !',information!,ok!)
  • 43. © mztolo 2006 – PB pemula 43 else rollback; messagebox('Info..','Penghapusan Gagal !',information!,ok!) return -1 end if else return -1 end if Note : deleterow(0) berfungsi untuk menghapus row aktif. Double click tombol “Close” dan ketik koding berikut…(untuk close window) close(parent) Double click tombol “<<” dan ketik koding berikut…(untuk go top) if dw_1.getrow() = 1 then messagebox(":)","Data pertama !",Information!,Ok!) else dw_1.scrolltorow(1) end if Note : getrow() berfungsi untuk mengecek row aktif di datawindow ….jika = 1 artinya di row pertama. scrolltorow(1) artinya mengeser pointer ke record/row 1 Double click tombol “<” dan ketik koding berikut…(untuk ke row sebelumnya) if dw_1.getrow() = 1 then messagebox(":)","Data pertama !",Information!,Ok!) else dw_1.scrollpriorrow() end if Note scrollpriorrow() untuk menggeser pointer ke row sebelumnya Double click tombol “>” dan ketik koding berikut…(untuk ke row berikutnya) if dw_1.getrow() =dw_1.rowcount() then messagebox(":)","Data terakhir !",Information!,Ok!) else dw_1.scrollnextrow() end if
  • 44. © mztolo 2006 – PB pemula 44 Note : rowcount() untuk mengetahui jml row/record yg ada di datawindow scrollnextrow() untuk ke row berikutnya Double click tombol “>>” dan ketik koding berikut…(untuk go bottom) if dw_1.getrow() = dw_1.rowcount() then messagebox(":)","Data terakhir !",Information!,Ok!) else dw_1.scrolltorow(dw_1.rowcount() ) end if Note : scrolltorow(jml row datawindow) artinya sama juga ke row terakhir Ok…..koding sudah selesai …save window anda dg nama “w_entri_siswa” Selanjutnya double click menu “Entri &Siswa” dan ketik koding untuk memanggil window “w_entri_siswa” spt ini…… Perhatikan koding di m_file.m_entrisiswa : opensheet(w_entri_siswa,w_utama,2,original!) Note : Membuka window “w_entri_siswa” sbg sheet atau lembar kerja yg bernaung di bawah/di dalam window “w_utama”. Angka 2 menunjukkan nomor menu item yg diasosiasikan dg sheet yg di buka. original! menandakan window di open sesuai ukuran aslinya. (anda bisa melihat detail penjelasan di help PB….blok command yg ingin dilihat detail helpnya dan tekan tombol Shift + F1) Kenapa dipakai opensheet() bukan open(w_utama) spt contoh sebelumnya ? Kalo anda pakai open(w_utama) maka akan di anggap window terpisah dari window mdi!-nya dan bersifat tdk “always on the top” atau modeless
  • 45. © mztolo 2006 – PB pemula 45 Save perubahan di menu “mn_siswa” ….. Jalankan aplikasi anda…..klik tombol “Run” klik menu File > Entri Siswa Begitulah tampilan sheet/window entri anda…..jika data sudah ada klik tombol “Retrieve” untuk menampilkan data yg pernah di entri…. Klik tombol “ADD” isi data spt ini dan klik tombol “Update”…
  • 46. © mztolo 2006 – PB pemula 46 Yap….data tersimpan dg sukses  klik OK Ok dengan demikian sample datawindow dan window entri sudah selesai  Apakah sample di atas sudah maksimal ?! Jelas belum…. Anda masih bisa mempercantik tampilan-nya dan memberikan toolbars sheetnya… Akan di bahas di sample berikutnya…… Sukses untuk anda !!
  • 47. © mztolo 2006 – PB pemula 47 POWERBUILDER #5 Perhatikan sheet/window entri yg pernah anda buat sebelumnya…… Masih lugu dan belom di make-up  Dari system tree double click window entri siswa “w_entri_siswa” shg tampak spt ini… Dan rightclick di area datawindow control nya….shg tampak spt berikut Untuk modifikasi datawindow nya…klik “Modify DataWindow…”
  • 48. © mztolo 2006 – PB pemula 48 Sehingga tampak spt di bawah…. Paling atas adalah design layout dari datawindownya…spt anda pernah buat Bawahnya adalah preview dari datawindownya Sedang yg paling bawah adalah list dari field2 databasenya. Tekan dan tahan tombol control dan klik text keterangan dari field2 yg ada spt ini…
  • 49. © mztolo 2006 – PB pemula 49 Lalu di propertiesnya anda setting border nya spt ini…”underline” Hasilnya spt ini…. Selanjutnya coba click area kosong dari datawindow anda dan klik lagi text “Tgllhr :” seperti ini :
  • 50. © mztolo 2006 – PB pemula 50 Ubah property text “Tgllhr :” di kolom textnya spt tampak…..berikut ini : Ganti “Text” yg ada dg “Lahir :” saja….shg tampak spt ini dan hasilnya…. Anda coba ubah “Jkel :” menjadi “Sex :” …shg tampak spt ini hasil akhirnya….
  • 51. © mztolo 2006 – PB pemula 51 Tekan dan tahan tombol control lagi serta click semua field yg ada….spt ini : Atur property “border” nya…spt ini : Hasilnya spt ini :
  • 52. © mztolo 2006 – PB pemula 52 Anda juga bisa coba pilihan tampilan border yg lain : Selanjutnya rapikan dan rapatkan item2 atau field yg ada di situ…spt ini : Serta rapatkan “band” detail anda ke atas….klik mouse dan geser ke atas …spt ini : Ok…close painter editing datawindow ini dan jgn lupa save perubahan yg ada….
  • 53. © mztolo 2006 – PB pemula 53 Perhatikan window anda…….spt ini : Rapikan datawindow control dan tombol2 yg ada di window/sheet tersebut….spt ini : Anda juga bisa atur “border/borderstyle” datawindow control nya shg menjadi spt ini :
  • 54. © mztolo 2006 – PB pemula 54 Close dan save perubahan tersebut…..lalu jalankan aplikasi dan panggil window/sheet : Lebih indah bukan …..  Dengan demikian sample “make-up” text, control field, window dan datawindow control sudah selesai  Anda bisa coba sendiri dg efek bold, italic dan warna sesuai selera anda …. Akhir kata…..Sukses untuk anda !!
  • 55. © mztolo 2006 – PB pemula 55 POWERBUILDER #6 Jalankan aplikasi anda dan buku sheet/window entri data siswa …spt ini Klik data di “nis” dan tekan tombol ENTER ! Apa yg terjadi ?! Data akan bergeser/bergerak ke record selanjutnya. Untuk menggeser pointer dari satu field/kolom ke field/kolom lain, misal dari “nis” ke “nama” bisa anda pakai tombol “tab” atau “tabulator” Bagimana jika kita ingin mengeser pointer antar field/data dg tombol panah atas/bawah atau tombol enter ? Anda harus menambahkan “event” di datawindow controlnya. Mari kita lakukan  Pada kondisi window painter editing …klik datawindow control anda…. Selanjutnya klik tab “Event List” yg ada di bawah…spt tampak di gambar
  • 56. © mztolo 2006 – PB pemula 56 Selanjutnya klik kanan mouse dan pilih “Add” untuk menambah event baru. Pilih powerbuilder object-nya datawindow control yg bernama “dw_1”
  • 57. © mztolo 2006 – PB pemula 57 Ketik di “Return Type” pilih “long” dan untuk “Event Name” ketik “ue_tombol” Selanjutnya di “Event ID:” pilih “pbm_dwnkey” Dan hasilnya akan spt ini….. Selanjutnya anda bisa mengetik koding di dalam event “ue_tombol” ini….(ingat nama ini bebas ya….tdk harus ue_tombol, justru yg penting adalah “Event ID” nya.
  • 58. © mztolo 2006 – PB pemula 58 Anda perhatikan argument type “keycode” dan namenya “key” serta “keyflags” adalah default value yg di punyai “pbm_dwnkey” jika ini blom keluar/ada biarkan saja, pada saat close event editor ini nantinya jika keluar info untuk “Ignore” tekan “Yes” saja…. Isi koding event-nya spt ini : int li_column_number,li_column_count,first_column boolean lb_enter,lb_dwnrow,lb_uparrow lb_enter =keydown(keyenter!) lb_dwnrow =keydown(keydownarrow!) lb_uparrow =keydown(keyuparrow!) li_column_number =dw_1.getcolumn() li_column_count =integer(dw_1.object.datawindow.column.count) first_column =1 if keyflags=0 then if lb_enter or lb_dwnrow then if li_column_number=integer(dw_1.object.datawindow.column.count) then dw_1.setcolumn(first_column) else dw_1.setcolumn(li_column_number + 1) end if elseif lb_uparrow then if li_column_number=1 then dw_1.setcolumn(integer(dw_1.object.datawindow.column.count)) else dw_1.setcolumn(li_column_number - 1) end if end if elseif keyflags=1 then if lb_uparrow then if li_column_number=integer(dw_1.object.datawindow.column.count) then dw_1.setcolumn(first_column) else dw_1.setcolumn(li_column_number + 1) end if elseif lb_enter or lb_dwnrow then if li_column_number=1 then dw_1.setcolumn(integer(dw_1.object.datawindow.column.count)) else dw_1.setcolumn(li_column_number - 1) end if end if else return 0 end if
  • 59. © mztolo 2006 – PB pemula 59 return 1 Keterangan : Keyflags = 0 artinya tanpa ada penekanan tombol kombinasi dg tombol function lain. Keyflags = 1 ada penekanan tombol dg Shift Keyflags = 2 ada penekanan tombol dg Ctrl Keyflags = 3 ada penekanan tombol dg Shift + Ctrl Keyflags = 4 ada penekanan tombol dg Alt dst-nya. Keydown berfungsi untuk menentukan tombol apakah yg di tekan user. Keydown(enter!) artinya jika/apakah yg di tekan ENTER….. Anda perhatikan koding berikut ini…. li_column_number =dw_1.getcolumn() // getcolumn() untuk mengetahui posisi kolom aktif li_column_count =integer(dw_1.object.datawindow.column.count) // untuk mengetahui jml kolom dlm 1 row/record Selanjutnya…….. if lb_enter or lb_dwnrow then // apakah yg di tekan enter atau panah bawah ? if li_column_number=integer(dw_1.object.datawindow.column.count) then // jika posisi kolom aktif = kolom terakhir/jml kolom dw_1.setcolumn(first_column) // posisi pointer kembali ke kolom pertama else dw_1.setcolumn(li_column_number + 1) // jika tidak maka jalankan pointer ke kolom berikutnya end if elseif lb_uparrow then // jika yg di tekan tombol panah atas if li_column_number=1 then // jika di posisi kolom 1 (pertama) dw_1.setcolumn(integer(dw_1.object.datawindow.column.count)) // jalankan pointer di kolom terakhir else dw_1.setcolumn(li_column_number - 1) // jika tdk di posisi terakhir maka jlnkan pointer ke kolom sblm nya end if end if Demikianlah semoga bisa memberikan gambaran event penekanan tombol di datawindow Note : Lalu apakah kita harus membuat “event” ini di semua datawindow ? Yap benar… Tidak efisien dong kalo hrs ketik koding lagi ? Benar sekali…
  • 60. © mztolo 2006 – PB pemula 60 Lalu solusinya bagaimana ? Yaitu dg membuat function yg bisa di panggil oleh “event” ini, jadi cukup koding 1x saja. Nanti anda akan belajar cara membuat function…..tunggu aja  Coba jalankan aplikasi dan buka sheet entri data siswa…spt ini Klik di kolom “Nama” dan coba tekan tombol ENTER atau panah atas/bawah Dan coba juga dikombinasikan dg tombol Shift Dengan demikian sample pembuatan “event” keydown di datawindow control sudah selesai  Akhir kata…..Sukses untuk anda !!
  • 61. © mztolo 2006 – PB pemula 61 POWERBUILDER #7 Berikut ini cara membuat function…… Spt biasa dari kondisi workspace aplikasi anda klik tombol “New”.. Pilih tab “PB Object” terus pilih “Function” dan klik tombol OK Dan ketik spt tampak di gambar bawah… Return type = integer (0 tdk ada action, 1 ada action) Function name = f_tekantombol (nama functionnya) Argument name = dw_1 dg argument type “datawindow” Selanjutnya untuk menambah “parameter” klik kanan mouse dan pilih “Add Parameter” Tambahkan….. Argument name = keyflags (untuk kontrol tombol kombinasi apa yg di tekan)
  • 62. © mztolo 2006 – PB pemula 62 Lakukan langkah yg sama untuk menambah “parameter” lagi….spt gambar di bawah… Selanjutnya copy saja koding “ue_tombol” ke dalam fungsi ini… Perhatikan….. int li_column_number,li_column_count “first_column” jgn disertakan di dlm koding ini…sbg ganti kita sudah buat di argument name-nya.
  • 63. © mztolo 2006 – PB pemula 63 Berikut koding komplitnya : int li_column_number,li_column_count boolean lb_enter,lb_dwnrow,lb_uparrow lb_enter =keydown(keyenter!) lb_dwnrow =keydown(keydownarrow!) lb_uparrow =keydown(keyuparrow!) li_column_number =dw_1.getcolumn() li_column_count =integer(dw_1.object.datawindow.column.count) if isnull(first_column) then first_column =1 end if if keyflags=0 then if lb_enter or lb_dwnrow then if li_column_number=integer(dw_1.object.datawindow.column.count) then dw_1.setcolumn(first_column) else dw_1.setcolumn(li_column_number + 1) end if elseif lb_uparrow then if li_column_number=1 then dw_1.setcolumn(integer(dw_1.object.datawindow.column.count)) else dw_1.setcolumn(li_column_number - 1) end if end if elseif keyflags=1 then if lb_uparrow then if li_column_number=integer(dw_1.object.datawindow.column.count) then dw_1.setcolumn(first_column) else dw_1.setcolumn(li_column_number + 1) end if elseif lb_enter or lb_dwnrow then if li_column_number=1 then dw_1.setcolumn(integer(dw_1.object.datawindow.column.count)) else dw_1.setcolumn(li_column_number - 1) end if end if else return 0 end if return 1
  • 64. © mztolo 2006 – PB pemula 64 Simpan function yg baru saja anda buat…….. Tampak di system tree anda….fungsi sudah tercipta…. Buka event “ue_tombol” di datawindow control dan ganti dg spt ini… Anda cukup ketik “return f_tekantombol(this,keyflags,1)”
  • 65. © mztolo 2006 – PB pemula 65 Note : Anda ingat waktu membuat function “f_tekantombol” ? Disana ada 3 parameter….dw_1, keyflags dan first_column Oleh karena itu value yg di lewatkan jg berjumlah 3 spt ini : f_tekantombol(this,keyflags,1) this = merujuk datawindow itu sendiri keyflags = keyflags yg di tekan…. 1 = merujuk posisi pointer di kolom 1 Close dan save perubahan yg ada di “ue_tombol”… Jalankan aplikasi dan test fungsinya…yap berjalan sukses !! Fungsi ini bisa anda pakai untuk datawindow control yg lain…. Untuk fungsi yg lain cara pembuatannya sama, tinggal sesuaikan parameter yg ada. Dengan demikian sample pembuatan “function” sudah selesai  Akhir kata…..Sukses untuk anda !!
  • 66. © mztolo 2006 – PB pemula 66 POWERBUILDER #8 Coba jalankan dan buka sheet entri data siswa anda spt ini…. Perhatikan modul di atas …ada 9 tombol yg di pakai… Bagaimana jika kita ingin buat semacam toolbar saja ? Atau di PB istilahnya menu sheet/window….. Langkah2 nya sama dg waktu anda membuat “menu” yg ada di sample terdahulu Klik “New” pilih “Menu” di tab “PB Object” dan klik tombol OK Selanjutnya buat menu pertama “Retrieve” dg icon spt tampak di bawah ini :
  • 67. © mztolo 2006 – PB pemula 67 Lanjutkan dg item menu yg lain shg hasilnya spt ini… Perhatikan picture2 yg ada sudah disediakan oleh PB….. Klik tombol save …beri nama “mn_sheet” …dan klik OK Untuk koding isinya biarkan kosong dulu…….
  • 68. © mztolo 2006 – PB pemula 68 Selanjutnya buka dan modifikasi form entri data siswa….spt ini Perhatikan di “MenuName” isi dg menu sheet nya….dan simpan/save perubahan form ini Pada saat modul sheet entri data siswa di jalankan …akan tampak spt ini… Langkah selanjutnya ? 1. Membuat event untuk retrieve, add, update, delete, close, top, prior, next dan bottom. 2. Mengisi event2 tersebut dg koding spt yg ada di tombol2 itu 3. Delete semua tombol yg ada……krn sudah tdk kita pakai lagi 4. Isi koding di menu sheet anda untuk menjalankan koding yg ada di sheet/window Ok…mari kita lakukan satu per satu 
  • 69. © mztolo 2006 – PB pemula 69 Membuat event di sheet/window : ue_retrive = untuk event retrieve ue_add = untuk event add ue_update = untuk event update ue_delete = untuk event delete ue_close = untuk event close ue_top = untuk event top ue_prior = untuk event prior/previous ue_next = untuk event next ue_bottom = untuk event bottom Double click “w_entri_siswa” dari system tree anda untuk modifikasi…. Klik tab “event” di bawah dan ..dari modul event itu klik kanan mouse….lalu pilih “Add” Ketik nama event-nya “ue_retrieve” spt ini..dan isi koding event-nya
  • 70. © mztolo 2006 – PB pemula 70 Klik kanan di event tersebut dan pilih “New Event” Ketik nama event-nya “ue_add” …. Lakukan hal yg sama untuk event2 berikutnya…. Isi “ue_update” : if dw_1.update()=1 then commit; messagebox('Info..','Penyimpanan Sukses !',information!,ok!) else rollback; messagebox('Info..','Penyimpanan Gagal !',information!,ok!) return end if
  • 71. © mztolo 2006 – PB pemula 71 Isi “ue_delete” : if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return if dw_1.rowcount()>0 then dw_1.deleterow(0) dw_1.setfocus() if dw_1.update()=1 then commit; messagebox('Info..','Penghapusan Sukses !',information!,ok!) else rollback; messagebox('Info..','Penghapusan Gagal !',information!,ok!) return end if else return end if Isi “ue_close” : close(this) Isi “ue_top” : if dw_1.getrow() = 1 then messagebox(":)","Data pertama !",Information!,Ok!) else dw_1.scrolltorow(1) end if Isi “ue_prior” : if dw_1.getrow() = 1 then messagebox(":)","Data pertama !",Information!,Ok!) else dw_1.scrollpriorrow() end if Isi “ue_next” : if dw_1.getrow() =dw_1.rowcount() then messagebox(":)","Data terakhir !",Information!,Ok!) else dw_1.scrollnextrow() end if Isi “ue_bottom” : if dw_1.getrow() = dw_1.rowcount() then messagebox(":)","Data terakhir !",Information!,Ok!) else dw_1.scrolltorow(dw_1.rowcount() ) end if
  • 72. © mztolo 2006 – PB pemula 72 Kalo anda perhatikan koding yg di tulis di event2 tersebut ada yg mirip sekali dg koding yg ada di click event tombol dan ada juga yg perlu di sesuaikan…. Misal di tombol “close” dan di event “ue_close” Yg pertama tertulis “close(parent)” yg ke dua tertulis “close(this)” Bagi anda yg sudah memahami bahwa koding mengacu pada object yg ada pasti sudah tahu….ketika di tombol pake “parent” krn sheet tersebut adalah parent dari tombol, tetapi ketika di event yg notabene ada di sheet tersebut maka cukup pake kata “this”. Begitu jg return value, krn event ini semua “(None)” untuk return type/value nya maka, koding yg dulu di tombol ada “return -1” cukup kita tuliskan “return” saja….. Ok..selanjutnya hapus semua tombol yg ada…..serta save…. Dan isi koding di menu sheet nya …. Doubleclick “mn_sheet” untuk modifikasi….kemudian doubleclick item “retrieve” serta isi koding spt ini… Lakukan hal yg sama untuk item menu yg lain…...
  • 73. © mztolo 2006 – PB pemula 73 Untuk “ue_add” spt ini parentwindow.triggerevent ("ue_add") dst-nya…. Setelah semua di isi dan di simpan/save jalankan aplikasi dan open sheet nya …yap… Atau spt ini…. Atau spt ini….
  • 74. © mztolo 2006 – PB pemula 74 Anda juga bisa memakai menu text nya…spt ini Perlu saya jelaskan juga bahwa logika tombol pada dasarnya sama juga dg apa yg pernah saya berikan samplenya untuk aplikasi developer yg lain…… Begitu juga koding yg ada masih dpt dikembangkan, semisal untuk data master – detail. Ok ..saya harapkan anda tekun dan teliti serta jgn patah semangat…itu lah yg akan membawa anda ke level selanjutnya dan level yg tak akan anda duga nantinya  (jgn lupa perbanyak doa dan rasa syukur kepada –Nya) Dengan demikian sample pembuatan “menu sheet” sudah selesai  Akhir kata…..Sukses untuk anda !!
  • 75. © mztolo 2006 – PB pemula 75 POWERBUILDER #9 Latihan kali ini kita akan mencoba membuat sample untuk entri sheet master – detail, atau header – detail. Maka di perlukan 2 table lagi spt ini (untuk mySQL saya pake myISAM) : Master ”tblhujian” dg key “nis” Detail “tbldujian” dg key “kode” yg merupakan nilai hasil “autoincrement” Sebelum anda membuat datawindownya, pastikan koneksi ke database “sekolah” masih aktif atau terkoneksi :
  • 76. © mztolo 2006 – PB pemula 76 Untuk selanjutnya mari kita buat datawindow untuk masternya terlebih dahulu. Klik tombol “new” di dalam tab “DataWindow” pilih type datawindow “Freeform” dan klik tombol OK Pilih “Quick Select” ….terus perhatikan “Retrieve on Preview” tdk usah di centang maksudnya apa….agar pada waktu window tercipta tdk langsung tampil di “preview” Mengapa ? Jika data kosong no problem tapi kalo data anda jutaan maka anda harus nunggu preview selesai dulu setiap kali anda modifikasi datawindow itu. Selanjutnya stl memilih spt di atas …klik tombol “Next” Pilih “tblhujian” …pilih semua field/kolomnya …dan klik OK
  • 77. © mztolo 2006 – PB pemula 77 Klik tombol “NEXT” dan klik “FINISH” sampai tampil spt ini : Rapikan menjadi spt ini : Bagaimana jika untuk “nis” saya ingin tampilkan “nama siswa” jadi bukan “nis” nya. Atau dg kata lain dlm bentuk “combobox” Untuk membuat combobox yg me-refer ke data lain di PB anda harus membuat suatu “datawindow” baru yg diistilahkan “dropdown datawindow” Nah krn data “nis” ini nanti me-refer dari data “tblsiswa” maka waktu membuat drowdown datawindow kita memakai data dari “tblsiswa” tersebut. Coba save dulu window yg baru saja anda buat ini dg nama “dw_entri_h_ujian” Selanjutnya buat window baru, langkahnya sama dg cara di atas hanya anda pilih type window “tabular”. Dengan sumber data “tblsiswa” dan di ambil kolom “nis” dan “nama” spt ini : Anda tarik band header ke atas dg mouse anda, sehingga judul kolom tertutup (atau anda hapus dan tarik band header ke atas jg boleh). Tujuannya apa ? Kita tidak mau memakai header/judul kolom tersebut. Selanjutnya klik detail “nis” dan hapus…dg menekan tombol “DEL”
  • 78. © mztolo 2006 – PB pemula 78 Kenapa kolom “nis” disertakan diwaktu awal membuat dropdown datawindow ini jika akhirnya di hapus ? Memang benar data ini di hapus …tetapi pada dasarnya hanya di hapus di tampilan saja, sedangkan data “nis” sebenarnya tetap harus ada dan nantinya dipakai untuk dikirimkan ke datawindow parentnya yaitu dlm hal ini “dw_entri_h_ujian” Geser kolom nama merapat ke depan….. Terus percantik dg merubah properti “bordernya” ….. Hasilnya spt ini…. Simpan dg nama “dddw_siswa” Selanjutnya buka kembali datawindow “dw_entri_h_ujian”. Klik kolom “nis” dan tarik perlebar spt ini dg mouse :
  • 79. © mztolo 2006 – PB pemula 79 Selanjutnya klik tab “EDIT” di properties datawindow ini…. Setting spt tampak di gambar bawah… Style Type nya : DropDownDW Always Show Arrow di centang H ScrollBar di centang DataWindow isi dg nama “dddw_siswa” Display Column atau kolom data yg ingin di tampilkan adalah “nama” Data Column atau data yg ingin disimpankan ke datawindow “dw_entri_h_ujian” di kolom “nis” (dengan demikian sewaktu kita memilih nama siswanya, data “nis” dari dddw_siswa akan dikirim ke “nis” yg ada di dw_entri_h_ujian)
  • 80. © mztolo 2006 – PB pemula 80 Tampak hasilnya spt ini : Rapikan shg menjadi spt ini….(kasih jarak sedikit di bagian bawah detail) Simpan kembali perubahan ini……… Selanjutnya buat sheet/window master – detailnya… Mmmmmm….. cara cepatnya adalah buka sheet anda yg sudah jadi “w_entri_siswa” Save As sebagai “w_entri_ujian” Hapus datawindow yg ada di situ yg merupakan datawindow “w_entri_siswa” Selanjutnya ganti dg datawindow “dw_entri_h_ujian” Tampak hasilnya spt di gambar atas…. Jangan lupa ganti title sheet nya dg “Entri Data Ujian” Simpan modifikasi terserbut dan close……….
  • 81. © mztolo 2006 – PB pemula 81 Selanjutnya modifikasi menu “mn_siswa” dan double click di item “&Ujian Susulan” serta ketik kodingnya….. spt ini “opensheet(w_entri_ujian,w_utama,2,original!)” Simpan perubahan menu “mn_siswa” dan coba jalankan aplikasi ini….. Klik menu “Transaksi => Ujian Susulan” sampai tampil sheetnya….. Jika ada datanya klik tombol “retrieve”….jika belum klik tombol “new”
  • 82. © mztolo 2006 – PB pemula 82 Klik combobox nya dan pilih nama siswanya sesuai data yg telah di entrikan di modul entri data siswa. Sehingga hasilnya spt ini….. Ok sementara header/masternya dulu… detail akan di lanjutkan di bagian berikutnya… Pastikan latihan di atas sukses terlebih dahulu…shg kita bisa melanjutkan ke bagian detailnya…..  Akhir kata…..Sukses untuk anda !!
  • 83. © mztolo 2006 – PB pemula 83 POWERBUILDER #9 bag. 2 Selanjutnya mari kita buat detail nya berdasar table “tbldujian” di bawah : Ok…. mari kita review prinsip master – detail terlebih dahulu  Data master anda secara database tersimpan spt ini…. NIS dan PENGAWAS NIS berisi data spt “001”, “ABC007” dsb-nya sbg nomor induk siswanya PENGAWAS berisi data spt “AMIR”, “KROMO ATEMO” yaitu nama2 pengawas Data detail anda secara database tersimpan spt ini…. KODE, NIS, PELAJARAN dan NILAI KODE merupakan data auto_increment yg akan diisi otomatis oleh databasenya dan berisi angka 1, 2, 3 dst nya. Data ini jg berfungsi sbg key master/update untuk data detailnya. NIS berisi data “001” dst nya. Kenapa data ini diperlukan di detail ? Yap…diperlukan krn data ini berfungsi dan bersifat sbg data untuk merelasikan data detail ke masternya. Jadi semua data detail dg NIS=”001” merupakan data detail dari master dg NIS=”001” juga, hal inilah yg di sebut dg konsep one to many. PELAJARAN dan NILAI akan berisi nama pelajaran dg nilai nya. Lalu bagaimana dg cara menampilkan data detailnya ? PELAJARAN dan NILAI adalah data yg perlu disajikan di detailnya. Untuk KODE dan NIS itu tidak perlu ditampilkan, krn kedua data ini hanya di pakai dlm kaitannya dg procedure update dan relasi dg master. User/pemakai aplikasi anda tidak perlu tahu KODE dan NIS yg di replacekannya. Ok selanjutnya …buat datawindow type tabular spt ini :
  • 84. © mztolo 2006 – PB pemula 84 Hapus header dan kolom KODE serta NIS… rapikan shg menjadi spt ini : Klik menu “Rows” dan klik “Update Properties…” spt ini…. Tampak modul “specify Update Properties” – nya : Untuk table yg memakai key auto_increment atau key yg tercreate otomatis maka “Identity Column:” nya harus di isi sesuai kolom-nya.
  • 85. © mztolo 2006 – PB pemula 85 Karena table “tbldujian” ini memakai “KODE” sbg key auto_increment-nya maka isi “Identity Column” nya spt ini : Selanjutnya klik tombol OK…dan kembali ke paint datawindow-nya. Selanjutnya buat “Retrieval Arguments” dg klik tombol shg tampli spt ini :
  • 86. © mztolo 2006 – PB pemula 86 Klik menu “Design” dan klik “Retrieval Arguments…” spt ini : Sampai tampil modul spt ini : Ketik spt di bawah ini dan klik OK
  • 87. © mztolo 2006 – PB pemula 87 Selanjutnya klik tab “WHERE” dan ketik command spt ini : Selanjutnya close dan save dg nama “dw_entri_d_ujian”….. Datawindow dg retrieval argument jika anda retrieve akan menampilkan modul spt ini : Modul ini meminta anda untuk memasukkan “value” sesuai type data argument-nya. Lalu apakah waktu aplikasi jalan akan selalu tampil modul di atas ? Mengganggu dong ? Modul di atas tidak akan tampil krn sewaktu kita retrieve datawindow tsb kita sertakan langsung value argumentnya spt ini : dw_2.retrieve(“001”) Note : Kenapa retrieval argument harus di buat ? Yap…sekenarionya spt ini….data master detail terdiri atas 2 datawindow. Pertama atau yg di atas (spt yg telah anda buat berdasar artikel #9a) adalah data master. Yg kedua atau yg bawah adalah data detailnya. Asumsinya begini…setiap data master digeser ke data/row untuk siswa yg berbeda maka data detail akan mengikuti/berisi dg data detail yg sesuai dg masternya. Nah untuk “memfilter” data detail ini agar sesuai dg data masternya di perlukanlah “retrieval argument” di datawindow detailnya. Jadi “retrieval arguments” sama dg “filter” ? Tidak juga krn PB mengenal “filter” sendiri.
  • 88. © mztolo 2006 – PB pemula 88 Ok..mari kita lanjutkan….buka sheet master detail (w_entri_ujian) yg telah anda buat sebelumnya : Drag n drop datawindow “dw_entri_d_ujian” dan tambahkan 2 tombol spt ini : Jika anda perhatikan di sheet anda sekarang sudah ada 2 datawindow untuk master dg nama “dw_1” dan detail dg nama “dw_2”. Selanjutnya buka event “OPEN” dan modifikasi kodingnya spt ini : dw_1.setTransObject(SQLCA) dw_2.setTransObject(SQLCA) dw_1.retrieve() dw_2.setrowfocusindicator(hand!) Note : Semua datawindow harus sudah di set transaksi objectnya dg SQLCA Setrowfocusindicator(hand!) untuk menampilkan penunjuk row berbentuk tangan/jari telunjuk…mmm nanti anda bisa melihatnya sendiri 
  • 89. © mztolo 2006 – PB pemula 89 Event “ue_update” anda ganti spt ini : if dw_1.getrow()=0 or dw_1.rowcount()=0 then return dw_1.accepttext() dw_2.accepttext() if dw_1.update()=1 and dw_2.update()=1 then if sqlca.sqlnrows<0 then rollback ; messagebox("Info..","Penyimpanan Gagal !",information!,ok!) return end if commit; messagebox('Info..','Penyimpanan Sukses !',information!,ok!) else rollback; messagebox('Info..','Penyimpanan Gagal !',information!,ok!) return end if Note : Getrow dan rowcount dipakai untuk memastikan bahwa data window tdk dlm kondisi kosong. Acceptext() berfungsi untuk menyimpan isi data baris aktif pada kontrol datawindow ke dlm buffer kontrol datawindow. Jika fungsi ini tdk di jalankan maka baris aktif adalah baris aktif sebelumnya. Doubleclick di dw_1 dan isi event “rowfocuschanged” dg ini : if dw_1.rowcount()=0 or dw_1.getrow()=0 then return string ls_nis if dw_1.rowcount() > 0 then ls_nis=dw_1.getitemstring(dw_1.getrow(),"nis") end if dw_2.retrieve(ls_nis) Note : Rowfocuschanged diperlukan jika user mengeser row master/header maka detail akan di retrieve sesuai key relasinya. Perhatikan koding dw_2.retrieve(ls_nis) Ls_nis sendiri diambil dari data nis yg ada di dw_1. Perhatikan koding ini ls_nis=dw_1.getitemstring(dw_1.getrow(),"nis") Inilah kenapa di awal tadi kita harus membuat retrieval arguments di datawindow detail.
  • 90. © mztolo 2006 – PB pemula 90 Semoga anda semakin paham dan jelas  Isi click event tombol “Add detail” dg ini : if dw_1.rowcount()=0 or dw_1.getrow()=0 then return dw_1.accepttext() string ls_nis ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis') dw_2.scrolltorow(dw_2.insertrow(0)) dw_2.setcolumn(3) dw_2.setfocus() dw_2.setitem(dw_2.getrow(),'nis',ls_nis) Note : Agar setiap data detail yg ditambahkan terelasi dg data masternya maka di datadetail harus di set/simpan data key relasi yaitu berupa data “nis” Perhatikan koding ini dw_2.setitem(dw_2.getrow(),'nis',ls_nis) dw_2.setcolumn(3) kenapa 3 ? Betul krn kolom “pelajaran” adalah kolom urutan ke 3 yg ada di “tbldujian” Isi click event tombol “Del detail” dg ini : if dw_1.rowcount()=0 or dw_1.getrow()=0 then return if messagebox("Hapus Data","Hapus ?",Exclamation!,YesNo!,2)=1 then dw_2.deleterow(0) parent.triggerevent("ue_update") end if Ok..selanjutnya coba jalankan aplikasi anda ….dan buka sheet master detailnya spt ini :
  • 91. © mztolo 2006 – PB pemula 91 Klik tombol “Add detail” dan anda isi spt ini :
  • 92. © mztolo 2006 – PB pemula 92 ** mmmm ada gambar telunjuk ! itulah setrowfocusindicator(hand!)  Ok …form master detail sudah selesai …selamat mencoba  Dan nantikan sample berikutnya….. Akhir kata…..Sukses untuk anda !!
  • 93. © mztolo 2006 – PB pemula 93 POWERBUILDER #9 bag. 3 Masih seputar sheet master detail, coba anda buka event “ue_delete” modifikasi koding deletenya dg koding berikut agar detailnya jg ikut terhapus : if dw_1.rowcount()=0 or dw_1.getrow()=0 then return if messagebox("Hapus Data","Anda Yakin ?",Exclamation!,YesNo!,2)=2 then return dw_1.accepttext() string ls_nis ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis') dw_1.deleterow(0) dw_1.setfocus() if dw_1.update()=1 then commit; delete from tbldujian where nis=:ls_nis ; messagebox('Info..','Penghapusan Sukses !',information!,ok!) else rollback; messagebox('Info..','Penghapusan Gagal !',information!,ok!) return end if Note : Perhatikan cara penulisan SQL Command untuk “delete” –nya. delete from tbldujian where nis=:ls_nis ; (ditulis dg memakai “:” titik dua setelah tanda sama dengan dan setiap perintah SQL ini agar di jalankan selalu diakhiri dg tanda “;” titik koma) Ok sekarang coba anda tambahkan di detailnya data yg banyak….spt ini : Jml row di detail sebenarnya ada 6, yg tampak 4 row. Agar memudahkan user dlm melihat data yg tersembunyi/dibagian bawah anda bisa menambahkan “vertical scrollbar” di datawindownya. Bagaimana caranya ?
  • 94. © mztolo 2006 – PB pemula 94 Klik datawindow detailnya di painter/editor dan centang “VscrollBar” spt di bawah : Simpan kembali perubahan dan coba jalankan………  Note : Anda jg bisa tambahkan “horizontal scrollbar” jika datawindow anda lebar. Hal ini jg bisa anda terapkan untuk “dropdown datawindow” anda.
  • 95. © mztolo 2006 – PB pemula 95 Untuk dropdown datawindow caranya klik dddw-nya dan centang “VscrollBar” nya. OK mari kita lanjutkan……….. Validasi proses penghapusan pada dasarnya bisa anda kembangkan lagi… misal jika master akan dihapus akan keluar pesan kalo detail sudah berisi alias transaksi sudah terjadi. Logikanya bagaimana ? Yaitu dg mengecek keberadaan data detail untuk kode master yg akan di hapus. Selain itu anda bisa dg memberikan relasi di databasenya (mis: MsSQL) yg tentunya akan memberikan pesan error atau informasi tentang sudah adanya relasi/transaksi jika ada proses delete/penghapusan data. Berikutnya saya akan memberikan sample yg menarik, coba buka sheet ujian spt ini : Dalam kondisi data sudah terisi spt tampak di sheet atas….seharusnya combo untuk nama siswa terproteksi atau disable artinya tdk memberikan kesempatan user untuk merubahnya krn ini menyangkut primary key-nya. Sekarang coba kita bikin suatu kesalahan editing misalnya dg mengganti nama siswa di atas dg nama lain yg sebenarnya data itu jg sudah pernah di entrikan.
  • 96. © mztolo 2006 – PB pemula 96 Dengan kata lain kita coba bikin error krn primary key yg sudah kita masukkan kita entri kembali spt ini : Coba nama Rudy anda ganti menjadi Tini dan save perubahan itu…apa yg terjadi ? Tampak modul error dari odbc mysql-nya yg menyatakan adanya duplikasi entri  Lalu coba anda lihat lagi apakah data dg nama siswa Rudy tersebut masih ada ? Ternyata sudah tidak ada !! Kenapa ? Close aplikasi anda …dan coba modifikasi datawindow “dw_entri_h_ujian” Setelah itu coba lihat “Update Properties…” nya tampak spt ini : Perhatikan di bagian “Key Modification” nya….. 
  • 97. © mztolo 2006 – PB pemula 97 Tampak “rule” proses updatenya adalah “Delete” dulu baru “Insert” sehingga jika terjadi kasus spt tadi maka data “tblhujian” sbg master akan di hapus terlebih dahulu baru dilakukan insert yg ternyata gagal krn primary key terjadi duplikat. Sedangkan proses hapus sudah terjadi..itulah yg menyebabkan data siswa Rudy terhapus. Lalu bagaimana pemecahannya ? Ada 2 cara….  Cara PERTAMA : Dengan menganti rule update di atas dg memilih “Use Update” di key modificationnya. Klik OK dan save kembali datawindow anda …dan coba kembali kasus spt di atas tadi. Krn data Rudy sudah terhapus coba input ulang lagi untuk latihan kali ini. Detailnya tdk usah di entri kembali, krn untuk kasus di atas yg terhapus hanya data di masternya alias “tblhujian” nya. Sekarang coba anda lakukan langkah penggantian nama siswa yg notabene sudah pernah di inputkan spt di hal. 3 dan save. Apa yg terjadi ? Tampak pesan errornya tetapi data siswa Rudy tdk terhapus !! Benarkah ? Coba klik tombol “Retrieve” ..yap data masih spt semula  Semoga anda bisa mengambil kesimpulan dari contoh kasus di atas….amien. Cara KEDUA : Modifikasi datawindow master anda serta klik kolom “nis” Setelah itu di propertiesnya klik icon warna merah di kanan tulisan “Protect” spt tampak pada gambar di atas.
  • 98. © mztolo 2006 – PB pemula 98 Tampak modul untuk mengetik koding … Ketik koding berikut “if (isrownew(),0,1)” dan klik tombol OK. Tampak ada perubahan di propertiesnya spt ini : Note : Properties “Protect” berfungsi untuk melakukan proteksi terhadap kolom yg ada dengan nilai true/1 atau false/0. Untuk kasus di atas jika row/kolom bukan kolom baru maka kolom tersebut akan di protect/disabled. Dengan kata lain kolom hanya enabled jika pada saat row baru atau pada saat penambahan data baru.
  • 99. © mztolo 2006 – PB pemula 99 Dan tentu saja hal ini bisa anda terapkan untuk datawindow yg lain juga. Save datawindow krn perubahan tersebut..dan jalankan sheet ujian spt ini : Sekarang jika anda klik combo nama siswa tersebut tidak akan bisa dlm kondisi data sudah ada spt tampak di gambar atas  Lain halnya jika anda klik tombol tambah/new/add spt ini : Ok…dengan demikian sampai disini dulu penambahan dari saya  Nantikan sample2 dan kasus2 yg lain dan berbeda selanjutnya…… Tetaplah kreatif dg selalu memaksimalkan logika anda….dan jangan lupa untuk selalu berdoa dan bersyukur kepada-Nya. Akhir kata…..Sukses untuk anda !!
  • 100. © mztolo 2006 – PB pemula 100 POWERBUILDER #10 Coba jalankan aplikasi anda dan buka sheet entri data siswa nya spt ini : Tampak disana “nis” 007 adalah milik Tini Pratiwi…… Coba anda klik tombol/new ….dan isi data spt ini (dg nis=007 juga) : Terus coba lakukan save/penyimpanan data…..apa yg terjadi ?! Tampak informasi error updatenya yg mengatakan adanya duplikasi entry….. Modul datawindow error ini masih standar dengan informasi sesuai informasi error yg dikeluarkan oleh odbc mysql nya.
  • 101. © mztolo 2006 – PB pemula 101 Bagaimana jika kita ingin membuat pesan error yg kita definisikan sendiri ? Caranya adalah dengan membuat function untuk itu ….  (jika lupa caranya baca2 lagi artikel sebelum2 nya ya ) Klik tombol new dan pilih function di tab “PB Object” sampai tampil modul untuk membuat fungsi. Isi nama fungsi dan arguments yg dipakai spt ini : Anda isi dg koding spt ini : /* mztolo 2006 anda bisa melihat message error mysql yg lain di help mysql nya pesan error ini akan berbeda antara 1 database dg database yg lainnya */ long kodeerror string pesan,judul kodeerror = sqldbcode pesan =sqlerrtext judul =title string ls_pesan,ls_kodeerror ls_kodeerror="("+string(kodeerror)+")" if kodeerror=1062 then ls_pesan=ls_kodeerror+' Data pernah di entri !' messagebox(judul,ls_pesan,Information!,Ok!,1) elseif kodeerror=1048 then ls_pesan=ls_kodeerror+ ' Kode kosong !' messagebox(judul,ls_pesan,Information!,Ok!,1) elseif kodeerror=1027 then ls_pesan=ls_kodeerror+' Data sedang di edit user lain !' messagebox(judul,ls_pesan,Information!,Ok!,1) else ls_pesan=ls_kodeerror+pesan messagebox(judul,ls_pesan,Information!,Ok!,1) end if return 1
  • 102. © mztolo 2006 – PB pemula 102 Selanjutnya anda save dg nama “f_dberror” Lalu modifikasi sheet entri data siswa anda “w_entri_siswa” spt ini : Doubleclick di kontrol datawindow-nya….. Kemudian di method/event “dberror” anda ketik koding spt ini : return f_dberror (sqldbcode,sqlerrtext,'Master Siswa') Selanjutnya save dan coba jalankan serta buka sheet entri data siswa…anda coba kembali entri dg “nis” yg sama spt di atas (hal. 1) Tampak pesan error yg tampil adalah pesan error yg telah anda definisikan di fungsi “f_dberror” tadi.
  • 103. © mztolo 2006 – PB pemula 103 Sekarang anda coba add data baru lagi…”nis” kosongin dan isi data yg lain spt ini : Terus anda coba save….apa yg tampak ?! Pesan error atau informasi kalo kode/primary key kosong !! Sekarang coba add data baru lagi dan biarkan semua kosong spt ini : Terus coba save …dan apa yg terjadi ?! Tampak informasi proses penyimpanan sukses !! Nah lho ?
  • 104. © mztolo 2006 – PB pemula 104 Tapi jika anda lihat di database mysql anda jelas tidak ada penambahan data kosong. Artinya apa ? Capture error 1048 untuk primary key tidak terjadi dan jika di cek di message errornya juga tidak keluar pesan apa-apa. Ini sulitnya  jika masih keluar pesan error nomor 10xx maka anda bisa menambahkan message errornya di fungsi “f_dberror” Nah lalu bagaimana jika pesan yg tampil akan mengatakan kalo data harus di isi semuanya atau tidak boleh kosong ? Anda ubah koding savenya “ue_update” menjadi spt ini : string ls_nis dw_1.accepttext() if dw_1.update()=1 then ls_nis=dw_1.getitemstring(dw_1.getrow(),'nis') if isnull(ls_nis) then messagebox('Info..','Data tdk boleh kosong !',information!,ok!) return else commit; messagebox('Info..','Penyimpanan Sukses !',information!,ok!) end if else rollback; messagebox('Info..','Penyimpanan Gagal !',information!,ok!) return end if Sample di atas hanya mengecek 1 kolom null atau tidak…untuk kolom2 yg lain silahkan di coba sendiri…..  Sekarang jika data kosong anda save akan keluar pesan spt ini : Terapkan juga fungsi “f_dberror” ini untuk kontrol datawindow yg lain….. Ok cukup ini dulu…..silahkan anda kembangkan menjadi lebih bagus lagi  Akhir kata…..Sukses untuk anda !!
  • 105. © mztolo 2006 – PB pemula 105 POWERBUILDER #11 Anda pasti ingat waktu pertama kali membuat sample PB ini…. Anda membuat suatu aplikasi yg mempunyai sheet yg bersifat MDI (multiple document interface). Lalu apakah sample yg sudah dikerjakan masih bersifat SDI ? Tidak ! Hanya memang menu sheet yg dibuat tidak mendukung MDI (atau bahasa lainnnya kurang memaksimalkan kemampuan MDI nya) Berikut cara memaksimalkannya  Pertama ubah menu utama anda “mn_siswa” menjadi spt ini : Perhatikan ada penambahan item menu “Edit” , “Window” dan “Help” yg penting adalah “Edit” dan “Window” dlm kaitannya dg konsep MDI. Untuk “Edit” tdk perlu ada sub-item menu-nya. Setting visible dan enablenya jgn dicentang alias tidak mau di tampilkan di menu utama. Begitu juga untuk menu “Window” jgn dicentang juga. Kemudian untuk koding click event dari masing2 sub-menu item “Window” adalah sbb : Clicked event Tile Vertical : w_utama.ArrangeSheets ( Tile! ) Clicked event Tile Horizontal : w_utama.ArrangeSheets ( TileHorizontal! ) Clicked event Layer : w_utama.ArrangeSheets ( Layer! )
  • 106. © mztolo 2006 – PB pemula 106 Clicked event Cascade : w_utama.ArrangeSheets ( Cascade! ) Untuk “Help” dan “About” biarkan aja dulu  Selanjutnya kita akan membuat menu yg merupakan “turunan” dari “mn_siswa” sbg menu sheet yg baru. Caranya klik menu “File” dan klik “Inherit…” Selanjutnya tampil spt ini : Pastikan “Objects of Type:” nya “Menus” Terus di kolom atasnya pilih menu “mn_siswa” dan klik tombol OK
  • 107. © mztolo 2006 – PB pemula 107 Selanjutnya tampak menu baru yg merupakan inherit dari mn_siswa spt ini : Kemudian tambahkan sub-menu item untuk “Edit” spt ini : Dengan koding clicked event yg sama dg menu sheet yg pernah anda buat. Jangan lupa di propertiesnya untuk menu “Window” dan “Edit” dicentang visible dan enabled nya.
  • 108. © mztolo 2006 – PB pemula 108 Selanjutnya save dg nama “mn_sheet2” Buka sheet “w_entri_siswa” dan ubah menunya menjadi “mn_sheet2” Lakukan juga untuk sheet “w_entri_ujian” dan jangan lupa di save perubahan itu. Sekarang coba jalankan aplikasi anda ….
  • 109. © mztolo 2006 – PB pemula 109 Perhatikan anda bisa membuka sheet lebih dari satu secara bersamaan ( MDI  ) Pada saat anda aktif atau click sheet entri data siswa maka fungsi toolbar akan berlaku untuk sheet itu, begitu juga sebaliknya jika anda click sheet entri data ujian. Anda lihat daftar sheet yg aktif ada di menu “Transaksi” bagaimana jika kita ingin letakkan di menu “Window” ? Caranya mudah ubah saja clicked event di menu yg menjalankan masing2 sheet dari koding spt ini : opensheet(w_entri_siswa,w_utama,2,original!) menjadi spt ini….. opensheet(w_entri_siswa,w_utama,5,original!) Perhatikan angka “2” dan angka “5” di atas …. Menu “Transaksi” adalah urutan menu ke 2 pada “mn_siswa” Sedangkan menu “Window” ada di urutan ke 5 Mudah bukan ?! Save perubahan dan jalankan aplikasinya…serta buka sheet serta buktikan 
  • 110. © mztolo 2006 – PB pemula 110 Anda juga bisa coba susunan window tile/vertical spt ini : Atau cascade spt ini :
  • 111. © mztolo 2006 – PB pemula 111 Ok…sampai disini dulu dan nantikan sample berikutnya…. Tambahan…….. Coba cek di “target” untuk event open kodingnya spt ini : // mztolo 260106 // Profile sekolah SQLCA.DBMS = "ODBC" SQLCA.Lock = "RU" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DRIVER={MySQL ODBC 3.51 Driver};DESC=; DATABASE=sekolah;SERVER=guzrud;UID=root;PASSWORD=; PORT=3306;OPTION=3;STMT=;'" connect ; if SQLCA.SQLDBCode<>0 then messagebox('Koneksi Gagal',SQLCA.SQLErrText,stopsign!) halt close end if open(w_utama) Untuk event close isi koding spt ini : disconnect ; Note : Mungkin anda pernah ketemu penulisan spt ini “connect using sqlca ;” Kenapa di atas hanya di tulis connect ; saja tanpa statement using sqlca ? Pada dasarnya default transaksi koneksi adalah SQLCA maka penulisan “connect ;” saja sudah cukup, pemakaian using sqlca jika adanya lebih dari 1 transaksi koneksi. Sehingga kita harus menjelaskan secara detail ke sistem koneksi yg mana yg dipakai. Semoga ini bisa menambah pemahaman anda…..amien
  • 112. © mztolo 2006 – PB pemula 112 Akhir kata…..Sukses untuk anda !!
  • 113. © mztolo 2006 – PB pemula 113 POWERBUILDER #12 Berikut ini sample mencetak data (datawindow) siswa….  Pertama anda buat datawindow sbg layout cetakkannya….. Mmmmm jadi cetak juga pake datawindow ? Betul sekali…. Baik interface entri ataupun layout cetakan data…semua memakai datawindow…. Jadi buat data window spt ini : Selanjutnya anda tarik “band” header ke bawah untuk mengetik judul laporan tersebut shg menjadi spt ini : Dan blok serta geser ke bawah judul kolom yg tampak masih di atas….mjd spt ini : Selanjutnya klik object text spt ini ….
  • 114. © mztolo 2006 – PB pemula 114 Selanjutnya klik di area kosong di atas judul2 kolom …spt ini : Ganti “value” text dengan “SMA 1 SUNTER” dan perhatikan perubahan di detailnya Buat lagi text judul yg lain dan rapikan dg menggeser-geser dg mouse sehingga hasilnya akan menjadi spt ini :
  • 115. © mztolo 2006 – PB pemula 115 Kemudian blok/soroti semua judul kolom dan ubah properti bordernya mjd spt ini : Sekarang jika anda klik kanan dan retrieve di previewnya akan tampak spt ini : Anda perhatikan nilai tabungan masih “polos” belum ada pemisah di nilai ribuannya… Sekarang mari kita kasih format untuk memberikan tanda pemisah ribuan…. Pertama klik kolom “tabungan” di detail dan ubah propertie nya spt ini : Perhatikan di tab “Format” anda ketik saja spt ini ‘#,###.00’
  • 116. © mztolo 2006 – PB pemula 116 Selanjutnya membuat total dari semua tabungan siswa....caranya klik kolom “tabungan” Dan klik object “sum” spt ini : Simsalabim……..summary tercipta spt ini : Jangan lupa format display-nya di setting juga agar pemisah ribuan-nya ada
  • 117. © mztolo 2006 – PB pemula 117 Selanjutnya rapikan tampilan layout cetakan dan atur size kertasnya spt ini : Untuk menambahkan tulisan “halaman sekian dari total halaman” caranya “ Klik object “compute page” spt ini : Selanjutnya geser ke bawah band “footer” spt ini : Dan klik di area kosong di bawah total tabungan spt ini….
  • 118. © mztolo 2006 – PB pemula 118 Tampak sudah tercipta…….  Selanjutnya save datawindow tersebut dg nama “dw_lap_tabungan” Kemudian anda buat window untuk preview form cetak tersebut spt ini : Dengan title window = “Form cetak data tabungan....” Tambahkan 2 tombol : Tombol Print dg click event “dw_1.print()” Tombol Close dg click event “Close(parent)” Adapun properti datawindow-nya spt ini :
  • 119. © mztolo 2006 – PB pemula 119 Isi koding “Open” event window tersebut spt ini : dw_1.settransobject(sqlca) dw_1.retrieve() dw_1.object.datawindow.print.preview='yes' Note : Tampak di koding itu spt biasa akan di set transaksi object nya. Selanjutnya di retrieve data-nya dan tampilkan data secara print “preview” Ok…kemudian save window tersebut dg nama “w_lap_tab” Di menu untuk menjalankan window tersebut isi dengan koding spt ini :
  • 120. © mztolo 2006 – PB pemula 120 opensheet(w_lap_tab,w_utama,5,original!) Jalankan aplikasi dan buka window/sheet laporang tersebut…
  • 121. © mztolo 2006 – PB pemula 121 Anda bisa desain window dg lebih lebar agar tampilan bisa penuh..silahkan Dan jika anda klik tombol “Print” maka data akan tercetak…..  Bagiamana jika ingin mencetak dari kode sekian s/d kode sekian ? Bagaimana jika ingin merubah ukuran kertas dan jenis printer ? Bagaimana jika ingin outputnya ke FILE ? Bagaimana jika ingin mencetak dari halaman sekian s/d halaman sekian ? Bagaimana jika ingin mencetak 2 copies ? Bagaimana jika ingin mencetak dg besar 1 ½ kali dari besar normal ? Mmmmm… kelak semua akan saya coba berikan samplenya  Ok …cukup dulu ya …… Akhir kata…..Sukses untuk anda !!
  • 122. © mztolo 2006 – PB pemula 122 POWERBUILDER #12 (b) Ok mari kita melangkah ke depan lagi  Coba modifikasi window preview cetak anda menjadi spt ini…. Note : Ada tambahan 5 radio button 1 checkbox 1 tombol preview (jadi sekenarionya nanti kita tdk mau data langsung tampil spt sample sebelumnya, tetapi user hrs klik tombol preview dahulu) Terus ubah lebar window menjadi = 4078 dan tinggi = 2748 Ubah juga lebar datawindow menjadi = 3941 dan tinggi = 1976 Judul dan icon window/sheet silahkan juga kalo mau di ubah  Kemudian hapus koding yg ada di event “Open” agar datawindow tdk langsung “retrieve” atau di tampilkan. Coba klik datawindow “dw_1” dan hapus “dataobject” dw_lap_tabungan spt ini :
  • 123. © mztolo 2006 – PB pemula 123 Menjadi spt ini…..maksudnya apa agar data siswa tdk langsung di tampilkan/preview : Dan isi koding di click event tombol “Preview” spt ini : dw_1.dataobject='dw_lap_tabungan' dw_1.settransobject(sqlca) dw_1.retrieve() dw_1.object.datawindow.print.preview='yes' Note : Perhatikan dw_1 adalah nama kontrol datawindow yg ada di window/sheet Isi dataobject-nya pada saat klik tombol ini dg perintah dw_1.dataobject= …. Selanjutnya spt biasa set transaksi objectnya, retrieve dan preview-kan. Isi koding click event radio button “50%” dg ini : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Object.DataWindow.print.preview.zoom =50 dw_1.Modify("datawindow.zoom =50 ") end if Isi koding click event radio button “85%” dg ini : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Object.DataWindow.print.preview.zoom =85 dw_1.Modify("datawindow.zoom =85 ") end if dst-nya……………… Note : Perintah2 yg berhubungan dg “preview” dapat diterapkan/dijalankan jika datawindow ada di posisi “preview” juga. Untuk mengetahui atau mendapatkan indormasi apakah datawindow dlm kondisi “preview” dipakai perintah “describe”
  • 124. © mztolo 2006 – PB pemula 124 Jadi anda tambah perbendaharaan 1 perintah lagi yaitu perintah “describe” lebih detailnya baca help PB  Selanjutnya preview datawindownya di set zoom dahulu agar tampilan previewnya ikut berubah sesuai besaran angka prosentasenya (100% = ukuran normal) Selanjutnya agar waktu tercetak datawindow besarnya sesuai yg kita inginkan maka lakukan modifikasi di zoom datawindow-nya. Nanti anda bisa buktikan waktu anda cetak di printer……. Simsalabim…tercetak sesuai besar zoom nya …SECARA FISIK !!  Isi koding click event checkbox “Rulers” dg ini : if dw_1.describe('datawindow.print.preview')='yes' then if this.checked then dw_1.object.datawindow.print.preview.rulers='yes' else dw_1.object.datawindow.print.preview.rulers='no' end if end if Perintah ini untuk menampilkan “rulers” di pinggiran tampilan preview anda. Spt tampak di bawah ini : Berikut jika tdk pake rulers : Coba juga tampilan “zoom” 85% nya spt ini :
  • 125. © mztolo 2006 – PB pemula 125 Note : Garis biru yg tampak di gambar atas adalah garis pembatas untuk area cetak. Anda bisa menggeser ke arah “dalam” yg akan menandakan margin kiri dan kanan dari layout cetakan anda. Yg ini untuk “zoom” 150% : Selanjutnya mari kita buat “range” untuk mencetak kode “nis” sekian s/d sekian. Tambahkan 2 buah “SingleLineEdit” kontrol spt ini : Tujuannya adalah untuk entri kode “nis” Anda juga bisa mencoba dg membuat datawindow untuk hal tsb di atas, tentunya dg membuat dropdown datawindow-nya. Atau dg memakai kontrol spt combobox…..silahkan di kembangkan  Selanjutnya anda ubah koding tombol “Preview” dg spt ini : string kode1,kode2,dwfilter kode1 =righttrim(sle_1.text) kode2 =righttrim(sle_2.text) dw_1.dataobject='dw_lap_tabungan' dw_1.settransobject(sqlca)
  • 126. © mztolo 2006 – PB pemula 126 if len(kode1)>0 and len(kode2)>0 then dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'" elseif len(kode1) > 0 and len(kode2)=0 then dwfilter ="nis ='"+kode1+"'" elseif len(kode1) = 0 and len(kode2) >0 then dwfilter ="nis ='"+kode2+"'" else dwfilter=" " end if dw_1.setfilter(dwfilter) dw_1.filter() dw_1.retrieve() dw_1.object.datawindow.print.preview='yes' Note : Ntuk kasus ini saya berikan sample dg perintah “FILTER” Anda bisa lihat cara memasukkan data “nis” ke variable yg ada (kode1 dan kode2), begitu jg cara menyiapkan variablenya. Selain itu perhatikan validasi untuk pengecekan apakah kode1 dan kode2 ada isi-nya. Begitu juga dg cara penulisannya untuk variable “setfilter” yaitu “dwfilter” Setelah itu agar filter jalan atau dilakukan maka lakukan “setfilter” sbg kondisinya dan lakukan “filter” untuk datawindow tersebut…dan retrieve tentunya. Jika “setfilter” diisi variable yg kosong ( dwfilter=” “) maka filter tdk akan berlaku atau berarti data akan ditampilkan semua. Simpan perubahan dan coba tampilkan……spt ini : Mmmm…..ok sampai ini dulu….. Sedikit2 aja…biar anda bisa meresapi koding, kegunaan dan artinya  Akhir kata…..Sukses untuk anda !!
  • 127. © mztolo 2006 – PB pemula 127
  • 128. © mztolo 2006 – PB pemula 128 POWERBUILDER #12 (c) Ok mari kita melangkah ke depan lagi  Coba tambahkan 3 radio button spt ini : Jangan lupa anda tempatkan didalam “GroupBox” Dan berinama groupbox itu “Paper Orientation” spt tampak di gambar atas. Paper Orientation berguna untuk mengatur tampilan cetak apakah ingin “Portrait” potret/berdiri atau “Landscape” membentang/melintang. Paper Orientation ini mengacu pada properti datawindow di “tab” Print Specifications : Adapun isi koding untuk event click radiobutton “Default” adalah spt ini : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Object.DataWindow.Print.orientation = 0 dw_1.Modify(' datawindow.paper.orientation = 0') end if
  • 129. © mztolo 2006 – PB pemula 129 Perhatikan perintah ini jg berlaku jika kondisi datawindow sedang “preview” Isi click event radiobutton “Portrait” sbb : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Object.DataWindow.Print.orientation = 2 dw_1.Modify(' datawindow.paper.orientation = 2') end if Isi click event radiobutton “Landscape” sbb : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Object.DataWindow.Print.orientation = 1 dw_1.Modify(' datawindow.paper.orientation = 1') end if Coba jalankan dan coba tampilkan secara “Landscape” spt ini : Dan jika anda cetak maka akan tercetak secara “Landscape” juga. Note : Jika anda hanya ingin menampilkan secara preview saja maka cukup dg perintah ini : dw_1.Object.DataWindow.Print.orientation = 1 Tetapi jika anda ingin perubahan di preview itu juga agar sama hasilnya di cetakan berupa “landscape” maka di tambahkan perintah ini : dw_1.Modify(' datawindow.paper.orientation = 1')
  • 130. © mztolo 2006 – PB pemula 130 Selanjutnya tambahkan spt ini 3 radiobutton, 1 SingleLineEdit dan 1 EditMask untuk “Copies” spt ini : Atur properties untuk EditMask “Copies” spt ini : Isi koding click event untuk radiobutton “All” spt ini : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Modify(' datawindow.print.page.range =" "') end if sle_3.enabled=false Note : Perhatikan masih sama konsepnya yaitu dg memberikan modify kepada datawindow. Modify ini bisa sekaligus banyak, atau dg kata lain datawindow bisa di modifikasi dg perintah2 secara bersamaan.
  • 131. © mztolo 2006 – PB pemula 131 Sle_3.enabled=false artinya agar SingleLineEdit yg di kanan tulisan “Pages” dibuat disable agar tdk bisa di entri. Karena memang itu tempat kita mengisi nomor halaman yg akan di cetak, dan jika kita pilih “all” atau “current” maka disabled. Isi koding click event untuk radiobutton “Current page” spt ini : if dw_1.describe('datawindow.print.preview')='yes' then long row string tmp row = dw_1.getrow() tmp = dw_1.describe("evaluate('page()',"+string(row)+")") dw_1.Modify(" datawindow.print.page.range ='"+tmp+"'") end if sle_3.enabled=false Note : Pertama kita akan mengetahui default row dari datawindow preview aktif ini ada dihalaman berapa (tentunya sesuai dg ukuran kertas yg telah di setting). Selanjutnya sama….modify juga. Isi koding click event untuk radiobutton “Pages” spt ini : if dw_1.describe('datawindow.print.preview')='yes' then string tmp tmp = sle_3.text dw_1.Modify(" datawindow.print.page.range ='"+tmp+"'") end if sle_3.enabled=true Note : Perhatikan datawindow akan dicetak sesuai data nomor halaman yg di entrikan di SingleLineEdit (sle_3.text) Contoh pengisiannya : 5 artinya halaman 5 saja 1-5 artinya halaman 1 s/d 5 1,4 artinya halaman 1 dan 4 saja 1,3,5-12 artinya halaman 1,3 terus 5 s/d 12 Untuk EditMask “Copies” tdk perlu ada koding ..hanya saja koding di click event tombol “Print” anda ubah menjadi spt ini : if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Modify(" datawindow.print.copies ='"+em_1.text +"'") dw_1.print() end if Note : Em_1.text adalah nama dari object/control EditMask “Copies” Ok…sekarang anda bisa coba cetak dg mencoba-coba kriteria2 di atas 
  • 132. © mztolo 2006 – PB pemula 132 Kemudian kita coba “destination” dari cetakan itu sendiri….. Mau ke kertas/printer ? Atau ke file Excel ? Atau ke file Text ? Coba tambahkan 3 radiobutton “Print To :” spt ini : Tidak perlu ada koding hanya anda untuk masing2 radiobutton-nya. Anda tambahkan/ubah saja koding di tombol “Print” nya spt ini : if rb_10.checked=true then if dw_1.describe('datawindow.print.preview')='yes' then dw_1.Modify(" datawindow.print.copies ='"+em_1.text +"'") dw_1.print() end if else string docname, named int value if rb_11.checked=true then value=GetFileSaveName("Save As To File",docname, named, "XLS", "*.XLS,*.XLS") if value = 1 then dw_1.saveAs(docname,Excel!,TRUE) else return end if else value=GetFileSaveName("Save As To File",docname, named, "TXT", "*.TXT,*.TXT") if value = 1 then dw_1.saveAs(docname,Text!,TRUE) else return end if end if messagebox("www.mztolo.com","Proses Selesai !!") end if
  • 133. © mztolo 2006 – PB pemula 133 Note : Anda perhatikan koding berwarna biru yg merupakan tambahannya. Rb_10 = radiobutton untuk “print to” PAPER. Rb_11 = untuk ke file EXCEL Rb_12 = untuk ke file TEXT. Sebenarnya ini tdk murni cetak/print tetapi “SaveAs” dg type dari file/hasil yg dipilih. Anda perhatikan bentuk perintah “SaveAs” …dw_1.saveAs(docname,Excel!,TRUE) “TRUE” berarti header/nama kolom dari data diikutsertakan. “FALSE” header/nama kolom tdk diikutsertakan, jadi hanya data saja. GetFileSaveName(…) dipakai untuk menampilkan modul/dialogbox “SaveAs” : Jadi user diberikan kesempatan untuk menulis nama file nya serta lokasi tempat file itu akan di simpan. Hasilnya spt ini : Dan ini :
  • 134. © mztolo 2006 – PB pemula 134 Sekarang jika anda tampilkan penuh maka window/sheet cetak anda akan spt ini : Note : Untuk kedepannya sebaiknya window preview dibuat 1 khusus dan bisa dipakai untuk semua preview laporan yg ada di aplikasi. Setting print spt paper orientation, page range dll. bisa dibuatkan sheet tersendiri…jadi tdk menggabung spt itu. Memang langkah2 yg saya berikan berurutan dan satu demi satu agar rekan2 lebih mudah memahami dan mengerti 
  • 135. © mztolo 2006 – PB pemula 135 Kedepannya bisa spt contoh berikut ini : Dan ini : Ok…semoga….sample2 ini menambah pengetahuan anda dan membuat anda bahagia juga 
  • 136. © mztolo 2006 – PB pemula 136 Akhir kata…..Sukses untuk anda !!
  • 137. © mztolo 2006 – PB pemula 137 POWERBUILDER #12 (d) Ok mari kita melangkah ke depan lagi  Selanjutnya mari kita mencoba untuk membuat report dg “group” Sebagai sample kita pakai data master – detail….sehingga nantinya di laporan akan dibuat daftar ujian group per group untuk masing2 siswa. Ok…mari kita mulai…. (langkah ini mungkin bukan langkah yg ideal tetapi saya pakai untuk memudahkan anda memahaminya ) Ok…klik new dan buat datawindow spt ini : Klik OK….. Retrieve on Preview jika tdk anda centang maka datawindow akan ter-create tanpa langsung menampilkan/preview data yg ada. (seandainya data anda ribuan/milyaran dan harus preview maka akan memakan waktu) Selanjutnya klik NEXT Pilih table “tbldujian” dan pilih kolomnya spt tampak di gambar bawah ini…
  • 138. © mztolo 2006 – PB pemula 138 Klik OK…tampak spt ini : Klik dan tahan pakai mouse kolom “nis” dan drag ke tempat sebelah kanan spt ini : Ini artinya group yg kita pakai adalah berdasar “nis” Selanjutnya klik tombol NEXT sampai keluar spt ini :
  • 139. © mztolo 2006 – PB pemula 139 Ganti tulisan “Tbldujian Report” dengan “DAFTAR UJIAN SISWA” spt ini : Untuk membuat baris ke dua…letakkan pointer di belakang kata SISWA dan tekan Ctrl+Enter….dan tulis “SMA 1 SUNTER” spt ini : Selanjuntya klik tombol NEXT….. Klik NEXT lagi…..dan klik FINISH Tampak hasilnya spt ini :
  • 140. © mztolo 2006 – PB pemula 140 Dan jika anda preview akan tampak spt ini : Anda perhatikan total untuk per group dan untuk summary sudah ada dan data ditampilkan group berdasar “nis”. Selanjutnya jika anda perhatikan data di atas belum informatif….artinya itu nilai ujian untuk siswa bernama siapa ? dengan pengawas siapa ? Lalu caranya bagaimana ? Ok…mari kita tambahkan nama pengawasnya…..
  • 141. © mztolo 2006 – PB pemula 141 Dari painter datawindow klik icon ini …. sampai tampak spt ini : Klik kanan di area kosong spt ini : Dan pilih/klik “Select Tables..” sampai keluar modul untuk memilih table yg lain spt ini : Pilih “tblhujian” dan klik tombol OPEN
  • 142. © mztolo 2006 – PB pemula 142 Sampai tampil spt ini : Pilih kolom “pengawas” untuk di tampilkan di datawindow spt ini : Tampak kolom “pengawas” di bagian atas sudah ada….. Selanjutnya coba cek setting “join” diantara kedua table itu….. Double klik tanda “=” spt tampak di gambar atas….sampai tampil spt ini : Perhatikan sudah benar……  dan klik tombol OK
  • 143. © mztolo 2006 – PB pemula 143 Klik icon RETURN untuk kembali ke datawindow painter….. Tampak kolom “pengawas” sudah ditambahkan… Selanjutnya anda atur dan rapikan spt ini … Hasilnya akan spt ini….. Ok selanjutnya kita tambahkan nama siswa dg mengambil kolom dari table “tblsiswa”. Langkahnya sama dg menekan tombol Dan dari datawindow painter anda bisa klik kanan atau menekan icon spt ini :
  • 144. © mztolo 2006 – PB pemula 144 Tampil kolom2 dari table “tblsiswa” pilih kolom nama …dan hasilnya spt ini : Tampak datawindow di painternya spt ini : Geser menjadi spt ini : Sehingga tampak di preview akan menjadi spt ini :
  • 145. © mztolo 2006 – PB pemula 145 Atau anda bisa rapikan spt ini juga …. Perhatikan judul kolom di pindah di header per-group dan tanggal dipindah ke footer. Untuk centering judul anda bisa lakukan spt ini : Klik judul di atas dan pilih “Center” di properti alignment-nya…shg hasilnya spt ini :
  • 146. © mztolo 2006 – PB pemula 146 Anda juga bisa tambahkan computed field spt ini : Perhatikan isi “Compute Expression” nya…..dan hasilnya tampak spt ini : Selanjuntya coba tambahkan “line” di atas dan bawah dari total per groupnya spt ini :
  • 147. © mztolo 2006 – PB pemula 147 Atur ketebalan “line” dg “Pen Width” yg ada di properties-nya…. Serta tambahkan text spt tampak di atas….. “Rata2 per group” dan “Rata2 dari seluruh siswa”. Upppsss….ada yg salah….. ? Yap…. itu rata2 tetapi kok rumusnya “SUM” bagaimana nih ? Anda tinggal edit di propertisnya menjadi “AVG” Untuk rata2 per group spt ini avg(nilai for group 1) Untuk rata2 semua ubah menjadi spt ini avg(nilai for all) Jangan lupa format untuk kedua nya pakai ###.00 Previewnya akan spt ini …. Ok…..simpan datawindow ini dg nama “dw_lap_ujian” Buka window “w_lap_tab” dan save as menjadi “w_lap_ujian”
  • 148. © mztolo 2006 – PB pemula 148 Selanjutnya ubah koding di click event tombol PREVIEW menjadi spt ini : // mztolo 2006 string kode1,kode2,dwfilter kode1 =righttrim(sle_1.text) kode2 =righttrim(sle_2.text) dw_1.dataobject='dw_lap_ujian' dw_1.settransobject(sqlca) if len(kode1)>0 and len(kode2)>0 then dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'" elseif len(kode1) > 0 and len(kode2)=0 then dwfilter ="nis ='"+kode1+"'" elseif len(kode1) = 0 and len(kode2) >0 then dwfilter ="nis ='"+kode2+"'" else dwfilter=" " end if dw_1.setfilter(dwfilter) dw_1.filter() dw_1.retrieve() dw_1.object.datawindow.print.preview='yes' Perhatikan yg dicetak tebal….. Selanjuntya isi koding di click event menu lap per group spt ini :
  • 149. © mztolo 2006 – PB pemula 149 opensheet(w_lap_ujian,w_utama,5,original!) Sekarang coba cetak per group dijalankan…..
  • 150. © mztolo 2006 – PB pemula 150 Dan ini contoh output ke excel-nya…. Ok…. Ini hanyalah sebuah awal…. Masih banyak sample datawindow yg lain…baik untuk entri ataupun report…. Silahkan terus dicoba…terus membaca…dan terus belajar….. Akhir kata…..Sukses untuk anda !!
  • 151. © mztolo 2006 – PB pemula 151 POWERBUILDER #13 Setelah membaca sample 12(e) mungkinkah ada timbul pertanyaan dalam benak anda ? Apakah setiap proses cetak harus memerlukan masing2 1 window/sheet cetak…. Jadi kalo ada proses cetak 10 maka perlu juga 10 sheet preview ? Sedangkan jika kita lihat semua koding sama dan hanya 1 perbedaan yaitu tentang datawindow object-nya saja. Ok ..benar sekali… kenapa kita tidak membuat atau cukup 1 sheet preview saja ? Artinya sheet preview tersebut harus bisa menerima parameter untuk object datawindow yg berbeda. Jika PB bisa….tentunya…lalu dg perintah apa ? Untuk membuka sheet biasa anda memakai ini : opensheet(w_lap_tab,w_utama,5,original!) Nah untuk opensheet dg parameter dg perintah ini : OpenSheetWithParm ( sheetrefvar, parameter {, windowtype }, mdiframe{, position {, arrangeopen } } ) Ok sebelum kita melangkah lebih jauh coba buka/modify sheet “w_lap_tab” dan save as dengan nama “w_preview”. “w_preview” inilah yg akan kita pakai…window preview yg sudah anda buat biarkan saja sbg dokumentasi anda untuk belajar. Selanjutnya di click event masing2 menu cetak coba anda ganti dg perintah2 ini : Untuk “laporan data siswa”….. OpenSheetWithParm(w_preview,”dw_lap_tabungan”,w_utama,5,original!) Untuk “laporan per group” ….. OpenSheetWithParm(w_preview,”dw_lap_ujian”,w_utama,5,original!) Lalu apakah langsung bisa dijalankan …perintah ini dari menu ? Mmmmm……sheet “w_preview” anda harus diberikan perintah untuk menangkap parameter yg disertakan di perintah tersebut di atas. Caranya ? Ok….perlu anda ketahui untuk meng-capture/menangkap/store data parameter itu PB mengenal 3 perintah : Message.DoubleParm Numeric Message.PowerObjectParm PowerObject (PowerBuilder objects, including user-defined structures) Message.StringParm String Anda perhatikan…jika yg dilewatkan berupa data numeric dipakai perintah “Message.DoubleParm”. Jika data string pakai “Message.StringParm” Dan jika berupa “structure”, PB object yg lain maka pakai “Message.PowerObjectParm”. Karena yg dilewatkan berupa data string contoh : ”dw_lap_ujian”
  • 152. © mztolo 2006 – PB pemula 152 Maka modify sheet “w_preview” anda di clickevent tombol PREVIEW dg koding ini : // mztolo 2006 string kode1,kode2,dwfilter string ls_nama_window ls_nama_window = Message.StringParm kode1 =righttrim(sle_1.text) kode2 =righttrim(sle_2.text) dw_1.dataobject=ls_nama_window dw_1.settransobject(sqlca) if len(kode1)>0 and len(kode2)>0 then dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'" elseif len(kode1) > 0 and len(kode2)=0 then dwfilter ="nis ='"+kode1+"'" elseif len(kode1) = 0 and len(kode2) >0 then dwfilter ="nis ='"+kode2+"'" else dwfilter=" " end if dw_1.setfilter(dwfilter) dw_1.filter() dw_1.retrieve() dw_1.object.datawindow.print.preview='yes' Penjelasan……. Perhatikan perubahan koding di click event tombol PREVIEW di atas…. Terutama yg saya ketik dg warna merah…….. Pertama spt biasa anda siapkan variable untuk tempat nama datawindow itu string ls_nama_window Setelah itu store data sesuai yg dilewatkan parameter dg perintah ini… ls_nama_window = Message.StringParm Dan anda isikan dataobject untuk dw_1 dengan perintah ini….. dw_1.dataobject=ls_nama_window Dengan demikian “w_preview” sudah bisa anda pakai untuk type cetakan laporan tabungan dan daftar nilai ujian. Hebatnya lagi capture parameter itu bisa dilakukan di koding sebuah click event tombol. Jadi tdk harus anda set di open event sheet….atau event lain yg running atau dijalankan waktu sheet pertama kali ditampilkan. Bagaimana jika data hasil store parameter itu mau kita pakai disemua event sheet ? Karena kalo spt sample di atas itu hanya bisa dipakai di event click tombol PREVIEW saja.
  • 153. © mztolo 2006 – PB pemula 153 Pertama anda harus declare variable untuk datanya di “Instance Variables” spt ini : string ls_nama_window Terus capture datanya anda ketik di open event dari sheet tersebut spt ini : ls_nama_window = Message.StringParm Sehingga koding di click event PREVIEW bisa ditulis spt ini : // mztolo 2006 string kode1,kode2,dwfilter kode1 =righttrim(sle_1.text) kode2 =righttrim(sle_2.text) dw_1.dataobject=ls_nama_window dw_1.settransobject(sqlca) if len(kode1)>0 and len(kode2)>0 then dwfilter ="nis >='"+kode1+"' and nis <='"+kode2+"'" elseif len(kode1) > 0 and len(kode2)=0 then dwfilter ="nis ='"+kode1+"'" elseif len(kode1) = 0 and len(kode2) >0 then dwfilter ="nis ='"+kode2+"'" else dwfilter=" " end if dw_1.setfilter(dwfilter) dw_1.filter() dw_1.retrieve() dw_1.object.datawindow.print.preview='yes'
  • 154. © mztolo 2006 – PB pemula 154 Note : Cara atau aturan spt ini juga berlaku untuk variable atau parameter lain yg anda mau pakai di seluruh event sheet anda atau object yg ada di sheet anda. Bagaimana jika variable itu kita ingin pakai untuk seluruh aplikasi, artinya bersifat “public” atau global ? Anda bisa ketikkan di “Global Variables” spt ini : “Global Variables” ini bisa diakses dari semua lokasi di aplikasi. Sedangkan “Instance Variables” bisa diakses dalam lingkup object tersebut atau bisa juga disamakan/dianggap sbg property sebuah object. Ok lebih detailnya anda bisa baca di help PB  Mmmm….saya pikir sudah cukup sampai disini  Eiiiittt… nanti dulu …apakah anda sudah puas ?! Belum ? Mmmm….kenapa ? Ok…coba jalankan kembali aplikasi anda….dan jalankan/buka sheet cetak data siswa/tabungan. Previewkan….mmmm sukses !! Sekarang dlm kondisi sheet preview ini aktif coba jalankan sheet cetak data ujian siswa… Apa yg terjadi ? Window preview untuk yg kedua kali tdk mau tampil ! Benar sekali krn memang “w_preview” sudah tampil untuk data tabungan siswa. Hal ini akan sama terjadi jika anda mencetak data ujian dan kemudian dlm kondisi masih preview anda coba cetak juga data tabungan siswa. Lalu bagaimana solusinya ? Anda ketik koding spt ini di click event menu laporan anda : w_preview w_pre1 OpenSheetWithParm(w_pre1,"dw_lap_tabungan",w_utama,5,original!) Dan spt ini…. w_preview w_pre2 OpenSheetWithParm(w_pre2,"dw_lap_ujian",w_utama,5,original!) Note : Perintah di atas dipakai untuk membuka 2 window yaitu “w_pre1” dan “w_pre2” dari type window/sheet yg sama yaitu “w_preview” Dengan cara di atas barulah di mungkinkan untuk membuka sheet preview secara bersamaan dari 2 atau lebih laporan yg ada.
  • 155. © mztolo 2006 – PB pemula 155 Tampak di gambar bawah isi click event menu “lap data tabungan siswa” : Tampak di gambar bawah isi click event menu “lap data nilai ujian siswa” :
  • 156. © mztolo 2006 – PB pemula 156 Buktikan….dan…inilah hasilnya : Tampak sheet preview tampil untuk 2 buah laporan yg ada  Perlu dicatat juga cara ini berlaku jg untuk sheet/window yg lain yg mungkin anda mau tampilkan berulang. Mmmm sekarang anda sudah puas ? Blom juga ? Apa kegunaan opensheetwithparm() yg lain ? Datawindow memungkinkan kejadian spt ini….. Misal ada sebuah tampilan “tabular” berbentuk row per row ke bawah tentunya…. Kemudian anda double click salah satu row…..tampilah modul edit untuk atau khusus row/data tersebut. Bagaimana membuka sheet editing ini agar sesuai dg row/data yg di click ? Dengan opensheetwithparm() atau openwithparm() !! Benar sekali……  Masih blom puas juga ?! Mmmmm……..tetaplah untuk membaca dan belajar…. Kembangkan juga sheet preview yg ada sehingga benar2 bisa untuk preview semua bentuk laporan yg ada……. Akhir kata…..Sukses untuk anda !!
  • 157. © mztolo 2006 – PB pemula 157 PB#14 (tambahan) Sebelum melangkah lebih jauh di pemrograman PB saya ingin menambahkan beberapa hal yg mungkin kelaknya berguna dan memudahkan….. Coba anda buka workspace latihan anda sebelumnya….spt ini : Kalo kita perhatikan mungkin ini adalah layout favorite anda…..ada system tree nya ada paint untuk datawindow…..nama2 kolomnya dan tentunya properties… Tapi mungkin karena suatu hal maka….tampilan “berantakan” spt ini…
  • 158. © mztolo 2006 – PB pemula 158 Perhatikan tampilan “kolom” ada diantara datawindow painter dan properties…. Lalu jika kita ingin mengembalikan keposisi semula bagaimana ? Caranya ….klik menu spt gambar di bawah : Dan anda bisa perhatikan tampilan akan rapi kembali…..
  • 159. © mztolo 2006 – PB pemula 159 Sekarang anda juga bisa membuat “custom” layout sendiri….. Misal…dari tampilan “Default” di atas saya tdk mau modul “Export/Import Template XML” ditampilkan….jadi cukup spt ini :
  • 160. © mztolo 2006 – PB pemula 160 Caranya ? Close dulu modul “Export/Import Template XML” tersebut…. Terus klik menu VIEW -> LAYOUT -> MANAGE Sampai tampil modul spt ini…. Selanjutnya klik icon nomor 2 dari kiri…. “New Layout” sampai tampil spt ini…
  • 161. © mztolo 2006 – PB pemula 161 Anda ketik misal “mztolo” ….. Terus klik tombol “Apply Layout”…. Sekarang anda coba bedakan…antara “Default” dg “mztolo”  Mmmmm…..bedakan ?!  Berikutnya adalah mengenai “control” yg invisible…alias tdk tampak…
  • 162. © mztolo 2006 – PB pemula 162 Atau di setting propertiesnya….visible tdk di centang… Perhatikan gambar berikut ini… Dlm sheet ada command button tapi tdk tampil …kenapa ? Lihat propertiesnya…. Visible tdk di centang !! Alias button ini di setting secara invisible  Satu sisi memang di PB spt itu…tapi satu sisi…mmm jadi kita nggak tahu dimana itu kontrol command buttonnya…. Lalu bagaimana jika kita maunya invisible tetapi tetap tampil di waktu desainnya… Caranya adalah…. Klik menu DESIGN -> SHOW INVISIBLES Sehingga akan tampil spt ini…walau invisible….
  • 163. © mztolo 2006 – PB pemula 163 Berikutnya adalah…membuat file library baru… Apa itu ? Perhatikan gambar berikut…..
  • 164. © mztolo 2006 – PB pemula 164 Itu adalah system tree workspace anda….tampak di sana hanya ada 1 file library yaitu “siswa.pbl”. Anda tahu di PB kita bisa membuat aplikasi dg beberapa library….misalnya begini….main program..function…custom object dan menu di library “siswa.pbl” Kemudian window sheet ada di library “transaksi.pbl” dan semua report ada di library “laporan.pbl”. Dengan demikian nanti di PB ada 1 exe misalnya dan beberapa file “PBD” ……”pbl” kali ?! Bukan ….tapi “pbd” krn “pbl” setelah di build dan deploy jadinya “pbd” Dan jika anda perlu ubah di laporannya…anda cukup update di library “laporan.pbl” nya Demikianlah….PB…lalu bagaimana cara menambah library baru ? Klik kanan di “target” dan pilih “properties” spt ini… Sampai tampil spt ini….
  • 165. © mztolo 2006 – PB pemula 165 Klik tombol “NEW” untuk membuat library baru….. Ketik nama library-nya misal ….”transaksi” dank klik tombol SAVE Tampil modul spt ini…dan anda bisa menambahkan keterangan untuk library tsb… Klik tombol OK….dan hasilnya spt ini….
  • 166. © mztolo 2006 – PB pemula 166 Dan tampak juga di system tree anda…. Nah pada saat membuat sheet atau modul yg lain…..jgn lupa simpan di library “transaksi.pbl” tersebut…. Hasilnya spt ini……. Ada cara lain ? Ada dong…… 
  • 167. © mztolo 2006 – PB pemula 167 Klik kanan di “target” dan pilih “NEW” Pilih “library painter” dan klik tombol OK Perhatikan di PB anda tampil toolbar untuk “library” spt ini… Klik tombol pertama untuk membuat library baru…. Ikutin langkah2 selanjutnya spt yg ada pada halaman 8….
  • 168. © mztolo 2006 – PB pemula 168 Hanya saja blm ada di system tree anda…..  Lalu cara menambahkannya bagaimana ? Klik kanan lagi “target” ….pilih properties….sampai tampil spt ini Klik tombol “BROWSE” Pilih library yg anda mau “add” dan klik tombol OPEN Akan kembali ke posisi modul sebelumnya ….Terus klik tombol OK
  • 169. © mztolo 2006 – PB pemula 169 Maka tampak di system tree anda spt ini….. Ok……saya pikir tambahannya ini dulu…. Tetap untuk semangat…dan terus lah menggali…. Jangan lupa tetap kreatif….dan tentunya perbanyak rasa syukur  Akhir kata ….sukses untuk anda !!