數(shù)據(jù)窗口常用函數(shù)_第1頁(yè)
數(shù)據(jù)窗口常用函數(shù)_第2頁(yè)
數(shù)據(jù)窗口常用函數(shù)_第3頁(yè)
數(shù)據(jù)窗口常用函數(shù)_第4頁(yè)
數(shù)據(jù)窗口常用函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)窗口常用函數(shù) 數(shù)據(jù)窗口控件事務(wù)對(duì)象1. SetTransObject函數(shù) 調(diào)用格式:dwcontrol.SetTransObject(transaction) 其中:dwcontro為數(shù)據(jù)窗口控件的名稱(chēng);transaction為缺省的或 用戶(hù)定義的事務(wù)對(duì)象。 返回值:1-成功;-1-失敗。 SetTransObject函數(shù)為數(shù)據(jù)庫(kù)維持了一個(gè)開(kāi)放性的連接,不需要反復(fù)連接和斷開(kāi)數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)窗口的更新進(jìn)行提交或滾回操縱。只有在用戶(hù)改變數(shù)據(jù)窗口對(duì)象或者用戶(hù)斷開(kāi)與數(shù)據(jù)庫(kù)連接后,才要再次調(diào)用SetTransObject函數(shù)。 SetTransObject ()函數(shù)的特點(diǎn)是,在使用之前要求建立事務(wù)對(duì)象

2、與數(shù)據(jù)庫(kù)的連接,一直保持這一連接,直到代碼執(zhí)行DISCONNECT語(yǔ)句后才斷開(kāi)與數(shù)據(jù)庫(kù)的連接。它在檢索和更新數(shù)據(jù)時(shí)所花的時(shí)間只是檢索和更新所需的時(shí)間,效率上明顯高于SetTrans ()函數(shù)。例如,在完成了數(shù)據(jù)庫(kù)的連接之后,如果在某個(gè)窗口中有個(gè)數(shù)據(jù)窗口控件dw_1,可以在窗口打開(kāi)的open事件中,添加如下代碼: dw_1.SetTransObject(SQLCA) 此后,就可以使用其它函數(shù)訪問(wèn)數(shù)據(jù)庫(kù)了。數(shù)據(jù)窗口控件事務(wù)對(duì)象 2. SetTrans函數(shù) 調(diào)用格式:dwcontrol.SetTrans(transaction) 參數(shù)及返回值與SetTransObject函數(shù)相同。不同點(diǎn)是SetTr

3、ans使用內(nèi)部事務(wù)對(duì)象,用戶(hù)不必先進(jìn)行數(shù)據(jù)庫(kù)的連接,而是每進(jìn)行一次數(shù)據(jù)庫(kù)操作,都會(huì)自動(dòng)產(chǎn)生一個(gè)數(shù)據(jù)庫(kù)的連接,并在操作結(jié)束時(shí)自動(dòng)斷開(kāi)與數(shù)據(jù)庫(kù)的連接。每當(dāng)操作數(shù)據(jù)庫(kù)時(shí),都會(huì)完成連接、操作、斷開(kāi)數(shù)據(jù)庫(kù)這一系列步驟。 對(duì)絕大多數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)說(shuō),CONNECT、DISCONNECT操作是件極為耗時(shí)的工作。如果應(yīng)用程序?qū)?shù)據(jù)庫(kù)操作頻繁,SetTrans需要花費(fèi)的資源比較多,效率比較低。一般應(yīng)用在遠(yuǎn)端使用應(yīng)用程序或者對(duì)數(shù)據(jù)庫(kù)操作較少的場(chǎng)合。數(shù)據(jù)窗口控件的函數(shù) 數(shù)據(jù)窗口控件提供了豐富的對(duì)象函數(shù),這些函數(shù)在增強(qiáng)數(shù)據(jù)窗口功能的同時(shí),也方便了應(yīng)用程序的開(kāi)發(fā),加快了開(kāi)發(fā)進(jìn)度。 數(shù)據(jù)窗口函數(shù)編程注意事項(xiàng): 1. 窗

