第08章教案數(shù)據(jù)窗口對象的應(yīng)用riuiso(powerbuilder)_第1頁
第08章教案數(shù)據(jù)窗口對象的應(yīng)用riuiso(powerbuilder)_第2頁
第08章教案數(shù)據(jù)窗口對象的應(yīng)用riuiso(powerbuilder)_第3頁
第08章教案數(shù)據(jù)窗口對象的應(yīng)用riuiso(powerbuilder)_第4頁
第08章教案數(shù)據(jù)窗口對象的應(yīng)用riuiso(powerbuilder)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第8章 數(shù)據(jù)窗口對象的應(yīng)用 創(chuàng)建數(shù)據(jù)窗口對象使它和數(shù)據(jù)庫相連接,執(zhí)行數(shù)據(jù)的檢索、修改、刪除等工作。注意:數(shù)據(jù)窗口對象只有通過數(shù)據(jù)窗口控件才能發(fā)揮它的巨大作用。 8.1 數(shù)據(jù)窗口控件的使用數(shù)據(jù)窗口控件是窗口中一個標(biāo)準(zhǔn)的PowerBuilder控件,它放在窗口中,是窗口的一部分,不能獨(dú)立存在。數(shù)據(jù)庫中的數(shù)據(jù)要在數(shù)據(jù)窗口對象中顯示和修改,必須依靠數(shù)據(jù)窗口控件。把數(shù)據(jù)窗口控件放在窗口中,使這個數(shù)據(jù)窗口控件和相應(yīng)的數(shù)據(jù)窗口對象關(guān)聯(lián),通過這個數(shù)據(jù)窗口控件完成數(shù)據(jù)窗口對象和數(shù)據(jù)庫的連接。 8.1.1 添加數(shù)據(jù)窗口控件 打開要添加數(shù)據(jù)窗口控件的窗口,選擇菜單【Insert|Control|DataWindow

2、】,在窗口的適當(dāng)位置點(diǎn)擊鼠標(biāo)左鍵,這時出現(xiàn)一個空白框,這個空白框就是數(shù)據(jù)窗口控件。8.1.2 更改數(shù)據(jù)窗口控件屬性 常用的屬性有:(1)DataObject:設(shè)置與數(shù)據(jù)窗口控件關(guān)聯(lián)的數(shù)據(jù)窗口對象名稱。(2)TitleBar復(fù)選框:選中表示數(shù)據(jù)窗口控件顯示標(biāo)題欄,否則不顯示。(3)Title文本框:定義標(biāo)題欄中標(biāo)題內(nèi)容。(4)ControlMenu復(fù)選框:選中表示在標(biāo)題欄上顯示控制按鈕,否則不顯示。(5)MaxBox、MinBox:選中這兩個復(fù)選框分別表示給標(biāo)題欄添加最大化按鈕和最小化按鈕。(6)HScrollBar VscrollBar:選擇這兩個復(fù)選框分別表示給數(shù)據(jù)窗口控件添加水平和垂直滾動

3、條。(7)Border復(fù)選框和Border Style下拉列表框:用來設(shè)置控件的邊界形狀。(8)Name:編輯框中的內(nèi)容表示數(shù)據(jù)窗口控件名稱,編寫腳本時使用該名稱。(9)Other標(biāo)簽頁:設(shè)置控件的位置、大小及鼠標(biāo)在控件中的形狀。 8.1.3 設(shè)置數(shù)據(jù)窗口控件中關(guān)聯(lián)的數(shù)據(jù)窗口對象 (1)靜態(tài)關(guān)聯(lián)選擇數(shù)據(jù)窗口控件,點(diǎn)擊右鍵,選擇Properties進(jìn)入數(shù)據(jù)窗口控件的屬性視窗,在DataObject框中輸入要關(guān)聯(lián)的數(shù)據(jù)窗口對象。(2)動態(tài)關(guān)聯(lián)程序運(yùn)行過程中,若一個數(shù)據(jù)窗口控件在不同情況下要關(guān)聯(lián)不同的數(shù)據(jù)窗口對象,這時就要用腳本控制,實(shí)現(xiàn)動態(tài)關(guān)聯(lián)。腳本控制語句如下:dw_controlname.da

4、taobject=“d_objectname”。 8.2 操作數(shù)據(jù)窗口對象中數(shù)據(jù)的前提 程序運(yùn)行時,要操縱數(shù)據(jù)窗口對象中的數(shù)據(jù),就要在程序中連接數(shù)據(jù)庫,讓數(shù)據(jù)窗口對象與數(shù)據(jù)庫之間建立連接。必須首先創(chuàng)建應(yīng)用程序與數(shù)據(jù)庫之間的連接,應(yīng)用程序與數(shù)據(jù)庫之間的連接是通過事務(wù)對象完成的。 (1)什么是事務(wù)對象事務(wù)對象是一個傳遞應(yīng)用程序與數(shù)據(jù)庫之間信息的一個變量,它駐留在內(nèi)存中,存儲著用于連接數(shù)據(jù)庫及從數(shù)據(jù)庫得到反饋的所有信息,它定義了數(shù)據(jù)庫與應(yīng)用程序連接的參數(shù)。一個應(yīng)用程序開始創(chuàng)建時,系統(tǒng)就自動定義一個名為SQLCA的默認(rèn)全局變量。8.2 操作數(shù)據(jù)窗口對象中數(shù)據(jù)的前提 (2)事務(wù)對象的屬性事務(wù)對象共有15

