問題:
乙個資料視窗的資料發生了改變,但是該如何確定是哪些行的哪些列發生了改變?
方法:(注:本方法僅限於對資料 修改的判斷,不包含新增或刪除的資料)
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...