4、口函數(shù)觸發(fā)數(shù)據(jù)窗口事件 窗口函數(shù)會(huì)觸發(fā)某些數(shù)據(jù)窗口事件,如果在這些數(shù)據(jù)窗口事件中調(diào)用能夠觸發(fā)該事件的數(shù)據(jù)窗口函數(shù),就會(huì)造成死循環(huán)。2. PowerBuilder的數(shù)據(jù)處理機(jī)制數(shù)據(jù)窗口在客戶(hù)機(jī)的本地內(nèi)存中開(kāi)辟了四個(gè)緩沖區(qū):主緩沖區(qū)、刪除緩沖區(qū)、過(guò)濾緩沖區(qū)、原始緩沖區(qū),從數(shù)據(jù)庫(kù)中檢索到數(shù)據(jù)后,數(shù)據(jù)窗口根據(jù)不同情況把數(shù)據(jù)放置到不同的緩沖區(qū)。四個(gè)緩沖區(qū)各司其職,協(xié)作完成數(shù)據(jù)的增刪改,最后把結(jié)果提交給數(shù)據(jù)庫(kù)管理系統(tǒng)。除了在數(shù)據(jù)窗口畫(huà)筆中可以定義數(shù)據(jù)窗口對(duì)象外,還提供了根據(jù)SQL SELECT語(yǔ)句和指定的屬性動(dòng)態(tài)創(chuàng)建數(shù)據(jù)窗口的能力,這樣,應(yīng)用程序就能夠構(gòu)造的更加靈活,以適應(yīng)千變?nèi)f化的用戶(hù)需求。7.4 數(shù)據(jù)

5、窗口控件的函數(shù) 當(dāng)使用數(shù)據(jù)窗口控件的Retrieve()函數(shù)從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)后,數(shù)據(jù)被存入了數(shù)據(jù)窗口的主緩沖區(qū)中,程序?qū)?shù)據(jù)窗口中數(shù)據(jù)的操作均在緩沖區(qū)中完成。用戶(hù)在向數(shù)據(jù)窗口中輸入數(shù)據(jù)時(shí),并沒(méi)有直接把數(shù)據(jù)輸入到數(shù)據(jù)窗口的主緩沖區(qū)中,而是把數(shù)據(jù)輸入到懸浮在數(shù)據(jù)窗口當(dāng)前單元上面的編輯控件中,當(dāng)用戶(hù)移動(dòng)了輸入焦點(diǎn)或代碼中使用AcceptText ()函數(shù)操作之后,系統(tǒng)驗(yàn)證輸入數(shù)據(jù)的有效性,通過(guò)有效性驗(yàn)證的數(shù)據(jù)才被放置到數(shù)據(jù)窗口控件的主緩沖區(qū)中。當(dāng)插入數(shù)據(jù)時(shí),插入的數(shù)據(jù)也存放在主緩沖區(qū)。當(dāng)刪除數(shù)據(jù)行時(shí),不管是使用DeleteRow()函數(shù)直接刪除一行還是使用RowsMove()函數(shù)在緩沖區(qū)之間移動(dòng)數(shù)

