《PowerBuilder数据库开发技术.docx》由会员分享,可在线阅读,更多相关《PowerBuilder数据库开发技术.docx(22页珍藏版)》请在三一办公上搜索。
1、PowerBuilder数据库开发技术PowerBuilder数据库开发技术 实验指导书 实验目录 1.实验一、PowerBuilder集成环境 2.实验二、PowerBuilder数据定义 3.实验三、PowerBuilder数据操纵 4.实验四、PowerBuilder窗口设计 5.实验五、PowerBuilder菜单设计 6.实验六、PowerBuilder数据窗口设计 7.实验七、小型数据库应用系统开发 实验一:PowerBuilder集成环境 一 实验目的 1. 2. 3. 4. 掌握PowerBuilder的启动与退出 熟悉PowerBuilder集成环境,包括菜单,工具条以及帮助
2、 熟悉PowerBuilder的类库管理,并创建一个简单应用 熟悉窗口与菜单设计画板,添加设计和使用窗口与菜单 二.实验内容 1. PowerBuilde的启动与退出 2.熟悉PowerBuilde集成环境 3.创建一个简单的应用。 三实验条件 1.提供一台WINDOWS XP操作系统的计算机 2.提供PowerBuilder9.0设计环境 四.实验步骤 1.启动与退出 在安装完后,可以通过WINDOWS开始菜单找出Sybase 程序组中的PowerBuilder9.0启动PowerBuilder. 启动后即出现如图所示的主窗口,可以选择菜单File/Exit 退出并关闭PowerBuilde
3、r. 2.熟悉PowerBuilder集成环境,包括菜单、工具以及帮助 画板是PowerBuilder提供的专项设计工具,PowerBuilder为窗口菜单数据窗口用户对象函数结构数据库数据管道以及应用提供画板。如WINDOWS画板是用来设计应用程序窗口界面。画板也是有多个子窗口组成,如WINDOWS画板有Layout外观子窗口, Properties属性子窗口, Script脚本子窗口, Declare申明变量子窗口, 这些子窗口可以在菜单View中选取打开。 3.创建一个简单应用 选择File/New 出现一个新建对话框 创建一个工作区 Workspace ,输入工作区的名称Myspace
4、,在Systemtree中出现建好的工作区。 新建一个应用,打开Target/Application,输入应用的名称Test,选择类库文件保存的路径,Test.pbl就是该应用的类库文件,以后设计类就存放在此文件,注意保存路径。 在Systemtree中展开工作区Myspace,可看到一个应用Test,再展开可看到类库文件Test.pbl,再展开可看到一个应用类Test。应用类是一个应用的入口,应用类无外观,只有属性和脚本窗口,可在Open事件中编制应用开始的脚本。 由此可以看出一个工作区可以包含多个应用系统,一个应用系统可保存在多个类库文件中,一个类库文件可存放多个类。 4.创建窗口 打开F
5、ile/New/PB Object/Window,在窗口外观中放置各种控件,保存窗口取名为w_test.熟悉窗口对象与各种控件对象的属性和事件。 5. 创建菜单 打开File/New/PB Object/Menu,填置菜单项,保存窗口取名为m_test,熟悉菜单对象的属性和事件。 例如插入File菜单栏,File菜单栏中插入 Exit菜单项,在Exit的Clicked事件中加入脚本Close,用于关闭窗口。 6. 运行应用 在应用类Test的Open事件中加入脚本open(w_test),打开测试窗口。在窗口w_test的Menuname属性中填入m_test (实验指导书上m_menu错误)
6、,将菜单放入此窗口,运行此应用程序,即可看到下面的界面,按File / Exit可退出界面。 实验二:数据定义 一 实验目的 1. 掌握SQL模式定义语句,定义相关的表 2. 掌握SQL数据查询语句 3. 掌握SQL聚集函数的使用 4. 掌握SQL插入、修改、删除语句的使用 5. 二实验内容 工程项目采购数据库 设有供应商S、零件P、工程项目J、以及三者间联系的关系模式SPJ。 三实验步骤: 1、 打开PowerBuilder,点击界面上的数据库图标,进入PowerBuilder的数据库界面。 2、在其树型结构中点击ODB ODBC,可以看到在其子目录下有系统自带的两个数据库EAS Demo
7、DB V9 和EAS Demo DB V9 IM。如图2所示: 我们可以使用系统自带的数据库,在其中创建自己的表,一般情况下我们希望建立自己的数据库。 3、为了能够在表中显示汉语我们双击Utilities / Create ASA DatabaseUser 得到上图对话框其中ID 为DBA,Password为sql,输入Database Name:工程项目采购数据库 4、数据库的连接 新数据库建立好之后要进行连接,右键点击“工程项目采购数据库”,在弹出的菜单中选择“connect”,点击后会在“工程项目采购数据库”上出现一个绿色的对号,这时数据库就成功连接了。 5、定义表 在PowerBuil
8、der里有两种创建新表的方法, 第一种方法与创建数据库类似,在test数据库的下拉目录中有table这一项,可以右击table选择“New Table”来创建新表。 由于本次实验我们不用这种方法,在此就不累述了。 第二种方法是本次实验要采用的,即用SQL的语言定义的功能来定义新表。在图中,在界面的下部有几个标签,选择“ISQL Session”,这时就可以在如图所示的编辑界面中编写SQL语句了。这里我以定义S表为例写了几行代码。代码写好之后单击界面上方的图标就可以运行了。如果运行时没有任何提示说明表创建成功,右键点击“table”选择“Refresh”,就可以在table目录下看到我们创建的新
9、表了。如果有错误,系统会给出出错信息,修改后再运行。P、J、SPJ表的创建与此相同。在创建SPJ表时注意外键的建立。 对于刚创建的s表,大家可以选择s-Columns-snoEdit Columns来查看s表的定义,如图6,也可以修改。 创建S表的代码,将其贴在“ISQL Session”窗口中: create table s (sno char(6) primary key, sname char(6)not null, status smallint, city char(6); P、J、SPJ表的创建代码如下: create table p (pno char(6) primary ke
10、y, pname char(8) not null, color char(4), weight smallint); create table j (jno char(6) primary key, jname varchar(12), city char(6) ); create table spj (sno char (6), pno char(6), jno char(6), qty int, primary key (sno,pno,jno), foreign key (sno) references s(sno), foreign key (pno) references p(pn
11、o), foreign key (jno) references j(jno); 6、向表中插入数据 以上创建的表只是说明了表的定义,表中没有数据,向表中插入数据可用如下语句: Insert into s values(s1,精益,20,天津); 插入数据。运行方法与刚才所讲定义表的运行方法一样。 运行无误说明此数据已经插入s表,大家可以用我们所学的查询语句来查看表里的数据, 例如用以下语句: select * from s; 就可以查看s表中的所有数据。 查询结果会在“result”里出现。 或者右击要查看的表,Edit Data / Grid在Results窗口中也可看到表里的数据。 需要
12、注意的是:以上SQL语句中所有的标点符号都要在英文输入方式下输入,汉语方式下会报错,所以在写入汉字后要记得切换输入法; 在这个实验中SPJ表中的属性参考了其它表中的属性,我们用外关键字来表示这种关系。例如我们在定义s表时,将sno定义为char,那么在SPJ表的定义中,sno也要定义为char,两者类型一定要相同。 下面是P、J、SPJ表数据插入的代码: p表 insert into p values(p1,螺母,红,12) insert into p values(p2,螺钉,绿,17) insert into p values(p3,螺丝刀,兰,14) insert into p valu
13、es(p4,螺丝刀,红,14) insert into p values(p5,凸轮,兰,40) insert into p values(p6,齿轮,红,30); j表 insert into j values(j1,汽车厂,北京) insert into j values(j2,弹簧厂,长春) insert into j values(j3,造船厂,天津) insert into j values(j4,机车厂,天津) insert into j values(j5,无线电厂,唐山) insert into j values(j6,半导体厂,常州) insert into j values
14、(j7,仪器厂,南京); spj表 insert into spj values(s1,p1,j1,200) insert into spj values(s1,p1,j3,100) insert into spj values(s1,p1,j4,700) insert into spj values(s1,p2,j2,100) insert into spj values(s2,p3,j1,400) insert into spj values(s2,p3,j2,200) insert into spj values(s2,p3,j4,500) insert into spj values(
15、s2,p3,j5,400) insert into spj values(s2,p5,j1,400) insert into spj values(s2,p5,j2,100) insert into spj values(s3,p1,j1,200) insert into spj values(s3,p3,j1,200) insert into spj values(s4,p5,j1,100) insert into spj values(s4,p6,j3,300) insert into spj values(s4,p6,j4,200) insert into spj values(s5,p
16、2,j4,100) insert into spj values(s5,p3,j1,200) insert into spj values(s5,p6,j2,200) insert into spj values(s5,p6,j4,500); 实验三:数据操纵 一 实验目的 1. 掌握SQL数据查询语句 2. 掌握SQL聚集函数的使用 3. 掌握SQL插入、修改、删除语句的使用 二实验内容 工程项目采购数据库,在实验三的基础上完成下列操作: 求向工程J1 提供零件的供应商的编号 求向工程J1 提供零件P的供应商的编号 求向工程J1 提供红色零件的供应商的编号 求没有使用天津供应商提供的红色零件
17、的工程号 统计各个供应商供应得零件总数 求至少使用了种以上零件的工程号 把所有红色零件的颜色改为粉红色 将向工程提供零件的供应商改为提供 删除全部红色零件以及相应得供应-使用记录 下面是以上各操作所要使用的语句: (1)select sno from spj where jno=j1; (2)select sno from spj where jno=j1 and pno=p1; (3)select sno from spj where pno in (select pno from p where p.pno=spj.pno and color=红 and jno=j1); (4)selec
18、t jno from j where jno not in (select jno from spj,s,p where s.sno=spj.sno and p.pno=spj.pno and s.city=天津 and p.color=红); (5)select sno,sum(qty) from spj group by sno; (6)select jno from spj group by jno having count(pno)3; (7)update p set color=粉红 where color=红; (8)update spj set sno=s2 where sno=
19、s1 and jno=j1 and pno=p1; (9)delete from spj where pno in (select pno from p where color=红); 以()为例将代码粘贴进 ISQL Session 1窗口,中可以看到查询结果: 点击 运行,在Select 1 Results 窗口实验四:PowerBuilder窗口设计 一实验目的 1. 2. 3. 4. 掌握窗口设计、控件编程 掌握程序设计基本语法 熟悉面向对象程序设计的基本思想和方法 熟悉的程序调试 二实验内容 1.设计一个小型计算器 设计如图所示的小型计算器,要求能实现多位数的加、减、乘、除运算,要考
20、虑小数、负数的问题。 2.程序调试面板 可在程序脚本的任何位置右击鼠标,选Insert Breakpoint 设置程序端点,选择Run/ Debug 进入程序调试面板,选Debug / Start 开始调试程序,程序运行到端点处,会暂停运行。在调试面板中可以观察内存中各种变量以及对象的属性值,必要时可以修改。 三实验原理、方法和手段 小型计算器设计思路:将计算器的当前状态划分为: 0开始状态 1接收到第一个数据 2接收到第一个数据的小数点 3接收到运算符 4接收到第二个数据 5接收到第二个数据的小数点 6全部状态接收到”=”后回到0状态 设置窗口级实例变量数据1、数据2、运算符、状态,在每个按
21、钮的Clicked 事件中编制代码,根据当前状态做出相应的处理以及状态变换。 四实验过程 界面设计完成后: 双击按钮“1”,在弹出的编辑界面中添加如下代码(23456789按钮的代码与1相同): choose case is_zt case 0 is_zt=1 st_1.text=this.text case 1 is_zt=1 st_1.text=st_1.text+this.text case 2 is_zt=2 st_1.text=st_1.text+this.text case 3 is_zt=4 st_1.text=this.text case 4 is_zt=4 st_1.text
22、=st_1.text+this.text case 5 is_zt=5 st_1.text=st_1.text+this.text case 6 is_zt=1 st_1.text=this.text end choose 双击按钮“+”,在弹出的编辑界面中添加如下代码(加减乘除代码相同): choose case is_zt case 0 case 1 is_zt=3 is_arg1=st_1.text is_option=this.text case 2 is_zt=3 is_arg1=st_1.text is_option=this.text case 3 is_option=this.
23、text case 4 is_zt=3 is_arg2=st_1.text is_arg1=wf_js is_option=this.text case 5 is_zt=3 is_arg2=st_1.text is_arg1=wf_js is_option=this.text case 6 is_zt=3 is_arg1=st_1.text is_option=this.text end choose 双击按钮“=”,在弹出的编辑界面中添加如下代码: choose case is_zt case 0 case 1 case 2 case 3 case 4 is_zt=6 is_arg2=st_
24、1.text is_arg1=wf_js st_1.text=is_arg1 case 5 is_zt=6 is_arg2=st_1.text is_arg1=wf_js st_1.text=is_arg1 case 6 end choose 这里我们用到一个函数:wf_js,这个函数是自己定义的,方法如下: 在如图弹出的下拉框中选择,然后选择 会弹出函数定义界面: 其中设置Access 为 public ;Return Type 为 string ;Function Name 为 wf_js即可。 设置完成后在其下面的编辑界面中添加如下代码: dec ln_arg1,ln_arg2,ln_r
25、et string ls_ret ln_arg1=dec(is_arg1) ln_arg2=dec(is_arg2) choose case is_option case + ln_ret=ln_arg1 + ln_arg2 case - ln_ret=ln_arg1 - ln_arg2 case * ln_ret=ln_arg1 * ln_arg2 case / ln_ret=ln_arg1 / ln_arg2 end choose ls_ret=string(ln_ret) return ls_ret 下面需要声明以下程序中用到的变量: 在图中的下拉框中选择, 在弹出的编辑界面中添加如下代
26、码: string is_arg1,is_arg2,is_option,is_zt=0 即可 按钮“0”后面所加代码如下: choose case is_zt case 0 is_zt=0 case 1 is_zt=1 st_1.text=st_1.text+this.text case 2 is_zt=2 st_1.text=st_1.text+this.text case 3 is_zt=4 st_1.text=this.text case 4 is_zt=4 st_1.text=st_1.text+this.text case 5 is_zt=5 st_1.text=st_1.text+
27、this.text case 6 is_zt=0 st_1.text=0 end choose 按钮“.” 后面所加代码如下: choose case is_zt case 0 is_zt=2 st_1.text=0. case 1 is_zt=2 st_1.text=st_1.text+. case 2 is_zt=2 case 3 is_zt=5 st_1.text=0. case 4 is_zt=5 st_1.text=st_1.text+. case 5 is_zt=5 case 6 is_zt=1 st_1.text=0. end choose 清零键: is_zt=0 st_1.t
28、ext=0 窗口设计完成,代码添加完后右击jisuanqi图标点击Run / Preview运行,计算器即可进行多位数的加、减、乘、除运算。 运行所得的计算器: 实验五:PB菜单设计 一.实验目的 1. 掌握PowerBuilder的菜单设计画板的使用 2. 熟悉应用系统的模块划分与系统集成 二.实验内容 自行设计一窗口菜单使之能关闭退出 三.实验步骤 1.在工作区中新建主窗口w_window_main和主窗口菜单m_window_main 2.在主窗口菜单m_window_main中添加如图的各个菜单列表:file 、edit 、view、 help等 3.再创建窗口window1、wind
29、ow2,通过new能将两个窗口打开,在“关闭窗口1” 和“关闭窗口2”两个按钮中添加代码close(w_window1) 、close(w_window2),通过此按钮能关闭两窗口 4.在主窗口右边添加m_window_main,使主窗口与菜单相关联 5.在下拉菜单exit中添加代码close(w_window_main),使之能关闭主窗口 6.最后检查无误后右击主窗口w_window_main / Run/Preview运行 点击file / new / window1,window2 察看PB菜单运行结果,点击“关闭窗口1、关闭窗口2”按钮可关闭窗口1、2,点击exit 可退出主窗口 实验
30、六:PB数据窗口设计 一.实验目的 3. 掌握PowerBuilder的数据窗口设计画板的使用 4. 熟悉数据窗口的使用 二.实验内容 自行设计一数据窗口。 三.实验步骤 1、进入PB界面。点击“开始”-“程序”-“sybase”-“power builder 9.0”-“power builder 9.0”进入,或者直接从桌面快捷方式进入。 2、新建工作区间。点击“file”-“new”弹出new对话框,选择“workplace”标签,选择“workplace”图标,点击OK,然后会出现“new workplace”保存对话框,选择保存路径,填写文件名保存即可。这时只是创建了一个工作区间,即
31、工作环境,还没有添加应用。 3、新建应用。点击“file”-“new”弹出new对话框,选择“target”标签,选择“Application”图标,点击OK,会弹出如图1.1所示的界面。在“application name”下填写要创建的应用的名字,下面的“library”,“target”两项只要点击后面的浏览按钮就可以自动出应用文件保存路径,不需填写。点击“finish”,新的应用就创建完成了。这时在工作区间的下拉目录就可以看到新应用了。 4、创建对话框。有了应用之后就可以创建对话框或者菜单了。这里我们只介绍对话框的创建。同前面一样,点击file / new / PB object /
32、Window图标,下面的“target”项不需改动,点击OK。这时会弹出新建的对话框界面,有了对话框之后就可以在对话框上添加数据窗口和其它控件了,点击菜单项中的insert / control / data window添加数据窗口,将鼠标在对话框中点击一下,数据窗口就添加上了。选中添加的数据窗口,可以在右边的属性栏里看到其属性。接着可以用同样的方法添加其它控件。例如insert / control / commandbutton添加按钮,insert / control / singlelineedit添加文本框: 添加控件就是对对话框进行了修改,这时应该点击工具栏中的保存图标,保存对话框,
33、在“windows”下面填写对话框的名字,一般情况下对话框的名字以w_开头,这里我们取w_gongyingshang,点击OK就可以了。按钮名称的修改在右边的属性栏中完成。在运行时对话框不能单独存在,需要在应用中添加打开对话框的代码:open(w_gongyingshang)。 其实到此为止我们才只做了表面文章,我们会发现数据窗口没有连接数据库,按钮也没有添加代码。下面就完成这两项工作。 6、首先要建立数据库。点击工具栏中的图标,进入数据库设计界面,打开实验三所建立的“工程项目采购数据库”,其中的表要想在数据窗口中显示表中的数据,还要跟表建立相应的数据对象。数据窗口通过数据对象和表相连。 7、
34、建立数据对象。单击file / new / data window / grid图标,单击OK,会弹出如图1.7所示对话框,选择“quick select / next,选择此数据对象要连接的表,我们选择表“s”即我们建立的供应商的表。选中此表后,右边的框中会出现表中的所有属性,点击“add all”,也就是选中了所有属性,点击OK,还会弹出一个对话框,此中无须修改,点击next即可,点击后弹出最后一个对话框,无须修改,点击finish即完成了数据对象的创建工作。这时要保存新建数据对象,保存时要给数据对象一个名字,一般数据数据对象的名字以d开头,这里我们取d_gongyingshang。 8、
35、数据窗口和数据对象的连接很简单,双击刚才建立的对话框的名字,进入对话框。选中数据窗口,在右边的属性栏中,“data object”下面填写要连接的数据对象的名字,这里是d_gongyingshang,也可以点击右边的浏览按钮,从中选择。这时,数据窗口和数据对象就连接上了。大家可以发现在数据窗口中出现了供应商表的属性。 9、这时数据窗口中还不能得到表中的数据,还需为对话框添加代码,双击窗口界面,输入代码,数据窗口和表才是真正连接上了。 为了使整个应用与数据库相连须在应用中(应用名为test,双击test)添加如下代码 / Profile 工程项目采购数据库 SQLCA.DBMS = ODBC S
36、QLCA.AutoCommit = False SQLCA.DBParm = Connectstring=DSN=工程项目采购数据库 Connect using SQLCA; open(w_gongyingshang) /红色的三行代码可以数据库属性里面拷贝,路径为“工程项目采购数据库(数据库名)”“properties”preview” 10、按钮代码的添加 检索:string ls_sno,ls_filter ls_sno=sle_1.text dw_1.setfilter(sno=+ls_sno+) dw_1.filter /按供应商编号过滤数据 新增:long ll_row ll_ro
37、w=dw_1.insertrow(0) /增加新纪录 dw_1.scrolltorow(ll_row) /滚动数据到新纪录 dw_1.setrow(ll_row) /新增供应商基本信息 删除:dw_1.deleterow(0) 保存:dw_1.accepttext if dw_1.update 1 then messagebox(存盘失败,请检查输入的数据有效性。) rollback; else commit; end if 返回:close(parent) 点击运行后结果: 实验七 小型数据库应用系统开发 一 实验目的 利用前面学过的知识设计一个“图书馆管理系统”,从而进一步掌握powerb
38、uilder数据库开发的基本步骤和方法。 二实验步骤 1. 建立数据库“图书管理系统”,向数据库中添加操作员表、借书还书表、图书表 以及相应数据 2.设计图书馆管理系统的登录窗口w_xitongdenglu: “登录”按钮cb_1的代码如下: / Profile 图书管理系统 SQLCA.DBMS = ODBC SQLCA.AutoCommit = False SQLCA.DBParm = Connectstring=DSN=图书管理系统 /连接数据库 connect; /检索用户名和密码记录 string username, password select 操作员表.用户名, 操作员表.密码
39、 into :username, :password from 操作员表 where 操作员表.用户名 = :sle_1.text ; /判断用户输入的用户名是否正确,正确就打开w_main主窗口 if username=sle_1.text and password=sle_2.text then open(w_main) /打开图书管理系统主界面 close(parent) end if 3.设计系统主窗口w_main ,窗口与主菜单mainmenu相连,通过其可进行图书管理 4.设计主菜单并添加代码使菜单与相关窗口相联系 5.修改密码窗口w_xiugaimima : “确定”按钮cb_1
40、的代码: string username, password select 操作员表.用户名, 操作员表.密码 into :username, :password from 操作员表 where 操作员表.用户名 = :sle_1.text ; /判断输入的用户名是否正确 /更改密码 if username=sle_1.text and password=sle_2.text then update 操作员表 set 密码 = :sle_3.text where 操作员表.用户名 = :sle_1.text ; if sle_3.textsle_4.text then messagebox(错
41、误!,新密码两次输入不相同!,exclamation!,ok!,2) else messagebox(成功!,密码已被更改,请记住改后密码!,exclamation!,ok!,2) end if end if 6.借还书窗口w_jiehuanshu : “借书”按钮cb_1的代码: /显示特定会员和图书的借阅记录 dw_1.settransobject(SQLCA) dw_1.setfilter(会员编号=+trim(sle_1.text)+ and 图书编号=+trim(sle_2.text)+) /trim修剪,删减 dw_1.retrieve dw_2.settransobject(SQ
42、LCA) dw_2.setfilter(图书编号=+trim(sle_2.text)+) /trim修剪,删减 dw_2.retrieve /得到记录的总行书 int m,n /得到借书记录总行数和图书当前行号 if dw_2.retrieve=1 then m=dw_1.rowcount n=dw_2.getrow if dw_2.object.库存n0 then /插入借书记录 dw_1.insertrow(m+1) dw_1.scrolltorow(m+1) dw_1.object.会员编号m+1=sle_1.text dw_1.object.图书编号m+1=sle_2.text dw_
43、1.object.借书日期m+1= string(today) dw_1.object.备注m+1= 未归还 /库存减1 dw_2.object.库存n=dw_2.object.库存n-1 /更新数据库 if dw_1.update=1 and dw_1.update=1 then commit; messagebox(成功!,更新数据库成功!) else rollback; messagebox(失败!,更新数据库失败!) end if else /提示用户不能借书的原因 messagebox(错误!,库存不足或您的卡号被锁定,会员或图书不存在,无法借阅!,exclamation!,ok!,
44、2) end if end if “还书”按钮cb_2的代码: /显示特定会员和图书的借阅记录 dw_1.settransobject(sqlca) dw_1.setfilter(会员编号=+trim(sle_1.text)+ and 图书编号=+trim(sle_2.text)+ and 备注=未归还) dw_1.retrieve dw_2.settransobject(sqlca) dw_2.setfilter(图书编号=+trim(sle_2.text)+ ) dw_2.retrieve /判断哪一行为还书记录 int n n=dw_1.rowcount /记录数 if dw_1.retrieve=1 or n1 then /找到还书记录后