PB中如何判斷資料視窗發生的改變

2021-06-09 18:29:29 字數 2866 閱讀 8521

問題:

乙個資料視窗的資料發生了改變,但是該如何確定是哪些行的哪些列發生了改變?

方法:(注:本方法僅限於對資料 修改的判斷,不包含新增或刪除的資料)

step 1,在資料視窗中加入乙個計算列 if(isrowmodified(),'y','n'),命名為 ismodified , 用來判斷對應的資料行是否有改變。

step 2, 編寫檢驗**

if dw_ticket.modifiedcount() = 0 then return

string ls_objects, ls_obj, ls_label, ls_coltype, ls_colvalue1, ls_colvalue2

long ll_pos, ll_getrow, ll_rows

string ls_modified_col

dw_ticket.accepttext()

ll_rows = dw_ticket.rowcount()

for ll_getrow = 1 to ll_rows

if dw_ticket.getitemstring(ll_getrow,'ismodified') = 'n' then continue

ls_modified_col = ''

ls_objects = dw_ticket.describe("datawindow.objects") + "~t"

do ll_pos = pos(ls_objects, "~t")

ls_obj = left(ls_objects,ll_pos - 1)

if (dw_ticket.describe(ls_obj+ ".type")) <> "column" then

ls_objects = right(ls_objects,len(ls_objects) - ll_pos)

continue

end if

ls_coltype = dw_ticket.describe(ls_obj + ".coltype")

ls_label = dw_ticket.describe(ls_obj + "_t.text")

if ll_getrow > 0 then

if pos(ls_coltype, 'char') > 0 then

ls_colvalue1 = dw_ticket.getitemstring(ll_getrow, ls_obj, primary!, true)

ls_colvalue2 = dw_ticket.getitemstring(ll_getrow, ls_obj, primary!, false)

elseif pos(ls_coltype, 'datetime') > 0 then

ls_colvalue1 = string(dw_ticket.getitemdatetime(ll_getrow, ls_obj, primary!, true))

ls_colvalue2 = string(dw_ticket.getitemdatetime(ll_getrow, ls_obj, primary!, false))

elseif pos(ls_coltype, 'timestamp') > 0 then

ls_colvalue1 = dw_ticket.getitemstring(ll_getrow, ls_obj, primary!, true)

ls_colvalue2 = dw_ticket.getitemstring(ll_getrow, ls_obj, primary!, false)

elseif pos(ls_coltype, 'long') > 0 then

ls_colvalue1 = string(dw_ticket.getitemnumber(ll_getrow, ls_obj, primary!, true))

ls_colvalue2 = string(dw_ticket.getitemnumber(ll_getrow, ls_obj, primary!, false))

elseif (pos(ls_coltype, 'number') > 0 or pos(ls_coltype, 'decimal') > 0) then

ls_colvalue1 = string(dw_ticket.getitemdecimal(ll_getrow, ls_obj, primary!, true))

ls_colvalue2 = string(dw_ticket.getitemdecimal(ll_getrow, ls_obj, primary!, false))

elseif pos(ls_coltype, 'real') > 0 then

ls_colvalue1 = string(dw_ticket.getitemdecimal(ll_getrow, ls_obj, primary!, true))

ls_colvalue2 = string(dw_ticket.getitemdecimal(ll_getrow, ls_obj, primary!, false))

end if

if ls_colvalue1 <> ls_colvalue2 then

ls_modified_col = ls_modified_col + ls_obj + "~t"

end if

end if

ls_objects = right(ls_objects,len(ls_objects) - ll_pos)

loop while (pos(ls_objects, "~t") > 0)

messagebox("info","the row: " + string(ll_getrow) + " is modified." + "~r~nmodified columns: " + ls_modified_col)

next

PB中的資料視窗自動重新整理技術

在我們編寫諸如像庫存,銷售等應用系統時,總希望程式能動態的自動重新整理庫存量或銷售量,比如說每隔1秒重新整理一次。要實現這樣的功能只要我們利用資料視窗的時間間隔屬性 timer interval 當該值為0時資料視窗不進行重新整理,如果要使資料視窗以每一秒鐘的頻率重新整理的話,只要將該值設為1000...

PB判斷資料視窗資料是否更改及原始值與當前值

dwcontrol.getitemstatus row,column,primary 可以獲取該緩衝區內指定單元的狀態,當引數column為0時,表示讀取整個列的修改狀態。有以下狀態。notmodified 指定單元的資料和原始資料相同,沒有修改過。datamodified 指定單元的資料和原始資料...

PB 如何建立乙個動態的資料視窗物件

問 我想在程式執行中根據需要動態地建立乙個資料視窗物件,該怎麼做呢?答 方法有四 第一種方法 在程式中用describe 函式得到某個已經存在的資料視窗物件的源 如 string str dwsyntax,str lag 獲得資料視窗1的語法 str dwsyntax dw 1.object.dat...