5、個屬性,可以分為兩類,一類有10個,用來描述連接數(shù)據(jù)庫的信息,如所連接的數(shù)據(jù)庫的名稱;另一類有5個,用來接受有關(guān)數(shù)據(jù)庫或最近執(zhí)行SQL語句的情況或狀態(tài),如數(shù)據(jù)庫操作是否成功。 AutoCommit:這是一個布爾型屬性。它指定是否將數(shù)據(jù)庫設(shè)置成自動提交所有事物。當(dāng)它為TRUE時,由系統(tǒng)自動提交所有事務(wù),當(dāng)為FALSE時,用戶必須自己在程序中設(shè)置事務(wù)管理,并在需要的時候?qū)?shù)據(jù)庫進(jìn)行提交事務(wù)。它的默認(rèn)值是FALSE。DataBase:這是一個字符串類型的屬性。它指定要連接的數(shù)據(jù)庫名稱。DBMS:這是一個字符串類型的屬性。它指定應(yīng)用程序所使用的數(shù)據(jù)庫管理系統(tǒng)的名稱,如ODBC。 DBPass:這是一個

6、字符串類型的屬性。它描述的是用戶連接數(shù)據(jù)庫的密碼。Lock:這是一個字符串類型的屬性。它是數(shù)據(jù)庫的保護(hù)級別,一般不必給出。LogID:這是一個字符串類型的屬性。它用于指定登錄數(shù)據(jù)庫服務(wù)器所需的用戶名或用戶的ID。 8.2 操作數(shù)據(jù)窗口對象中數(shù)據(jù)的前提SQLCode:這是一個長整型(Long)的屬性。它用來指定最近一次數(shù)據(jù)庫操作成功與否的代碼,共有三個返回值:0表示操作成功;100表示操作成功,但沒有返回?cái)?shù)據(jù);-1表示操作失敗。用戶可以從SQLDBCode或SQLErrTex中得到具體詳細(xì)的錯誤信息。SQLDBCode:這是一個長整型的屬性。它包含了數(shù)據(jù)庫錯誤代碼,不同的數(shù)據(jù)庫,錯誤代碼不同,但

7、大部分?jǐn)?shù)據(jù)庫廠商都用0表示操作成功,100表示成功但沒有檢索到數(shù)據(jù),負(fù)數(shù)表示沒有成功。SQLErrText:這是一個字符串類型的屬性。它包含了數(shù)據(jù)庫操作的錯誤信息。 UserID:這是一個字符串類型的屬性。它指定了連接數(shù)據(jù)庫的用戶名或用戶的ID。8.2.1 使用系統(tǒng)默認(rèn)的事務(wù)對象SQLCA 系統(tǒng)提供了一個默認(rèn)的全局事務(wù)對象SQLCA,可以在程序的任何地方使用這個事物對象。8.2.1 使用系統(tǒng)默認(rèn)的事務(wù)對象SQLCA下面是一個連接ODBC數(shù)據(jù)庫所用的代碼:/ Profile ExerciseSQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm

8、 = Connectstring=DSN=exercise這段腳本用來設(shè)置事務(wù)對象的屬性,一般把它寫在應(yīng)用程序的Open事件中8.2.2 自己定義事務(wù)對象 一般情況下,使用系統(tǒng)提供的全局事務(wù)處理對象SQLCA就可以了,但有時需要連接多個數(shù)據(jù)庫,這時只用一個SQLCA就不夠了,需要用戶自己定義事務(wù)對象,因?yàn)橐粋€事務(wù)對象只能保存一個數(shù)據(jù)庫的連接信息。 自己定義事務(wù)對象步驟如下:(1)確定事物對象變量的作用域和名稱像變量一樣,事務(wù)對象的作用域有局部的、實(shí)例的、全局的和共享的,聲明的地方?jīng)Q定了事務(wù)對象的作用域,事務(wù)對象變量的類型是transaction。聲明事務(wù)對象的格式為:transaction 用

9、戶自定義的事務(wù)對象名如要聲明一個全局的事務(wù)對象sqluser,則在定義全局變量的位置書寫transaction sqluser聲明語句。8.2.2 自己定義事務(wù)對象 (2)創(chuàng)建事務(wù)對象實(shí)例上面只是聲明了一個自定義的事務(wù)對象sqluser,但該事務(wù)對象并沒有創(chuàng)建。創(chuàng)建語句如下:自定義的事務(wù)對象名=create transaction如要創(chuàng)建事物對象sqluser,描述創(chuàng)建的語句為sqluser=create transaction。要使得打開應(yīng)用后,就能使用自己定義的事務(wù)處理對象sqluser,則該語句必須寫在應(yīng)用的Open事件中。(3)確定事務(wù)對象變量的屬性自定義事務(wù)對象的屬性設(shè)置可參考前面的

