Powerbuilder adalah bahasa pemrograman database visual, dg fitur dan kelebihankelebihan 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 mulaijalankan PB anda spt ini :
spt ini :
Di bahasa pemrograman lain di sebut juga project, di PB di sebut Workspace atau area
kerja kita.
Tampak modul spt ini :
Ketik nama workspace nya siswa dan saya simpan di folder c:\samplePB
Pilih target type nya, yaitu Application karena kita akan membuat aplikasi.
Klik tombol OK
mztolo 2006 PB pemula
Waktu anda klik di entrian bawah selanjutnya akan tampak spt ini.
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
Tampak window atau form yg anda buat sudah tampak di painter anda..
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 atassampai tampil spt ini :
Pilih Static text spt tampak di gambar atas dan klik di area window/form anda 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 :
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
10
11
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 :
12
13
14
Selanjutnya klik menu Run di atas serta klik .Full Build Workspace spt ini
15
16
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
Klik kanan pada text untitled0 spt ini dan klik Insert Submenu Item
Tanda & pada nama2 menu di gunakan sbg shortcutsehingga bisa di panggil dengan
menekan ALT+F
Klik kanan di &File dan klik Insert Submenu Item untuk membuat sub-menunya
Ulangi langkah2 di atas untuk membuat sub-menu berikutnyasehingga hasilnya spt ini
Dan buat sub-menu Transaksi serta menu item berikutnya sehingga hasilnya spt ini
Perhatikan :
Title
WindowType
WindowState
Icon
Dan klik tombol OKsehingga tampak di properties spt gambar di bawah ini.
Yap..sukses. J
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.
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-nyaanda bisa ambil kesimpulan
sendiri.misal question! itu simbol ? spt tampak di gambar.begitu juga text yg
lainnya.
Untuk koding yg lain akan dibuat sambil jalannantikan sample berikutnya J
Sukses untuk anda !!
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 :
Setelah database mysql anda create selanjutnya adalah membuat koneksi database dengan
cara.klik icon Database
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 J
Klik tombol Test Connection untuk memastikan connection successful..
Yap.sukses. !!
Klik tombol OK..
Selanjutnya untuk keluar dari modul profile ini klik tombol OK lagi
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)
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..
Klik table tblsiswa dan klik tombol Add All serta diikuti tombol OK, sampai tampil
modul spt ini
Note :
Allow Updatesnya sudah di centang
Table to Updatenya sudah benar
Updateable Columnsnya 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.
Klik datawindow dw_entri_siswa yg ada di system tree dan drag ke window.spt ini
Name control datawindow ini adalah dw_1 .nama ini bisa anda ganti sesuai
keinginan andasementara kita pakai dw_1 dulu..
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()
mztolo 2006 PB #4 datawindow
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!)
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)
Selanjutnya double click menu Entri &Siswa dan ketik koding untuk memanggil
window w_entri_siswa spt ini
10
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
11
POWERBUILDER #5
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
Paling atas adalah design layout dari datawindownyaspt 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
Selanjutnya coba click area kosong dari datawindow anda dan klik lagi text Tgllhr :
seperti 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.
Tekan dan tahan tombol control lagi serta click semua field yg ada.spt ini :
Selanjutnya rapikan dan rapatkan item2 atau field yg ada di situspt ini :
Serta rapatkan band detail anda ke atas.klik mouse dan geser ke atas spt ini :
Okclose painter editing datawindow ini dan jgn lupa save perubahan yg ada.
Anda juga bisa atur border/borderstyle datawindow control nya shg menjadi spt ini :
Close dan save perubahan tersebut..lalu jalankan aplikasi dan panggil window/sheet :
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 ?!
Selanjutnya klik kanan mouse dan pilih Add untuk menambah event baru.
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.
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.
=keydown(keyenter!)
=keydown(keydownarrow!)
=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
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
Coba jalankan aplikasi dan buka sheet entri data siswaspt 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 J
Akhir kata..Sukses untuk anda !!
POWERBUILDER #7
Berikut ini cara membuat function
Spt biasa dari kondisi workspace aplikasi anda klik tombol New..
=keydown(keyenter!)
=keydown(keydownarrow!)
=keydown(keyuparrow!)
li_column_number
li_column_count
=dw_1.getcolumn()
=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
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 fungsinyayap 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 J
Akhir kata..Sukses untuk anda !!
POWERBUILDER #8
Coba jalankan dan buka sheet entri data siswa anda 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 adakrn sudah tdk kita pakai lagi
4. Isi koding di menu sheet anda untuk menjalankan koding yg ada di sheet/window
Okmari kita lakukan satu per satu J
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 #8 menu sheet/window
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.
Setelah semua di isi dan di simpan/save jalankan aplikasi dan open sheet nya yap
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 semangatitu lah yg akan
membawa anda ke level selanjutnya dan level yg tak akan anda duga nantinya J
(jgn lupa perbanyak doa dan rasa syukur kepada Nya)
Dengan demikian sample pembuatan menu sheet sudah selesai J
Akhir kata..Sukses untuk anda !!
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
Untuk selanjutnya mari kita buat datawindow untuk masternya terlebih dahulu.
Klik tombol new
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.
Klik tombol NEXT dan klik FINISH sampai tampil 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).
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..
Rapikan shg menjadi spt ini.(kasih jarak sedikit di bagian bawah detail)
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!)
Jika ada datanya klik tombol retrieve.jika belum klik tombol new
Klik combobox nya dan pilih nama siswanya sesuai data yg telah di entrikan di modul
entri data siswa.
Sehingga hasilnya spt ini..
POWERBUILDER #9 bag. 2
Selanjutnya mari kita buat detail nya berdasar table tbldujian di bawah :
Hapus header dan kolom KODE serta NIS rapikan shg menjadi spt ini :
Untuk table yg memakai key auto_increment atau key yg tercreate otomatis maka
Identity Column: nya harus di isi sesuai kolom-nya.
Karena table tbldujian ini memakai KODE sbg key auto_increment-nya maka isi
Identity Column nya 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 ?
Yapsekenarionya 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 beginisetiap 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.
Ok..mari kita lanjutkan.buka sheet master detail (w_entri_ujian) yg telah anda buat
sebelumnya :
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
telunjukmmm nanti anda bisa melihatnya sendiri J
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 :
Note :
Anda jg bisa tambahkan horizontal scrollbar jika datawindow anda lebar.
Hal ini jg bisa anda terapkan untuk dropdown datawindow anda.
Untuk dropdown datawindow caranya klik dddw-nya dan centang VscrollBar nya.
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 #9c sheet/window master detail
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 ituapa yg terjadi ?
Tampak modul error dari odbc mysql-nya yg menyatakan adanya duplikasi entri J
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 :
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. J
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 !!
..yap data masih spt semula J
Benarkah ? Coba klik tombol Retrieve
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.
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.
Dan tentu saja hal ini bisa anda terapkan untuk datawindow yg lain juga.
mztolo 2006 PB #9c sheet/window master detail
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 J
Lain halnya jika anda klik tombol tambah/new/add spt ini :
POWERBUILDER #10
Coba jalankan aplikasi anda dan buka sheet entri data siswa nya spt ini :
Modul datawindow error ini masih standar dengan informasi sesuai informasi error yg
dikeluarkan oleh odbc mysql nya.
Bagaimana jika kita ingin membuat pesan error yg kita definisikan sendiri ?
Caranya adalah dengan membuat function untuk itu . J
(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 :
Tampak pesan error yg tampil adalah pesan error yg telah anda definisikan di fungsi
f_dberror tadi.
Sekarang anda coba add data baru laginis kosongin dan isi data yg lain spt ini :
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 J 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 tidakuntuk kolom2 yg lain silahkan
di coba sendiri.. J
Sekarang jika data kosong anda save akan keluar pesan spt ini :
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 J
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.
Selanjutnya tampak menu baru yg merupakan inherit dari mn_siswa 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.
Lakukan juga untuk sheet w_entri_ujian dan jangan lupa di save perubahan itu.
Sekarang coba jalankan aplikasi anda .
Perhatikan anda bisa membuka sheet lebih dari satu secara bersamaan ( MDI J )
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 aplikasinyaserta buka sheet serta buktikan J
POWERBUILDER #12
Berikut ini sample mencetak data (datawindow) siswa. J
Pertama anda buat datawindow sbg layout cetakkannya..
Mmmmm jadi cetak juga pake datawindow ? Betul sekali.
Baik interface entri ataupun layout cetakan datasemua 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 :
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 :
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 :
Selanjutnya membuat total dari semua tabungan siswa....caranya klik kolom tabungan
Jangan lupa format display-nya di setting juga agar pemisah ribuan-nya ada
Selanjutnya rapikan tampilan layout cetakan dan atur size kertasnya spt ini :
opensheet(w_lap_tab,w_utama,5,original!)
Anda bisa desain window dg lebih lebar agar tampilan bisa penuh..silahkan
Dan jika anda klik tombol Print maka data akan tercetak.. J
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 J
Ok cukup dulu ya
Akhir kata..Sukses untuk anda !!
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 J
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 :
Menjadi spt ini..maksudnya apa agar data siswa tdk langsung di tampilkan/preview :
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.
Selanjutnya mari kita buat range untuk mencetak kode nis sekian s/d sekian.
Tambahkan 2 buah SingleLineEdit kontrol spt ini :
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 tersebutdan retrieve tentunya.
Jika setfilter diisi variable yg kosong ( dwfilter= ) maka filter tdk akan berlaku atau
berarti data akan ditampilkan semua.
Simpan perubahan dan coba tampilkanspt ini :
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
Perhatikan perintah ini jg berlaku jika kondisi datawindow sedang preview
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')
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
Oksekarang anda bisa coba cetak dg mencoba-coba kriteria2 di atas J
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
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 :
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 tersendirijadi
tdk menggabung spt itu.
Memang langkah2 yg saya berikan berurutan dan satu demi satu agar rekan2 lebih mudah
memahami dan mengerti J
Dan 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
Klik dan tahan pakai mouse kolom nis dan drag ke tempat sebelah kanan spt ini :
Ganti tulisan Tbldujian Report dengan DAFTAR UJIAN SISWA spt ini :
Untuk membuat baris ke dualetakkan pointer di belakang kata SISWA dan tekan
Ctrl+Enter.dan tulis SMA 1 SUNTER 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 ? Okmari kita tambahkan nama pengawasnya..
Dan pilih/klik Select Tables.. sampai keluar modul untuk memilih table yg lain spt ini :
Double klik tanda = spt tampak di gambar atas.sampai tampil 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 :
Tampil kolom2 dari table tblsiswa pilih kolom nama dan hasilnya spt ini :
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-nyashg hasilnya spt ini :
spt ini :
Selanjuntya coba tambahkan line di atas dan bawah dari total per groupnya spt ini :
10
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
11
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 :
opensheet(w_lap_ujian,w_utama,5,original!)
mztolo 2006 PB #12(d) properti lain di cetak datawindow
12
13
14
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.tentunyalalu 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 pakaiwindow 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 ?
Mmmmmsheet 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 perhatikanjika 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
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.
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'
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 :
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 :
Buktikan.daninilah hasilnya :
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
Caranya ?
Close dulu modul Export/Import Template XML tersebut.
Terus klik menu VIEW -> LAYOUT -> MANAGE
Selanjutnya klik icon nomor 2 dari kiri. New Layout sampai tampil spt ini
Mmmmm..bedakan ?! J
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..functioncustom 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 laporannyaanda cukup update di library laporan.pbl nya
Demikianlah.PBlalu bagaimana cara menambah library baru ?
Klik kanan di target dan pilih properties spt ini
Nah pada saat membuat sheet atau modul yg lain..jgn lupa simpan di library
transaksi.pbl tersebut.
10
11
12
Tampilan default nya spt tampak di atas, anda bisa tentukan file2 runtime apa saja yg
mau anda pakai sesuai aplikasi yg anda develop.
Klik Next
Perhatikan Folder: .anda ganti dg directory tempat aplikasi anda di install/di copy
Misal spt ini :
Anda bisa ketik langsung atau dg tombol Browse untuk mencari folder/directory yg
anda inginkan.Selanjutnya klik tombol Next
Klik tombol OK
Klik Next
Klik Next
Klik Next
Klik Next
Klik Next
Klik Next
mztolo 2006 PFC wizard hal. 1-6
Klik Next
Anda ganti judul window sheetnya menjadi spt di atas dan klik Next
Klik Next
mztolo 2006 PFC wizard hal. 1-6
Anda pilih type koneksi untuk aplikasi anda.sesuai profile koneksi database yg anda
pernah buat. Selanjutnya klik Next
Pilih profile koneksi yg tersedia spt tampak di atas dan klik tombol Next
Pilih type informasi koneksinyaapakah bersumber dari ini file, registry setting atau
script ..pilih yg ini file dulu dan klik Next
Tampilan di atas akan beda jika anda memilih yg lain..selanjutnya Klik Next
Klik Next
Klik Next
Klik Next
Klik Next
Klik Next
Anda bisa langsung klik Next atau anda ganti menjadi spt ini
Klik Next
10
Yapberjalan dg sukses. J
11
Anda bisa explore isi kodingnya dan bagi anda yg baru mulai belajar sebaiknya membaca
sample2 pemula yg ada di www.mztolo.com
Sehingga anda bisa menambahkan datawindow dsb nya di aplikasi itu.
Selain itu anda juga bisa explore sample2 yg di sediakan PowerBuilder di :
C:\Program Files\Sybase\PowerBuilder 10.0\Code Examples\Example App
Sample yg komplit dan mudah untuk di pelajari.
Okdengan demikian proses pembuatan aplikasi dg PFC wizard selesai J
Sukses untuk anda !!
12
Dalam database MySQL type data untuk image kita bisa pake type data BLOB (binary
large object).
Dalam database MsSQL type data yg dipakai adalah IMAGE
Dalam database Sybase SQL Anywhere type data yg dipakai adalah LONG BINARY
Mmmm dari ke 3 nya mana yg paling OK ?
Lho kok anda tanya spt itu ..hehehehehe J
Sejauh yg saya coba Sybase SQL Anywhere yg paling cocok dg PB
Kenapa ? Apakah krn PB juga product dari Sybase ? Mungkin hehehehe J
Mungkin kesimpulan saya saat ini masih premature tetapi nanti anda akan tahu seberapa
jauh perbedaannya..dan jika saya nanti menemukan hal baru di MySQL atau MsSQL
tentunya akan saya update sample ini J
Ok mari kita kembali ke jalur semula.
Asumsi saya anda sudah bisa membuat aplikasi dg PB
Bisa membuat dan konek ke database MySQL..
Anda perhatikan.browse table gambar anda spt ini.
connect ;
open(w_utama)
Selanjuntnya buka/create sheet .spt ini :
if SQLCA.SQLCode = -1 then
MessageBox("SQL error",SQLCA.SQLErrText,Information!)
return -1
end if
End If
sqlca.autocommit = TRUE
//update the row just inserted adding the blob ole control now
updateblob gambar set image = :lb_object
where kode =:sle_1.text ;
if SQLCA.SQLCode = -1 then
MessageBox("SQL error",SQLCA.SQLErrText,Information!)
return -1
end if
commit ;
messagebox(':)','Sukses !!')
Note :
Perhatikan yg di cetak tebalitu koding yg penting atau inti dari proses tersebut.
Sekenario yg berlaku adalah.
1. Lakukan proses INSERT data terlebih dahulu dg data kosong pada image-nya
2. Autocommit harus di setting ke TRUE
3. Dan lakukan UPDATE image sesuai data kode waktu insert
Simpan dan coba RUN aplikasi anda
Klik tombol Pick Image .dan pilih salah satu image/bmp anda.misal spt ini :
10
Klik tombol OK dan atur lebar control blob OLE seperlunya.spt ini :
11
Coba anda double click tepat di kotak image tersebut..untuk menjalankan program
Paint (window)aha !
12
Coba table gambar anda .untuk kolom image di ubah dari type data blob menjadi
LONGBLOB
Dan coba lagi untuk image dg ukuran 99 KB tersebut.
13
Image tdk bisa tampil di OLE control tetapi jika anda savebisa !!
Artinya apa ? Image terlalu besar dan tidak mau ditampilkan di OLE.
Coba double-click untuk mengaktifkannya..dan ..
Yapimage hanya tersimpan sebagianatau type data image tdk bisa menampungnya..
Anda masih ingattype BLOB MySQL masih bisa menampung image ini..apalagi
type data yg LONGBLOB
Dengan demikian anda semakin tahuukuran max seberapa yg bisa masuk di MsSQL
Mungkin anda akan bertanya ada image yg mau ditampilkan dg Display As Picture
dan ada yg tdk mau
Perhatikan untuk keterangan yg bisa anda tampilkan secara picture adalah keterangan yg
berupa nama dan type file image/bmp yg anda simpan.
Spt gambar inijika anda klik di datawindow-nya akan tampak nama filenya
Spt ini
POWERBUILDER 11
Powerbuilder 11 akan hadir
Sebuah harapan sekaligus keprihatinankenapa ?
Powerbuilder 11 hadir dg fitur2 baruantara lain :
- adanya .net wizards yg memudahkan programmer membuat aplikasi web base.
- juga adanya fitur yg mendukung MsSQL 2005.
- selain itu di versi terbaru ini ada penambahan tipe datawindow treeview.
- dan penambahan2 yg lain..
Lalu apa keprihatinannya..tentu saja harganya yg selangit.
Untuk versi Enterprise bisa mencapai hampir 30 jutammm seharga luas tanah 150 m2
yg ada di daerah Depok II Timur J
Beberapa saat yg lalu saya sempat chatting dg salah satu sales distributor PB 11 dan saya
menyampaikan unek2 yg ada.
Bagaimana jika bundle PB 11 Enterprise atau PB versi berikutnya..agar dibuat lebih
fleksibleartinya apa ?
Misal tdk semua pembeli PB kan perlu InfoMaker kenapa ini tdk dijual terpisah..
Database Sybase Anywhere atau fitur yg lain yg mungkin kita tdk pakaikenapa tdk
dijual terpisah juga..atau kita bisa memilih.
Dengan demikian diharapkan PB akan lebih murah dan terjangkau
Kan ada PB versi dekstop yg harganya dibawah 4 jutaan.mmm setara program lain lah
semacam vfp9.
Memang benar..hanya saja apakah versi ini sudah mendukung .net ?
Ok lah.mari kita lupakan sejenak harga PB yg tinggi itu.
Kita harus bersyukur krn diberi kesempatan mencoba versi beta PB 11
Kalo kita lihat tdk ada perubahan dlm layout tampilan depannya.
Mungkin yg anda bisa rasakan pertama kali buka atau setelah buka workspace adalah
icon2 yg ada terlihat baru dan tambah smooth.
Spt tampak berikut ini
Pada dasarnya datawindow treeview ini spt datawindow grouphanya saja bedanya
datawindow treeview jika groupnya di klik maka akan tampil data detailnya
Untuk web servernya sendiri pada saat deploy maka PB akan otomatis men-setting-kan
ke dalam IIS yg ada..anda pastikan IIS sudah ter-install di pc anda. J
Di direktory web servernya akan tercreate beberapa file dg extension .aspx dan untuk
default tampilannya bernama default.aspx
mztolo 2006 powerbuilder 11
Ok.sampai disini dulu.ini hanya sbg gambaran awalberikutnya kita coba untuk
membuat sample2 spt apa yg telah di tampilkan di atas ..
Sukses untuk anda !!
POWERBUILDER 11
Mmmmm ok mari kita coba membuat workspace di PB 11
Langkahnya sama dg latihan yg pernah anda buat sebelumnya
Jalankan program PB anda dan klik tombol new
Selanjutnya dari tab Workspace klik icon workspace yg ada..
Ketik nama workspace nya misal latih1 dan klik tombol Save
Note :
Perhatikan model atau bentuk2 icon di PB 11 ini tampak beda dg versi sebelumnya J
Note :
pembeli paling atas adalah targetnya.
pembeli.pbl adalah library-nya
pembeli yg paling bawah adalah nama aplikasinya
Ok selanjutnya membuat koneksi ke databasenya..klik icon database
Dan akan tampil..spt berikut ini
Untuk latihan kali ini memakai profile sintak koneksi yg udeh ada dulu aja J
Yaitu EAS Demo DB V110 ini biasanya udeh otomatis tercipta kala kita install PB 11
beta ini
Selanjutnya klik kanan dan pilih properti..
Klik tab Preview dan klik tombol Copy untuk meng-copy sintak profile stringnya.
Selanjutnya klik tombol OK dan anda close juga painter profile databasenya..
POWERBUILDER 11
10
Selanjutnya tambahkan koding spt ini di event open aplikasi pembeli anda.
11
Klik tombol new lagidan pilih tab Project pilih .NET web Forms Application
Wizard dan klik tombol OK
12
Next lagi..
Biarkan nama web applicationnya dg pembeli .ini untuk sample duluklik Next
13
Jika anda memakai icon atau image2 yg lain di aplikasi inisertakan jgbisa dg
menyertakan nama folder atau nama file image-nya
Klik Next..
Jika anda memakai file DLL juga anda bisa sertakan di modul ini
Klik Next..
14
Perhatikan aplikasi anda ini langsung akan di setting ke IIS yg ada..(pastikan juga IIS
sudah terinstall di pc anda)
Klik tombol Next
15
POWERBUILDER 11
16
17
Selanjutnya jika anda cek di pc andatampak sudah tercipta file .net nya
18
19
Selanjutnya isi koneksi di open event target aplikasi anda spt ini :
f_konekke(employees)
open(w_backrest)
Di close event target aplikasi itu :
Disconnect ;
Perhatikan :
Guzrud adalah contoh nama server-nyasesuaikan dg nama server anda.
Employees adalah nama databasenyasesuaikan juga jgn lupa.
Simpan perubahan di atas dan selanjutnya modifikasi window w_backrest anda
menjadi spt ini :
IF li_rc = 1 Then
sle_1.Text = ls_path
End If
else
If GetFileOpenName("Pilih File", ls_Path, ls_File, "bck", "All Files (*.*),*.*" ) = 1 Then
if i_flag = 1 then
string ls_drop
ls_drop ="exec sp_dropdevice bckdataku ;"
execute immediate :ls_drop ;
if SQLCA.sqlcode = -1 then
MessageBox("Drop Device Object Error !", SQLCA.sqlerrtext)
i_flag = 1
else
i_flag = 0
end if
end if
if i_flag = 0 then
string ls_create
ls_create ="exec sp_addumpdevice 'disk','bckdataku', '"+ trim(sle_1.text) + "' ;"
execute immediate :ls_create ;
if SQLCA.sqlcode = -1 then
MessageBox("Create Device Object Error !", SQLCA.sqlerrtext)
else
if rb_1.checked then
string ls_back
ls_back="backup database employees to bckdataku ;"
execute immediate :ls_back ;
if SQLCA.sqlcode = -1 then
MessageBox("Backup Database Error !", SQLCA.sqlerrtext)
else
MessageBox(":)","BackUp Sukses !!")
end if
sqlca.autocommit=false
else
// putus koneksi dari employees
disconnect ;
// koneksi ke master database
f_konekke("master")
string ls_rest
ls_rest="restore database employees from bckdataku ;"
execute immediate :ls_rest ;
if SQLCA.sqlcode = -1 then
MessageBox("Restore Database Error !", SQLCA.sqlerrtext)
else
MessageBox(":)","Restore Sukses !!")
end if
// putus koneksi dari master
disconnect ;
// kembalikan ke koneksi employees
f_konekke("employees")
end if
end if
end if
Tambahan :
Untuk menjalankan sebuah perintah SQL di PB kita bisa melakukan dg perintah execute
immediate diikuti command/perintah SQL nya. Perintah ini akan jalan jika autocommit = true
Maka jika anda perhatikan di awal prosedur ini autocommit di set menjadi true.
Kalo dari awal sudah kita set true gimana ? Ya nggak perlu lagi to mas J
Selanjutnya cek apakah device object telah ada ? exec sp_helpdevice bckdataku ;
Jika sudah ada maka hapus exec sp_dropdevice bckdataku ;
Jika belum ada maka create exec sp_addumpdevice 'disk','bckdataku', '"+ trim(sle_1.text) + "' ;
Perhatikan pilihan ujicoba ini yg pertama adalah Backup, kemudian klik tombol
sampai tampak spt ini :
Ketik nama file backup-nya bckemployees dan klik tombol Save maka tampilan
layar akan spt ini :
Dan jika anda lihat di direktory tempat backup tadi maka tampak ada file
bckemployees.bck spt tampak berikut ini :
Beri namamisal world dan klik tombol SAVE, tampak di workspace anda spt ini :
Selanjutnya klik tombol new lagi dan pilih tab target.pilih Application dan klik
tombol OK
Ketik world di application name-nya..library dan target tdk usah anda isi krn itu
otomatis tercipta jika anda klik tepat di entriannya.
Selanjutnya klik tombol Finish dan hasilnya spt ini
Selanjutnya di event open window ketik open(w_world) spt tampak di gambar berikut
ini :
Dan deploy.
Dan EXE tersebut jika anda jalankan maka hasilnya akan sama dg tampilan di atas..
Tapi kan ini masih di PC bagaimana setup ke PDA nya ?
Sabar.nantikan sample berikutnya J
Ok..sampai disini dulu.smoga ini bermanfaat
Sukses untuk anda !!
10
ActiveSync ini akan berfungsi untuk sinkronisasi data di pda dan pc anda, sehingga data
di kedua alat ini akan sama.
Anda perhatikan di gambar atasjadwal di kalendar anda, data di kontak anda maupun
jadwal kerja anda akan di sinkronisasikan.
Begitu juga jika anda ingin menambah aplikasi atau program di pda anda.juga lewat
ini.
Lalu caranya ? Setelah kabel terhubung install saja program tersebut di pc anda jika
itu aplikasi untuk pda maka otomatis akan ada pertanyaan apakah akan diinstall jg di pda.
Begitu juga PocketPowerBuilder ini .
Waktu anda install PPB ini pertama kalimaka di pda juga akan terinstall aplikasi PPB
ini begitu juga database Sybase SQL Anywhere-nya.
Anda masih ingat di sample sebelumnya, setting project adalah unutk desktop saja,
maka untuk deploy ke pda anda coba anda setting spt tampak di atas.
Khusus anda perhatikan di Target Directory tampak di sana saya tambah 1st
Ini adalah direktori tempat aplikasi PPB kita akan diinstall-kan.
Direktori \Program Files di pda anda biasanya sudah ada. Untuk 1st jika belum ada
maka hrs anda buat dulu di pda anda, di folder/direktori \Program Files
Ok.lalu close dan simpan perubahan itu..
Lakukan Full Build ..dan lakukan Deploy Workspace, tampak di layar output spt ini
Waktu deploy ini akan tercipta file2 spt tampak dibawah ini
Dan dg deploy ini juga file aplikasi anda akan langsung tercopy/terinstall di pda anda
Hehehehe selamat anda telah sukses membuat sebuah aplikasi untuk PDA !! J
Mudah bukan ?!
Ok..sampai disini dulu.smoga ini bermanfaat
Dan nantikan sample berikutnya
Sukses untuk anda !!