資源描述:
《PB數(shù)據(jù)窗口的多表更新》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、PB數(shù)據(jù)窗口的多表更新原理分析:數(shù)據(jù)窗口數(shù)據(jù)源來自兩個(gè)或兩個(gè)以上的表,相當(dāng)于多個(gè)表連接建立的一個(gè)視圖,對(duì)于這種數(shù)據(jù)窗口,PB默認(rèn)是不能修改的。當(dāng)然我們可以通過設(shè)置它的Update屬性,數(shù)據(jù)窗口的UpdateProperties用來設(shè)置數(shù)據(jù)窗口是否可Update、可Update的表、可Update列等,但不能同時(shí)設(shè)置兩個(gè)表可更新;所以當(dāng)修改它的數(shù)據(jù)項(xiàng)時(shí),我們不能簡單地用dw_1.update()來更新table,我們可以在程序中設(shè)置數(shù)據(jù)窗口可更新的一個(gè)表A(及其可更新列),其他表為不可更新,更新完表A后,再
2、設(shè)置另一表B為可更新,表A設(shè)置為不可更新,依次類推。解決示例:我們以PowerBuilder7自帶的ASA6數(shù)據(jù)庫為例:1、新建一個(gè)數(shù)據(jù)窗口d_grid_dep_emp,它的Select語句為SELECTdepartment.dept_id,department.dept_name,employee.emp_id,employee.emp_fname,employee.emp_lnameFROMdepartment,employeewhereemployee.dept_id=department.dept
3、_id2、設(shè)置數(shù)據(jù)窗口d_grid_dep_emp的屬性,將列的taborder改為非0值;并點(diǎn)擊菜單Rows――UpdateProperties,設(shè)置此數(shù)據(jù)窗口AllowUpdates,TabletoUpdate設(shè)為department,UpdateableColumns為department.dept_id,department.dept_name。3、在窗口中“更新”數(shù)據(jù)窗口按鈕的clicked事件編寫腳本:longll_rtn//修改Department表(Department表在第2步已設(shè)置為可
4、更新)ll_rtn=dw_1.update(true,false)ifll_rtn=1then//關(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)//設(shè)置Employee表成為新的可修改表dw_1.Modify(DataWindow.Table.UpdateTable=emplo
5、yee)dw_1.Modify(employee_emp_id.Update=Yes)dw_1.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()IFll_rtn=1THENCOMMITUSINGSQLCA;dw_1.retrieve()messagebox(提示
6、信息,更新成功!)ELSEROLLBACKUSINGSQLCA;MessageBox(提示信息,更新失??!)ENDIF//重設(shè)修改標(biāo)志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
7、(employee_emp_id.Update=No)dw_1.Modify(employee_emp_fname.Update=No)dw_1.Modify(employee_emp_lname.Update=No)dw_1.Modify(employee_emp_id.Key=No)ELSEROLLBACKUSINGSQLCA;MessageBox(提示信息,更新失?。?ENDIF這樣就完成了對(duì)兩個(gè)表的更新。當(dāng)然我們可以將上面功能編成一個(gè)函數(shù),在需要時(shí)調(diào)用。PowerBuilder的數(shù)據(jù)窗口對(duì)象是其特
8、有的智能對(duì)象,其封裝性好、功能強(qiáng)大、表現(xiàn)形式豐富多樣,為此,許多MIS開發(fā)人員對(duì)PowerBuilder推崇備至,將其視為首選開發(fā)工具。一般情況下,一個(gè)數(shù)據(jù)窗口只能更新一個(gè)數(shù)據(jù)庫表,但在MIS開發(fā)過程中,我們經(jīng)常遇到這種情況:一個(gè)數(shù)據(jù)窗口中由兩個(gè)或更多個(gè)數(shù)據(jù)庫表作為數(shù)據(jù)源,并需要對(duì)其進(jìn)行錄入或修改,如何給出多表更新的通用解決方案就成為MIS開發(fā)人員不容回避的問題。筆者在某管理信息系統(tǒng)的開發(fā)過程中,嘗試了幾種雙表更新的解決方法,