PB對DW資料視窗操作必學

2021-06-20 20:20:04 字數 3906 閱讀 8422

/*******datawindow object 的幾個有用的屬性*********

/*dw_1.object.datawindow.column.count屬性記錄的是 datawindow 中的列數。 

datawindow中的所有物件都有 type 屬性,通過訪問他們的 type 屬性可以得知他們是 column、compute、text等等物件。

動態改變 datawindow 某一列的 edit style : 

將某一列的原來的 edit 風格變成dropdownlistbox  

dw_1.modify("column1.ddlb.useasborder=yes") 

datawindow 控制項中的 dwobject引數想必這一定是乙個非常熱的話題!

在 datawindow 控制項中有許多事件的引數都是 dwo。dwo 全稱datawindowobject 。它指的是 datawindow 中的乙個物件。例如乙個計算列、text 框、picture box等等  

物件,或者是 datawindow 本身。通過訪問 dwo我們就可以知道當前使用者觸 

發的是哪個物件。例如:  

dwo.name = "datawindow" //說明此時 dwo 代表 datawindowobject 本身。  

dwo.band = "header"  

//說明該 dwo 位於 header 區。  

關於 dwo 的其他屬性應該如何訪問,與訪問 datawindow屬性一樣,具體方 

法到本站找!

datawindow 內部函式 

datawindow 有許多內部函式(只能在 datawindow 畫筆中使用),它們都不能從powerscript中直接呼叫。不過我們可以利用 datawindow control 的函式 describe 與datawindow 的 evalute 結合起來執行。例如 datawindow 的內部函式 lookupdisplay (column ) 則是獲取某一列上的顯示值的函式。它與 powerscript 中的 getitem 函式不一樣,getitem函式獲取的是資料值。

例:dw_1.describe ("evaluate('lookupdisplay(produceid)', 1)" ) 

獲取 productid 列的第一行記錄當前的顯示值。 

datawindow中都有那些內部函式,以及各個內部函式的使用與用意的資料我們目前都沒有找到。我們也只是一點一點的積累,如果有那位朋友知道的話,可千萬要拿出來與大家分享哦!!!

browse 的使用  

browse 是 pb 開發環境中的乙個畫筆,與library、database、datawindow 一樣。但是卻很少有人提到過它。browse其實是乙個非常有用的工具。有人抱怨知道如何更改 datawindow object 屬性,但是又不知道究竟有哪些可以修改。使用browse 就簡單了。browse 中的 tab 控制項上的 datawindow 頁列出了當前應用程式所有的的 datawindowobject 。同時視窗的右邊列出了 datawindow object 具備的所有屬性。右擊乙個屬性,選擇copy 。此時 pb就將訪問該屬性的指令碼格式 copy 到貼上板上去了。你只需在你的源**中 paste 即可。browse還有許多其他用途。browse 可以以樹狀的形式將你應用程式中的所有的 userobject 或著 window 之間的繼承關係全部顯示出來。對於pfc 的初學者將是受益非淺,它可以幫你把 pfc 所有物件之間的繼承關係清清楚楚的現實出來。browse 中的ole頁中也非常有用,它將你機器中的所有ole物件、activex物件、com物件都清清楚楚的列出來。如果你想知道你的機器中有哪些元件可以使用用它可以輕鬆找到。關於browse的具體使用說明本人也從沒見過,我想可能是大家都覺得沒什麼可講的吧。其實想想也是,所有操作只需點右健,當然沒什麼可以多說了!順便問一句pb 是不是很強大?

pb 的怪現象  

「如果你一大早來到 pb 面前,發現程式無緣無故出了 bug。但是又死活想不出毛病在哪(昨晚還是好的,今早就壞了)。立即將你的應用程式的所有物件都重新生成一邊(在 library 畫筆中使用regenerate),最好是按繼承順序 regenerate 一邊。說不定 bug 就消失了」。 

不要覺得這條規則好簡單,說不定這條歸則就可以幫你節省大量的時間。你們有沒有想過powersoft 公司為什麼要在 pb 中提供乙個 regenerate功能。我覺得它就是為了應付這種毛病。因為,除了這種情況下,我再也想不出使用 regenerate 的理由。

pb 開發 com 存在的問題 

安裝了 pb gernerate 的朋友可以使用 pb 開發 com元件,但是目前還只能開發程序中 com 。pb 開發 com 有幾個問題需要注意一下。 

1. 使用 pb 的 project 畫筆編譯好了 com 元件後還不能使用,還要將對應的pbl 編譯成 pbd 或則 dll,具體是 pbd 還是 dll 要看在編譯 com 時如何設定的。一般預設情況是 pbd。編譯好了 pbd 或 dll後,才能正常使用 com 元件。當然使用前 com元件還應註冊。如果你要發行你的 com 元件,還必須要pb 的 dddk 中的 dll,就發行應用程式一樣,還需要 pb 的 dll 支援。 

2. 不支援函式覆蓋(overwrite)  

pb 製作 com 時是將不可視使用者自定義物件(不妨命名為 n_cst_o b j e ct)編譯成 com 元件的介面。它將 n_cst_o b j e c t 所有共有屬性、函式、事件都編譯成 com元件的乙個結構。但是如果這個n_cst_o b j e c t 還有乙個父類,並且 n_cst_o b j e ct還覆蓋了父類中的函式,那麼此時編譯 com 操作將無法通過。原因是 pb 在製作 com 元件時會將 n_cst_o b j e ct 的父類中的所有屬性、函式、事件也編譯進去。所以,此時 pb發現兩個一模一樣的函式,編譯也自然通不過了。解決辦法很簡單,將原來需要覆蓋的函式申明成保護型別。這樣函式就可以最隨意覆蓋了。但是申明成保護型別後外界也就無法訪問該函式了。那麼我們再在n_cst_o b j e ct的父類中申明乙個共有型別的函式,該函式只是簡簡單單的呼叫原來南各函式。至此一切問題都解決,函式可以覆蓋了。下面是關於這個問題的偽**。 

問題**:  

class n_cst_parent  

int b()  

};  

class n_cst_o b j e c t : n_cst_parent 

}  

此時將 n_cst_o b j e c t 編譯成 com元件的介面,那麼這個介面具備的函式將會是 

int a()  

//來自n_cst_parent  

int b()  

//來自n_cst_parent  

int a()  

//來自 n_cst_o b j e c t  

顯然這種 com介面不可能出現,因此編譯失敗了。將上面的問題**改為如下形式:  

class n_cst_parent 

public: 

int a()  

int b ()  

}  

class n_cst_o b j e c t :n_cst_parent  

}  

此時再將 n_cst_o b j e c t 編譯成 com的介面,那麼這個介面具備的函式將會是  

int a()  

//來自n_cst_parent  

int b()  

//來自n_cst_parent  

而且 int a() 函式呼叫的將是 n_cst_o b j e c t中的 a1() 。因為 a1() 被申明成虛函式。  

所有問題全部解決!!!  

以上**只是偽**,pb 中的物件繼承根本不是這樣。還有在 pb中函式已經申明就已經是虛函式。直接具備多型特性。 

PB資料視窗

資料視窗小結 資料視窗進行刪除資料時 int zgxx id integer sle 3.text prepare sqlsa from delete from zgxx where id execute sqlsa using zg id2 messagebox 提示 刪除完畢 應用場景 主要注意...

PB資料視窗分頁

第一步 增加乙個計算列,此計算列必須放在detail段,expression中輸入 ceiling getrow 500 這裡500還可以用全域性函式取代,這樣可以允許使用者任意設定每頁多少行。第二步 定義分組,選擇選單rows create group.按計算列欄位分組,並一定將check box...

PB動態建立DW(包括外部資料來源)

pb提供了關於如何動態建立datawindow的相關函式 transaction.syntaxfromsql sqlselect,presentation,err dwcontrol.create string syntax 例子1 動態建立有sql的dw 說明 這個比較常用的方法,首先利用sql得...