10、SQLCA屬性的設(shè)置,將SQLCA信息拷貝到應(yīng)用的Open事件后,將其SQLCA改為sqluser即可。/ Profile Exercisesqluser.DBMS = ODBCsqluser.AutoCommit = Falsesqluser.DBParm = Connectstring=DSN=exercise(4)注意:系統(tǒng)提供的默認(rèn)事務(wù)對象SQLCA,用戶不能聲明、創(chuàng)建、刪除它,系統(tǒng)會自動處理對它的操作;給事務(wù)對象賦值時,只能給事物對象的屬性一一賦值,不能將一個事物對象直接賦給另一事務(wù)對象。8.2.3連接數(shù)據(jù)庫 定義了事務(wù)對象之后,要在數(shù)據(jù)窗口對象中處理數(shù)據(jù)庫中數(shù)據(jù),還必須配合其它語句

11、一起使用。 (1)connect:數(shù)據(jù)庫連接該語句表示與數(shù)據(jù)庫連接。它的語句結(jié)構(gòu)是:connect using 事務(wù)對象名;若是使用sqlca,可以使用兩種格式:connect;connect using sqlca;上面兩條語句作用一樣,也就是說使用系統(tǒng)默認(rèn)的sqlca,語句中可以指明,也可以不指明,默認(rèn)指sqlca。下面兩條語句作用不同:connect;connect using sqluser;第一條使用默認(rèn)的事務(wù)對象sqlca,第二條使用自定義的事務(wù)對象sqluser。(2)disconnet:斷開與數(shù)據(jù)庫的連接該語句表示斷開與數(shù)據(jù)庫的連接,它的語法結(jié)構(gòu)是:disconnect usi

12、ng 事務(wù)對象名;使用方法同(1)connect。8.2.3連接數(shù)據(jù)庫(3)commit:提交事務(wù)用來提交當(dāng)前所做的一切事務(wù),實(shí)際上是向數(shù)據(jù)庫提交所有數(shù)據(jù)修改工作。它的語句結(jié)構(gòu)及使用方法同(1)connect。(4)rollback:取消事務(wù)它用來回滾當(dāng)前的所有事務(wù),實(shí)際上是取消自上次提交事務(wù)以來的這一段時間內(nèi)所有數(shù)據(jù)修改工作。 它的語句結(jié)構(gòu)及使用方法同前面(1)connect。 (5)settransobject():事務(wù)對象與數(shù)據(jù)窗口控件關(guān)聯(lián)通過connect語句,將一個事務(wù)對象與數(shù)據(jù)庫連接起來了,但為了能使一個具體的數(shù)據(jù)窗口訪問數(shù)據(jù)庫,還必須把數(shù)據(jù)窗口控件和事務(wù)對象關(guān)聯(lián)起來。關(guān)聯(lián)語句中一

13、定要使用數(shù)據(jù)窗口控件名,而不是數(shù)據(jù)窗口對象名。使用下面語句將數(shù)據(jù)窗口控件和事務(wù)對象關(guān)聯(lián)。語句格式如下:DWControlname.settransobject(TransactionObjectName)如 讓 d w _ 1 數(shù) 據(jù) 窗 口 控 件 與 s q l c a 事 務(wù) 對 象 關(guān) 聯(lián) , 語 句 寫 為dw_1.settransobject(sqlca)。 該語句一般寫在數(shù)據(jù)窗口控件所在窗口的Open事件中。8.3 操作數(shù)據(jù)窗口中的數(shù)據(jù) 8.3.1 檢索數(shù)據(jù)(retrieve) 檢索數(shù)據(jù)使用函數(shù)retrieve。(1)函數(shù)不帶參數(shù)格式:dwcontrolname.retrieve

14、()如數(shù)據(jù)窗口控件dw_1檢索數(shù)據(jù),可用dw_1.retrieve()語句。這種情況的使用簡單,用于沒有設(shè)定任何參數(shù)的數(shù)據(jù)窗口對象。(2)函數(shù)帶有n個參數(shù),格式是dwcontrolname.retrieve(參數(shù)1,參數(shù)2,參數(shù)n),如數(shù)據(jù)窗口控件dw_1檢索數(shù)據(jù),可用dw_1.retrieve(參數(shù)1,參數(shù)2,參數(shù)n)。 要特別注意,這里參數(shù)的個數(shù)、類型、與數(shù)據(jù)窗口對象中定義的變量個數(shù)、類型要相對應(yīng),若這里給定的參數(shù)個數(shù)少于數(shù)據(jù)窗口對象中定義的變量個數(shù),程序運(yùn)行時就會出現(xiàn)錯誤;若這里的參數(shù)個數(shù)多于數(shù)據(jù)窗口對象中定義的變量個數(shù),程序運(yùn)行時就會自動去掉后面多余的參數(shù)。 檢索函數(shù)多用于settra

