999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在PowerBuilder環境下實現數據的同步更新

2014-06-30 10:24:12王超
關鍵詞:按鈕設置數據庫

摘要:PowerBuilder環境下默認只能更新一個數據表,如果數據窗口對象對應多個表,則PowerBuilder定義每個表的所有列都不能夠更新,并且所有列的Tab值都為0,使用戶不能修改數據。本文提供了一種在PowerBuilder環境下多表同步更新的方案。

關鍵詞:PowerBuilder 多表更新 數據窗口對象

0 引言

當一個數據窗口被創建時,PowerBuilder會自動地設置它的更新屬性為可更新或者不可更新,這取決于兩個標準:一個是看這個數據窗口對象是否對應一個表還是對應多個表;另外一個是看表的主鍵是否被數據窗口對象選中。因為數據窗口對象只能更新一個表,所以,如果數據窗口對象只對應一個表,那么PowerBuilder就自動定義這個表中的所有列都是可更新的,并且此時所有列的Tab值均不為0,以便用戶能夠修改數據。可是,如果數據窗口對象對應多個表,則PowerBuilder定義每個表的所有列都不能夠更新,并且所有列的Tab值都為0,使用戶不能修改數據。

當用戶的數據窗口對象對應多個表時,如果PowerBuilder設置的更新屬性不符合用戶的要求,也就是說用戶想這個數據窗口對象能夠更新數據庫,那么用戶必須手工修改數據窗口對象的更新屬性。

1 設置數據對象的更新屬性

要定義一個數據窗口對象的更新屬性,可以選擇Rows|

Update Properties菜單項,將彈出Specify Update Properties對話框,如圖1所示。

對話框中各更新屬性的含義如下:

1.1 Allow Updates(允許更新)復選框:用于指定該數據窗口是否具有可更新能力,選中此復選框后,才可以設置其他屬性。

1.2 Table to Update(可更新的表)下拉列表框:每個數據窗口在每一時刻只可更新一個表的數據。此下拉列表框就是用來指定當前數據窗口可更新的表。

1.3 Unique Key Columns(鍵列)列表框:鍵列用來標識表中將被更新的記錄的一列或多列,PowerBuilder在生成數據庫的更新語句時,將用這些鍵列構成WHERE子句。鍵列可以是表的主鍵,也可以不是。

1.4 Updateable Columns(可更新列)列表框:用來設置當前數據窗口對象當前可更新的表中哪些字段具有可更新能力。如果某一列未被指定為可更新列,那么,即使在數據窗口中修改了此列的數據,它也不會向數據庫提交。

1.5 Where Clause for Update/Delete(用于更新的WHERE子句)組框:該組框內的三個單選按鈕提供了三種構造Where 子句的方法。不同的Where子句可以提供不同級別的數據完整性保護。①Key Columns單選按鈕:是讓Where子句中只包括主鍵列。這些主鍵列在窗口的右下角的Unique Key Columns的列表框中指定。在這種情況下,PowerBuilder只把原來檢索出來的關鍵列的數值與數據庫中的關鍵列的數值進行比較,如果這些值匹配,則能夠更新數據庫。②Key and Updateable Columns單選按鈕:是讓Where子句中只包括主鍵列和可更新列。主鍵列在Unique Key Columns的列表框中,所有可更新列在Updateable Columns列表框中選擇。在這種情況下,PowerBuilder把原來檢索出來的關鍵列和可更新列的數值同數據庫中這些列的值進行比較,如果匹配,則能夠更新數據庫。③Key and Modified Columns單選按鈕:是讓Where子句中包括主鍵列和所有已經做過修改的列,這種情況下,PowerBuilder把原來檢索出來的關鍵列和已經更新的列的數值同數據庫中這些列的數值比較,如果自上次檢索以后,這些列中任意一列的值與數據庫中的值不匹配,則不能更新數據庫。

1.6 Key Modification(鍵列的更新)組框:該組框內的兩個單選按鈕是用來決定當關鍵字被更新時的更新方式。有兩種方式:Use Delete then Insert單選按鈕,先使用Delete語句刪除,然后再用Insert語句插入;Use Update單選按鈕是直接使用Update語句對主鍵列進行更新。