6、據(jù)行,被刪除數(shù)據(jù)行從主緩沖區(qū)移動(dòng)到刪除緩沖區(qū)。當(dāng)使用數(shù)據(jù)窗口控件的對(duì)象函數(shù)Update()將數(shù)據(jù)窗口的修改發(fā)送到數(shù)據(jù)庫(kù)管理系統(tǒng)后,被成功刪除的記錄均從刪除緩沖區(qū)中清除。在保存數(shù)據(jù)時(shí),刪除緩沖區(qū)用于生成DELETE語(yǔ)句。過(guò)濾緩沖區(qū)用于保存那些滿(mǎn)足數(shù)據(jù)源定義,而不滿(mǎn)足過(guò)濾條件的行。原始緩沖區(qū)保存數(shù)據(jù)窗口從數(shù)據(jù)庫(kù)中檢索出的原始數(shù)據(jù)。可以通過(guò)把GetItem簇函數(shù)的入口參數(shù)originalvalue設(shè)置為true來(lái)訪問(wèn)原始緩沖區(qū)中數(shù)據(jù)。7.4 數(shù)據(jù)窗口控件的函數(shù)數(shù)據(jù)窗口緩沖區(qū)之間的關(guān)系見(jiàn)圖。7.4 數(shù)據(jù)窗口控件的函數(shù) 主緩沖區(qū)的記錄行數(shù)可以通過(guò)數(shù)據(jù)窗口控件的對(duì)象函數(shù)RowCount()得到,刪除緩沖區(qū)

7、的記錄行數(shù)通過(guò)數(shù)據(jù)窗口控件的對(duì)象函數(shù)DeletedCount()得到,過(guò)濾緩沖區(qū)的記錄行數(shù)通過(guò)數(shù)據(jù)窗口控件的對(duì)象函數(shù)FilterCount()得到。利用數(shù)據(jù)窗口控件的對(duì)象函數(shù)SetFilter(),可以動(dòng)態(tài)改變過(guò)濾條件,然后使用數(shù)據(jù)窗口控件的對(duì)象函數(shù)Filter()更新主緩沖區(qū)和過(guò)濾緩沖區(qū)中的數(shù)據(jù)。數(shù)據(jù)窗口控件只顯示主緩沖區(qū)中的數(shù)據(jù),用戶(hù)的所有操作也都是針對(duì)主緩沖區(qū)進(jìn)行的。編輯狀態(tài)標(biāo)志在數(shù)據(jù)窗口控件的主緩沖區(qū)、過(guò)濾緩沖區(qū)和刪除緩沖區(qū)中,每一行和每一行中的每個(gè)列都有個(gè)編輯狀態(tài)標(biāo)志,這個(gè)標(biāo)志指示了相應(yīng)行是否是新增加的行、相應(yīng)列的數(shù)據(jù)是否被修改。在往數(shù)據(jù)庫(kù)中保存數(shù)據(jù)時(shí),數(shù)據(jù)窗口利用這個(gè)標(biāo)志值來(lái)決定產(chǎn)

8、生什么類(lèi)型的SQL語(yǔ)句。需要獲得某行/某列的編輯狀態(tài)標(biāo)志的方法是使用數(shù)據(jù)窗口控件的GetItemStatus ()對(duì)象函數(shù)。修改行或列的編輯狀態(tài)標(biāo)志的數(shù)據(jù)窗口控件對(duì)象函數(shù)是SetItemStatus()。 7.4 數(shù)據(jù)窗口控件的函數(shù) 編輯狀態(tài)標(biāo)志是個(gè)dwItemStatus枚舉類(lèi)型。7.4 數(shù)據(jù)窗口控件的函數(shù)3. 訪問(wèn)的緩沖區(qū) dwBuffer用來(lái)指定數(shù)據(jù)窗口控件函數(shù)訪問(wèn)的緩沖區(qū),dwBuffer使用枚舉數(shù)據(jù)類(lèi)型。 表7-4 dwBuffer枚舉數(shù)據(jù)類(lèi)型與指定的緩沖區(qū)數(shù)據(jù)窗口常用函數(shù)Dwo.Reset() 重置數(shù)據(jù)窗口InsertRow( )函數(shù)用來(lái)在數(shù)據(jù)窗口的主緩沖區(qū)中插入一條新記錄。其語(yǔ)法

