數據窗口常用函數_第1頁
數據窗口常用函數_第2頁
數據窗口常用函數_第3頁
數據窗口常用函數_第4頁
數據窗口常用函數_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據窗口常用函數 數據窗口控件事務對象1. SetTransObject函數函數 調用格式:調用格式:dwcontrol.SetTransObject(transaction) 其 中 :其 中 : d w c o n t r o 為 數 據 窗 口 控 件 的 名 稱 ;transaction為缺省的或 用戶定義的事務對象。 返返回值:回值:1-成功;-1-失敗。 SetTransObject函數為數據庫維持了一個開放性的連接,不需要反復連接和斷開數據庫,對數據窗口的更新進行提交或滾回操縱。只有在用戶改變數據窗口對象或者用戶斷開與數據庫連接后,才要再次調用SetTransObject函數。

2、SetTransObject ()函數的特點是,在使用之前要求建立事務對象與數據庫的連接,一直保持這一連接,直到代碼執行DISCONNECT語句后才斷開與數據庫的連接。它在檢索和更新數據時所花的時間只是檢索和更新所需的時間,效率上明顯高于SetTrans ()函數。例如,例如,在完成了數據庫的連接之后,如果在某個窗口中有個數據窗口控件dw_1,可以在窗口打開的open事件中,添加如下代碼: dw_1.SetTransObject(SQLCA) 此后,就可以使用其它函數訪問數據庫了。數據窗口控件事務對象 2. SetTrans函數函數 調用格式:調用格式:dwcontrol.SetTrans(t

3、ransaction) 參數及返回值與SetTransObject函數相同。不同點是SetTrans使用內部事務對象,用戶不必先進行數據庫的連接,而是每進行一次數據庫操作,都會自動產生一個數據庫的連接,并在操作結束時自動斷開與數據庫的連接。每當操作數據庫時,都會完成連接、操作、斷開數據庫這一系列步驟。 對絕大多數數據庫管理系統來說,CONNECT、DISCONNECT操作是件極為耗時的工作。如果應用程序對數據庫操作頻繁,SetTrans需要花費的資源比較多,效率比較低。一般應用在遠端使用應用程序或者對數據庫操作較少的場合。數據窗口控件的函數 數據窗口控件提供了豐富的對象函數,這些函數在增強數據

4、窗口功能的同時,也方便了應用程序的開發,加快了開發進度。 數據窗口函數編程注意事項:數據窗口函數編程注意事項: 1. 窗口函數觸發數據窗口事件窗口函數觸發數據窗口事件 窗口函數會觸發某些數據窗口事件,如果在這些數據窗口事件中調用能夠觸發該事件的數據窗口函數,就會造成死循環。2. PowerBuilder的數據處理機制的數據處理機制數據窗口在客戶機的本地內存中開辟了四個緩沖區:主緩沖區、刪除緩沖區、過濾緩沖區、原始緩沖區,從數據庫中檢索到數據后,數據窗口根據不同情況把數據放置到不同的緩沖區。四個緩沖區各司其職,協作完成數據的增刪改,最后把結果提交給數據庫管理系統。n除了在數據窗口畫筆中可以定義數

5、據窗口對象外,還提供了根據SQL SELECT語句和指定的屬性動態創建數據窗口的能力,這樣,應用程序就能夠構造的更加靈活,以適應千變萬化的用戶需求。7.4 數據窗口控件的函數n 當使用數據窗口控件的Retrieve()函數從數據庫中提取數據后,數據被存入了數據窗口的主緩沖區中,程序對數據窗口中數據的操作均在緩沖區中完成。n用戶在向數據窗口中輸入數據時,并沒有直接把數據輸入到數據窗口的主緩沖區中,而是把數據輸入到懸浮在數據窗口當前單元上面的編輯控件中 , 當 用 戶 移 動 了 輸 入 焦 點 或 代 碼 中 使 用AcceptText ()函數操作之后,系統驗證輸入數據的有效性,通過有效性驗證

