1. 程式人生 > >PowerBuilder資料視窗控制元件與資料庫有關的函式

PowerBuilder資料視窗控制元件與資料庫有關的函式

本節介紹的主要內容如下:
· 與資料庫有關的函式

· 行操作

· 列操作

· 資料操作


PowerBuilder為資料視窗控制元件提供了豐富的函式,這些函式使使用者能夠在使用資料視窗控制元件時得心應手。


與資料庫有關的函式

這類函式完成與資料庫有關的功能。



一、連線資料庫


連線資料庫也就是指定事務物件。PowerBuilder提供了兩個函式:SetTrans()和SetTransObject()。

語法格式:

dw_control.SetTrans(TransactionObject)

dw_control.SetTransObject(TransactionObject)

其中,dw_control是所使用的資料視窗控制元件,transactionObject是所要指定的事務物件。

這兩個函式有一個重要的區別就是在使用SetTrans()函式時,使用者不需做任何資料初始化或事務物件初始化工作。使用者只需要在這裡填充一個事務物件,PB就會自動完成對該事物物件的初始化以及和資料庫連線的工作。而使用SetTransObject()函式時,使用者必須首先把所用的事務物件連線到資料庫上。

但是,這並不意味著SetTrans()函式比SetTransObject()函式更好,使用SetTrans()函式時,每呼叫一次函式必須連線一次資料庫,因為這個函式在每個事務處理的末端都會執行Disconnect語句。與此相反,使用SetTransObject()函式可以為資料庫維持一個開放性的連線。因此在一般情況下,為了提高效率,總是採用SetTransObject()函式。

這兩個函式都是成功時返回1,發生錯誤時返回-1。


二、檢索資料


用於檢索資料的函式只有一個,就是Retrieve()函式。

語法格式:

dw_control.Retrieve()

如果資料視窗控制元件上的資料視窗物件是有檢索引數的,就要在這個函式呼叫時加上檢索引數。而且檢索引數必須和資料視窗物件中定義順序一致。

此函式返回一個長整型的資料,代表檢索出來的資料行數。如果發生錯誤,將返回-1。


三、更新資料


當用戶對資料視窗物件內的資料修改後,想把這些修改反映到資料庫中去時,必須使用Update()函式。

語法格式:

dw_control.Update()

這個更新可能成功,也可能失敗。一般在這個函式被呼叫之後,總是要做一個檢查。請看下面的例子:

Int li_return

li_return = dw_1.Update()

IF li_return = 1 THEN

COMMIT USING SQLCA;

ELSE

ROLLBACK USING SQLCA;

END IF

在這段程式碼中,首先對資料視窗控制元件進行更新操作。但是更新只是把資料寫入到客戶機的記憶體,並沒有提交到資料庫中。如果更新成功,就把它提交到資料庫中,如果更新失敗,就回滾到當前的事務。


行操作

行操作的函式主要是對資料庫中的資料進行插入、刪除或選擇操作。



一、插入行


在DataWindow中插入一行,可以使用InsertRow()函式。

語法格式:

dw_control.InsertRow(rownumber)

dw_control是資料視窗控制元件名,rownumber是要插入行的的行號。如果這個引數為0,代表在當前DataWindow的最後一行插入一空行。

InsertRow()函式返回一個長整型值,以此來代表插入的行號。如果插入失敗,則返回-1。




二、刪除行


要刪除DataWindow內的一行資料,則要使用DeleteRow()函式。

語法格式:

dw_control.DeleteRow(rownumber)

其中rownumber是要刪除的行號。如果該值為0,表示刪除當前行。如果刪除成功,返回1,失敗則返回-1。




三、設定當前行


如果要設定DataWindow中的某行為當前行,可以使用SetRow()函式。

語法格式:

dw_control.SetRow(rownumber)

其中rownumber是要設定為當前行的行號。如果函式返回1表示成功,返回-1代表失敗。




四、獲取當前行


如果想要設定DataWindow中的某行為當前行,可以使用GetRow()函式。

語法格式:

dw_control.GetRow()

該函式沒有引數,它返回一個長整型,代表當前行號。如果返回-1代表失敗。如果返回0代表沒有選中任何行。




五、選擇行


如果想要在DataWindow中加亮顯示某一行或取消加亮顯示某一行,可以使用SelectRow()函式。

語法格式:

dw_control.SelectRow(rownumber,select)

其中,rownumber表示要加亮或者取消加這顯示的行號,0表示所有行。select是一個布林型別的值,TRUE表示加亮,FALSE表示取消加亮顯示。該函式返回1時表示成功,返回-1時表示失敗。

如果想要直接設定某一行為加亮,需要首先取消其它行的加亮顯示狀態,採用如下的兩行程式碼:

dw_1.SelectRow(0,FALSE)

dw_1.SelectRow(rownumber,TRUE)




六、獲取選擇行


如果想要獲取當前DataWindow中加亮顯示的行,可以使用GetSelectRow()函式。

語法格式:

dw_control.GetSelectRow(rownumber)

其中,rownumber為開始查詢的行的行號,0表示從頭開始查詢。該函式返回一個長整數,表示從rownumber開始查詢第一個加亮顯示的行的行號。如果失敗返回0。