①缺省設置是Use Delete then Insert,表示當一個主鍵列被修改時先刪除這一條數據,然后再用Insert語句插入數據到數據庫中。不過值得注意的是,如果有其他表的數據依賴于這個表的主鍵時,例如一個公司的“學生信息表”是依賴“班級表”中的“班級編號”這個主鍵列,那么在使用Use Delete then Insert時,首先會刪除“班級表”中的一條數據,而且也會刪除“學生信息表”中與“班級表”中有相同的班級編號的那條數據,這樣就會造成數據庫中數據的丟失,所以,在使用這個方式時應該根據具體的應用和數據庫設計來選擇。②Identify Column(標識列)下拉列表框。許多數據庫管理系統支持這樣一種列。當向表中插入一條新記錄時,此列的值由數據庫管理系統自動指定,稱之為標識列。不同的數據庫管理系統支持的標識列的類型也不同。例如,Adaptive Server Anywhere允許定義其值自動增加的列。在Specify Update Properties對話框中可以指定一個標識列。這樣,當在數據窗口中新插入一列并提交后,PowerBuilder會自動把此列的值帶回并顯示出來。否則,需要重新檢索才能看到此列的值。

2 多表更新解決方案

①創建數據窗口對象,選擇合適的數據源和顯示風格,保證數據窗口具有更新能力。②選取多表中所需的數據項(各表的主鍵和非空列一定要包含進去)。③修改所需數據項的Tab Order,保證其在數據窗口中是可修改的(TabOrder值不為0)。④選取菜單Rows|Update Properties,定義數據窗口的更新屬性(定義主表的列為可更新列)。⑤使用update(true,false)對主表進行更新。⑥切換可更新的表(輔表)、主鍵、列,將主表的主鍵、列設為不可更新。⑦使用update()對輔表進行更新。

3 實現數據同步更新

3.1 建庫建表。在一個數據窗口對象中實現對兩個表的數據更新主要是動態修改數據窗口的Update屬性以及getitemstring()、setitem()函數的使用。以數據庫mydata.db中的數據表tabel1和table2為例,在庫中建表table1(班級表),表結構如下:bjname(班級名稱)/char/20(主鍵)/不能為空,rs(人數)/integer/不能為空,dy(導員)/char/8/允許為空,輸入記錄。建表table2(學生表),表結構如下:xh(學號)/char/6(主鍵)/不能為空,name(姓名)/char/8/不能為空,csrq(出生日期)/date/允許為空,bjname(班級名稱)/char/20/不能為空(外鍵),通過bjname與表table1建立鏈接。table1(班級表)為主表,table2(學生表)為輔表。即先輸入班級名稱,才能輸入該班級的學生,輸入記錄。

3.2 界面設計。設計多表更新窗口w_test,界面設計如圖2所示。

3.3 建立數據窗口對象。建立數據窗口對象d_update,風格:Freeform,數據源:SQL Select,選擇數據表:table1、table2,選擇列xh,name,bjname(這三列來自table2),bjname,rs(這二列來自table1),單擊工具欄上的 鈕,修改各列的Tab Order值為10、20、30……依此類推,刪除table2_bjname列及該列的標題,選取菜單Rows|Update Properties,按圖1所示設置各項更新屬性。設置數據窗口對象中所有標題邊框為凸起,所有列邊框為下凹,均為左對齊。

3.4 關鍵代碼實現。在多表更新的操作中,除按3.3正確設置屬性外,還有一個關鍵環節,就是代碼實現數據同步更新。圖2的“存盤”按鈕的Clicked事件的代碼為:

int n,row1

string bjm

n=dw_1.update(true,false)

if n>0 then

commit;

messagebox("提示","table1班級表存盤成功!")

else

rollback;

messagebox("提示","table1班級表存盤失敗!")

end if

dw_1.object.datawindow.table.updatetable="table2" //切換更新數據表

dw_1.object.table2_xh.key="yes"http://設置可更新的主鍵

dw_1.object.table2_xh.update="yes"http://設置可更新字段

dw_1.object.table2_name.update="yes"

dw_1.object.table2_bjname.update="yes"

dw_1.object.table1_bjname.key="no"http://設置不可更新的主鍵

