《PFC编程快速入门☆☆☆.doc》由会员分享,可在线阅读,更多相关《PFC编程快速入门☆☆☆.doc(209页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PFC编程快速入门前言及PFC的编程特点概述(暂不详述)俗话说:实践出真知。所以,笔者一开始并不打算和大家讲什么高深的理论,而是和大家从PFC的实际应用编程着手,带领大家一步一步由浅入深、由点到面地用PFC编写一个实用的MIS(信息管理系统)。至于理论方面的知识,在程序编写的过程中遇到时才结合应用中的实例给大家讲解。当你跟着笔者完成这个PFC实战之旅后,相信你已经能够系统地掌握PFC的编程思想和方法了。虽然现在市面上已经有一些关于PFC的书了,但它们都是着重于介绍理论的,对于实际应用于编程的方法的书则没有。由于缺少实践机会,令读者读起来比较难明。所以,我想,我们可以写一本一开始就以PFC的实际
2、应用编程为主,带领读者一步一步由浅入深、由点到面地用PFC编写一个实用的MIS的书。至于理论方面的知识,在程序编写的过程中遇到时才结合应用中的实例给大家讲解。当读者依书完成这个PFC的应用编程后,相信已经能够系统地掌握PFC的编程思想和方法了。然后,我们可以将PFC中各个对象、服务中常用、主要、重要的功能介绍给大家(就不像那本PFC手册那样,什么都写),可能更受大家的欢迎。最后,还以介绍一些高级的编程方法及理论,如:快速开发的理论等。在开始编程之前,请大家先准备好以下的编程环境:1、PowerBuilder7.0,并且安装了最新的补丁:2、数据库系统:3、数据库:。本文所有的例子均是基于该数据
3、库进行的。 作为一种可视化的、面向对象的快速应用开发(RAD)工具,PowerBuilder已被广大数据库应用于开发人员所使用,并获得好评。PowerBuilder全面支持面向对象编程,是集成强大并易于使用的编程语言,内置包括数据窗口(DataWindow)在内的多种对象类,可以方便地访问数据库。对于一个数据库应用系统来说,选择PowerBuilder开发工具进行程序设计与开发,是一种快速、高效、省时、省力的方法。PowerBuilder以简洁、直观、实用的编程方式为程序员节约了大量的时间和精力,使得程序员可以把大部分业务放在提高程序执行效率和完善系统功能上,这样做的结果使程序开发时间缩短,开
4、发成本降低,程序编制质量也会大大提高。开发一个小型的数据库应用系统,使用PowerBuilder提供的菜单编辑器、窗口编辑器、数据窗口生成器等可视化编程工具,结合PowerBuilder Script脚本语言直接开始程序的编制工作,并不会影响程序的开发效率。然而,对于一个大(中)型数据库应用系统,并使用这种原始的编程方式进行开发与充分利用PowerBuilder提供的基础类库进行开发相比,在程序开发时间、效率、成本等方面,都会有明显的差别。PowerBuilder基础类库(PFC)是基于面向对象程序设计的思想而设计的,PFC封装PB Script。它包含了大多数应用共有的内容,例如各种菜单、窗
5、口、用户对象、数据窗口以及错误处理、报表预览、打印、主细录入、查询等等。通过继承,程序员可以方便地把这些类加载到自己的程序中,从而达到提高开发效率的目的。 作为一种可视化的、面向对象的快速应用开发(RAD)工具,PowerBuilder已被广大数据库应用于开发人员所使用,并获得好评。PowerBuilder全面支持面向对象编程,是集成强大并易于使用的编程语言,内置包括数据窗口(DataWindow)在内的多种对象类,可以方便地访问数据库。对于一个数据库应用系统来说,选择PowerBuilder开发工具进行程序设计与开发,是一种快速、高效、省时、省力的方法。PowerBuilder以简洁、直观、
6、实用的编程方式为程序员节约了大量的时间和精力,使得程序员可以把大部分业务放在提高程序执行效率和完善系统功能上,这样做的结果使程序开发时间缩短,开发成本降低,程序编制质量也会大大提高。开发一个小型的数据库应用系统,使用PowerBuilder提供的菜单编辑器、窗口编辑器、数据窗口生成器等可视化编程工具,结合PowerBuilder Script脚本语言直接开始程序的编制工作,并不会影响程序的开发效率。然而,对于一个大(中)型数据库应用系统,并使用这种原始的编程方式进行开发与充分利用PowerBuilder提供的基础类库进行开发相比,在程序开发时间、效率、成本等方面,都会有明显的差别。PowerB
7、uilder基础类库(PFC)是基于面向对象程序设计的思想而设计的,PFC封装PB Script。它包含了大多数应用共有的内容,例如各种菜单、窗口、用户对象、数据窗口以及错误处理、报表预览、打印、主细录入、查询等等。通过继承,程序员可以方便地把这些类加载到自己的程序中,从而达到提高开发效率的目的。一、PFC编程的总原则:1、任何时候也不能对以“pfc”开头的库文件进行修改。2、必须遵守PFC的命名约定。3、任何时候创建对象(如:菜单、窗口)时,都不要用“New”(新建),而应该用“Inherit”(继承),从PFC的扩展层中继承父类。4、任何时候使用控件时,都不要用标准的控件,而应该选“use
8、r object”,再从PFC的扩展层中选择相应的对象。5、(更多的有待补充)二、PFC的命名约定Naming conventions命名约定:Object naming conventions对象命名约定PFC uses the following prefix standard for object names:PFC使用以下的前缀作为对象命名的标准:pfcobject_type_objectnamePfc_对象类型_对象名称where:其中:?pfcobject indicates whether the object is part of the PFC level or the ex
9、tension level. Objects that are part of the PFC level have the prefix PFC_“pfcobject”指出该对象是PFC层的对象。如果该对象是PFC层的,则该对象的名称必须以“PFC_”作为前缀。如果是非PFC层的对象,则可以省略该前缀。?type indicates the object type“type”指出该对象的类型。This table describes the object types.下表列出了所有对象的命名规则:PrefixDescription前缀说明m_Menum_菜单(Menu)n_Standard
10、class user objectn_标准类用户对象(Standard class user object)n_cstCustom class user objectn_cst定制类用户对象(Custom class user object)s_Global structures_全局结构体(Global structure)u_Visual user objectu_可视用户对象(Visual user object)w_Windoww_窗口(Window)For example:例如:?Pfc_w_master is the master window and is in the PFC
11、levelPfc_w_master代表PFC层的主窗口对象。?Pfc_u_tvs is the TreeView visual user object and is in the PFC levelPfc_u_tv代表PFC层的树状浏览(TreeView)可视用户对象。?U_dw is the DataWindow visual user object and is in the extension levelU_dw代表扩展层的数据窗口(DataWindow)可视用户对象。?N_cst_dwsrv is the custom class user object for DataWindow
12、services and is in the extension levelN_cst_dwsrv代表扩展层的提供数据窗口服务(DataWindow services)的定制类用户对象。?N_tr is the transaction standard class user object and is in the extension levelN_tr代表扩展层的事务处理标准类用户对象。Variable naming conventions变量的命名约定:PFC uses the following standard for variable names:PFC使用以下的前缀作为变量命名的标
13、准:_variablename_变量名称Scope is one of the following:作用域包括了以下几种:PrefixDescription前缀说明aArgument to an event or functiona事件或函数的参数gGlobal variableg全局变量iInstance variablei实例变量lLocal variablel局部变量sShared variables共享变量For standard data types, datatype is one of the following:对于标准的数据类型,包括了以下几种:PrefixDescripti
14、on前缀说明aAnyaAny(and类型)blbBlobblbBlob(大二进制对象)bBooleanbBoolean(布尔类型)chCharacterchCharacter(字符类型)dDatedDate(日期类型)dtmDateTimedtmDateTime(日期时间类型)dcDecimaldcDecimal(带符号十进制小数型)dblDoubledblDouble(双精度类型)eEnumeratedeEnumerated(枚举类型)iIntegeriInteger(整型)lLonglLong(长整型)rRealrReal(实型)sStringsString(字符串类型)tmTimetmT
15、ime(时间类型)uiUnsignedIntegeruiUnsignedInteger(无符号整型)ulUnsignedLongulUnsignedLong(无符号长整型)For reference variables, datatype is one of the following:PrefixDescriptionappApplicationapp Application(应用)abArrayBoundscbxCheckBoxcbx CheckBox(复选框)cbCommandButtoncb CommandButtOn(命令按钮)cdClassDefinitioncdoClassDef
16、initionObjectcnConnectioncn Connection(链接)cninfoConnectionInfocninfo ConnectionInfo(链接信息)cnoConnectObjectcno ConnectObject(链接对象)cxkContextKeywordcxinfoContextInformationcppcplusplusdsDataStoreds DataStore(数据存储)dwDataWindowdw DataWindow(数据窗口)dwcDataWindowChilddwc DataWindowChild(子数据窗口)drgDragObjectdr
17、g DragObject(拖动对象)drwDrawObjectdrw DrawObject(画图对象)ddplbDropDownPictureListBoxddplb DropDownPictureListBox(下拉式图形列表框)ddlbDropDownListBoxddlb DropDownListBox(下拉式列表框)dwoDWobjectdwo DWobject(数据窗口的对象)ddaDynamicDescriptionAreadda DynamicDescriptionArea(动态描述区)dsaDynamicStagingAreadsa DynamicStagingArea(动态状
18、态区)edEnumerationDefinitioneidEnumerationItemDefinitionemEditMaskem EditMask(编辑屏蔽框)envEnvironmentenv Environment(环境变量)errErrorerr Error(错误信息)extExtObjectext ExtObjectgrGraphgr Graph(统计图)goGraphicObjectgo GraphicObject(统计图对象)graxGrAxisgrax GrAXisgrdaGrDispAttrgrda GrDispAttrgbGroupBoxgb GroupBOx(组选框)h
19、sbHorizontalScrollBarinetInetirInternetResultlnLinelbListBoxlvListViewlviListViewItemmfdMailFileDescriptionmmMailMessagemrMailRecipientmsMailSessionmdiMDIClientmMenumcMenuCascademsgMessagemleMultiLineEditnvNonVisualObjectocOleControlooOleObjectostgOleStorageomcOmControlomccOmCustomControlomecOmEmbed
20、dedControlomoOmObjectomstmOmStreamomstgOmStorageovalOvalpPicturepbPictureButtonpbcppPBToCPPObjectplbPictureListBoxplPipelinepoPowerObjectprocallProfileCallproclassProfileClassprolnProfileLineprortProfileRoutineproProfilingrbRadioButtonrecRectangleremRemoteObjectrteRichTextEditrrecRoundRectanglerteoR
21、teObjectscrdScriptDefinitionsleSingleLineEditsle SingleLineEdit(单行编辑器)srvServicestStaticTextst StaticText(静态文本)stdSimpleTypeDefinitionstrStructurestr structrue(结构)tabTabtab Tab(标签)tabpgTabPagetabpg TabPage(标签页)tcanTraceActivityNodetcbeTraceBeginEndtcerrTraceErrortcfTraceFiletclnTraceLinetcgcTraceGar
22、bageCollecttcoTraceObjecttcrtTraceRoutinetcsqlTraceSQLtctTraceTreetctnTraceTreeNodetcterrTraceTreeErrortctsqlTraceTreeSQLtctgcTraceTreeGarbageCollecttctlnTraceTreeLinetctoTraceTreeObjecttctrtTraceTreeRoutinetctuTraceTreeUsertcuTraceUsertdTypeDefinitiontrTransactiontr Transaction(事务对象)trpTransporttrp
23、 Transport tvTreeViewtv TreeView(树状浏览)tviTreeViewItemtvi TreeViewItem(树状测览项)uoUserObjectuo UserObject(用户对象)vrcdVariableCardinalityDefinitionvrdVariableDefinitionvsbVerticalScrollBarvsb VerticalScrollBar(垂直滚动条)woWindowObjectwo WindowObject(窗口对象)wWindoww Window(窗口)Function naming conventions函数的命名约定:Gl
24、obal functions use the f_ prefix and object functions use the of_ prefix.全局函数(Global functions):使用“f_”作为函数的前缀。对象函数(object functions):使用“of_”作为函数的前缀。三、PFC的面向对象特点PFC的面向对象特点是学习PFC编程中一定要重点掌握的知识。可以这么说:PFC的应用,实际上就是面向对象技术的应用。PFC的一切,就是面向对象技术。PFC是PowerBuilder面向对象技术的体现。由于PFC采用了面向对象的程序设计方法,程序的封装性和继承性使得程序的后期维护工
25、作变得更为轻松,性能价格比更为优越。这完全得益于面向对象这种程序设计方法的合理性,它把一个复杂的问题分解成与该问题相关的各个部分的子模块,再把这些子模块抽象为对象。若一个由祖先继承而来的对象出现错误,可以简单地对该于对象进行修改而不必去涉及其祖先对象,反之,若对处于同一层次的全部子对象进行类似的修改,可直接修改其祖先对象。PowerBuilder面向对象的特点主要体现在用户对象的技术运用上。PFC基础类库把PowerBuilder的多种对象以类的形式存储在库文件中,要正确有效地利用PowerBuilder基础类库进行程序的开发设计,必须了解面向对象的编程技术,了解PFC基础类库的面向对象特点。
26、PowerBuilder把一些常用的、具有共性特征的对象(例如:窗口、菜单、数据窗口、用户对象等)提炼出来,并在每个对象中封装了不同的服务,构造了PFC基本类库。 PFC基础类库完美地体现了面向对象程序设计的三方面重要特征:继承性(Inheritance)封装性(Encapsulation)多态性(Polymorphism)用户对象是PFC面向对象的具体表现,PFC的面向对象特点完全在用户对象中表现出来。以下着重介绍PFC中常用的用户对象:用户对象有两种类型:可视的用户对象(Visua1 user object)和类用户对象(Class userobject)。(1)可视用户对象指的是一个可重
27、用的可视控件或一个含有预定义行为的可视控件。PFC包含了两种类型的可视用户对象:标准可视用户对象PFC标准可视用户对象由PowerBuilder的标准可视控件继承而来,通过扩充标准控件的定义,完成特定的功能。每个PFC的标准可视用户对象都与窗口控件进行通信,这些对象中包含了预定义的程序,实现各种PFC应用服务。定制可视用户对象PFC定制的可视用户对象是将几个可视控件打包成一组的对象,它将多种服务有计划地组合在一起,完成一个复杂的功能。(2)类用户对象指的是在不使用可视用户对象时,完成一个执行过程而定义的可重用的不可视控制,它是不可见的,无法在窗口上直接看到,需通过程序来调用。PFC包含了两种类
28、型的类用户对象:标准的类用户对象PFC标准的类用户对象由PowerBuilder的不可视标准控件继承而来,通过扩充标准控件的定义,完成特定的功能。 PFC为事务传输、错误处理和其他所有的扩展系统对象都提供了标准的类用户对象。定制的类用户对象从PowerBuilder的非可视对象类中继承了各种定义,封装了数据和代码。定制的类用户对象允许程序员定义自己的对象类。PFC使用定制的类用户对象执行多种服务,它还提供了一些接口参数,程序员可以通过这些接口参数与对象内部的实例变量、函数和事件进行通信。应用PFC编程时,在面向对象程序设计的三方面主要特征中,我们接触最广泛的是“继承”特征了。可以这么说:在构成
29、应用界面的每一个元素,如:窗口、菜单、控件等等,无一不是从PFC的对象中继承而来的。所以,在这里,将给大家详细讲下PFC中的继承特性,请大家一定要注意体会掌握,因为,在以后的编程中,你无时无刻不都在与“继承”打交道。继承是一对象获取另一对象之性质的过程,它使得那些与基本类共享的性质能很方便地进行延续和扩展。继承对象类具备被继承对象类的所有属性、变量、函数、结构、控件和程序。对祖先对象的修改会使其所有子孙对象做相应的修改,子孙对象可修改或扩充祖先对象的属性和服务,但不能对祖先对象的控件进行删减。正是这种继承机制才使得一个对象成为某一基础类的实例。继承具有以下优点:可充分利用系统资源,减少程序的重
30、复开发,大大提高了开发效率;使应用的对象保持一致,维护了系统的整体一致性;减少了人为程序错误的发生概率;使程序更易于维护。在PFC基础类库中,各种基础类的对象均可以被继承,如窗口、菜单、结构、数据窗口、用户对象等等。由继承而来的子孙对象包含了祖先对象的所有属性、变量、函数、结构、控件和程序,并可对它们进行修改和扩充。对于一个通过继承创建的后代窗口,可以进行如下进一步的处理:改变窗口的属性;在窗口中增加新的控件;在窗口中修改现存控件;改变窗口的大小和位置;改变窗口中控件的大小和位置;为窗口及控件编制新的处理程序;为窗口和控件扩展继承来的处理程序;用新的处理程序覆盖继承来的处理程序;引用祖先的函数
31、、结构和变量;为该窗口定义新的函数、结构和变量。对于一个通过继承创建的后代菜单,可以进行如下进一步的处理:改变菜单项的属性;在菜单中插入菜单项;修改菜单项;为没有处理程序的菜单项增加处理程序;扩展继承来的处理程序;用新的处理程序覆盖继承来的处理程序。对于一个通过继承创建的后代用户对象,可以进行如下进一步的处理:改变属性和变量的值;为没有事件处理程序的事件增加处理程序;扩展继承来的事件处理程序;用新的处理程序覆盖继承来的处理程序;为可视用户对象添加控件;引用祖先的函数、事件和结构。值得注意的是,对于继承来的可视对象不能对其包含的控件进行删减,若某一控件确实不用,可通过修改其属性使之不可用或不可见
32、。四、PFC的结构是一种基于服务的结构(Service-Based Architecture),PowerBuilder提供了各种类库和它们的源代码,程序员可以很方便地对类中的程序和控件进行修改和扩充,使之符合自己的需求。PFC基础类库基于服务的结构模式为基础类库的扩展提供了广阔的空间,它包含了PowerBuilder提供的多种对象以及它们各自所封装的多种服务,分别完成特定的功能。在PFC对象内封装的函数、事件和实例变量能够完成许多与应用环境无关的操作,称之为服务。程序员通过调用基础类对象来获得封装在对象中的服务。具体的服务有以下几种:应用服务;数据窗口服务;菜单服务;窗口服务;尺寸调整服务;
33、转换服务;日期/时间服务;文件服务;INI文件服务;数据服务;平台服务;选择服务;SQL解析服务;字符串处理服务;元类服务;逻辑单元服务等。四、实战之旅:一、更新库的搜索路径。1、为应用程序创建一个新的库文件。打开库管理面板(Library),点击工具条上的“Create Library”图标,并从弹出的“Create Library”对话框(如图所示)中选择新库的保存路径,输入新库的名称。这里我们假设将库保存到D:根目录下,并命名为:Design.pbl。2、创建应用对象。点击工具条上的“New”图标,从弹出的对话框中选择“Start Wizards”页面,双击“Application”图标
34、。我们将看到如图所示的界面,在“Application Name”下输入应用对象的名称,我们这里命名为:design;并在“Library”下选择将该应用对象保存到什么库中。我们这里当然是将其保存到D:根目录下的Design.pbl中。单击“Finish”完成应用对象的创建。3、选择“File”菜单下的“Library List.”命令,在弹出的“Library List”窗口中单击“Browse.”按钮,如图所示。4、从弹出的“Select Library”对话框中选择需要的库文件:进入存放PFC库文件的目录下,按下Ctrl键并点击鼠标来选中下列文件:Pfcapsrv.pbl、PfcDwsr
35、v.pbl、Pfcmain.pbl、Pfcutil.pbl、Pfcwnsrv.pbl、Pfeapsrv.pbl、Pfedwsrv.pbl、Pfemain.pbl、Pfeutil.pbl、Pfewnsrv.pbl。如图所示。5、点击“Open”按钮,选中的库文件就显示到库文件的搜索路径列表中。6、点击“Apply”按钮,PowerBuilder将上述PFC文件添加到应用文件列表中。理论知识:(这里要介绍的知识比较多,主要涉及到PFC的面向对象的特点、PFC各个库文件所包含的内容及作用、如何扩展PFC、如何升级PFC等,我还没整理好。)根据基础类实现的阶段划分为如下两类:基础类库文件:放置基础类对
36、象的原始设计;扩展基础类库文件:放置继承基础类进行扩展设计后的扩展对象。没有任何一种类库能够包容用户所有的需求,典型的做法是把PFC库中的对象进行修改和扩充,使它和应用中的函数、对象融合为一体,如果没有基础类库的扩展层,就会导致这样一个问题:如何升级一个新版的PFC库,新版的应用将覆盖以前定制的类,迫使你重新进行手工改动以适应新的版本。PFC利用其继承性建立了扩展层,如下表所示。所有的扩展对象都放置在相对独立的PBL文件中,对扩展层可方便地进行升级和更新,而不会对其祖先层产生任何影响。表PFC提供的服务在PBL库文件中的分布内容祖先层扩展层应用和全局性服务PFCAPSRV.PBLPFEAAPS
37、RV.PBL数据窗口服务PFCDWSRV.PBLPFEDWSRV.PBL可视的和标准的类用户对象PFCMAIN.PBLPFEAMIN.PBL实用程序的服务PFCUTIL.PBLPFEUTIL.PBL窗口服务PFCWNSRV.PBLPFEWNSRV.PBL祖先层类库中的对象包含了所有的实例变量、事件和函数;扩展层类库中的对象是祖先库中相应对象的子孙对象,通过继承它们可以调用祖先对象的实例变量、事件和函数。可以使用PowerBuilder Browse浏览子孙对象内含的实例变量、事件和函数。使用扩展层有两个突出的优点:可以增加控件、部件和特殊逻辑的应用到扩展层对象;对扩展层进行升级不会影响类库程序
38、的兼容性。需要注意的是:(1)为保持与旧版程序的兼容,在PFCOLD.PBL中存放了新版已放弃使用的对象。如果运行一个旧版的PFC程序,需要将PFCOLD.PBL加入到应用的搜索路径中去;(2)程序员可以通过修改扩展层的对象来定制PFC应用,但不能去修改祖先层的对象。例如:应用程序可以使用扩展层的用户对象并且从扩展层继承一个窗口。基础类库的部件PFC由以下几个部件构成:一组PBL类库文件;一个PFC数据库;一组支持快速开发的PBL库(Quickstart PBLS);PFC编程示例;一个简单的应用。PFC基础类库的库结构及其存放位置PowerBuilder的基础类库文件和扩展基础类库文件共有十
39、三个,根据所包含基础类的不同功能进行了划分,其中以PFC开头的是基础类库文件,以PFE开头的是扩展基础类库文件,具体说明如下表所示。 表PowerBuilder基础类库在PBL文件中的分布库文件名说 明安装路径PFCMAIN.PBL包含标准类用户对象、窗口对象、菜单.pb6adkpfcPFEMAIN.PBL对象和标准可视类用户对象.pb6adkpfcPFCAPSRV.PBL包含提供应用服务所必须的定制类用.pb6adkpfcPFEAPSRV.PBL户对象.pb6adkpfcPFCDWSRV.PBL包含提供数据窗口服务需要的定制类.pb6adkpfcPFEDWSRV.PBL用户对象.pb6adk
40、pfcPFCWNSRV.PBL包含窗口服务需要的定制类用户对象.pb6adkpfcPFEWNSRV.PBL.pb6adkpfc PFCUTIL.PBL其他服务需要的对象,例如DEBUG服.pb6adkpfcPFEUTIL.PBL务和SQL测试服务等.pb6adkpfcPFESECAD.PBL包含安全管理服务需要的各类对象.pb6adkpfcsecurityPFCECSC.PBL包含安全检测需要的各类对象.pb6adkpfcsecurityPFCOLD.PBL存放新版PB基础类库淘汰的各种对象.pb6adkpfc注:基于PowerBuilder5.0版基础类库开发的应用升级到6.0版时,用户必须
41、将PFCOLD.PBL添加到检索路径当中才能够顺利地实现升级。以上是PowerBuilder基础类库在PBL文件中的分布。如何安装PFC的升级版在PowerBuilder从一个正式版本升级到另一个正式版本时,还定期发布一些修正版本。作为PowerBuilder升级版的附加部份,每个修正版也包括了新的PFC升级版,对使用旧版PFC编制的应用程序来说,将面临一个PFC的升级问题。但由于PFC这种将不同层次的对象存放在不同的库文件中给我们的升级带来了极大的方便。这可能出现以下两种情况:(1)使用旧版PFC时,并没有对PFC的祖先层和扩展层做任何扩充和修改,只是直接通过继承使用PFC。如果是这种情况,
42、简单地安装新版的文件覆盖旧版的文件。(2)使用旧版PFC时,创建了一个或多个中间扩展层,或对PFC的扩展层进行了修改和扩充。如果是这种情况,需确保新建的中间层和所做的扩充不被新版程序覆盖。可以按以下步骤进行版本升级:a. 将所有的PFC扩展文件备份到另外一个目录,确保新程序安装时不被覆盖。b. 查看当前的版本信息。可以在当前PFC的Readme.txt文件中找到有关的版本信息,或者在pfc_n_cst_debug中定义的实例变量majorrevision .minorrevision . fixesrevision中得到当前的版本信息。c. 运行新版的安装程序,用新的PFC文件覆盖旧的文件,P
43、FC祖先层得到更新。d. 合并新的扩展层对象和旧的扩展层对象。查看新版PFC的Readme.txt文件,有一个新增扩展层对象的列表,可用以下两种方法进行合并:把新增的扩展层对象全部全部复制到以前定制的PFC扩展层PBL文件中。从新版的PFC扩展层PBL文件中找出新添加的对象,并反它复制到以前定制的PFC扩展层PBL文件中。然后将新版的PFC扩展层文件移走,将备份的扩展层文件恢复到PFC路径下;将定制的对象复制到新版的PFC扩展层中。将备份的PFC扩展层PBL文件中的所有对象复制到新版PFC的扩展层PBL文件中。e 启动PowerBuilder。f (可选地)根据情况更新应用物搜索路径。g打开库管理面板,将应用重建。二、使用n_tr与SQLCA建立链接。1、打开应用对象面板,打开“Properties”(属性)设置窗口。2、点击“General”页面的“Additional Properties”按钮,我们将看到如图5所示的设置窗口。3、切换到“Variable Types”标签页,如图6所示。4、将“SQLCA”下的输入框中的“transaction”改为“n_tr”。
限制150内