PowerBuilder的创始人 米歇尔克茨曼。
PowerBuilder奠基人 大卫李特瓦克。
1991年6月。Powersoft公司发布了其旗标式客户/服务器硬功开发工具。
1995年PowerBuilder1.0
1996年PowerBuilder5.0
2003年PowerBuilder9.0
PowerBuilder特点:
面向对象的编程和时间去懂的应用开发程序开发工具,
支持跨平台开发
可以轻松编写语句
人性化设计。
拥有独特的库文件画板和层次清晰的系统资源库。
提供了丰富多样不同风格的数据窗口
PowerBuilder9.0新特性。
支持快速开发的jsp编辑器。
支持xml、PBNI(PowerBuilder Native Interface)、EJB Client、PB9.0与Web Service 的关系,PB9.0与.NET、其他增强功能。
建立应用对象
建立Student的工作区和目标,然后建立一个名为student的对象在其Open事件中加入如下脚本:
//设置SQLCA的属性,利用名为pbexam的数据源连接数据库 SQLCA.DBMS="ODBC" SQLCA.AutoCommit=False SQLCA.DBParm="Connectistring='DSN=pbexam'" CONNECT USING SQLCA; //打开登录窗口 open(w_register) |
在应用程序的Close事件中加入如下脚本:
//断开数据库连接 DISCONNECT USING SQLCA; |
登录窗口
在用户名的单行编辑框的ue_enterkey事件中加入如下脚本:
//判断用户是否按下回车 If key = KeyEnter! Then //把输入焦点转移到"密码"单行编辑框 sle_2.SetFocus() End If |
在密码单行编辑框的ue_enterkey事件中加入如下脚本:
If key = KeyEnter! Then //触发登录按钮的Clicked事件 cb_1.TriggerEvent(Clicked!) End If |
在登录按钮的Clicked事件的脚本中加入如下脚本:
String password,right //用SQL语句根据用户名查找密码 //right为一全局变量,用来保存用户权限 SELECT mm,qx INTO:password,right FROM "yh" WHERE "yh"."hm"=:sle_1.text; //SQLCode等于100代替没有得到任何记录。 If SQLCA.SQLCode=100 Then MessageBox("提示消息","没有此用户") sle_1.text="" sle_1.SetFocus() ElseIf password<>sle_2.text Then MessageBox("提示信息","密码错误!") sle_2.text="" sle_2.SetFocus() Else //打开主窗口,关闭登录窗口 Open(w_main) Close(Parent) End If |
在取消按钮的Clicked事件的中加入如下脚本:
Close(parent)//关闭登录窗口 |
菜单设计
在学生管理菜单项的Clicked事件中加入如下脚本:
//打开学生管理窗口 OpenSheet(w_student,w_main,4) |
在页面设置菜单项的Clicked事件中加入如下脚本:
window actsheet //取得当前活动窗口 actsheet=w_main.GetActiveSheet() //触发活动窗口的ue_pageset事件 actsheet.TriggerEvent("ue_pageset") |
在打印菜单项的Clicked事件中加入如下脚本:
window actsheet actsheet=w_main.GetActiveSheet() actsheet.TriggerEvent("ue_print") |
在退出菜单项的Clicked事件中加入如下脚本:
Close(ParentWindow) |
在窗口级联菜单项的Clicked事件中加入如下脚本:
//修改菜单的选中标志 m_jilian.checked=True m_chongdie.checked=False m_shuiping.checked=False m_chuizhi.checked=False //改变工作表的排列方式 ParentWindow.ArrangeSheets(cascade!) |
在窗口重叠菜单项的Clicked事件中加入如下脚本:
m_jilian.checked=False m_chongdie.checked=True m_shuiping.checked=False m_chuizhi.checked=False ParentWindow.ArrangeSheets(Layer!) |
在窗口水平菜单项的Clicked事件中加入如下脚本:
m_jilian.checked=False m_chongdie.checked=False m_shuiping.checked=True m_chuizhi.checked=False ParentWindow.ArrangeSheets(Tile!) |
在窗口垂直菜单项的Clicked事件中加入如下脚本:
m_jilian.checked=False m_chongdie.checked=False m_shuiping.checked=False m_chuizhi.checked=True ParentWindow.ArrangeSheets(TileHorizontal!) |
在个人成绩统计菜单项的Clicked事件中加入如下脚本:
//打开专业选择窗口,并把统计的类型作为参数传递给专业选择窗口 OpenWithParm(w_selectzy,"person",w_main) |
MDI主窗口
在主窗口的Open事件中加入如下脚本:
//如果不是系统管理员则屏蔽用户管理菜单项 If right<>1 then m_main.m_file.m_id.visible=False //因为打开主窗口后还没有打开任何工作表,所以把和工作表相关的功能菜单的Enabled属性设为false m_main.m_file.m_pageset.enabled=False m_main.m_file.m_preview.enabled=False m_main.m_file.m_previewcancle.enabled=False m_main.m_file.m_print.enabled=False m_main.m_edit.m_insert.enabled=False m_main.m_edit.m_del.enabled=False m_main.m_edit.m_save.enabled=False m_main.m_edit.m_append.enabled=False m_main.m_edit.m_retrieve.enabled=False m_main.m_edit.m_prior.enabled=False m_main.m_edit.m_next.enabled=False m_main.m_edit.m_first.enabled=False m_main.m_edit.m_last.enabled=False m_main.m_caozuo.m_select.enabled=False m_main.m_caozuo.m_find.enabled=False m_main.m_caozuo.m_sortasc.enabled=False m_main.m_caozuo.m_sortdesc.enabled=False m_main.m_window.m_jilian.enabled=False m_main.m_window.m_chongdie.enabled=False m_main.m_window.m_shuiping.enabled=False m_main.m_window.m_chuizhi.enabled=False |
学生管理窗口
在学生管理窗口的Open事件中加入如下脚本:
//为数据窗口分配事务对象,并检索数据 dw_stu.SetTransObject(SQLCA) dw_stu.Retrieve)_ //用静态文本显示当前日期 st_1.text=string(today(),"yyyy/mm/dd") |
在查询按钮的Clicked事件中加入如下脚本:
If sle_1.text="" Then //如果没有输入查询关键字提示输入 MessageBox("提示","请输入您要查询的关键字") sle_1.SetFocus() Else //按输入的姓名查询,并用like事件模糊查询 dw_stu.setFilter("xm like '%"+sle_1.text+"%'") dw_stu.filter() dw_stu.SetFocus() End If |
在学生管理窗口的Activate事件中加入如下脚本:
//此事件在当前窗口获得焦点时触发 //如果当前用户不是系统管理员和数据管理员则屏蔽和数据修改有关的菜单项 If right>2 Then m_main.m_edit.m_insert.enabled=False m_main.m_edit.m_del.enabled=False m_main.m_edit.m_save.enabled=False m_main.m_edit.m_append.enabled=False Else m_main.m_edit.m_insert.enabled=True m_main.m_edit.m_del.enabled=True m_main.m_edit.m_save.enabled=True m_main.m_edit.m_append.enabled=True End If //在当前窗口得到焦点后设置菜单项的enabled属性为True //在窗口得到焦点时使用菜单项即可 m_main.m_file.m_pageset.enabled=True m_main.m_file.m_preview.enabled=True |