February 2012
MTWTFSS
«Mar  
 12345
6789101112
13141516171819
20212223242526
272829 

Tips:Fungsi Transfer Antar Tabel Power Builder

LogoSybaseAcapkali 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.

f_transfer_data

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_jcol

ds_source.dataobject = “d_gaji”
ds_source.settransobject(sqlca)
ds_source.retrieve()

li_jrow = ds_source.rowcount()
ls_jcol = ds_source.Object.DataWindow.Column.Count

for 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 if

next
ds_target.accepttext()
i_ret = 1
i_ret = f_dw_update(ds_target,”",0)
if i_ret = 0 then
exit
end if

next
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:

Leave a Reply

  

  

  

You can use these HTML tags

<a href=""title=""><abbr title=""><acronym title=""><b><blockquote cite=""><cite><code><del datetime=""><em><i><q cite=""><strike><strong>