6、的數據才被放置到數據窗口控件的主緩沖區中。n當插入數據時,插入的數據也存放在主緩沖區。當刪除數據行時,不管是使用DeleteRow()函數直接刪除一行還是使用RowsMove()函數在緩沖區之間移動數據行,被刪除數據行從主緩沖區移動到刪除緩沖區。n當使用數據窗口控件的對象函數Update()將數據窗口的修改發送到數據庫管理系統后,被成功刪除的記錄均從刪除緩沖區中清除。在保存數據時,刪除緩沖區用于生成DELETE語句。過濾緩沖區用于保存那些滿足數據源定義,而不滿足過濾條件的行。n原始緩沖區保存數據窗口從數據庫中檢索出的原始數據。可以通過把GetItem簇函數的入口參數originalvalue設

7、置為true來訪問原始緩沖區中數據。7.4 數據窗口控件的函數數據窗口緩沖區之間的關系見圖。7.4 數據窗口控件的函數n 主緩沖區的記錄行數可以通過數據窗口控件的對象函數RowCount()得到,刪除緩沖區的記錄行 數 通 過 數 據 窗 口 控 件 的 對 象 函 數DeletedCount()得到,過濾緩沖區的記錄行數通過數據窗口控件的對象函數FilterCount()得到。n利用數據窗口控件的對象函數SetFilter(),可以動態改變過濾條件,然后使用數據窗口控件的對象函數Filter()更新主緩沖區和過濾緩沖區中的數據。數據窗口控件只顯示主緩沖區中的數據,用戶的所有操作也都是針對主緩

8、沖區進行的。n編輯狀態標志在數據窗口控件的主緩沖區、過濾緩沖區和刪除緩沖區中,每一行和每一行中的每個列都有個編輯狀態標志,這個標志指示了相應行是否是新增加的行、相應列的數據是否被修改。在往數據庫中保存數據時,數據窗口利用這個標志值來決定產生什么類型的SQL語句。n需要獲得某行/某列的編輯狀態標志的方法是使用數據窗口控件的GetItemStatus ()對象函數。修改行或列的編輯狀態標志的數據窗口控件對象函數是SetItemStatus()。 7.4 數據窗口控件的函數 編輯狀態標志是個dwItemStatus枚舉類型。7.4 數據窗口控件的函數3. 訪問的緩沖區訪問的緩沖區 dwBuffer用

9、來指定數據窗口控件函數訪問的緩沖區,dwBuffer使用枚舉數據類型。 表表7-4 dwBuffer枚舉數據類型與指定的緩沖區枚舉數據類型與指定的緩沖區數據窗口常用函數nDwo.Reset() 重置數據窗口nInsertRow( )函數函數n用來在數據窗口的主緩沖區中插入一條新記錄。其語法格式為:nlong dwcontrol.InsertRow ( long row )n其中:row用于指定新行的插入位置。若row為0,則表示在所有記錄的最后插入新行。n例如:dw_1.InsertRow(0) 數據窗口常用函數nDeleteRow( )函數 nDeleteRow函數用來在數據窗口的主緩沖區中

10、刪除一行。其語法格式為:ninteger dwcontrol.DeleteRow ( long row )n其中:row表示要刪除的行的行號。若row為0,則表示要刪除當前行。n例如,語句:ndw_1.DeleteRow(5)n表示刪除數據窗口控件中的第5條記錄。數據窗口常用函數nUpdate( )函數nUpdate函數用來把數據窗口上數據的變化更新到數據庫中。nUpdate函數的語法格式為:ninteger dwcontrol.Update ( boolean accept , boolean resetflag )n其中:參數accept是一個布爾值,如果該值為true,表示在更新之前調用

11、AcceptText函數。參數resetflag用來確定數據窗口更新后是否重設更新標記。n該函數執行成功,則返回1,否則返回-1。n例如,在本書實例窗口w_ini的【保存】按鈕的Clicked事件代碼為:數據窗口常用函數nif dw_1.Update() 0 thenncommit; /提交nelsenmessagebox(,無法對數據保存!)nrollback; /返回nend ifn注釋:在調用注釋:在調用update函數后,必須做事務的函數后,必須做事務的管理工作,即使用管理工作,即使用SQL語句語句COMMIT或或ROLLBACK來結束更新操作。來結束更新操作。 數據窗口常用函數n連接