15、nsobject(sqlca)語句后面。 (3)函數(shù)的返回值函數(shù)返回一個整型值,表示從數(shù)據(jù)庫中檢索到的行數(shù);若沒有匹配的結(jié)果,則返回值是0;若檢索中出現(xiàn)了錯誤,返回值是-1。 8.3.1 檢索數(shù)據(jù)(retrieve)(4)執(zhí)行函數(shù)時觸發(fā)的事件DBError:檢索失敗時發(fā)生。RetrieveRow:每行數(shù)據(jù)檢索出來以后發(fā)生。RetrieveStart:檢索開始時發(fā)生。RetrieveEnd:檢索完成后發(fā)生。(5)典型應(yīng)用dw_1.settransobject(sqlca)dw_1.retrieve( )將數(shù)據(jù)窗口與事務(wù)對象關(guān)聯(lián),并檢索數(shù)據(jù)窗口中數(shù)據(jù)。 8.3.2 更新數(shù)據(jù)(update)Upda

16、te函數(shù)用于把當(dāng)前數(shù)據(jù)窗口中從上次執(zhí)行update或retrieve函數(shù)以來進(jìn)行的所有修改保存到數(shù)據(jù)庫中。(1)常用語法形式如下:DWcontrolname.Update()如更新數(shù)據(jù)窗口控件dw_1,腳本寫為:dw_1.update()。 8.3.2 更新數(shù)據(jù)(update)(2)函數(shù)返回值若返回值是1表示成功,返回值是-1表示失敗。(3)執(zhí)行函數(shù)時觸發(fā)的事件DBErrorSQLPreviewUpdateStartUpdateEnd(4)典型應(yīng)用if dw_1.update()=1 thencommit;elserollback;end if數(shù)據(jù)窗口中數(shù)據(jù)更新正確則提交事務(wù)(保存數(shù)據(jù)),否則

17、取消事務(wù)(不保存數(shù)據(jù))。 8.3.3 從數(shù)據(jù)窗口控件中讀數(shù)據(jù)(getitemstring) 處理數(shù)據(jù)時,經(jīng)常要從數(shù)據(jù)窗口中讀出數(shù)據(jù),然后再進(jìn)行處理。(1)常用語法形式:DWcontrolname.getitemstring(rownum,column)DWcontrolname.getitemnumber(rownum,column)DWcontrolname.getitemdate(rownum,column)DWcontrolname.getitemdatetime(rownum,column)DWcontrolname.getitemdecimal(rownum,column)如從數(shù)據(jù)窗

18、口dw_1中取出第二行第一列“name”字段值,這里假設(shè)“name”字段是字符型,則用以下腳本:dw_1.getitemstring(2,“name”)或用dw_1.getitemstring(2,1)。getitemstring表示從數(shù)據(jù)窗口中取出字符型數(shù)據(jù);rownum表示所取數(shù)據(jù)在數(shù)據(jù)窗口中的行號;column表示所取字段,可用字段名或表示列號的整數(shù)表示,若用字段名表示,要將字段名用引號引起來;若用表示列號的整數(shù),用數(shù)字1、2、表示。Getitemnumber:所取字段的類型是不帶小數(shù)的數(shù)值型。Getitemdate:所取字段的類型是日期型。Getitemdatetime:所取字段的類型

19、是日期時間型。Getitemdecimal:所取字段的類型是帶小數(shù)的數(shù)值型。 8.3.3 從數(shù)據(jù)窗口控件中讀數(shù)據(jù)(getitemstring)(2)典型應(yīng)用string name1name1=dw_1.getitemstring(2,“name”)messagebox(“第二條記錄的名字是:”,name1)從dw_1的第二行中取出“name”字段,然后以對話框的方式顯示出來。 8.3.4 將數(shù)據(jù)寫到數(shù)據(jù)窗口控件中(setitem)處理數(shù)據(jù)時,除了要從數(shù)據(jù)窗口中讀出數(shù)據(jù),有時還要把數(shù)據(jù)寫到數(shù)據(jù)窗口中。(1)語法形式:DWcontrolname.setitem(rownum,column,valu

20、e)rownum和column與前面的含義相同,value表示要放在數(shù)據(jù)窗口中的值。(2)典型應(yīng)用string name1name1=dw_1.getitemstring(2,“name”)dw_2.setitem(1,“name”,name1)從dw_1的第二行中取出“name”字段,然后將取出的值放在dw_2中的第一行“name”字段上。8.3.5 對數(shù)據(jù)窗口控件中的數(shù)據(jù)進(jìn)行排序(setsort)運(yùn)行程序數(shù)據(jù)窗口按原排序顯示數(shù)據(jù),有時希望根據(jù)不同情況對不同字段進(jìn)行再排序,這時就要用到setsort()和sort()函數(shù)。(1)語法形式:dwcontolname.setsort(sortex

21、pression)dwcontolname.sort()sortexpression是一個字符串,表示排序條件表達(dá)式,包括要排序的列名或列號以及排序方式,具體形式是一個列名后加上一個空格,然后是字符A或D,表示升序或降序,若對多列同時排序,它們之間用逗號隔開。 說明:排序字段若用列號,表示為#1,#2,#n,注意這里的列號前面要加上#符號,與前面的getitemstring有區(qū)別。 (2)函數(shù)返回值這兩個函數(shù)的返回值一樣,1表示成功,-1表示失敗。(2)典型應(yīng)用例1:dw_1.setsort(“name A”) dw_1.sort()將數(shù)據(jù)窗口控件dw_1中的數(shù)據(jù)按“name”字段遞增排序。若

