Tips: Fungsi Transfer Antar Tabel Power Builder
April 29th, 2008
Acapkali kita perlu meng-copy data dari suatu table ke table yang lain baik dalam database yang sama maupun ke database yang terpisah. Dalam power builder tersedia database object yaitu ‘data pipeline’ yang dapat digunakan untuk melakukan hal tersebut.Kali ini akan disajikan sebuah fungsi yang dapat digunakan untuk hal tersebut diatas tetapi dengan metode yang berbeda, tidak menggunakan ‘data pipeline’ melainkan menggunakan manipulasi data melalui object datawindow. Biasanya kita akan menggunakan fungsi built-in getitemstring untuk mengambil data dari datawindow sumber dan setitem untuk mengisikan data pada datawindow tujuan:
Contoh:
string s_nim
s_nim = dw_source.getitemstring(dw_source.getrow(),”nim”)
dw_target.setitem(ll_newrow,”nim”,s_nim)
Dari contoh diatas terlihat bahwa kita harus tahu tipe data dari kolom pada datawindow sumber dan tipe data dari kolom pada datawindow target. Bagaimana kalau jumlah kolomnya banyak? Atau banyak data yang harus ditransfer dari banyak tabel? Berikut ini ada solusi yang fkelsibel untuk banyak tabel dan banyak tipe data.
Fungsi berikut menggunakan 2 (dua) parameter bertipe datawindow ds_source dan ds_target.
Powerscript lengkapnya seperti berikut ini:
integer i_ret
string sdataobject
string ls_colname
string ls_coltype
long ll_newrow
long li_jrow,i,j
string ls_jcolds_source.dataobject = “d_gaji”
ds_source.settransobject(sqlca)
ds_source.retrieve()li_jrow = ds_source.rowcount()
ls_jcol = ds_source.Object.DataWindow.Column.Countfor i=1 to li_jrow
ds_source.setrow(i)
ds_target.dataobject = “d_gaji”
ds_target.settransobject(sqlca)
ll_newrow = ds_target.insertrow(0)
for j=1 to integer(ls_jcol)ds_source.setcolumn(j)
ls_colname = ds_source.GetColumnName()
ls_coltype = ds_source.Describe(ls_colname+”.ColType”)
if left(ls_coltype,5) = ‘char(’ then
ds_target.setitem(ll_newrow,j,ds_source.getitemstring(i,j))
else
if left(ls_coltype,5) = ‘date’ then
ds_target.setitem(ll_newrow,j,ds_source.getitemdate(i,j))
else
if left(ls_coltype,5) = ‘datet’ then
ds_target.setitem(ll_newrow,j,ds_source.getitemdatetime(i,j))
else
if left(ls_coltype,5) = ‘time’ or &
left(ls_coltype,5) = ‘times’ then
ds_target.setitem(ll_newrow,j,ds_source.getitemtime(i,j))
else
if left(ls_coltype,5) = ‘decim’ then
ds_target.setitem(ll_newrow,j,ds_source.getitemdecimal(i,j))
else
if left(ls_coltype,5) = ‘int’ or &
left(ls_coltype,5) = ‘long’ or &
ls_coltype = ‘long’ or &
left(ls_coltype,5) = ‘numbe’ or &
left(ls_coltype,5) = ‘real’ or &
left(ls_coltype,5) = ‘ulong’ then
ds_target.setitem(ll_newrow,j,ds_source.getitemnumber(i,j))
end if
end if
end if
end if
end if
end ifnext
ds_target.accepttext()
i_ret = 1
i_ret = f_dw_update(ds_target,”",0)
if i_ret = 0 then
exit
end ifnext
return i_ret
Dari script diatas dapat dilihat bahwa pengambilan nama kolom, tipe kolom dilakukan secara fleksibel yaitu dengan menggunakan nomor kolom. Proses transfer dilakukan per-row dan masing-masing row dilakukan per-kolom. ls_jcol ls_colname = ds_source.GetColumnName() berisi jumlah kolom pada tabel. untuk mengambil nama kolom dan ls_coltype = ds_source.Describe(ls_colname+”.ColType”) untuk mengambil tipe data kolom tersebut dengan telebih dahulu ditentukan kolom mana yang mau diambil info tersebut yaitu dengan ds_source.setcolumn(j).
File library / PBL dapat anda download disini. Selamat mencoba.
Inlinks :