12、事務對象的函數nSettransobject()函數n參數為事務對象n例:dw_1. Settransobject(sqlca)n滾動數據行函數nScroll( )和ScrollToRow( )函數 nlong dwcontrol.Scroll ( long number ) nnumber指定要滾動的方向和行數。number為正數,表示向下滾動;若number為負數,表示向上滾動。如果該函數執行成功,那么將返回數據窗口控件中可見的第一行的行號;如果執行失敗,則返回-1。 n滾動數據行函數nScrollToRow函數 ninteger dwcontrol.ScrollToRow ( long

13、row )n參數row指定要滾動到的行號。如果row為0,則滾動到第一行,如果row大于最后一行的行號,則滾動到最后一行。該函數執行成功,則返回值為1,否則,返回-1n注釋:調用注釋:調用ScrollToRoll函數后,指定的行變為當函數后,指定的行變為當前行,如果該行在數據窗口控件中已經可見,則數前行,如果該行在數據窗口控件中已經可見,則數據窗口控件中顯示的行沒有什么變化,否則,顯示據窗口控件中顯示的行沒有什么變化,否則,顯示這一行這一行nScrollToRoll函數和其他數據窗口滾動函數并不能函數和其他數據窗口滾動函數并不能高亮度顯示行。此時可使用高亮度顯示行。此時可使用SelectRow

14、函數高亮度函數高亮度顯示該行以使用戶知道這是當前行。顯示該行以使用戶知道這是當前行。nScrollToRow函數和其他數據窗口滾動函數可能觸函數和其他數據窗口滾動函數可能觸發下列事件:發下列事件:ItemChanged、ItemError、ItemFocusChanged、RowFocusChanged。 nScrollNextRow( )和ScrollPriorRow( )函數nlong dwcontrol.ScrollNextRow ( )nlong dwcontrol.ScrollPriorRow ( )n作用:向上或向下滾動一行nScrollNextPage( )和ScrollPrio

15、rPage( )函數nlong dwcontrol.ScrollNextPage( )nlong dwcontrol.ScrollPriorPage( )n作用:向上或向下滾動一頁 使當前記錄亮度顯示nSelectrow()函數ninteger dwcontrol.SelectRow ( long, boolean )n參數long型表示行號,行號為0表示對所有行進行操作。boolean型:true表示稿亮度顯示,false表示去掉亮度顯示。n例:Dw_1.selectrow(dw_1.getrow(),true)表示將當前行亮度顯示nRetrieve()函數nRetrieve函數的功能是用指

16、定的事務對象從數據庫中把數據檢索到數據窗口進行顯示。nRetrieve函數的語法格式為:nlong dwcontrol.Retrieve ( any argument, any argument . . . )n其中:argument是可選參數,它表示在數據窗口對象中定義的檢索參數,這些參數的順序必須和定義時的順序相同。n如果調用成功,則返回檢索出的記錄行數;否則,返回-1。 nSetSort( )和Sort( )函數 nSetSort( )函數設置排序條件nSort( )函數執行排序操作ninteger dwcontrol.SetSort ( string format )n其中:參數for