22、“name”字段的列號是1,上述第一行腳本可寫為:dw_1.setsort(“#1 A”)。8.3.6 對數(shù)據(jù)窗口控件中的數(shù)據(jù)進(jìn)行過濾(setfilter) 對數(shù)據(jù)窗口中的數(shù)據(jù)進(jìn)行過濾,但又不想重新從數(shù)據(jù)庫中檢索數(shù)據(jù),這時就要用到setfilter()和filter()兩個函數(shù)。(1)語法形式:dwcontolname.setfilter(filterexpression)dwcontolname.filter()filterexpression是一個字符串,表示過濾條件表達(dá)式,它是一個邏輯表達(dá)式,其中各關(guān)系表達(dá)式之間用邏輯運(yùn)算符and、or、not連接。在過濾表達(dá)式中可以使用列名或列號,列號

23、使用方法同上面的setsort()函數(shù)。(2)函數(shù)的返回值1表示成功,-1表示失敗。(3)典型應(yīng)用例1:過濾條件中包含數(shù)值型常量。dw_1.setfilter(“math_score=70 and math_score90”)dw_1.filter()數(shù)據(jù)窗口控件dw_1的過濾結(jié)果:顯示“math_score”字段的值介于70和90之間的記錄(包含70,不包含90)。8.3.7 重新設(shè)置數(shù)據(jù)窗口中的數(shù)據(jù)(reset) 在使用retrieve函數(shù)進(jìn)行檢索之前,系統(tǒng)自動調(diào)用該函數(shù)重置數(shù)據(jù)窗口,不必在retrieve函數(shù)前使用該函數(shù)。(1)語法形式:dwcontrolname.reset()此函數(shù)不

24、要求參數(shù)。(2)函數(shù)的返回值1表示成功,-1表示失敗。(3)典型應(yīng)用dw_2.reset()dw_2.insertrow(0)重置數(shù)據(jù)窗口控件dw_2,清除數(shù)據(jù)窗口緩沖區(qū)內(nèi)的所有行后,添加一條空白記錄。 8.3.8 插入記錄(insertrow) 錄入數(shù)據(jù),添加新記錄,就要用到insertrow函數(shù)。要想將插入的記錄保存到數(shù)據(jù)庫中,還應(yīng)執(zhí)行更新命令。(1)語法形式:DWcontrolname.insertrow(rownumber)其中rownumber表示插入行的行號,它是一個long型變量。若它的值是0,表示在數(shù)據(jù)窗口的最后插入一條記錄。(2)函數(shù)的返回值函數(shù)的返回值是long型,表示插入

25、行的行號;插入失敗返回值是-1。該函數(shù)只能插入一條記錄,但不能自動滾動到插入行,也不能自動把插入行設(shè)置為當(dāng)前行。(3)典型應(yīng)用long nnnn=dw_1.insertrow(0)dw_1.scrolltorow(nn)在數(shù)據(jù)窗口控件dw_1的最后插入一條空白記錄,并使屏幕滾動,使剛插入的記錄顯示在屏幕范圍內(nèi)。8.3.9 刪除記錄(deleterow) 處理數(shù)據(jù)時,刪除多余的記錄,就要用到deleterow函數(shù)。要將刪除記錄的結(jié)果保存到數(shù)據(jù)庫,還應(yīng)使用更新命令。(1)語法形式:DWcontrolname.deleterow(rownumber)其中rownumber表示要刪除的行號,它是一個l

26、ong型變量。若它的值是0,表示刪除當(dāng)前行。(2)函數(shù)的返回值1表示刪除成功,-1表示刪除失敗。(3)典型應(yīng)用long nn,row1nn=dw_1.rowcount()for row1=1 to nndw_1.deletrow(1)next刪除數(shù)據(jù)窗口控件dw_1中現(xiàn)有的所有記錄,記錄雖然刪除,但數(shù)據(jù)庫中數(shù)據(jù)并沒改變,我們改變的只是緩沖區(qū)中的內(nèi)容,要將刪除結(jié)果保存,需要編寫更新腳本。 8.3.10 滾動行(scrolltorow) 在緩沖區(qū)的尾部插入新記錄,新插入的記錄可能在數(shù)據(jù)窗口中看不到,這時就可以使用該函數(shù)將新插入的行滾動到視窗內(nèi)。(1)語法形式:DWcontrolname.scrol

27、ltorow(rownumber)其中rownumber表示要滾動到的行號,是一個long型,若rownum為0,則會滾動到數(shù)據(jù)窗口的第一行,若rownum的值大于數(shù)據(jù)窗口的總行數(shù),則會滾動到最后一行。滾動到的行就是數(shù)據(jù)窗口的當(dāng)前行。(2)函數(shù)的返回值1表示操作成功,-1表示操作失敗。(3)典型應(yīng)用dw_1.scrolltorow(dw_1.rowcount()滾動到數(shù)據(jù)窗口的最后一行。(4)觸發(fā)事件執(zhí)行該函數(shù)時,會觸發(fā)以下事件:ItemChanged、ItemFocusChanged、RowFocusChanged、ItemError。 8.3.11 選擇行(selectrow) 要加亮顯示

28、或取消加亮顯示行,就要用到該函數(shù)。(1)語法形式:DWcontrolname.selectrow(rownumber,select)其中rownumber表示要加亮或取消加亮的行號,是一個long型,若rownumber=0表示要加亮或取消加亮所有行;select是布爾型值,確定指定行是否被加亮顯示,若select的值是true表示加亮顯示,若是false表示取消加亮顯示。(2)函數(shù)的返回值1表示操作成功,-1表示操作失敗。(3)典型應(yīng)用(該腳本寫在數(shù)據(jù)窗口的clicked事件中)dw_1.selectrow(0,false)dw_1.selectrow(row,true)數(shù)據(jù)窗口控件dw_1

29、中點(diǎn)擊的行加亮顯示。(Row表示當(dāng)前行號)8.3.12 獲取當(dāng)前行(getrow) 此函數(shù)用來獲取當(dāng)前行的行號。(1)語法形式:DWcontrolname.getrow()該函數(shù)沒有參數(shù)。(2)函數(shù)的返回值函數(shù)的返回值是long類型,表示當(dāng)前行的行號;若數(shù)據(jù)窗口中沒有當(dāng)前行,則返回值是0;若發(fā)生錯誤,則返回值是-1。(3)典型應(yīng)用(該腳本寫在數(shù)據(jù)窗口的clicked事件中)dw_1.setrow(row)messagebox(“當(dāng)前選擇的行號是:”,dw_1.getrow()點(diǎn)擊數(shù)據(jù)窗口控件dw_1中的某行,就顯示點(diǎn)擊行的行號。 8.3.13 設(shè)置當(dāng)前行(setrow) 該函數(shù)用來接受一個行號

30、并且使它成為當(dāng)前行。(1)語法形式:DWcontrolname.setrow(rownumber)其中rownumber是一個long類型的變量,表示要指定為當(dāng)前行的行號。(2)函數(shù)的返回值操作成功返回1,操作失敗返回-1。(3)典型應(yīng)用dw_1.setrow(dw_1.getrow()- 1)使輸入焦點(diǎn)上移一行。(4)觸發(fā)事件執(zhí)行該函數(shù)時,會觸發(fā)以下事件:ItemFocusChanged、RowFocusChanged、ItemError、ItemChanged。 8.3.14 獲取當(dāng)前列(getcolumn) (1)語法形式:DWcontrolname.getcolumn()該函數(shù)沒有參數(shù)

31、,函數(shù)得到數(shù)據(jù)窗口中的當(dāng)前列。(2)函數(shù)的返回值返回值是當(dāng)前的列號,若返回值是0表示沒有任何列被選中,-1表示失敗。(3)典型應(yīng)用:該函數(shù)應(yīng)用較少。dw_1.setcolumn(dw_1.getcolumn()+ 1)使輸入焦點(diǎn)下移一列。8.3.15 設(shè)置當(dāng)前列(setcolumn) 要設(shè)置某列為數(shù)據(jù)窗口當(dāng)前列,可用setcolumn函數(shù)。比如數(shù)據(jù)窗口輸入數(shù)據(jù)之后,列焦點(diǎn)沒有移開,則該列值就無法取出,這時可用該函數(shù)將焦點(diǎn)從當(dāng)前列移到其它列,就可取出該列值了。(1)語法形式:DWcontrolname.setcolumn(columnnumber)其中columnnumber是一個字符串,表示要

32、設(shè)置為當(dāng)前列的列,列的表示可以用列名,也可以用列號,使用列號時,要在列號的前面加上符號“#”。(2)函數(shù)的返回值操作成功返回1,操作失敗返回-1。(3)典型應(yīng)用假定窗口中有兩個按鈕,分別是“新加記錄”、“存盤”,其中“新加記錄”按鈕上有語句dw_1.insertrow(0),“存盤”按鈕上的腳本如下:8.3.15 設(shè)置當(dāng)前列(setcolumn)long nn,row1string name1nn=dw_1.rowcount()dw_1.setcolumn(1)name1=dw_1.getitemstring(nn,“name”)if name1=“” or isnull(name1) the

33、nmessagebox(“提示:”,“名字字段不能為空。”)returnelseif dw_1.update()=1 thencommit;elserollback;end ifend if這里的“name”字段的列號不是1,這樣即使輸入數(shù)據(jù)時焦點(diǎn)停留在“name”字段上沒有移開,也能把該字段值取出來,只要該字段中值不為空,就能完成后面的更新工作。 8.4 數(shù)據(jù)窗口事件 8.4.1 Clicked (1)觸發(fā)條件當(dāng)用戶在數(shù)據(jù)窗口中單擊鼠標(biāo)左鍵時就觸發(fā)該事件。(2)事件所帶參數(shù)該事件帶有的四個參數(shù)如下:xpos:是一個integer類型的變量,表示單擊時所在位置的X坐標(biāo)。ypos:是一個inte

34、ger類型的變量,表示單擊時所在位置的Y坐標(biāo)。row:是一個integer類型的變量,表示單擊時的行號。dwo:是一個DWObject類型的變量,表示對單擊的列對象的引用。(3)事件的返回值事件的返回值是long類型,0是系統(tǒng)的默認(rèn)值,表示繼續(xù)操作;1表示不能改變輸入焦點(diǎn)。(4)典型示例點(diǎn)擊數(shù)據(jù)窗口的某列,數(shù)據(jù)按該列遞增排序,同時該列變?yōu)榧t色;再次單擊該列時,數(shù)據(jù)按該列遞減排序,同時該列變?yōu)樗{(lán)色。8.4.1 Clicked (4)典型示例首先在窗口中定義一個實(shí)例變量string last_sort,該變量用于存放上次的排序方式。string column_name,this_sort/定義兩個

35、變量,分別存放當(dāng)前點(diǎn)擊的列標(biāo)題及當(dāng)/前的排序方式。if dwo.type=text then/若點(diǎn)擊的是列標(biāo)題column_name=/取出的值是列名+“_t”column_name=left(column_name,len(column_name) - 2)/取出列名if last_sortcolumn_name+ a then/若以前的排序方式不是按該列遞增排序, /注意a前面有一空格。this_sort=column_name+ a/排序方式設(shè)置為按該列遞增排序。dwo.color=rgb(255,0,0)/將點(diǎn)擊的列變?yōu)榧t色。elsethis_sort=column_n

36、ame+ d/排序方式設(shè)置為按該列遞減排序。dwo.color=rgb(0,0,255) /將點(diǎn)擊的列變?yōu)樗{(lán)色。end ifthis.setsort(this_sort)/設(shè)置排序表達(dá)式this.sort()/進(jìn)行排序last_sort=this_sort/將當(dāng)前排序方式保存起來以備下次使用。end if8.4.2 DoubleClicked(1)觸發(fā)條件數(shù)據(jù)窗口中雙擊鼠標(biāo)左鍵時就觸發(fā)該事件。在觸發(fā)該事件之前,先觸發(fā)了單擊事件。(2)事件所帶參數(shù)同clicked事件所帶參數(shù)。(3)事件的返回值該事件只有一個返回值0,表示繼續(xù)操作。(4)典型示例雙擊數(shù)據(jù)窗口的記錄時,顯示雙擊的行號、列名、X坐標(biāo)

37、、Y坐標(biāo)。string is_columnnameif dwo.type=column thenis_columnname=end ifmessagebox(用戶雙擊數(shù)據(jù)窗口控件,所在行號:+string(row)&+r所在列是:+is_columnname+r所在X坐標(biāo)是:+string(xpos)&+r所在Y坐標(biāo)是:+string(ypos)8.4.3 ItemChanged(1)觸發(fā)條件當(dāng)修改了數(shù)據(jù)窗口中的某個數(shù)據(jù)項(xiàng)的值,然后按Tab鍵移出,鼠標(biāo)單擊數(shù)據(jù)窗口外的部分或是用戶按了Enter時,將會觸發(fā)該事件。一般在該事件中做一些檢查性工作,它是檢驗(yàn)層中的最后

38、一層,只有數(shù)據(jù)通過了所有的其它層的檢驗(yàn)后才會發(fā)生這個事件。(2)事件所帶參數(shù)該事件帶有的三個參數(shù)如下:row:是一個integer類型的變量,表示修改的數(shù)據(jù)項(xiàng)所在的行號。dwo:是一個DWObject類型的變量,表示對擁有修改項(xiàng)的列對象的引用。data:是一個string類型的變量,表示修改后的數(shù)據(jù)。(3)事件的返回值該事件有三個返回值如下:0:表示接受用戶輸入的數(shù)據(jù)。這是系統(tǒng)默認(rèn)的返回值。1:表示拒絕用戶輸入的數(shù)據(jù),并且不允許改變輸入焦點(diǎn)。這時會觸發(fā)ItemError事件。2:表示拒絕用戶輸入的數(shù)據(jù),但允許用戶改變輸入焦點(diǎn)。這時不會觸發(fā)ItemError事件,并且該項(xiàng)的值還是原來的值。8.4

39、.3 ItemChanged(4)典型示例當(dāng)前數(shù)據(jù)窗口中有一字段sex1表示性別,要求該字段輸入的值只能是M或F,否則不許改變輸入焦點(diǎn)。if =sex1 thenif not match(data,MF) thenreturn 1end ifend if8.4.4 RowFocusChanged (1)觸發(fā)條件數(shù)據(jù)窗口的當(dāng)前行發(fā)生變化,就會觸發(fā)該事件。(2)事件所帶參數(shù)該事件只有一個參數(shù)currentrow,它是一個long類型的變量,表示當(dāng)前行的行號。(3)事件的返回值 該事件只有一個返回值0,表示繼續(xù)操作。 8.4.3 ItemChanged(4)典型示例當(dāng)數(shù)據(jù)窗口的當(dāng)前行

40、號發(fā)生變化時,就顯示當(dāng)前行行號及總行數(shù)。this.selectrow(0,false)this.selectrow(currentrow,true)messagebox(提示:,當(dāng)前的行號是+string(currentrow)+&r數(shù)據(jù)窗口中共有+string(this.rowcount()+行)8.4.5 RetrieveStart(1)觸發(fā)條件數(shù)據(jù)窗口開始執(zhí)行SQL SELECT語句時,就會觸發(fā)該事件。(2)事件所帶參數(shù) 該事件沒有參數(shù)。 (3)事件的返回值該事件有三個返回值如下:0:表示繼續(xù)操作。1:表示不執(zhí)行檢索操作。2:表示執(zhí)行檢索操作,但不刪除原來數(shù)據(jù)窗口中的行和緩沖區(qū)中

41、的數(shù)據(jù)。若返回的是該值,則新檢索的數(shù)據(jù)會添加到原來數(shù)據(jù)窗口數(shù)據(jù)的后面,這樣做一般會造成數(shù)據(jù)的重復(fù)。8.4.5 RetrieveStart(4)典型示例只檢索數(shù)據(jù)窗口中的前200條記錄。long nnnn=this.rowcount()choose case nncase 200return 1case is 200return 0end choose8.4.6 RetrieveEnd (1)觸發(fā)條件數(shù)據(jù)窗口從數(shù)據(jù)庫中檢索完數(shù)據(jù)之后,就會觸發(fā)該事件。(2)事件所帶參數(shù)該事件只有一個參數(shù)rowcount,表示檢索出來的總行數(shù)。(3)事件的返回值該事件只有一個返回值0,表示繼續(xù)操作。(4)典型示例數(shù)

42、據(jù)檢索完畢后,彈出對話框,顯示檢索出來的記錄數(shù)。messagebox(提示:,數(shù)據(jù)已檢索完畢,+&r共有+string(rowcount)+條記錄)8.4.7 RetrieveRow (1)觸發(fā)條件每行數(shù)據(jù)從數(shù)據(jù)庫檢索到數(shù)據(jù)窗口時,就會觸發(fā)該事件。(2)事件所帶參數(shù)該事件只有一個參數(shù)row,表示剛被檢索出來的行號。(3)事件的返回值該事件有兩個返回值:0:表示繼續(xù)操作。1:表示終止檢索數(shù)據(jù)。(4)典型示例當(dāng)檢索到字段“name”的值是“wang”時,就停止檢索;否則繼續(xù)檢索。string name1name1=this.getitemstring(row,name)choose cas

43、e name1case wangreturn 1case elsereturn 0end choose8.4.8 UpdateStart (1)觸發(fā)條件在調(diào)用update()函數(shù)后,并且在這個函數(shù)被提交到數(shù)據(jù)庫之前,就會觸發(fā)該事件。(2)事件所帶參數(shù)該事件沒有參數(shù)。(3)事件的返回值該事件有兩個返回值:0:表示繼續(xù)操作。1:表示不要執(zhí)行update操作。(4)典型示例在更新數(shù)據(jù)之前,先檢驗(yàn)字段“name”的值是否有空白的,若有則不存盤;只有所有記錄的“name”字段都不為空白才將數(shù)據(jù)存盤。8.4.8 UpdateStartstring name1,sign=Tlong nn,row1nn=this.rowcount()for row1=1 to nnname1=this.getitemstring(row1,name)if name1= or isnull(name1) thensign=Fexitend ifnextif sign=F thenmessagebox(提示:,名字字段有空白,不能存盤。)return 1elsereturn 0end if8.4.9 UpdateEnd (1)觸發(fā)條件對數(shù)據(jù)庫的所有更新操作全部執(zhí)行完畢后,就會觸發(fā)該事件。(2)事件所帶參數(shù)該事件有三個參數(shù)如下:rowsinserted

溫馨提示

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

最新文檔

評論

0/150

提交評論