PB資料視窗難得一見的技巧

秋高工作室發表於2016-03-22
PB基礎知識
1、Datawindow object(資料視窗庫物件) 

  資料來源決定了資料視窗物件獲取資料的方式。PowerBuild支援五種資料來源:
A、 快速選擇(Quik Select)能夠建立簡單的SQL Select語句,主要用於從一個表或由外來鍵連線的多個表中選擇資料列,不能生成Sql計算列,
B、 SQL選擇(SQL Selcet)以視覺化的方式建立SQL Select語句,SQL Select語句的所有細節均能通過該介面定義,從一個或多個表中建立複雜的SQL Select語句,能生成各種的sql 計算列。
C、 查詢(Qurey) 資料來源將以前建立的Qurey物件作為資料視窗的資料來源。
D、 外部(External)資料來源用於讓資料視窗訪問資料庫以外的資料,直接定義Sql計算列,一般用於接收使用者輸入(可能使用子資料視窗,選擇來自資料庫的資料)或顯示計算結果。
E、 儲存過程(Stored Procedure)則直接利用儲存在資料庫中的儲存過程作為資料來源,此資料來源只有當前連線的資料庫支援儲存過程時才有效,否則系統將自動隱藏此選項。
資料視窗物件有十一種顯示風格為:列表(Tabular)、表格(Grid)、自由格式(FreeForm)、標籤(Lable)、分欄(N-Up)、分組(Group)、交叉列表(Crosstab)、統計圖(Graph)、OLE2.0超文字(RichText)、複合(Composite)。
改變資料視窗更新特性的方法
開啟一資料視窗,從Rows選單中選擇的"Update Properties…"系統顯示"Specify Update Prorerties"對話方塊:
A、 如果不允許資料視窗更新資料庫,那麼就不要選中核取方塊"Allow Updates",單擊"OK"按鈕關閉對話方塊。如果要禁止使用者修改資料視窗的某列,那麼在資料視窗畫筆中將此列的TabOrder值設為0。
B、 如果允許資料視窗更新資料庫,選中核取方塊"Allow Updates"。
C、 在"Table To Update"下拉選單框中選擇要更新的表
D、 在"Where Clause For Update/Delete"中選則更新方式。
E、 在"Updatesble Cloumns"通過單擊選擇可更新的列,被選中的列將加亮顯示。
F、 選擇了要更新的列後,在"Unique Key Column(s)"列表框中定義唯一鍵,這個唯一鍵必須能夠在表中唯一的標識一條記錄。
G、 在"Key Modification"組框中選擇當唯一鍵列更新時資料行的更新方式。
H、 如果當前表中包括了自動增長序號的列(稱做標識列,並非所有的資料庫都具備此特性),那麼在"Indentity Column"下拉選單框中指定該列。
I、 單擊"OK"關閉對話方塊。
注意事項:如果在"Indentity Column"下拉選單框中指定某列為標識列,那麼就不要把該列選擇為可更新列。否則,如果把該列選擇為可更新列,那麼資料視窗產生的任何更新資料庫的Update語句都將失敗。
關於"Specify Update Prorerties"對話方塊中的"Key Modification"組框的詳細意義。"Key Modification"組框中兩個選項指定當唯一鍵列被更新時的資料行的更新方式。
A、 選中"Use Delete Then Insert"單選鈕,在唯一鍵列被更新的情況下,PoweBuild將首先刪除原來的行,然後使用新的鍵值插入新行。(這種方法減少了資料庫重新組織資料的次數,但也存在一些潛在的問題,當某個表的主鍵是另一個表的外來鍵並在定義外部鍵時將刪除方式定義同時刪除(級聯刪除)時,應用程式可能並不想使用"Use Delete Then Insert"選項。)
B、 選中"Use Update"單選鈕,在唯一鍵列被更新的情況下,PoweBuild修改行的鍵值(並非所有的資料庫都支援主鍵更新,也就是說,如果您使用的資料庫管理系統不支援主鍵更新,在這裡您就不能選擇"Use Update"選項)。這種方法避免了與外部鍵相關的級聯刪除問題。
  關於"Specify Update Prorerties"對話方塊中的"Where Clause For Update/Delete"的三個選項的具體含義:
A、 Key Columns
當選中"Key Columns"單選鈕時,資料視窗只使用"Unique Key Columns"列表框中選擇主鍵來構造Where子句,該選項經常在單使用者應用程式環境中使用,當PowerBuild生成Update或 Delete語句時,它比較某行鍵值列的原始值與資料庫相應行鍵值列的值,如果兩者相等,則更新操作或刪除操作被成功的執行。
B、 Key and Updateable Columns
當選中"Key and Updateable Columns"單選鈕時,PowerBuild在建立的Update或Delete語句中將鍵值列的原始值與可更改列的原始值與資料庫的相應值進行比較。當這些值相等時,修改或刪除相應的行(即Update或Delete語句成功執行)。
C、 Key and Modified Columns
當選中"Key and Modified Columns"單選鈕時,PowerBuild在建立的Update或Delete語句中將鍵值列的原始值和已修改可更改列的原始值與資料庫的相應值進行比較。當這些值相等時,修改或刪除相應的行,該選項是對資料完整性的保護和操作併發性的折中。