17、mat是一個表示排序標準的字符串,包括列名或列號(列號前加#號)和排序順序(A表示升序、D表示降序)。如果format值為NULL,PowerBuilder將顯示“Specify Sort Columns”對話框,讓用戶選擇排序條件。該函數執行成功時返回值為1,否則返回-1。nnumber dwcontrol.Sort ( )n該函數沒有參數,執行成功時返回值為1,否則返回-1。n例如,可使用如下代碼實現按第一列升序、第二列降序的順序排序:ndw_1.setSort(#1 A, #2 D)ndw_1.sort() nSetFilter( )和和Filter( )函數函數nSetFilter函數

18、用來在程序中動態改變數據窗口的過濾條件。修改之后,再用Filter函數過濾數據。integer dwcontrol.SetFilter ( string format )n其中:format是個字符串,其值是作為過濾條件的邏輯表達式,表達式中可以包含列名或列號。如果format值為NULL,PowerBuilder將顯示“Specify Filter”對話框,讓用戶輸入過濾條件。n該函數執行成功時返回1,否則返回-1。integer dwcontrol.Filter ( )n例: dw_1.setfilter( xh= 0251101) dw_1.filter()可以實現過濾學號字段為0251

19、101學生的記錄nReset( )函數函數nReset函數可以清除數據窗口中的所有行。其語法格式為:ninteger dwcontrol.Reset ( )n若該函數執行成功,則返回1,否則返回-1。n執行Reset函數后再執行Update( )函數并不會清除數據庫中的數據,而刪除數據窗口的所有行后再執行Update( )函數則會清除數據庫中的數據。 nFind()函數n查找滿足條件的記錄nnumber dwcontrol.Find ( string expression, number start, number end )nExpression:查找條件表達式nStart:起始行號nEnd

20、:結束行號n返回值:返回第一條滿足條件的記錄號0表示查找失敗,-1表示查找出錯例 i=dw_1.find( xh= 0251101,1,dw_1.rowcount()dw_1.scrolltorow(i)n查找和過濾的區別n查找和過濾都可以找到滿足條件的記錄,但是,find()的查找過程在主緩沖區中進行,而Filter()將滿足條件的記錄過濾到過濾緩沖區。n得到與設置數據項的函數nSetItem函數n參數:行號,列號,值n例如: dw_1.setitem(dw_1.getrow(),3,女)nGetItem函數nGetItemString、GetItemDateTime、GetItemTime

21、、GetItemNumber、GetItemDecimal。n 參數:行號,列號n返回值:取得的對應行、列的值數據窗口中數據處理n數據正確性檢查n數據排序、過濾、分組及去掉重復值n數據檢索引用數據窗口對象和數據窗口項n數據窗口對象的引用nDataobject屬性:指定數據窗口對象n例:dw_1.dataobject=d_no_namen通過表達式引用數據窗口項n通過列名引用ndwcontrol.Object.columnname.buffer.current.originalrownumberndwcontrol:數據窗口控件名稱。nObject:必選部分,用來指定一個數據窗口對象的數據值。n

22、Columnname:必選部分,用來指定要操作的數據窗口列名nBuffer:可選部分,指明要從哪個緩沖區中取得數據,用戶可以在Primary(主緩沖區)、Delete(刪除緩沖區)或Filter(過濾緩沖區)中選擇一個,默認設置為Primary緩沖區。n .current.original:用來指明是從原始數據(從數據庫中檢索出來的數據)還是從當前緩沖區中取得數據。current為默認設置,指當前數據緩沖區。original指原始數據。nrownumber:可選字段,指定數據窗口的行號或者某一范圍。n例ndw_1.Object.number1= 9952101n語句把數據9952101賦值給主

23、緩沖區中的第一行的number列項:通過函數引用數據窗口項n取得數據窗口緩沖區中特定行列的數據;nGetItemStringnGetItemDateTime、GetItemTime、GetItemNumber、GetItemDecimalnGetItem n設置數據窗口特定行列的數據值。nString dwcontrol.GetItemString (row,column ,dwbuffer,originalvalue )ndwcontrol:數據窗口控件的名字。nrow:指定要取得字符型數據項所在的行號。ncolumn:指定要取得字符型數據項所在的列,可以時列號(數值型)或列名(字符型)。n

24、dwbuffer:指明要從哪個緩沖區中取得數據。默認設置是Primary緩沖區。noriginalvalue:用來指明是從原始數據還是從當前緩沖區中取得數據,True表示獲得從數據庫檢索出來的原始數據;False(默認)表示獲得當前緩沖區中的數據。 例nrownum=dw_1.getrow() /取得當前行的行號nnum_no = dw_1.GetItemNumber (rownum,number) /取得當前行、number列的值n設置數據窗口特定行列的數據值。設置數據窗口特定行列的數據值。nSetItem,其語法格式如下:ninteger dwcontrol.SetItem (row, c

25、olumn, value )nrow指定賦值項所在的行,ncolumn指賦值項所在的列,可以是列號或列名;nvalue是要為數據項設置的值。n例:nDw_1.setitem(dw_1.getrow(),sex,男)數據窗口的更新控制 n選擇菜單【Rows】【Update Properties】,彈出“Specify Update Properties” 設置更新屬性 多表數據窗口的更新n一般情況下,含有多表數據的數據窗口只能用于數據檢索,而不能用于更新數據,所以,通常多表的更新操作通常使用多個數據窗口來實現(在腳本中要做數據庫的相關完整性檢查)。但有時也會遇到在一個數據窗口中更新多個表數據的情

26、況。n如果需要在單數據窗口中做多表更新,只能采用如下特殊的手段來解決:n第一,通過修改數據窗口的更新屬性實現多表更新;n第二,用隱含數據窗口(或數據存儲)實現多表更新。 n創建數據窗口:n(1)選用合適的數據源和顯示風格,保證數據窗口具有更新能力。n(2)選取多表中的所需數據項(各表的主鍵和非空列一定要包含進去)。n(3)修改所需數據項的TabOrder,保證其在數據窗口中是可修改的(TabOrder值不為0)。n(4)選取菜單【Rows】【Update Properties】,定義數據窗口的更新屬性(只定義一個表的列為可更新列)。 n保存操作:n(1)先對多表中的一個單表進行更新,使用Mod

27、ify( )函數將其余表中的數據項的Update屬性改為False。n(2)選取單表的主鍵及表中其他數據項,設置此單表:nDataWindow.Table.UpdateTable=表名 /設置可更新的表名n表的主鍵.Key=Yes /設置可更新的主鍵n使用Modify( )函數將要更新表中的數據項的Update屬性改為True。n(3)使用Update( )函數,對所選中的單表進行更新。n(4)選取數據窗口中的其余表及其數據項,重復以上的操作來更新多表數據。n modify( ) modify( )函數的用法為:函數的用法為:nstring string dwcontrol.Modifydwc

28、ontrol.Modify ( string ( string modstringmodstring ) )n其參數是一個要設置的屬性值的字符串。不同的其參數是一個要設置的屬性值的字符串。不同的屬性之間可用屬性之間可用 t t或多個空格間隔,或多個空格間隔,n對數據窗口對象中列的屬性值的設置可以用如下對數據窗口對象中列的屬性值的設置可以用如下方式:方式:perty=value=value。n例如例如xshjbqk_name.Updatexshjbqk_name.Update =No =No表示將列表示將列xshjbqk_na

29、mexshjbqk_name的的updateupdate(更新)屬性改為更新)屬性改為NoNo,即即為不可更新。為不可更新。實例nlong ll_rtnn/ 修改Department表nll_rtn = dw_1.update(true, false)nif ll_rtn = 1 thenn/關掉對Department表的修改ndw_1.Modify(department_dept_name.Update = No)ndw_1.Modify(department_dept_id.Update = No)ndw_1.Modify(department_dept_id.Key = No)nn/使E

30、mployee表成為新的可修改表ndw_1.Modify(DataWindow.Table.UpdateTable = employee)ndw_1.Modify(employee_emp_id.Update = Yes)ndw_1.Modify(employee_emp_fname.Update = Yes)ndw_1.Modify(employee_emp_lname.Update = Yes)ndw_1.Modify(employee_emp_id.Key = Yes)n/修改Employee表nll_rtn = dw_1.Update()nIF ll_rtn = 1 THENnCOMM

31、IT USING SQLCA;ndw_1.retrieve()nmessagebox(提示信息,更新成功!)nELSEnROLLBACK USING SQLCA;nMessageBox(提示信息, 更新失敗!)nEND IFn/如果還要修改別的表,重設修改標志ndw_1.Modify(department_dept_name.Update = Yes)ndw_1.Modify(department_dept_id.Update = Yes)ndw_1.Modify(department_dept_id.Key = Yes)ndw_1.Modify(DataWindow.Table.Update

32、Table = department)nndw_1.Modify(employee_emp_id.Update = No)ndw_1.Modify(employee_emp_fname.Update = No)ndw_1.Modify(employee_emp_lname.Update = No)ndw_1.Modify(employee_emp_id.Key = No)nELSEnROLLBACK USING SQLCA;nMessageBox(提示信息, 更新失敗!)nEND IF 小結1.數據窗口控件常用屬性數據窗口控件常用屬性數據窗口窗口控件常用函數: nRetrieve()檢索數據n

33、update()更新表數據 nInsertRow(long row) 在第row行插入一空行, row=0表示在末尾插入nDeleteRow(long row) 刪除第row行ngetrow() 返回數據窗口當前行的行號ngetcolumn() 得到數據窗口控件當前列的列號 nGetColumnName( ) 得到數據窗口控件當前列的列名nRowCount() 返回數據窗口控件當前可用行數。小結nScrollToRow (long row ) 滾動數據窗口控件的顯示到row行,該函數改變當前行但不改變當前列。nGetItemDecimal(long row,int column)得到數據窗口控件中row行、col列的數據值。返回值為DecimalnGetitemnumber(long row,int column)得到數據窗口控件中row行、col列的數據值。返回值為NumbernGetitemstring(long row,int column) 得到數據窗口控件中row行、col列的數據值。返回值為stringnGetItemDate(long row,int column

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論