9、格式為:long dwcontrol.InsertRow ( long row )其中:row用于指定新行的插入位置。若row為0,則表示在所有記錄的最后插入新行。例如:dw_1.InsertRow(0) 數(shù)據(jù)窗口常用函數(shù)DeleteRow( )函數(shù) DeleteRow函數(shù)用來(lái)在數(shù)據(jù)窗口的主緩沖區(qū)中刪除一行。其語(yǔ)法格式為:integer dwcontrol.DeleteRow ( long row )其中:row表示要?jiǎng)h除的行的行號(hào)。若row為0,則表示要?jiǎng)h除當(dāng)前行。例如,語(yǔ)句:dw_1.DeleteRow(5)表示刪除數(shù)據(jù)窗口控件中的第5條記錄。數(shù)據(jù)窗口常用函數(shù)Update( )函數(shù)Upda

10、te函數(shù)用來(lái)把數(shù)據(jù)窗口上數(shù)據(jù)的變化更新到數(shù)據(jù)庫(kù)中。Update函數(shù)的語(yǔ)法格式為:integer dwcontrol.Update ( boolean accept , boolean resetflag )其中:參數(shù)accept是一個(gè)布爾值,如果該值為true,表示在更新之前調(diào)用AcceptText函數(shù)。參數(shù)resetflag用來(lái)確定數(shù)據(jù)窗口更新后是否重設(shè)更新標(biāo)記。該函數(shù)執(zhí)行成功,則返回1,否則返回-1。例如,在本書(shū)實(shí)例窗口w_ini的【保存】按鈕的Clicked事件代碼為:數(shù)據(jù)窗口常用函數(shù)if dw_1.Update() 0 thencommit; /提交elsemessagebox(,無(wú)法

11、對(duì)數(shù)據(jù)保存!)rollback; /返回end if注釋?zhuān)涸谡{(diào)用update函數(shù)后,必須做事務(wù)的管理工作,即使用SQL語(yǔ)句COMMIT或ROLLBACK來(lái)結(jié)束更新操作。 數(shù)據(jù)窗口常用函數(shù)連接事務(wù)對(duì)象的函數(shù)Settransobject()函數(shù)參數(shù)為事務(wù)對(duì)象例:dw_1. Settransobject(sqlca)滾動(dòng)數(shù)據(jù)行函數(shù)Scroll( )和ScrollToRow( )函數(shù) long dwcontrol.Scroll ( long number ) number指定要滾動(dòng)的方向和行數(shù)。number為正數(shù),表示向下滾動(dòng);若number為負(fù)數(shù),表示向上滾動(dòng)。如果該函數(shù)執(zhí)行成功,那么將返回?cái)?shù)據(jù)窗口

12、控件中可見(jiàn)的第一行的行號(hào);如果執(zhí)行失敗,則返回-1。 滾動(dòng)數(shù)據(jù)行函數(shù)ScrollToRow函數(shù) integer dwcontrol.ScrollToRow ( long row )參數(shù)row指定要滾動(dòng)到的行號(hào)。如果row為0,則滾動(dòng)到第一行,如果row大于最后一行的行號(hào),則滾動(dòng)到最后一行。該函數(shù)執(zhí)行成功,則返回值為1,否則,返回-1注釋?zhuān)赫{(diào)用ScrollToRoll函數(shù)后,指定的行變?yōu)楫?dāng)前行,如果該行在數(shù)據(jù)窗口控件中已經(jīng)可見(jiàn),則數(shù)據(jù)窗口控件中顯示的行沒(méi)有什么變化,否則,顯示這一行ScrollToRoll函數(shù)和其他數(shù)據(jù)窗口滾動(dòng)函數(shù)并不能高亮度顯示行。此時(shí)可使用SelectRow函數(shù)高亮度顯示該行

13、以使用戶(hù)知道這是當(dāng)前行。ScrollToRow函數(shù)和其他數(shù)據(jù)窗口滾動(dòng)函數(shù)可能觸發(fā)下列事件:ItemChanged、ItemError、ItemFocusChanged、RowFocusChanged。 ScrollNextRow( )和ScrollPriorRow( )函數(shù)long dwcontrol.ScrollNextRow ( )long dwcontrol.ScrollPriorRow ( )作用:向上或向下滾動(dòng)一行ScrollNextPage( )和ScrollPriorPage( )函數(shù)long dwcontrol.ScrollNextPage( )long dwcontrol.S