2、視窗中最常用的事件:Open、Resize、CloseQuery、Close。

①、Open事件:在視窗顯示之前系統觸發Open(開啟)事件。此時系統已將構造好了視窗的所有屬性以及其上的所有控制元件,下述函式觸發視窗的Open事件:Open、OpenWithParm、OpenSheet、OpenSheetWithParm。
②、Resize事件:當視窗大小發生變化時發生,視窗被開啟時也發生此事件,引數SizeType指明改變視窗大小的型別(最大化、最小化、恢復等);newwidth指明視窗的新寬度;newheight指明視窗的新高度。
③、CloseQuery事件:在開始關閉視窗時,發生該事件,該事件返回一個0或1的返回值,如果返回1,視窗不被關閉,通常情況下緊隨其後發生的Close事件不被髮生;如果返回0,則視窗被關閉。利用該事件的這種特性,程式能夠根據當前狀態提醒使用者是否儲存改變的資料、檢驗使用者輸入的資料的有效性、詢問使用者是否真的要關閉視窗。視窗被關閉時,同時關閉所有與之相關的子視窗和彈出視窗。
④、Close事件:視窗被關閉時發生。觸發該事件後,沒有辦法阻止視窗關閉的操作。
3、資料視窗中最常用的事件:ButtonClicked、Clicked、Constructor、Dberror、DoubleClicked、DragDrop、Editchanged、ItemError、Itemchanged、Rowfocuschanged、Rowfocuschanging。
①、BottonClicked事件:當資料視窗物件上的按鈕物件的SuppressEventProcessing屬性設定為no (預設為no)後,使用者單擊該按鈕時觸發。該事件在系統處理完按鈕的預設動作後觸發。
引數:◆Row--Long型別,使用者單擊的時第幾行。(與按鈕所放的位置有關)
◆Actionreturncode--返回命令按鈕的操作碼,Long型別。
◆Dwo--DWObject型別,單擊命令按鈕時,資料視窗的當前物件。
②、Clicked事件:當使用者點選資料視窗控制元件的任何位置時觸發。返回值:1(預設返回值)繼續處理;0停止處理,不改變輸入焦點。此事件將會觸發Rowfocuschanged、ItemFocuschanged。
引數:◆xpos、ypos--使用者在資料視窗中單擊的具體位置。
◆Row--使用者單擊的記錄號,如果沒有單擊在行上,則該值為0。
◆Dwo--DWObject型別的值,存放單擊的資料視窗內部物件名稱。
注意:
如果在此事件中用到了取數的函式例如:getitemstring(row,column);selectrow的函式等只要用到的函式與行有關,必需設定 if row=0 then return 。
如果為列印報表中的資料視窗控制元件,則不能繼承Clicked事件(因為在模板中的Clicked事件中編寫了點選列的標籤排序,如果此報表有合計數或分組等,則得不到正確的報表。),應該遮蔽掉祖先程式碼,具體實現為進入Clicked的Scrip中選擇選單Design Override Ancestor Scrip後,在Clicked事件中隨便加點註釋即可,例如"////"。
③、Constructor事件:在視窗的Open事件發生之前觸發。
④、Dberror事件:在資料視窗控制元件訪問資料庫過程中發生資料庫錯誤時觸發。返回值:0-預設值,系統顯示出錯資訊;1-系統不顯示出錯資訊。
⑤、 DoubleClicked事件:當使用者雙擊資料視窗控制元件時觸發。在觸發雙擊事件前,首先觸發Clicked單擊事件。我們可以在雙擊中開啟一視窗。
⑥、DragDrop事件:當某個被拖曳控制元件放置到資料視窗控制元件上時觸發。如在一資料視窗中拖曳排序;從一個資料視窗拖曳資料放到另一個資料視窗中,此時則用到DragDrop事件,拖曳結束需要寫this.Drag(end!),取消拖曳寫this.Drag(Cancel!)。
⑦、 Editchanged事件:當使用者在資料視窗控制元件的編輯控制元件中按任何按鍵時觸發。
⑧、ItemError事件:當使用者修改了欄位、然後移走焦點、但資料未能通過該列的有效性檢查時觸發。該事件返回值得意義為:
0--(預設值),拒絕輸入值並顯示有效性檢查出錯資訊,同時不允許移走焦點。
1--拒絕輸入值,但不顯示出錯資訊,同時不允許移走焦點。
2--接收輸入值。
3--拒絕輸入值,但允許移走焦點。
引數:◆Row--使用者單擊的記錄行號,如果沒有單擊在行上,則該值為0。
◆Dwo--DWObject型別的值,存放單擊的資料視窗內部物件的名稱。
◆Data--string...

相關文章