下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于DM數(shù)據(jù)庫(kù)的Power Builder程序開(kāi)發(fā)PowerBuilder是一個(gè)優(yōu)秀的數(shù)據(jù)庫(kù)應(yīng)用前端開(kāi)發(fā)工具,完全支持客戶機(jī)/服務(wù)器(Client/Server)體系結(jié)構(gòu),全面采用面向?qū)ο蠹夹g(shù),操作使用極為方便,且富有效率。在使用PowerBuilder開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),如何正確地建立與各種數(shù)據(jù)庫(kù)的連接是一個(gè)十分關(guān)鍵的問(wèn)題。本文列舉各種PB能在DM數(shù)據(jù)庫(kù)上所實(shí)現(xiàn)的所有數(shù)據(jù)庫(kù)相關(guān)操作,介紹基于DM數(shù)據(jù)庫(kù)的PB程序開(kāi)發(fā)。一、PowerBuilder數(shù)據(jù)庫(kù)接口PowerBuilder具有極其強(qiáng)大、異常靈活的數(shù)據(jù)庫(kù)連接與訪問(wèn)能力,這也是其一貫所擁有并保持領(lǐng)先的傳統(tǒng)優(yōu)勢(shì)。PowerBuilder提供
2、了對(duì)ODBC(Open Database Connectivity,開(kāi)放式數(shù)據(jù)庫(kù)互連)通用標(biāo)準(zhǔn)接口的全面支持。通過(guò)ODBC接口,PowerBuilder可以十分方便地連接到目前流行的種類繁多的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)或其它數(shù)據(jù)源。此外,對(duì)于目前常用的各種大型數(shù)據(jù)庫(kù)管理系統(tǒng),如Oracle、Informix、Sybase、MS SQL Server等,PowerBuilder也提供了相應(yīng)的高效的專用接口。數(shù)據(jù)庫(kù)不同,或者數(shù)據(jù)庫(kù)的版本不同,所使用的專用接口也不同。通過(guò)專用接口,PowerBuilder可以更快速、更直接地連接與訪問(wèn)這些大型DBMS,并充分發(fā)揮其管理與性能上的優(yōu)勢(shì)。PowerBui
3、lder的數(shù)據(jù)庫(kù)接口實(shí)際上就是PowerBuilder所提供的一些動(dòng)態(tài)鏈接庫(kù)文件.DLL。由于PowerBuilder開(kāi)發(fā)人員的要求各有不同,PowerSoft為不同的PowerBuilder版本(包括各種32位或16位不同語(yǔ)言的版本)引入了不同的文件命名方案。對(duì)我們來(lái)說(shuō),在Windows環(huán)境下,PowerBuilder 5.0為PB050.DLL,PowerBuilder 6.0/6.5為PB60x.DLL,PowerBuilder 7.0為PB70x.DLL,其中""為用于唯一標(biāo)識(shí)某種數(shù)據(jù)庫(kù)接口的三個(gè)字母的標(biāo)識(shí),"x"為代表系統(tǒng)平臺(tái)的字母(如果是16
4、位平臺(tái),如Windows 3.x,此字母為"W";如果是標(biāo)準(zhǔn)的32位Windows平臺(tái),如Windows 95/98或Windows NT,則不包含此字母)。二、PowerBuilder事務(wù)對(duì)象由于PowerBuilder是一種數(shù)據(jù)庫(kù)前端開(kāi)發(fā)工具,因此在進(jìn)行開(kāi)發(fā)時(shí)首先要知道后臺(tái)數(shù)據(jù)庫(kù)的一些信息,如:所使用的數(shù)據(jù)庫(kù)管理系統(tǒng)、數(shù)據(jù)庫(kù)用戶的賬號(hào)和口令等等。只有獲得這些相應(yīng)的正確的信息,PowerBuilder及應(yīng)用程序才能正確地與指定的數(shù)據(jù)庫(kù)相連,并進(jìn)一步對(duì)其進(jìn)行有關(guān)的數(shù)據(jù)存取操作。但是,如何才能得到連接數(shù)據(jù)庫(kù)所需要的最基本的信息呢?在PowerBuilder中,系統(tǒng)提供了一種不
5、可見(jiàn)的對(duì)象,稱為事務(wù)對(duì)象(Transaction Object)。事務(wù)對(duì)象駐留在內(nèi)存中,是PowerBuilder最重要的對(duì)象之一,用于提供與數(shù)據(jù)庫(kù)連接所需要的基本信息(即連接參數(shù))并從數(shù)據(jù)庫(kù)獲取相應(yīng)的反饋數(shù)據(jù)(即狀態(tài)信息)。PowerBuilder與應(yīng)用程序主要通過(guò)事務(wù)對(duì)象來(lái)實(shí)現(xiàn)與各種數(shù)據(jù)庫(kù)的連接,但一個(gè)事務(wù)對(duì)象只對(duì)應(yīng)于一個(gè)連接,如果應(yīng)用程序要連接多個(gè)數(shù)據(jù)庫(kù),可為每個(gè)連接創(chuàng)建一個(gè)相應(yīng)的事務(wù)對(duì)象。在PowerBuilder與應(yīng)用程序中,不管是用嵌入式SQL語(yǔ)句還是用數(shù)據(jù)窗口對(duì)象訪問(wèn)數(shù)據(jù)庫(kù),都要使用事務(wù)對(duì)象。事務(wù)對(duì)象其實(shí)就是程序和數(shù)據(jù)庫(kù)之間的橋梁,是程序和數(shù)據(jù)庫(kù)之間的一個(gè)通信區(qū)。每個(gè)事務(wù)對(duì)象都有
6、15個(gè)屬性,其中10個(gè)用于提供數(shù)據(jù)庫(kù)所需要的連接信息,另外5個(gè)用于接收每個(gè)數(shù)據(jù)庫(kù)操作成功與否的狀態(tài)信息(即SQL語(yǔ)句的運(yùn)行信息)。PowerBuilder在啟動(dòng)應(yīng)用程序時(shí),會(huì)自動(dòng)為其創(chuàng)建一個(gè)缺省的全局事務(wù)對(duì)象SQLCA(SQL Communication Area,SQL通訊區(qū)),該對(duì)象在應(yīng)用程序的任何地方都可以訪問(wèn)。如果應(yīng)用程序只與一個(gè)數(shù)據(jù)庫(kù)打交道(實(shí)際上大多數(shù)應(yīng)用程序都是這種情況),那么直接使用SQLCA也就足夠了。同時(shí),使用SQLCA也有好處,那就是無(wú)需對(duì)其進(jìn)行事務(wù)對(duì)象的說(shuō)明、創(chuàng)建或刪除操作,PowerBuilder會(huì)自動(dòng)處理這一切。如果要使用SQLCA以外的其它事務(wù)對(duì)象,如DMSQLC
7、A,在創(chuàng)建該對(duì)象之前必須先對(duì)其進(jìn)行說(shuō)明(與其它變量說(shuō)明相似,事務(wù)對(duì)象變量可以是局部的、實(shí)例的、共享的或全局的):Transaction DMSQLCA然后使用Create語(yǔ)句完成創(chuàng)建工作:DMSQLCA =Create transaction創(chuàng)建成功后,DMSQLCA事務(wù)對(duì)象即可投入使用。當(dāng)不再使用新創(chuàng)建的事務(wù)對(duì)象時(shí),應(yīng)使用Destroy語(yǔ)句及時(shí)將其刪除掉,以釋放其所占用的內(nèi)存空間:Destroy DMSQLCA三、數(shù)據(jù)庫(kù)連接程序的設(shè)計(jì)為使PowerBuilder應(yīng)用程序能正確地與數(shù)據(jù)庫(kù)或數(shù)據(jù)源進(jìn)行連接,必須正確地設(shè)置應(yīng)用程序 所使用的事務(wù)對(duì)象(如SQLCA)的連接屬性。作為最基本、最容易實(shí)現(xiàn)
8、的一種方法,可根據(jù)應(yīng)用程序所連接的數(shù)據(jù)庫(kù)及所使用的數(shù)據(jù)接口的具體情況,直接將所需要的連接參數(shù)賦給相應(yīng)的連接屬性。如:通過(guò)SQLCA與名為dm的ODBC數(shù)據(jù)源連接,用戶名為SYSDBA,口令為SYSDBA,則相應(yīng)的賦值語(yǔ)句為:SQLCA.DBMS="ODBC"SQLCA.AutoCommit=FALSESQLCA.DBParm = "ConnectString='DSN=dm;UID=SYSDBA;PWD=SYSDBA'"(這里要使用至少具有建表權(quán)限的用戶,因?yàn)镻B初次連接一個(gè)數(shù)據(jù)庫(kù),會(huì)在其上建立五張系統(tǒng)表,如果沒(méi)有相應(yīng)權(quán)限會(huì)失敗。)con
9、nect using SQLCA;這種直接賦的方法(或稱硬編碼方式)雖然簡(jiǎn)單,但其缺點(diǎn)也很明顯,如果所使用的數(shù)據(jù)庫(kù)或數(shù)據(jù)接口發(fā)生改變,就不得不修改相應(yīng)的語(yǔ)句來(lái)改變連接參數(shù)。因此,最好能夠通過(guò)一種適當(dāng)?shù)姆椒閼?yīng)用程序提供連接參數(shù),一方面可以根據(jù)實(shí)際情況隨意地修改連接參數(shù),另一方面當(dāng)參數(shù)改變時(shí)又可以避免修改程序的麻煩。因篇幅所限、該內(nèi)容忽略。綜上所述,數(shù)據(jù)庫(kù)連接程序的設(shè)計(jì)要點(diǎn)總結(jié)如下:(1)利用PowerBuilder的數(shù)據(jù)庫(kù)配置畫(huà)筆生成相應(yīng)的設(shè)置文件(初始化文件)。這種方法既易于實(shí)現(xiàn),又可充分保證設(shè)置文件的正確性、規(guī)范性、全面性與靈活性。需要注意的是,為避免不必要的麻煩,確保應(yīng)用系統(tǒng)能正常運(yùn)行,
10、設(shè)置文件中DBMS的設(shè)置值最好不要隨意進(jìn)行改動(dòng)。(2)在登錄窗口的Open事件中使用ProfileString()函數(shù)與ProfileInt()函數(shù)從設(shè)置文件中讀取有關(guān)的連接參數(shù)。PowerBuilder提供有一個(gè)SQLCA.SRC文件,其內(nèi)容就是實(shí)現(xiàn)對(duì)事務(wù)對(duì)象屬性的通用賦值的語(yǔ)句,可直接加以利用,先將其插入到應(yīng)用程序中,再進(jìn)行適當(dāng)?shù)男薷募纯?。?)為保證系統(tǒng)的安全,用戶名與口令由使用者在登錄窗口中通過(guò)輸入動(dòng)態(tài)提供。(4)在應(yīng)用程序中可設(shè)計(jì)一定的"用戶管理"功能,對(duì)用戶的合法性進(jìn)行認(rèn)證,并進(jìn)行相應(yīng)有權(quán)限設(shè)置,進(jìn)一步增強(qiáng)系統(tǒng)的安全性。四、數(shù)據(jù)庫(kù)操作1. 嵌入式SQL
11、語(yǔ)句PB腳本中可以直接使用嵌入式SQL與DM通信,PB中的嵌入式SQL語(yǔ)句分為靜態(tài)語(yǔ)句和動(dòng)態(tài)語(yǔ)句,一般情況下可使用靜態(tài)的sql,動(dòng)態(tài)的sql一般在靜態(tài)的sql無(wú)法滿足的情況下或需要更多的靈活性的情況,考慮使用,如數(shù)據(jù)定義,表名作為變量傳遞時(shí),或者條件列名不確定等情況。例如程序開(kāi)啟階段添加代碼,需要完成如果不存在pbdm這張表即建立該表,可用以下動(dòng)態(tài)SQL實(shí)現(xiàn):int ls_tag,i;select count(*) into :ls_tag from sysdba.systables where name = 'pbdm'if ls_tag = 0 thenexecute im
12、mediate 'create table pbdm (a bigint,b binary,c bit,d blob,e char,f clob,g date,h decimal,i double,j float,k integer,l smallint,m time,n timestamp,o tinyint,p varbinary,q varchar)'end if需要給該表添加100條記錄,使用靜態(tài)sql,例如:int tempselect max(a) into :temp from pbdm;if isnull(temp) then temp=0;temp=temp+
13、1;long ifor i = temp to temp+100 insert into pbdm values (:i,'a',0,'sgsdg','w','sgsdg',sysdate,34634,34634,34634,34634,3464,curtime,curtime,34,'a','2'); st_2.text=string(i)nextcommit;2.數(shù)據(jù)窗口和數(shù)據(jù)存儲(chǔ)數(shù)據(jù)窗口(DataWindow)是PowerBuilder提供給開(kāi)發(fā)人員快速建立基于數(shù)據(jù)庫(kù)應(yīng)用程
14、序的最強(qiáng)有力的工具,也是PowerBuilder與其他面向?qū)ο蟮臄?shù)據(jù)庫(kù)應(yīng)用前端開(kāi)發(fā)工具的最主要的區(qū)別。它的本質(zhì)是以自動(dòng)化的用戶/數(shù)據(jù)庫(kù)接口為開(kāi)發(fā)人員最大限度地節(jié)省時(shí)間和精力,并且這種自動(dòng)化特性并不限制開(kāi)發(fā)人員的主觀能動(dòng)性,開(kāi)發(fā)者能以他所鐘愛(ài)的方式來(lái)應(yīng)用數(shù)據(jù)窗口,開(kāi)發(fā)出高質(zhì)量的應(yīng)用程序。精通PB者就必定精通數(shù)據(jù)窗口技術(shù)。數(shù)據(jù)存儲(chǔ)(DataStore)可以看作數(shù)據(jù)窗口的不可視版,除了不可見(jiàn),其他功能和數(shù)據(jù)窗口完全一樣,為提高效率使用。因DM程序員手冊(cè)已有相關(guān)簡(jiǎn)單介紹,且數(shù)據(jù)窗口內(nèi)容相當(dāng)瑣碎,這里不再作更深入研究。3.PB中的SQL提交方式在pb中,可以使用sqlca.autocommit = tr
15、ue將自動(dòng)提交開(kāi)啟,或sqlca.autocommit = False關(guān)閉自動(dòng)提交,需要注意的是,DDL語(yǔ)句為隱性自動(dòng)提交,不可rollback。4.PB中對(duì)存儲(chǔ)過(guò)程的使用以關(guān)鍵字RPCFUNC聲明存儲(chǔ)過(guò)程(1) 在前臺(tái)要申明一個(gè)事務(wù)(transact)的用戶對(duì)象,比方說(shuō):u_trans(2) 然后用u_trans取代默認(rèn)的transact(3) 然后將你要使用的存儲(chǔ)過(guò)程作為外部的函數(shù)引進(jìn)來(lái)以下為使用PB調(diào)用DM中的存儲(chǔ)過(guò)程的示例(針對(duì)DM的幾種存儲(chǔ)過(guò)程分類,分為輸入?yún)?shù)過(guò)程、輸出參數(shù)過(guò)程、輸入輸出參數(shù)過(guò)程):DM中執(zhí)行建表和存儲(chǔ)過(guò)程語(yǔ)句:-建表create ta
16、ble pbdm (a bigint,b binary,c bit,d blob,e char,f clob,g date,h decimal,i double,j float,k integer,l smallint,m time,n timestamp,o tinyint,p varbinary,q varchar);-輸入?yún)?shù)過(guò)程create or replace procedure proc_in (b binary,c bit,d blob,e char,f clob,g date,h decimal,i double,j float,k integer,l smallint,m t
17、ime,n timestamp,o tinyint,p varbinary,q varchar)astemp integer;beginselect isnull(max(a),0) into temp from pbdm;temp:=temp+1insert into pbdm values (temp,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q);end;-輸出參數(shù)過(guò)程create or replace procedure proc_out(a1 in int , b1 out binary , c1 out bit , d1 out blob , e1 out cha
18、r , f1 out clob , g1 out date , h1 out decimal, i1 out double , j1 out float , k1 out integer , l1 out smallint , m1 out time , n1 out timestamp , o1 out tinyint , p1 out varbinary , q1 out varchar ) as temp integer ;begin select b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q into b1,c1,d1,e1,f1,g1,h1,i1,j1,k
19、1,l1,m1,n1,o1,p1,q1 from pbdm where pbdm.a = a1 ;print 'hi' ;end-輸入輸出參數(shù)過(guò)程create or replace procedure proc_inout(a1 in out int , b1 in out binary , c1 in out bit , d1 in out blob , e1 in out char , f1 in out clob , g1 in out date , h1 in out decimal, i1 in out double , j1 in out float , k1 in
20、 out integer , l1 in out smallint , m1 in out time , n1 in out timestamp , o1 in out tinyint , p1 in out varbinary , q1 in out varchar ) as temp integer ;begin select b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q into b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1 from pbdm where pbdm.a = a1 ;print 'hi&
21、#39; ;end1)在PB在用戶對(duì)象畫(huà)筆中創(chuàng)建一個(gè)ClassStandard類型的,從Transaction繼承的用戶對(duì)象。另存為uo_sql.2)在此用戶對(duì)象中,聲明Local External Functions,將存儲(chǔ)過(guò)程以RPCFUNC關(guān)鍵字聲明為外部函數(shù)。在Declare Local External Functions對(duì)話框中按Procedures按鈕選擇要調(diào)用的后臺(tái)存儲(chǔ)過(guò)程,或直接輸入語(yǔ)句:subroutine PROC_OUT(long A1,ref blob B1,ref boolean C1,ref blob D1,ref string E1,ref string F1,
22、ref date G1,ref decimal H1,ref double I1,ref double J1,ref long K1,ref long L1,ref time M1,ref datetime N1,ref long O1,ref blob P1,ref string Q1) RPCFUNC subroutine PROC_INOUT(ref long A1,ref blob B1,ref boolean C1,ref blob D1,ref string E1,ref string F1,ref date G1,ref decimal H1,ref double I1,ref double J1,ref long K1,ref long L1,ref time M1,ref datetime N1,ref long O1,ref blob P1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職(市場(chǎng)營(yíng)銷)市場(chǎng)實(shí)訓(xùn)綜合測(cè)試題及答案
- 2025年大學(xué)一年級(jí)(食品科學(xué)與工程)食品微生物學(xué)試題及答案
- 2026年機(jī)械原理(機(jī)械運(yùn)動(dòng)優(yōu)化)試題及答案
- 2025年中職大數(shù)據(jù)技術(shù)與應(yīng)用(大數(shù)據(jù)處理基礎(chǔ))試題及答案
- 2025年中職(旅游服務(wù)與管理)旅游管理綜合階段測(cè)試試題及答案
- 2026年客服管理(投訴處理)試題及答案
- 2025年高職衛(wèi)生檢驗(yàn)與檢疫技術(shù)(檢驗(yàn)檢疫應(yīng)用)試題及答案
- 2025年高職汽車電子技術(shù)(電子控制系統(tǒng))試題及答案
- 2025年高職物流統(tǒng)計(jì)(物流統(tǒng)計(jì))試題及答案
- 2025年大學(xué)大四(輕化工程)造紙廢水處理技術(shù)綜合測(cè)試試題及答案
- 2024-2025學(xué)年廣西柳州市九年級(jí)(上)期末數(shù)學(xué)試卷(含答案)
- 寧德時(shí)代心理測(cè)試題及答案
- 耳部刮痧課件
- 師范類學(xué)生教學(xué)能力提升計(jì)劃
- (2025)鐵路局招聘筆試真題及答案
- 騎車誤傷協(xié)議書(shū)
- 孔源性視網(wǎng)膜脫離護(hù)理查房
- 《中級(jí)財(cái)務(wù)會(huì)計(jì)》課件-11收入、費(fèi)用和利潤(rùn)
- 新生兒肺炎的治療與護(hù)理
- 電纜局部放電試驗(yàn)報(bào)告模板
- 東莞初三上冊(cè)期末數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論