七、滾動行


如果在DataWindow的末尾插入一行資料,而當前行是在DataWindow的中央,那麼這種插入可能不會被使用者覺察。為了改變這種情況,可以滾動行到DataWindow的末尾,這樣使用者就能發現新的改變。要滾動行,可以使用ScrollToRow()函式。

語法格式:

dw_control.ScrollToRow(rownumber)

該函式返回1時表示成功,返回-1時表示失敗。

與ScrollToRow()函資料功能相關的還有如下幾個函式:

ScrollPriorRow():向上滾動一行

ScrollNextRow():向下滾動一行


列操作

列操作類的函式主要是選擇指定的列和獲取列的資訊。



一、獲取列


如果要獲取當前的列號,可以使用GetColumn()函式,如果要獲取當前的列名,可以使用GetColumnName()函式。

語法格式:

dw_control.GetColumn()

dw_control.GetColumnName()

這兩個函式都沒有引數,GetColumn()函式返回一個長整型值,代表當前的列號,GetColumnName()函式返回當前列的列名。如果返回0,表示當前沒有任何列被選擇返回-1表示失敗。




二、設定列


要設定某一列為DataWindow中的當前列,可以使用SetColumn()函式。

語法格式:

dw_control.SetColumn(column)

其中column既可以是列號,也可以是列名。當該函式返回1時表示成功,返回-1時表示失敗。


資料操作

資料操作類的函式主要是對DataWindow中的資料進行獲取、設定。



一、獲取資料


如果要從DataWindow的指定行和列中獲取資料,就要使用GetItem系列的函式。這個系列的函式共有五個,分別是對字串、數字、日期、日期時間和小數。

語法格式:

dw_control.GetItemString(rownumber,column)

dw_control.GetItemNumber(rownumber,column)

dw_control.GetItemDate(rownumber,column)

dw_control.GetItemDateTime(rownumber,column)

dw_control.GetItemDecimal(rownumber,column)

其中,rownumber引數表示行號,column可以是列號或列名。




二、設定資料


與獲取資料所用的函式不同,設定DataWindow內指定行列處的資料只要使用一個SetItem()函式就可以了。

語法格式:

dw_control.SetItem(rownumber, column, value)

其中rownumber表示行號,column可以是列號,也可以是列名,value表示要設定的值。但是該必須與DataWindow中指定的行列處的資料型別一致,不然PowerBuilder會報錯。

SetItem()函式返回1時表示成功,返回-1時表示失敗。




三、資料排序


如果希望對DataWindow內的資料進行重新排序,而又不想重新從資料庫中檢索資料,可以使用SetSort()和Sort()函式。這兩個函式一起完成對DataWindow進行排序的功能。其中SetSort()函式用於設定如何排序,Sort()函式用於對DataWindow實際進行排序。

語法格式:

dw_control.SetSort(expression)

dw_control.Sort()

其中expression是一個字串,表示排序的表示式,它的具體值是一個列名後面加一個空格,然後是"A",表示升序,或"D",表示降序。如果有多個列要同時進行排序,它們之間用逗號隔開。

例:dw_1.SetSort("name A,xh D")

這兩個函式都是返回1表示成功,返回-1表示失敗。

四、資料過濾


如果希望對DataWindow內的資料進行過濾而不重新從資料庫中檢索資料,可以使用SetFilter()和Filter()函式。它們一起完成對資料的過濾功能。其中SetFilter()函式用來設定過濾條件,Filter()函式用於對DataWindow進行過濾。

語法格式:

dw_control.SetFiter(expression)

dw_control.Fiter()

其中expression是一個字串,表示過濾的條件,它實際是一個邏輯表示式。

例:

dw_1.SetFilter("id>\'003\' AND name like\'王%\'")

dw_1.Filter()

這兩個函式都是返回1表示成功,返回-1表示失敗。

五、資料檢查


PowerBuilder提供了兩個函式用於資料的檢查,它們是DeleteCount()和ModifiedCount(),其作用分別是檢查DataWindow中的資料自上一次更新到現在,被刪除的行數和被修改的行數。它們一般在視窗的CloseQuery事件中使用,用來檢查該視窗的DataWindow中的資料是否有尚未儲存的修改。

語法格式:

dw_control.DeleteCount()

dw.control.ModifiedCount()

它們分別返回從上一次更新到現在,DataWindow中被刪除和被修改的行數。如果沒有行被刪除或被修改,那麼它們返回0。如果出現錯誤則返回-1。

一般情況下,如果視窗中含有可供修改的資料視窗物件,那麼在視窗的CloseQuery事件中通常使用如下程式碼檢查資料視窗物件中是否有尚未儲存的資料:

Int li_return

IF dw_1.ModifiedCount() > 0 OR dw_1.DeletedCount() >0 THEN

li_return = MessageBox("提示","資料尚未儲存,是否儲存?",Question!,YesNoCancel!,3)

CHOOSE CASE li_return

CASE 1

TriggerEvent(\'ue_save\')

RETURN 0

CASE 2

RETURN 0

CASE 3

RETURN 1

END CHOOSE

END IF