dw_1.object.table1_bjname.update="no"http://設置不可更新的字段

dw_1.object.table1_rs.update="no"

row1=dw_1.getrow()//獲取當前行的行號

bjm=dw_1.getitemstring(row1,"table1_bjname")

dw_1.setitem(row1,"table2_bjname",bjm)

n=dw_1.update()

if n>0 then

commit;

messagebox("提示","table2學生表存盤成功!")

end if

4 結語

本文中數據源選擇SQL Select,每個數據列的名稱前都加了表名,刪除table2_bjname列,即刪除了table2表的bjname列,數據窗口中保留了table1表中的bjname列,使用getitemstring()函數取出輸入到table1的bjname值,用函數setitem()寫入到表table2中。

參考文獻:

[1]柯建勛,蔡毅,鄧格林.PowerBuilder8.0基礎篇[M].北京:清華大學出版社,2002.

[2]柯建勛,張濤,邵亮.PowerBuilder8.0進階篇[M].北京:清華大學出版社,2002.

[3]張偉聰.基于PowerBuilder的圖書館辦公自動化系統設計[J].醫學信息,2006(09).

作者簡介:

王超(1972-),女,遼寧朝陽人,信息工程系副主任,副教授,研究方向:軟件開發。

猜你喜歡
按鈕設置數據庫
這些按鈕能隨便按嗎?
當你面前有個按鈕
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
內心不能碰的按鈕
商業評論(2014年9期)2015-02-28 04:32:41
主站蜘蛛池模板: 好吊色国产欧美日韩免费观看| 国产一级视频久久| 欧美福利在线播放| 亚洲成人在线免费观看| 91无码人妻精品一区| 国产三级毛片| 国产一区二区视频在线| 亚洲午夜国产片在线观看| 国产精品美人久久久久久AV| 粉嫩国产白浆在线观看| 亚洲熟妇AV日韩熟妇在线| 久久久久亚洲精品成人网| 国产精品色婷婷在线观看| 真实国产精品vr专区| 亚洲乱码视频| 999精品在线视频| 无码免费视频| 99久久精品国产自免费| 毛片网站在线看| 在线精品自拍| 无码丝袜人妻| 国产全黄a一级毛片| 日本三级精品| 亚洲精品制服丝袜二区| 久久综合色88| 亚洲国产精品一区二区第一页免| 欧美一级黄色影院| 国产鲁鲁视频在线观看| 免费在线看黄网址| 久久综合婷婷| AV片亚洲国产男人的天堂| 伊人国产无码高清视频| 国产午夜无码片在线观看网站| 欧美不卡二区| 欧美国产日本高清不卡| 亚洲成人免费在线| 一本一道波多野结衣一区二区 | 欧美成人精品一级在线观看| 香蕉久久国产超碰青草| 91人人妻人人做人人爽男同| 午夜欧美在线| 亚洲国产亚洲综合在线尤物| 婷婷亚洲综合五月天在线| 免费aa毛片| 成年片色大黄全免费网站久久 | 亚洲欧美在线看片AI| 91福利在线看| 综合天天色| 99精品视频九九精品| 亚洲中文精品久久久久久不卡| 精品久久久久久成人AV| 国产99欧美精品久久精品久久| 在线a网站| 久久大香伊蕉在人线观看热2| 爆乳熟妇一区二区三区| 亚洲成A人V欧美综合天堂| 亚洲中文无码h在线观看 | 亚洲妓女综合网995久久| 亚洲女同一区二区| 亚洲美女操| 国产精品九九视频| 99一级毛片| 亚洲日韩AV无码精品| 天天躁夜夜躁狠狠躁躁88| 国产亚洲欧美在线人成aaaa| 日本国产精品一区久久久| 在线免费a视频| 国产丰满大乳无码免费播放| 狠狠五月天中文字幕| 一级毛片在线播放免费观看| 成人免费午夜视频| 国产理论最新国产精品视频| 在线观看网站国产| 青草视频网站在线观看| 综合社区亚洲熟妇p| julia中文字幕久久亚洲| 午夜爽爽视频| 成人欧美日韩| 国产在线欧美| 国产三级毛片| 男女猛烈无遮挡午夜视频| 国内老司机精品视频在线播出|