14、crollPriorPage( )作用:向上或向下滾動(dòng)一頁(yè) 使當(dāng)前記錄亮度顯示Selectrow()函數(shù)integer dwcontrol.SelectRow ( long, boolean )參數(shù)long型表示行號(hào),行號(hào)為0表示對(duì)所有行進(jìn)行操作。boolean型:true表示稿亮度顯示,false表示去掉亮度顯示。例:Dw_1.selectrow(dw_1.getrow(),true)表示將當(dāng)前行亮度顯示Retrieve()函數(shù)Retrieve函數(shù)的功能是用指定的事務(wù)對(duì)象從數(shù)據(jù)庫(kù)中把數(shù)據(jù)檢索到數(shù)據(jù)窗口進(jìn)行顯示。Retrieve函數(shù)的語(yǔ)法格式為:long dwcontrol.Retrieve

15、( any argument, any argument . . . )其中:argument是可選參數(shù),它表示在數(shù)據(jù)窗口對(duì)象中定義的檢索參數(shù),這些參數(shù)的順序必須和定義時(shí)的順序相同。如果調(diào)用成功,則返回檢索出的記錄行數(shù);否則,返回-1。 SetSort( )和Sort( )函數(shù) SetSort( )函數(shù)設(shè)置排序條件Sort( )函數(shù)執(zhí)行排序操作integer dwcontrol.SetSort ( string format )其中:參數(shù)format是一個(gè)表示排序標(biāo)準(zhǔn)的字符串,包括列名或列號(hào)(列號(hào)前加#號(hào))和排序順序(A表示升序、D表示降序)。如果format值為NULL,PowerBuild

16、er將顯示“Specify Sort Columns”對(duì)話(huà)框,讓用戶(hù)選擇排序條件。該函數(shù)執(zhí)行成功時(shí)返回值為1,否則返回-1。number dwcontrol.Sort ( )該函數(shù)沒(méi)有參數(shù),執(zhí)行成功時(shí)返回值為1,否則返回-1。例如,可使用如下代碼實(shí)現(xiàn)按第一列升序、第二列降序的順序排序:dw_1.setSort(#1 A, #2 D)dw_1.sort() SetFilter( )和Filter( )函數(shù)SetFilter函數(shù)用來(lái)在程序中動(dòng)態(tài)改變數(shù)據(jù)窗口的過(guò)濾條件。修改之后,再用Filter函數(shù)過(guò)濾數(shù)據(jù)。integer dwcontrol.SetFilter ( string format )其

17、中:format是個(gè)字符串,其值是作為過(guò)濾條件的邏輯表達(dá)式,表達(dá)式中可以包含列名或列號(hào)。如果format值為NULL,PowerBuilder將顯示“Specify Filter”對(duì)話(huà)框,讓用戶(hù)輸入過(guò)濾條件。該函數(shù)執(zhí)行成功時(shí)返回1,否則返回-1。integer dwcontrol.Filter ( )例: dw_1.setfilter( xh= 0251101) dw_1.filter()可以實(shí)現(xiàn)過(guò)濾學(xué)號(hào)字段為0251101學(xué)生的記錄Reset( )函數(shù)Reset函數(shù)可以清除數(shù)據(jù)窗口中的所有行。其語(yǔ)法格式為:integer dwcontrol.Reset ( )若該函數(shù)執(zhí)行成功,則返回1,否則

18、返回-1。執(zhí)行Reset函數(shù)后再執(zhí)行Update( )函數(shù)并不會(huì)清除數(shù)據(jù)庫(kù)中的數(shù)據(jù),而刪除數(shù)據(jù)窗口的所有行后再執(zhí)行Update( )函數(shù)則會(huì)清除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。 Find()函數(shù)查找滿(mǎn)足條件的記錄number dwcontrol.Find ( string expression, number start, number end )Expression:查找條件表達(dá)式Start:起始行號(hào)End:結(jié)束行號(hào)返回值:返回第一條滿(mǎn)足條件的記錄號(hào)0表示查找失敗,-1表示查找出錯(cuò)例 i=dw_1.find( xh= 0251101,1,dw_1.rowcount()dw_1.scrolltorow(i)查

19、找和過(guò)濾的區(qū)別查找和過(guò)濾都可以找到滿(mǎn)足條件的記錄,但是,find()的查找過(guò)程在主緩沖區(qū)中進(jìn)行,而Filter()將滿(mǎn)足條件的記錄過(guò)濾到過(guò)濾緩沖區(qū)。得到與設(shè)置數(shù)據(jù)項(xiàng)的函數(shù)SetItem函數(shù)參數(shù):行號(hào),列號(hào),值例如: dw_1.setitem(dw_1.getrow(),3,女)GetItem函數(shù)GetItemString、GetItemDateTime、GetItemTime、GetItemNumber、GetItemDecimal。 參數(shù):行號(hào),列號(hào)返回值:取得的對(duì)應(yīng)行、列的值數(shù)據(jù)窗口中數(shù)據(jù)處理數(shù)據(jù)正確性檢查數(shù)據(jù)排序、過(guò)濾、分組及去掉重復(fù)值數(shù)據(jù)檢索引用數(shù)據(jù)窗口對(duì)象和數(shù)據(jù)窗口項(xiàng)數(shù)據(jù)窗口對(duì)象的引

20、用Dataobject屬性:指定數(shù)據(jù)窗口對(duì)象例:dw_1.dataobject=d_no_name通過(guò)表達(dá)式引用數(shù)據(jù)窗口項(xiàng)通過(guò)列名引用dwcontrol.Object.columnname.buffer.current.originalrownumberdwcontrol:數(shù)據(jù)窗口控件名稱(chēng)。Object:必選部分,用來(lái)指定一個(gè)數(shù)據(jù)窗口對(duì)象的數(shù)據(jù)值。Columnname:必選部分,用來(lái)指定要操作的數(shù)據(jù)窗口列名Buffer:可選部分,指明要從哪個(gè)緩沖區(qū)中取得數(shù)據(jù),用戶(hù)可以在Primary(主緩沖區(qū))、Delete(刪除緩沖區(qū))或Filter(過(guò)濾緩沖區(qū))中選擇一個(gè),默認(rèn)設(shè)置為Primary緩沖區(qū)。

21、 .current.original:用來(lái)指明是從原始數(shù)據(jù)(從數(shù)據(jù)庫(kù)中檢索出來(lái)的數(shù)據(jù))還是從當(dāng)前緩沖區(qū)中取得數(shù)據(jù)。current為默認(rèn)設(shè)置,指當(dāng)前數(shù)據(jù)緩沖區(qū)。original指原始數(shù)據(jù)。rownumber:可選字段,指定數(shù)據(jù)窗口的行號(hào)或者某一范圍。例dw_1.Object.number1= 9952101語(yǔ)句把數(shù)據(jù)9952101賦值給主緩沖區(qū)中的第一行的number列項(xiàng):通過(guò)函數(shù)引用數(shù)據(jù)窗口項(xiàng)取得數(shù)據(jù)窗口緩沖區(qū)中特定行列的數(shù)據(jù);GetItemStringGetItemDateTime、GetItemTime、GetItemNumber、GetItemDecimalGetItem 設(shè)置數(shù)據(jù)窗口特

22、定行列的數(shù)據(jù)值。String dwcontrol.GetItemString (row,column ,dwbuffer,originalvalue )dwcontrol:數(shù)據(jù)窗口控件的名字。row:指定要取得字符型數(shù)據(jù)項(xiàng)所在的行號(hào)。column:指定要取得字符型數(shù)據(jù)項(xiàng)所在的列,可以時(shí)列號(hào)(數(shù)值型)或列名(字符型)。dwbuffer:指明要從哪個(gè)緩沖區(qū)中取得數(shù)據(jù)。默認(rèn)設(shè)置是Primary緩沖區(qū)。originalvalue:用來(lái)指明是從原始數(shù)據(jù)還是從當(dāng)前緩沖區(qū)中取得數(shù)據(jù),True表示獲得從數(shù)據(jù)庫(kù)檢索出來(lái)的原始數(shù)據(jù);False(默認(rèn))表示獲得當(dāng)前緩沖區(qū)中的數(shù)據(jù)。 例rownum=dw_1.getr

23、ow() /取得當(dāng)前行的行號(hào)num_no = dw_1.GetItemNumber (rownum,number) /取得當(dāng)前行、number列的值設(shè)置數(shù)據(jù)窗口特定行列的數(shù)據(jù)值。SetItem,其語(yǔ)法格式如下:integer dwcontrol.SetItem (row, column, value )row指定賦值項(xiàng)所在的行,column指賦值項(xiàng)所在的列,可以是列號(hào)或列名;value是要為數(shù)據(jù)項(xiàng)設(shè)置的值。例:Dw_1.setitem(dw_1.getrow(),sex,男)數(shù)據(jù)窗口的更新控制 選擇菜單【Rows】【Update Properties】,彈出“Specify Update Pr

24、operties” 設(shè)置更新屬性多表數(shù)據(jù)窗口的更新一般情況下,含有多表數(shù)據(jù)的數(shù)據(jù)窗口只能用于數(shù)據(jù)檢索,而不能用于更新數(shù)據(jù),所以,通常多表的更新操作通常使用多個(gè)數(shù)據(jù)窗口來(lái)實(shí)現(xiàn)(在腳本中要做數(shù)據(jù)庫(kù)的相關(guān)完整性檢查)。但有時(shí)也會(huì)遇到在一個(gè)數(shù)據(jù)窗口中更新多個(gè)表數(shù)據(jù)的情況。如果需要在單數(shù)據(jù)窗口中做多表更新,只能采用如下特殊的手段來(lái)解決:第一,通過(guò)修改數(shù)據(jù)窗口的更新屬性實(shí)現(xiàn)多表更新;第二,用隱含數(shù)據(jù)窗口(或數(shù)據(jù)存儲(chǔ))實(shí)現(xiàn)多表更新。 創(chuàng)建數(shù)據(jù)窗口:(1)選用合適的數(shù)據(jù)源和顯示風(fēng)格,保證數(shù)據(jù)窗口具有更新能力。(2)選取多表中的所需數(shù)據(jù)項(xiàng)(各表的主鍵和非空列一定要包含進(jìn)去)。(3)修改所需數(shù)據(jù)項(xiàng)的TabOrde

25、r,保證其在數(shù)據(jù)窗口中是可修改的(TabOrder值不為0)。(4)選取菜單【Rows】【Update Properties】,定義數(shù)據(jù)窗口的更新屬性(只定義一個(gè)表的列為可更新列)。 保存操作:(1)先對(duì)多表中的一個(gè)單表進(jìn)行更新,使用Modify( )函數(shù)將其余表中的數(shù)據(jù)項(xiàng)的Update屬性改為False。(2)選取單表的主鍵及表中其他數(shù)據(jù)項(xiàng),設(shè)置此單表:DataWindow.Table.UpdateTable=表名 /設(shè)置可更新的表名表的主鍵.Key=Yes /設(shè)置可更新的主鍵使用Modify( )函數(shù)將要更新表中的數(shù)據(jù)項(xiàng)的Update屬性改為T(mén)rue。(3)使用Update( )函數(shù),對(duì)所

26、選中的單表進(jìn)行更新。(4)選取數(shù)據(jù)窗口中的其余表及其數(shù)據(jù)項(xiàng),重復(fù)以上的操作來(lái)更新多表數(shù)據(jù)。 modify( )函數(shù)的用法為:string dwcontrol.Modify ( string modstring )其參數(shù)是一個(gè)要設(shè)置的屬性值的字符串。不同的屬性之間可用t或多個(gè)空格間隔,對(duì)數(shù)據(jù)窗口對(duì)象中列的屬性值的設(shè)置可以用如下方式:perty=value。例如xshjbqk_name.Update =No表示將列xshjbqk_name的update(更新)屬性改為No,即為不可更新。實(shí)例long ll_rtn/ 修改Department表ll_rtn = dw_1

27、.update(true, false)if ll_rtn = 1 then/關(guān)掉對(duì)Department表的修改dw_1.Modify(department_dept_name.Update = No)dw_1.Modify(department_dept_id.Update = No)dw_1.Modify(department_dept_id.Key = No)/使Employee表成為新的可修改表dw_1.Modify(DataWindow.Table.UpdateTable = employee)dw_1.Modify(employee_emp_id.Update = Yes)dw_1

28、.Modify(employee_emp_fname.Update = Yes)dw_1.Modify(employee_emp_lname.Update = Yes)dw_1.Modify(employee_emp_id.Key = Yes)/修改Employee表ll_rtn = dw_1.Update()IF ll_rtn = 1 THENCOMMIT USING SQLCA;dw_1.retrieve()messagebox(提示信息,更新成功!)ELSEROLLBACK USING SQLCA;MessageBox(提示信息, 更新失??!)END IF/如果還要修改別的表,重設(shè)修改標(biāo)

29、志dw_1.Modify(department_dept_name.Update = Yes)dw_1.Modify(department_dept_id.Update = Yes)dw_1.Modify(department_dept_id.Key = Yes)dw_1.Modify(DataWindow.Table.UpdateTable = department)dw_1.Modify(employee_emp_id.Update = No)dw_1.Modify(employee_emp_fname.Update = No)dw_1.Modify(employee_emp_lname.

30、Update = No)dw_1.Modify(employee_emp_id.Key = No)ELSEROLLBACK USING SQLCA;MessageBox(提示信息, 更新失?。?END IF 小結(jié)1.數(shù)據(jù)窗口控件常用屬性數(shù)據(jù)窗口窗口控件常用函數(shù): Retrieve()檢索數(shù)據(jù)update()更新表數(shù)據(jù) InsertRow(long row) 在第row行插入一空行, row=0表示在末尾插入DeleteRow(long row) 刪除第row行g(shù)etrow() 返回?cái)?shù)據(jù)窗口當(dāng)前行的行號(hào)getcolumn() 得到數(shù)據(jù)窗口控件當(dāng)前列的列號(hào) GetColumnName( ) 得到數(shù)

31、據(jù)窗口控件當(dāng)前列的列名RowCount() 返回?cái)?shù)據(jù)窗口控件當(dāng)前可用行數(shù)。小結(jié)ScrollToRow (long row ) 滾動(dòng)數(shù)據(jù)窗口控件的顯示到row行,該函數(shù)改變當(dāng)前行但不改變當(dāng)前列。GetItemDecimal(long row,int column)得到數(shù)據(jù)窗口控件中row行、col列的數(shù)據(jù)值。返回值為DecimalGetitemnumber(long row,int column)得到數(shù)據(jù)窗口控件中row行、col列的數(shù)據(jù)值。返回值為NumberGetitemstring(long row,int column) 得到數(shù)據(jù)窗口控件中row行、col列的數(shù)據(jù)值。返回值為stringGetItemDate(long row,int column) 得到數(shù)據(jù)窗口控件中row行、col列的數(shù)據(jù)值。返回值為DateGetItemDateTime(lo

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論