版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
秦皇岛东软软件有限公司何钰PowerBuilder程序设计培训教程Pb的安装Pb6.5的安装Pb6.5的安装Pb6.5补丁的安装AnyWhere5.5的安装Pb9的安装内容简介关于PB(AboutPowerBuilder).使用场合(Where)?工与数据库交互原理(How)?学习内容(课程内容)(What)?关于PowerBuilderPowerBuilder由Sybase公司出品,最早是由PowerSoft公司开发并发布销售的,并出品了到PowerBuilder5.0为止的各个版本,初期在广大开发人员中反映并不强烈,到1995年左右,由Sybase收购PowerSoft公司开始并成功推出了PowerBuilder6.0版本,由此开始,由于它的易用性、数据窗专利技术、对各种流行RDBMS的广泛支持、独特的开发方法及理念、独特的对象编程技术等等,成为现在为止可能是世界上用于数据库前端开发的最快捷、最方便、最强大的工具,一般而言,对一个小型的系统,在充分分析好的前提下,熟悉的程序员可以在一周以内完成一个独立的系统。这对于其他数据库系统前端开发工具,如VB,Delphi,VFP,ORACLEDevelop2000等等,如果你用过这些工具,简直无法想象。
虽然现在流行的开发工具并不是PB,因为现在到处都是B2B,B2C,PB在这方面能够实现,但比较其它专门工具而言,并不具有非常大的优势,而且实现的技术比较而言相对复杂。但对于C/S结构的数据库应用及Intrnet而言,PowerBuilder仍然是非常好的选择。PowerBuilder应用场合1、大型数据库系统C/S模式前端开发工具或B/S模式应用服务器开发工具,一般应用于需要大型或中型数据库系统支持(如ORACLE,Sybase,MSSQLServer,DB2,Informix)作为后台数据支撑平台的管理类系统,一般可以承受千万级纪录量的系统,如:
·SIMIS系统–社保管理信息系统
·HIS系统–医院管理信息系统
·“费灵系统”–财政非税系统2、中、小型数据库系统开发,一般数据量为10万左右,支持并发或仅单机用户,如中、小型企业的内部信息管理、各种小型软件、共享软件等;PB与数据库交互原理简介PowerBuilder的吸引人的地方也就是它的数据窗技术,描述为:1、前端(Client)建立独立的Transaction(缓冲区,事务对象),用于响应用户请求及返回执行结果;2、任何事务都必须在某Transaction中执行,默认为SQLCA(SQLConnectionArea),如select*fromtable_xxxusingsqlca;Dw_xxx.settransobject(sqlca);3、数据窗通过Transaction提取数据、编辑数据、再根据需要回写数据,并保证在同一事务内,这样就完成了日常的数据的维护、更新等操作。4、数据窗现在已经作为标准的ActiveX可编程对象,可以嵌入到其他程序中使用,但总是在PB中最方便,具有专利技术的数据窗集成了数据编辑的几乎所有的常用算法、操作方式等等,非常方便。5、实际应用中,通过众多的数据窗和其它标准Windows控件协调运行,就完成了最基本的功能。实际上远远不止这些……课程内容PowerBuilder基本原理;PB基本知识(对象、函数、事件、变量、脚本、继承);对象及控件的基本属性及方法;数据窗控件(Datawindow)的特性及方法;基本应用(Application)的建立;与数据库系统集成进行开发基本技术及方法;自己动手做东西。PowerBuilder基本原理编程原理开发界面库(Library)管理基本对象及控件运行方式PowerBuilder运行原理开发支持库Pblib.dllPbcmp.dllPbudo.dllPbrtc.dll…开发(PBLs)编译(Pcode,Mcode)应用(Application:DLL,Exe,PBD)BugFixing运行支持库pbdwe90.dllpbdwo90.dllpbdwp90.dllpbmss90.dllpbo8490.dllpbsql90.dllpbvm90.dllLibjcc.dll……DBMS发布(InstallShield)PowerBuilder基本原理-开发界面脚本预览菜单工具条对象属性面板函数及事件状态条PowerBuilder基本原理-开发界面说明:1、PB开发为标准的MDI方式,即对应不同的开发对象,有它不同的菜单及工具条,对应不同的功能;2、可以创建的对象包括4大类:
对象(窗口、函数、结构、菜单……)
数据窗对象(Grid,Free
Form,Tabular,Label,N-Up……)
数据库(DatabaseProfile,Query,Pipeline)
工程(Application,Proxy
Library,COMCTS,OLE2,JavaProxy……)3、常用工具
Library,Editor,Classview
Browser,DBProfileEditor,
Debugger,DWSyntax等数据库基本知识-1一、C/S模式图示DBServersTCP/IP发送SQL语句到数据库服务器返回SQL语句查询结果到客户机WinNT,Linux,UnixMicrosoftSQLServerORACLESybase,DB2,InformixClientsServersClientsClients1、客户端运行自己的程序,向服务器发送SQL请求及取回结果。2、服务器侦听网络,响应请求并返回处理结果。数据库基本知识-2二、数据库系统基本组成物理设备DBMSApplications(应用)网络,协议介质,接口DBTools(管理工具)存储管理数据库管理数据库中的对象管理1.表单2.视图3.触发器4.索引5.存储过程4.函数、包数据库基本知识-3三、关系数据库系统基本概念表单(Table):由属性和记录构成的二维关系表;视图(View):基于单表或多表的查询;存储过程(Storeprocedure):存储于数据库服务器上的一系列操作的合集,由服务器执行,可以增强可管理性和运行效率;触发器(Triggers):当对表的某种操作发生时,就引发其他的一些逻辑处理;索引(Index):服务于快速查询,寄生于表的一种服务;函数,包(function,package):类似于存储过程;数据库(database):上述各对象的集合;设备(device,tablespace,datafile):存放数据库的物理定义;日志(log):记录对数据库的任何操作,用于备份和恢复;用户(User):可以使用数据库中具体内容的人员定义;角色(Role):给同一用户赋予不同的角色,享有不同的权限;权限(Privilege):赋予用户操作数据的权限;数据库基本知识-4四、ASA的数据库管理
Sybase随PB发行的AdaptiveServerAnywhere(ASA)6.0是短小精悍的个人数据库系统,支持了大多数的关系数据库操作。如日志、事务、用户、触发器,并提供管理中心(Sybasecentral)来管理数据库的内容,
在PB中,一个小型的数据库应用用ASA作为后台数据库已经完全可以胜任。本课程的后台数据库将主要放在ASA。
SybaseCentral实际上是以插件方式运行的,他可以管理Sybase产品中的大多数,如SybaseEnterprise(SYE)数据库,JugarCTSPowerDynamo,等等.提供了统一的界面。当然也可以通过SQL语句来管理数据库。包括建表、索引、存储过程、触发器,数据更新,授权等等都可以通过SQL语句来执行。 下面将通过演示来讲解关于SybaseCentral的使用,特别是如何建库,建表等操作。应用-Application如何建立应用(Application)事件及脚本(EventsandScripts)连接(Transaction)入口(StartPointer)应用-1.建立1、Menu->File->New->Application (菜单-文件->新建->开始向导->Application)2、选择应用名称和存放的库文件 一个应用就建立完毕。实际上这个应用没有任何脚本、窗口,也没有处理任何事情。 应用建立完毕后,PB自动建立了一个PBL文件(PowerBuilderLibrary),并在这个PBL文件中创建了一个Applicationentry(应用条目)
一般,一个应用都有一个主窗口,由这个窗口负责和用户的交互过程,而在应用的open事件的脚本中处理的就是如何打开这个窗口,如何和数据库建立连接,如何初始化一些全局变量,关闭应用时(Close事件)做如何处理等等。如:
Open事件:
……. connectusingsqlca;
open(w_main_frame) Close事件:
disconnectusingsqlca; destroyxxxx
就是在 譬如,建立应用名为pb_lesson,存放库名为lesson.pbl,则在lesson.pbl中就存在了一个pb_lesson的条目,当然,可以在其他pbl中创建一个新的application. 应用-2.事件及用途(1)Application的事件Open
当一个应用执行时,即触发此事件,实际上就是程序的入口,一般处理一些公用变量,公用对象,连接数据库,打开主窗口等操作;Close
当主窗口关闭后触发此事件,如果没有打开任何窗口,则在Open事件后直接触发此事件,一般在这个事件中断开连接,清除变量等操作;Connectiongbegin
当连接开始时触发此事件,由connect函数直接触发此事件Connectionend
当连接结束后触发此事件,由disconnect函数触发Idle
idle(xxxsecond)函数触发,既当系统处于等待状态指定秒数xxx后触发该事件,一般处理如关闭系统,提醒用户等Systemerror
当程序运行发生任何系统错误时触发该事件,一般处理记录错误,提醒用户等操作。常用事件:open,close,systemerror应用-2.事件及用途(2)脚本(scripts)编写基本知识
·一般依赖于某事件或函数,由事件或函数触发而执行,由换行或;表明一条语句的结束,如
Connectusingsqlca;
Open(w_main_frame) Disconnectusingsqlca; ·任何嵌入式SQL都必须用;来表明该语句的结束,如
Selectstudent_name
into:ls_name
fromtable_1 wherecol_1=‘hello’; ·大小写不敏感,如ls_name
和LS_Name表明同一个变量或对象
·可以在一行写多条语句,用;隔开。如
ls_name=‘xxx’;ls_name2=‘yyy’;li_cnt=2; ·变量或对象的引用前必须声明,如
stirng
ls_name=‘abc’//初始值
ls_name=‘Liujiangang’
Messagebox(‘Hello’,’MyNameis‘+ls_name)
就是弹出一个消息框,并提示标题为Hello,内容为MyNameisLiujiangang
的内容。并显示确认按钮用来接受用户响应。应用-3.连接(1)一般地,在数据库前端开发中,都连接到某数据库服务器的某数据库,或者连接到本地的某数据库或ODBC源,而连接一般是在应用的Open事件中处理的,在Close事件中关闭此连接,连接实际上是Transaction对象,该对象有下列常用属性:DBMS:指定数据库管理系统的名称,如O84ORACLE8.0.4,ODBCServerName:指定数据库服务器名称,如EPCS_LOCAL,MSS_DB等Database:指定数据库服务器上的数据库,如MaterialDBUserID:指定数据库用户的ID号,如dboUserPassLogID:指定用于连接到数据库服务器的用户ID号,如connectorLogPassDBParm:附加的连接参数,如‘ApplicaitonName=“asdfadsf”’等,随DBMS而变化AutoCommit:是否自动提交,如True,false以上这些参数对特定的DBMS不是都必需的,一般DBMS,ServerName,都必须指定。其他属性(该对象创建后才具备):SQLCode:最近SQL语句执行的PB结果码,0,-100,-1三个数值SQLDBCode:最近事务中SQL语句返回的数据库操作返回码;SQLErrtext:最近操作的错误信息;SQLNRows:最近操作返回的结果数据;一般,一个应用中已有默认的Transaction存在,即SQLCA,因此,在Application的OPEN事件中就可以指定它的具体属性用来连接数据库,如//Profilepb_classSQLCA.DBMS="ODBC"SQLCA.AutoCommit=FalseSQLCA.DBParm="ConnectString='DSN=pb_class;UID=;PWD=;“应用-3.连接(2)就指定了TransactionSQLCA的属性,然后就可以用数据库的四个方法中的Connect来处理如一个Application的常用的Open事件脚本为:SQLCA.DBMS="ODBC"SQLCA.AutoCommit=FalseSQLCA.DBParm="ConnectString='DSN=pb_class;UID=;PWD=;“Connectusingsqlca;Ifsqlca.sqlcode=-1then
Messagebox(‘Error’,’cann’tConnecttoServer’+sqlca.serverName,stopsign!) haltclose//终止并处理Application的Close事件EndifOpen(w_frame)应用-4.入口一个系统的入口就是Application的Open事件,但是一般在这个事件中打开某窗口,如
Open(w_frame)
主要的事务就由w_frame来处理了。此时Application仍继续运行着并监控着W_frame的状态,一旦W_frame结束,就触发Close事件窗口-window窗口概述1、窗口(Window)是程序和用户进行交互的主要界面,类似于VB或Delphi的Form(窗体),在窗口上可以布置各种不同类型的控件以满足程序的要求,各控件间相互协作,完成预定功能。2、一个窗口可以只被打开一次或者作为一个实例变量而被创建(实例化)然后打开多次。3、任何窗口的最底层基类都是windows,可以逐级继承,对于节省代码开支,界面一致性等非常有好处。4、数据窗作为标准控件可以直接嵌入到窗口中使用。窗口-1.创建有2种方式创建一个窗口:1.新建:从菜单中选择“文件->新建”,弹出新建向导,选择“对象-Windows”,系统就自动创建一个标题为Untitled的空窗口,没有任何脚本,但可以被打开。2.继承: 菜单中选择“继承”,弹出可被继承的祖先清单,选择一个,系统自动从该祖先窗口继承,新窗口拥有祖先窗口的所有特性及脚本,并可以重载及覆盖这些属性或脚本。创建并修改完成,按Ctrl+S或文件->保存,输入窗口名称并指定放在那个PBL中,该窗口就可以被调用了。注意点:基于继承的窗口,一旦祖先的属性修改,则该窗口中没有被重载或覆盖的部分即自动修改,实际上该窗口分为2部分:祖先和自己。窗口-2.基本属性窗口的属性非常多(41个),仔细理解属性的具体用途及含义对用好窗口对象非常重要。属性名称含义标题(Title):定义该窗口的标题栏;类型(WindowType)定义该窗口的类型:Main!-主窗口,常用方式Popup-弹出式窗口,用来为其它窗口提供支持信息Child!–由父窗口打开,并且只能在父窗口范围内存在Response!-用于输入信息,模式窗口MDI!,MDIhelp!-多文档窗口菜单(MenuName)对Main,MDI,mdihelp类型的窗口有效,设置该窗口的菜单名称外观属性外观:enabled,visible,titlebar,maxbox,minbox,resizeable,border,backcolor,mdiclientcolor,HscrollBar,VScrollBar等等位置:x,y,width,height,pointer菜单:toolbarvisible,toolbaralignment,toolbarx,toolbarY,toolbarWidth,ToolbarHeight运行态属性(只读,描述性质)Control[],menuid运行态属性bringtotop窗口-3.支持控件(1)窗口共支持以下33种标准控件1CommandButton命令按钮(cb_ok,cb_cancel)18HScrollBar
水平滚动条2PictureButton图形按钮(pb_ok,pb_cancel)19VScrollBar垂直滚动条3CheckBox
检查框(cbx_choice_1)20HTrackBar
水平导轨4RadioButton收音机按钮(单选按钮)(rb_tes)21VTrackBar
垂直导轨5StaticText静态文本(st_notice)22HProgressBar
水平进度条6StaticHyperLink文本超级连接(shl_1)23VProgressBar
垂直进度条7Picture图形(p_1)24DropDownListBox下拉列表框(ddlb_8PictureHyperLink图形超级连接(phl_1)25DropDownPictureListBox下拉图形列表框(ddplb_9GroupBox
分组框26ListBox列表框(lb_)10Line 线条27PictureListBox图形列表框11Oval椭圆28ListView列表视图12Rectangle矩形29TreeView树13RoundRectangle圆角矩形30Tab标签14SingleLineEdit单行编辑(sle_test)31DataWindow数据窗15EditMask掩码编辑(em_year)32Graph图表16MultiLineEdit
多行编辑33OLEOLE2对象17RichTextEdit富文本编辑34UserObject用户自定义控件(对象)窗口-3.支持控件(2)这些控件各自有自己的属性,事件及函数(Properties,Events,Functions),以后我们将穿插在各章节中提及。
UserObject是一种特殊的对象(控件),它以CustomClass,Stand
Class,Custom
Visible,External
Visual,StandVisual五种基本类为基类,拥有该基类的基本属性,同时在他们的基础上扩展属性,函数及事件,并直接作为一个可视化控件可以被window或实例化后使用。窗口-4.常用事件 事件是描述一个窗口或窗口中控件的行为的语法,只有在满足特定的条件时才会触发该事件,一般一个事件反映了某种条件下的某一动作。也可以手工方式使系统满足这些条件从而触发这些事件。事件名称事件含义及用途Open当该窗口被用open()函数打开时触发该事件,一般作为该窗口进行初始化处理的入口Close当该窗口被关闭后消失前触发,可能被close()函数关闭,也可能是系统级关闭操作,一般用于收尾处理Resize当该窗口的大小调整时触发,一般用于调整界面控件的相对位置CloseQuery后于Close事件触发,当该窗口准备关闭前触发,可以替代close事件,并可以决定是否可以关闭Timer由窗口函数Timer()触发,到达指定秒数后触发该事件,一般用于控制。Activate当窗口被激活前触发,触发后焦点自动移到该窗口的第一个制表站或上次的制表站,如果没有任何可编辑对象,则该窗口获得焦点。Deactivate当该窗口变为非激活状态前触发鼠标事件Clicked,doubleclicked,mousedown,mousemove,mouseup,rbuttondown拖放事件Dragdrop,dragwithin,dragenter,dragleave键盘Key,systemkey其他DDE控制,Other,show,hide,ToolbarMoved,Help窗口-5.常用函数窗口函数一般用来控制窗口的行为,取得窗口信息,控制窗口的行为,触发特定事件等等函数名称函数含义及用途Open(),openSheet()系统级函数,用于打开某特定窗口,变参调用Close()系统级函数,用户关闭某窗口,变参调用PostEvent在当前脚本执行完毕后触发某事件(后续某动作),变参TriggerEvent立刻触发某事件(嵌入某动作),变参Parentwindow()系统级函数,取该窗口或某对象的父窗口Classname()指定窗口或对象的类名(名称)Typeof()返回当前对象的类型(powerobjet)Timer(seconds)开始计时,如Timer(5,this)表示本窗口在5秒后触发Timer事件,变参ArrangeSheets()如果是MDI框架窗口,则按指定方式排列所有文档窗口Hide(),show()隐藏,显示,setredraw(false)大小及位置Move(x,y),resize(w,h),workspacewidth(),workspaceheight(),workspacex(),workspacey(),setposition菜单Settoolbarpos(),settoolbar(),changemenu()鼠标Pointerx(),pointery()其他DDE控制系列函数窗口-6.控件操作(1)在界面设计中,往往用到非常多的控件放在同一窗口中,一般会有下列要求:1:对齐操作 包括左、上、下、右,竖向、横向对齐等操作。 以第一个选择的对象为基准2:大小操作 包括宽度,高度:3:相对位置操作 水平间距,竖向间距(三个以上对象选中时才有效)4:制表站(taborder)定义 当运行时,用户按tab在各个控件上的移动顺序,一般以10进位 如10,20,30……140……5:公用属性及特有属性指定 字体、文本对齐方式、前景色、背景色、边框等:右对齐水平中间对齐向下对齐向上对齐左对齐竖向中间对齐等高文本色(前景色)背景色边框等宽等高等宽横向等间距竖向等间距窗口-7.控件操作(2)其他按钮功能:剪切对象或文本粘贴对象或文本撤销或重做上次的任意操作脚本工具按钮置于最前端复制对象或文本置于最后端打开当前选中对象的脚本属性面板切换到当前选中对象全选选中行及光标所在行标记为注释选中行及光标所在行标记为非注释查找和替换编译当前脚本粘贴各种语法或原型定义保存窗口-8.控件的公用属性每个控件都有的属性共7个,这实际上是可视控件(Control)的最基本属性Name:在窗口中唯一标记该控件的有效字符串Enabled:使某控件失效或使能,失效后用户无法操作,但是可以手工触发它的事件Visible:可视与否ForegroundColor:前景色(按钮无效)BackgroundColor:背景色Tag:与系统无任何关系的一个公用属性,可以做任何事情Border:边框类型,枚举值,有些控件指定了也无效是无效的。位置:在父对象中的定位(如x,y,width,height,x1,y1,x2,y2等,但属性名称不一致)关于颜色的算法:长整型(long),rgb颜色系统颜色值=rgb(red,blue,green)=green*65536+blue*256+red如红色(255)=rgb(255,0,0)=0*65536+0*256+255可以从下拉工具条中直接选取常用颜色及系统颜色窗口-9.窗口控件简介-命令按钮类型:Commandbuttom,PictureCommandButton
最常用属性:
default:True时,当在窗口中的任意控件上按下回车键,就会触发它的clicked事件,同时边框加深;
cancel:True时,当在窗口中的任意控件上按下Escape,就会触发它的clicked事件;
text:现实的文本,如“确定(&O)”就是这样的:
PictureCommandButton中
PictureName,DisabledPictureName指定有效,失效时的图片,但因为不支持透明,故用的比较少。
Htextalign,VtextAlign:制定水平,垂直方向的文本对齐方式事件:
clicked:最主要事件,在用户按下并抬起鼠标后触发。 其他事件:rbuttondown,dragdrop,dragenter,dragwithin,dragleave,getfocus,lostfocus等等 极少用,一般都在clicked事件中写脚本。函数:
setfocus():取得焦点,一般在别的控件中调用,如cb_xxx.post
setfocus()
classname():取得名称,如cb_test.classname()就返回“cb_test”
hide(),show(),resize(),move()等较少用到。用途:到处都用,但一个界面上按钮不易太多,而且布置要合理,用图片按钮给用户比较直接的感觉,但是颜色就固定了。窗口-10.窗口控件简介-静态文本类型:StaticText
,经常用,一般用做显示信息属性:
text:显示的文本
backcolor,textcolor,bordercolor:颜色属性(底色,前景色,边框色)事件:
clicked,doubleclicked,极少对它写脚本函数:同commandbutton,很少用窗口-11.窗口控件简介-可编辑类主要有:SingleLineEdit,MultiLineEdit,EditMask,RichTextEdit属性:
SingleLineEdit text:可以修改,其他和statictext一致;
MultiLineEdit
全部SingleLineEdit属性和事件,可以折行
EditMask
和SingleLineEdit一致,可以制定输入的格式(mask属性),如日期型,则 mask输入‘yyyy-mm-dd’
RichTextEdit:类word文档处理控件,一般较少用到事件:
modified:最常用事件,指明做了修改后执行什么操作。
getfocus:取得焦点后执行的操作,一般用来选择文本,如: this.selecttext(1,len(this.text))
其他事件很少用到函数:
copy(),paste(),selecttext(),cut(),undo()等等,都是用于文本操作的。其他文本编辑控件都有这些函数,如sle_test.copy()表明将sle_test中选中的文本复制到剪贴板。用途: 除了数据窗以外的所有用户输入的口子都在这儿,因此用途非常广,结合数据窗,就可以完成用户输入部分的操作了。窗口-12.窗口控件简介-显示及控制类类型:HScrollBar,Vscrollbar:滚动条
HTrackBar,VTrackBar:导轨
HProgressBar,VProgressBar:进度条属性:minposition,maxposition,position:指定最小,最大值,当前值 如hpb_1.position=87//表明将进度条的位置移动到87处(不一定代表是\ 87%,因为和maxposition有关)事件:TrackBar,ScrollBar moved:当移动按钮或导轨时触发函数:TrackBar,ScrollBar
setposition(),setrange(),OffsetPos():设置位置,范围,相对移动用途: 这几个控件,一般Hprogressbar较常用,经常使用在需要进行常时间运行的程序中,显示当前运行的总体进度,以免用户以为死机而reset.(PB是单线程内核,即使可以通过yield()函数来进行后台处理,但一旦执行某运算,一般是很难终止的,而且此时cpu的占用会非常高,以至用户以为机器死了)窗口-13.窗口控件简介-下拉列表框类型:DropDownListBox(ddlb),DropDownPictureListBox(ddplb)属性:两者基本相似,ddplb多了一个图形显示及图形属性,图形处理函数而已,在实际使用中,基本上没有多少区别。
Item:指定下拉列表中的项目,一般不能太多,否则就毫无意义。
PictureName:按顺序指定图片名称,然后和item中的pictureindex对应
Sorted:是否按item中的文本排序
ShowList:=true,则永远显示下拉列表。一般很少用,本来就是想省地方,现在再占用一块地方,还不如用PictureListBox来的好。事件:selectionchanged
当选中的对象改变时触发,一般都在这儿写脚本。可以通过事件的参数index来得到当前选中的是哪一项。函数:
DirList():可以直接将某目录下的文件名全部显示出来,配合Treeview,可以自己做一个目录及文件树
DirSelect():取出由dirlist()生成的列表中当前选中的文件名或目录名;
Additem(),Insertitem(),DeleteItem()增加,插入,删除item
SelectItem():手工指定选中的item
TotalItems():一共有多少个item Reset():清除所有item
FindItem():查找符合条件的item用途: 用在唯一需要确定某类型的时候,选项不要超过20个,否则很容易找不到,而且,20个图片堆在一起,很难确定那个是你真正需要选择的。窗口-14.窗口控件简介-列表类类型:ListBox,PictureListBox属性、事件、函数: 与下拉列表类基本类似,甚至函数、事件、都差不多,不过列表类支持多选 因此也就多了有关于多选的其他函数,常用的有3个:
state(),判断某个item是否为选中,
setstate():设置某项的选中状态
TotalSelected():一共选中了多少个用途: 一般作为需要用户可以有多个选择余地的地方,但是item不能太多,5个里面挑一个好找,50个里面的话,只有眼花@_@窗口-15.窗口控件简介-视图类类型:ListView,TreeView
这是两个仅次于datawindow的复杂程度和好用程度的两个控件,由于有比较丰富的属性和函数可调用,因此可以做出很多效果。属性:ListView
:LargetPicture属性 主要是用来显示为LargeIcon!类型而设的。 其他属性同PictureListBox
但是可以指定多个列,而不是单个item。
TreeView
一个item可以有3个图片: PictureIndex,selectedPictureIndex,StatePictureIndex
每个Item不是单一的文本,而是特别的TreeViewItem,有自己的子属性 如data,label,pictureindex,selectedpictureindex,level等等事件:SelectionChanged:选中项改变
RbuttonDown:鼠标右键,一般用来做弹出菜单:menu_xxx.popup(xpos,ypos)函数:图片类:addpicture(),deletepicture():主要用于动态形成视图
ListView:add,insert,delete等等,如
TreeView:
AddStatePicture(),DeleteStatePicture():处理状态图片
AddItem(),DeleteImte(),SetItem:增加,删除,修改某节点(Item)
InsertItem():指定位置插入某Item
InsertItemLast():在某节点下级最后增加下层Item
InsertItemFirst():在某节点下级最前插入下层Item
InsertItemSort():在某节点下级中按排序插入下层Item
FindItem():相对查找,如同层、上层、下层
Expanditem(),CollapseItem():展开、折叠指定节点
SelectItem(),SetFirstVisible()选中某节点,使某节点第一个可见应用:非常广泛窗口-16.窗口控件简介-其他其它控件:图形控件,图表控件:
Line,Oval,Rectangle,RoundRectangle,他们总是处于最底层而不可能覆盖在其他控件的上方,没有事件,一般仅做装饰用。运行时修改它们的属性就可以实现各种效果。图表控件:Graph
用来表示系列数据。一个图表控件可以有一个或多个数据系列。 函数:
AddCategory,将一个Category添加到控件中。 AddSeries,在一个已经存在的Category中添加一个数据系列并返回一个值。
AddData和InsertData,利用AddSeries的返回值在一个已经存在的数据系列中添加一个数据项。另外用户还可以直接在数据窗口中利用Graph风格来显示图形化的数据。菜单-Menu菜单:Menu
应用程序中一般都有菜单,原因很简单。因为如果每项命令都有按钮完成,就会因为按钮过多而使得用户在使用起来找不到头绪。而下拉式菜单不但具有占用空间小的优点,而且层次分明,每项功能都有相应的文字提示。所以对于一个复杂的应用程序来说,菜单绝对是必不可少的。Pow-erBuilder提供了一个菜单画板。用户可在菜单画板中定义自己需要的菜单项和每个菜单项相应的脚本创建:文件-新建-对象-菜单即可进入菜单画板,或文件-继承,选择祖先菜单,然后也进入菜单画板。属性:每个菜单有若干级联的菜单项构成,每项成为一个menuitem,每个item都具有菜单的所有属性,包括: 普通属性:
name:名称,如果从祖先继承,则不能修改
text:菜单文字,如“文件(&F)”
Microhelp:显示在MDIHelp框架窗口的状态栏中的文字
Visible,Enable:可见,使能
shortcut:快捷键,如CTRL+S,有下级菜单的菜单没有快捷键 工具条属性:
ToolbarItemText:工具条上的文字;
ToolbarItemName:工具条图片;
ToolbarItemDownName:工具条下压图片;
ToolbarItemSpace:工具条前面的空格;
ToolbarItemOrder:工具条顺序;
ToolbarItemIndex:工具条所在的Dock顺序菜单-如何使用菜单的事件:
selected:选中后,即鼠标通过该菜单项;
clicked:单击后,一般在这儿写脚本;脚本编写: 一般在脚本中打开某窗口,如:
openSheet(w_mdi_sheet,parentwindow,0,original!)就是在框架窗口parentwindow(菜单的属性,表明该菜单依附的主窗口,一般为MDIFrame)中打开w_mdi_sheet,并将打开的窗口的标题自动显示在定义为windows类型的菜单下,并保持原始w_mdi_sheet的位置。详细参数请查看opensheet函数。一般菜单用在2个地方:
MDIFrame:框架窗口中,作为主程序的主要界面的一种执行方式, 一般一个MDIFrame都必须指定一个菜单;
Popup:弹出式菜单,用在特定的窗口或对象中,由menu_xxx.popup(x,y)来调用如何引用菜单:
2种方式,显示和隐式引用: 如有框架中定义菜单:m_frame,其中有
m_file(文件&F)
m_file_open(打开&O)
m_file_empbar(-)
m_file_exit(关闭(&x))
则在主窗口中对该菜单中m_file_exit菜单项的引用可以是:
m_frame.m_file.m_file_exit或
m_frame.item[1].item[3]框架-框架应用程序在如今的Window应用软件中,多文档(MDI)应用程序占了很大的比重。这是因为相对于单文档界面,多文档界面可以同时打开多个窗口,无需关闭窗口就可以打开另外一个,可以自由的在各文档之间切换。因此,为了使我们的软件更具实用性,能够更好的方便用户,创建一个MDI的应用程序就显得尤为必要。MDI应用程序由两部分组成,即MDI框架和框架内的工作表(Sheet)。MDI框架就是执行程序时首先打开的主窗口。在框架中打开的其它窗口被称为工作表。在同一屏幕中,主窗口即MDI框架只能有一个,而工作表可以有很多个,且只能在框架范围内活动。也就是说,当工作表被最小化时,它不会缩小在Win95的工具栏上,而会出现在框架底部的一个横栏上。当工作表被最大化时,它也只能被放大到充满整个框架,而不是整个屏幕。创建框架的方法很简单,只需首先在窗口属性中指定一个菜单,然后将窗口的类型改为MDIFrame或MDIFrameWith
Micorhelp即可。MDI框架中的工作表实际上就是一个普通的窗口,但是不能是MDIFrame、MDIFrameWithMicro-Help或Response等类型的窗口。要想在一个MDI框架中建立一个工作表,只需调用函数OpenSheet即可。工作表在MDI框架中有三种排列方式,即Cascaded!、Layered!和Original!三种方式。用户可以在建立工作表时为工作表指定一种排列方式,也可以通过函数ArrangeSheets来重新排列工作关于工作表的函数还有GetActiveSheet,被用来返回当前MDI框架中被激活的工作表,它的返回值是一个窗口类型。当没有工作表被激活时,返回值为Null,用户可以通过IsVa-lid函数来判断其返回值是否有效。GetFirstSheet,用来返回MDI框架中顶层的工作表;GetNextSheet用来返回指定工作表的下一个表。ParentWindow()函数,返回当前工作表的父窗口,也就是其所在的MDI框架。OpenSheetWithParm带参数的打开工作表。在MDI框架中的工作表如果带有菜单,那么当该工作表被打开后它的菜单将覆盖原来框架的菜单。当多个工作表具有不同的菜单时,在菜单栏上显示的将是当前被激活工作表的菜单。只有当关闭了所有的工作表,或者工作表根本没有菜单的时候,在菜单栏上显示的才是MDI框架的菜单。对于菜单项的每一项,无论它是MDI框架还是工作表的菜单,都可以为该选项设置状态栏上的提示信息,只需在菜单项的属性Micro-Help中设置即可。一般,工作表的菜单都是从框架菜单继承或相同的,以免打开一个工作表后无法打开其他工作表。窗口-小结1窗口是程序的核心界面,应用通过各个窗口,利用窗口中的各种控件和用户交互,完成数据的处理工作;2一般应用都以MDIFrame作为框架程序,3Sheet菜单从Frame菜单继承或没有菜单,保证框架界面的统一和完整;4界面设计应遵循一定的原则,不是想怎么做就怎么做,必须考虑协同开发问题,用以保证整体性和一致性。5脚本的编写、函数、事件的命名都必须考虑规范性的问题,从一开始养成良好的命名规范及编写习惯,对己对人都极有好处。Datawindow-IntroDatawindowDatawindow-1.基础数据窗口是用于查询、显示和维护来自关系数据库或其他数据源(如Excel文件或其他文件)数据的对象。在数据窗口中可以定义数据的显示格式、显示风格和其他数据属性,使数据对用户更加直观和更有意义。
Datawindow-2.显示风格和数据源显示风格(Style)
用于定义数据窗口的显示风格和外部特征。Tabular(列表):记录横置于页面,标题在所有列的顶端,可以多行数据;Freeform(自由格式):每列左侧有一个标签,一屏只显示一条记录;Grid(网格):如Excel的sheet格式;Label(标签):每页有几个标签,每个标签一行;N-UP(分栏):并列显示;Group(分组):在表头下按列分组的格式;Composite(组合):嵌套格式Graph(图表):数据的图形显示;Crosstab(交叉):行列格式的数据表示,列可动态计算;RichText:多信息文本,文本段落中可以嵌入列;Ole:连接或嵌入到数据窗口的OLE对象于获取的数据关联。数据源(DataSource)
定义数据窗口中数据的来源:QuickSelect:来源于sql数据库的多表;SQLSelect:定义完整的sql语法;Query:通过查询面板定义的查询对象作为数据源;Storedprocedure:以存储过程作为数据源;External:通过文件输入或程序代码生成的数据。Datawindow-3.如何使用数据窗口(1)使用数据窗主要包括以下两个步骤:一、在datawindowpainter或datawindowBuilder中创建或编辑一个数据窗口对象;二、在开发环境中,将一个数据窗口控件或组件放在窗口或web页面中,并把数据窗口控件和数据窗口对象关联起来(指定数据窗的dataobject属性)通过数据窗口控件,应用程序与在数据窗口画板中定义的数据窗口对象进行通讯,通过编写程序控制数据窗口控件和控件所包含的数据窗口对象。程序代码可以修改、查询数据,改变数据的表现形式、处理错误、共享数据窗口控件之间的数据等等。Datawindow-3.如何使用数据窗口(1)关联: 数据窗控件是一个对象容器。 在窗口或其他对象中,指定某数据窗控件的dataobject到某存在的数据窗对象,就可以在窗口中使用该数据窗对象了。命名:dw前缀,如dw_employee对象:d_employee引用:w_xxx.dw_employeeDatawindow-4.数据访问数据访问如果某数据窗需要和数据库建立联系,则该数据窗必须指定到某事务对象,因此一般通过以下步骤来访问:1、创建并连接事务对象;connectusingsqlca2、为数据窗设置事务对象;3、获取、修改数据,保存到数据库;4、断开数据库连接 其中,1,4一般在Application中的open和close事件中处理。2,3示例:
dw_control.settransobject(sqlca);//连接事务
dw_control.retrieve()//检索数据()中空为无条件检索
….处理数据
//更新数据
ifdw_control.update(true,false)=1then//Update修改数据库
commitusingsqlca;//提交数据//真正将数据提交到数据库
dw_control.resetupdate() else rollbackusingsqlca;//回滚最近的提交、、恢复当前的数据
endif加载外部数据:
importClipboard,importfile,importstring函数提供了获取外部数据的方式Datawindow-5.数据维护数据维护 一个数据窗有三个缓冲区用来存放用户的数据: 主缓冲区(Primary!):保存未被修改或删除或过滤出的数据; 过滤缓冲区(Filted!):被过滤出的数据; 删除缓冲区(Deleted!):被用户删除的数据PB通过这三个缓冲区保留用户所有对检索出来的数据的操作,然后统一处理为与数据库打交道的sql语法,如insert,delete,update,实际上就是完成最终的这三种操作。数据存取
提取:
GetItemDate(获取的数据是Date类型的),GetitemDateTime,GetItemDecimal,GetItemNumber,
GetItemString,GetItemTime,GetText
写入:
SetItem dw_control.getitemString(20《行》,’emp_name’)即得到Primary!缓冲区中第20行的emp_name列的值。
setitem(20,’emp_name’,’刘建刚‘)即设置Primary!缓冲区中第20行的emp_name为指定值。也可以用数据窗控件的对象属性来存取数据,如上述语法可以对应为:
dw_control.object.emp_name[20] dw_control.object.emp_name[20]=‘刘建刚’其他函数常用:
Accepttext,DeleteRow,Filter,Getrow,InsertRow,Reset,Retrieve
RowsCopy,RowsMove,RowsDiscard,RowCount,ModifiedCount,DeletedCount,FiltedCount
ScrollToRow,ScrollPriorPage,ScrollNextPage,ScrollFirstPage,ScrollLastPage
SelectRow,GetItemStatus,SetItemStatus,SetFilter,SetSort,Find
ShareData,ShareDataOff,SaveAs,SaveAsAscii
Update,ResetUpdateDatawindow-6.对象属性数据窗口对象属性主要用来存储控制数据窗口行为的有关信息,这些信息不是数据窗口控件的属性,而是在数据窗口控件(容器)中存在的数据窗口对象的属性。利用Describe和Modify函数可以用来提取和修改数据窗口对象属性。 如:dw_control.describe(‘emp_name.border’)即取得emp_name的边框属性 或dw_control.object.emp_name.border
取出,返回:any类型
dw_control.modify(‘emp_name.border=“2”’)即将该边框设为0类型(无边框)PowerBuilder的数据窗对象(14个)提供了非常多,相当全面的属性描述,这些对象的有些属性可以修改,有些是只读的,如某数据列的编辑格式,一般制作完成后,在数据窗口控件中就不能再修改而只能取出他的具体编辑方式。理解这些属性并充分运用好这些属性,可以极大地扩展编程的灵活性和可扩展性,这也是数据窗对象学习的难点,一般难以在短时间内掌握,需要不断的磨练。Datawindow-7.数据窗口中的错误二种类型(控件中存在)1、DBError事件,在数据窗控件retrieve,update时出错时触发,描述该数据窗对象连接的事务返回的具体信息,如update时报告一致性错误,列错误等等,连接错误,共享错误等等。2、ItemError事件:当某列编辑不符合检验规则(validation)时触发该事件Datawindow-8.数据窗口应用实例(1)设计步骤:1.先通过Datawindow
Winzard设计好数据窗对象,如d_my_first_grid2.新建或继承一个窗口,在窗口中加入一个数据窗控件dw_13.查看该控件的属性,调整dataobject属性,连接到刚才的数据窗对象,或在程序中指定他的属性,如:
dw_1.dataobject=‘d_my_first_grid’
按“…”弹出如下对话框,选择刚才设计的数据窗对象就可以了Datawindow-8.数据窗口应用实例(2)使用步骤:1.创建事务对象,默认为SQLCA,可以自己定义一个全局事务变量;2.指定该事务对象的属性,连接到数据库;(一般在Application的Open事件中处理),如:
//RollCall
的连接定义
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=RollCall;UID=;PWD=',PBCatalogOwner='dba'"Connectusingsqlca;ifsqlca.sqlcode<>0then
//显示错误,处理错误
endif3.编辑某窗口,一般在这个窗口的Open事件中对数据窗控件设置事务信息,如Windows的Open事件中写入:
dw_1.settransobject(sqlca)
即表示将dw_1的数据操作和sqlca这个事务对象联系起来。Datawindow-8.数据窗口应用实例(3)4.检索数据:dw_1.retrieve(参数1,参数2,…….);5.对检索出来的数据(放在缓冲区中)进行编辑,通过直接编辑,Setitem,dw_1.object对象引用等操作,编辑数据;6.编辑完成,将该数据窗中的修改过的数据保存,是否修改由PB自己判断,可以通过dw_1.GetItemStatus函数得到每行、每列的修改状态用来作特殊的判断。一般的保存脚本如下:
ifdw_1.update(true,false)=1thencommit;//提交事务
//完整的语法应当是Commitusingsqlca; //对于默认事务sqlca,可以省略usingsqlca子句。
dw_1.resetupdate()//复位修改状态为从未修改过
else
RollBack;//回滚事务,并提示错误信息
Messagebox(‘错误’,‘保存数据时发生错误:~r~r’+&
sqlca.sqlerrtext,Stopsign!) endif7.当不需要再使用该事务时,记得断开(一般在Application的Close事件中处理):
DisconnectUsingSqlca;Datawindow-8.数据窗口应用实例(3)对数据窗操作的常用脚本1.插入行
dw_1.insertrow(2)//在第二行前插入一条新行2.追加行
dw_1.insertrow(0)//在尾部追加一行3.删除行
dw_1.Deleterow(2)//删除第二行4.过滤
dw_1.setfilter(‘emp_namelike“刘%”’)//凡是雇员姓刘的
dw_1.filter()5.排需
dw_1.setsort(‘emp_namea,emp_addressd’)//按姓名正序,地址倒序排需
dw_1.sort()6.查找
ll_found_Row=dw_1.find(‘emp_namelike“刘%”’,1,dw_1.rowcount()) //在1–dw_1.rowcount()范围内查找第一个满足条件的记录7.赋值
dw_1.setitem(2,’emp_name’,’测试‘)//设置第二行中emp_name的值为’测试‘8.取值
ls_emp_name=dw_1.GetItemSTring(2,’emp_name’)//取出第二行的emp_name值到ls_emp_name变量9.走动记录 滚动到指定行:dw_1.scrolltorow(20)//滚动到第20行,一般和find一起操作 相对滚动行:dw_1.scrollpriorrow(),scrollnextrow(),scrollNexPage(),scrollPriorPage()10.更新。Dw_1.update(true,false)PowerScript编程PowerScript任何程序的编制归根结底都需要由代码完成,虽然可视化编程为我们提供了极大的方便。但是如果没有完善的代码,程序就不可能有完善的功能。 PowerScript是PowerBuilder的编程语言。我们在学习时可能已经发现,PowerScript语言与传统的Basic语言有很多相似之处。PowerScript是一种自由格式的语言,在编写程序代码时,编译器忽略它的空格、缩进、空行等,在这方面它又与C语言有几分相近。在本章中,我们将介绍PowerScrpit的数据类型,变量及作用范围,程序结构,以及一些常用函数和语句,尤其是一些和数据库有关的操作,将是本章内容的重点。PowerScript-变量的类型和作用域
变量是指在程序运行过程中可以改变的量,变量在程序运行的过程中被赋值,在执行各种操作的时候,变量的值被不断传递,以实现程序员设定的各种操作。可以说,没有变量就没有程序可言,而灵活使用各种不同的变量将使程序设计更为简洁、高效、安全,条理性也会更强。在变量声明时只需注意四点,一是必须以字母开头;二是标识符不能使用保留字;三是标识符长度必须小于40;各字符之间不允许有空格。另外还要注意连字符,因为连字符容易和减号混淆。 在PowerBuilder中,所有变量都必须事先声明才能使用,而且类型固定,一旦声明之后就不能变化。变量的作用域是指某一变量的使用范围。早期的BASIC语言中,所有的变量都是全局变量,这样做有很大的危害,主要是因为过多的全局变量会引起程序的崩溃,同时也会限制为函数取名的个数。在PowerBuilder中,程序的变量分为四个层次,局部变量、实例变量、共享变量和全局变量,用户可以充分利用局部变量和实例变量以使程序变的简洁和高效。类型前缀说明示例局部变量Locall仅在某脚本范围内有效li_index实例变量Instancei依赖于某对象而存在,在一个对象范围内,并可以定义此变量对外部对象而言的存取权限,如:限定前缀Private和Protected,默认为Public,可以再细化为PrivateWrite、PrivateReadProtectedWrite,ProtectedReadPUBLIC:is_user_namePRIVATE:is_my_name共享变量Shareds共享变量与实例变量相似,但有一点区别,那就是共享变量的值不因对象的关闭而改变。声明的方法是Declare|SharedVariables。ss_window_type全局变量Globalg用户可以在任何地方访问它gu_ext_functionPowerScript-数组及使用数组是任何一种程序化语言都必须有的一种数据结构,与集合和枚举类型的数据结构不同,它是一系列有序数据的集合。数组中的每一个元素都属于相同的数据类型,并且每一个元素都有相同数组名和不同的数组下标。数组的类型有两种:一种是一维数组,另一种是多维数组。多维数组必须有一个固定的大小,而一维数组的下标可以是固定的,也可以是可变的。用户在声明一个数组时首先必须声明的是一个数组的类型,然后是数组名,数组下标。 一维数组定义:
stringls_my_array_1[]//不定长数组
stringls_my_array_2[10]//从ls_my_array[1]到ls_my_array[10]共10个单元
stringls_my_array_3[5to24]//从ls_my_array[5]到ls_my_array[24]共10个单元 多维数组:
stringls_my_2d_array1[100,200]//定义一个100*200的数组,共20000个单元
stringls_my_2d_array2[1-100,-2to97]//定义一个100*100
的数组。 数组及数组间的操作: 上界及下界:UpperBound(ls_my_array_1),LowerBound(ls_my_array_3))
数组是否一致=,<>
数组变量类型可以是任意类型,包括窗口,菜单,自定义对象,控件等等。。。
PowerScript-结构使用一个结构是一个或几个相关变量的集合,它们有着相同或不同的数据类型,但都在同一个名字下。在有些语言中,例如Pascal和COBOL语言,集合又被叫做记录。集合允许将一些相关的数据项整合为一个整体而不是彼此独立。比如说,如果将用户的ID,地址,等级,照片组合为一个叫做user_struct的结构,就可以将这个变量的集合作为一个统一的user_struct结构来使用 结构按存取范围分为2类: 全局结构: 作为一个独立对象存放在PBL中,可以直接申明并引用。如通过winzard创建一个Structure对象,然后在脚本中就可以使用了。譬如已经做好了一个结构叫做st_user_structure,则程序中应当如下使用: 一、申明一个变量(上述四种变量中的一种) 二、指定这个变量的类型为st_u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版星巴克加盟店设备维护合同
- 个人影视作品版权转让合同(2024版)3篇
- 2024示范文本:二手车买卖合同车辆安全检测规范2篇
- 2024试乘试驾活动电子合同范本12篇
- 2025年度二手吊车评估与交易中介合同3篇
- 项目建议书(含设计任务书)及可行性研究报告编制技术咨询合同模板
- 2025年度码头船舶停靠与货物仓储一体化租赁合同4篇
- 2025年度临时医疗护理人员派遣服务合同4篇
- 2025年税务顾问服务合同协议书适用于企业集团6篇
- 众维重工2025年度钢结构建筑工程智能化控制系统采购合同2篇
- 《穿越迷宫》课件
- 《C语言从入门到精通》培训教程课件
- 2023年中国半导体行业薪酬及股权激励白皮书
- 2024年Minitab全面培训教程
- 社区电动车棚新(扩)建及修建充电车棚施工方案(纯方案-)
- 项目推进与成果交付情况总结与评估
- 铁路项目征地拆迁工作体会课件
- 医院死亡报告年终分析报告
- 建设用地报批服务投标方案(技术方案)
- 工会工作人年度考核个人总结
- 上海民办杨浦实验学校初一新生分班(摸底)语文考试模拟试卷(10套试卷带答案解析)
评论
0/150
提交评论