1、销售管理及信息化管理知识分析第4章 销售管理信息系统PowerBuilder是Sybase公司推出的一套强大的数据库应用系统开发工具,它具有完整的客户/服务器体系结构、面向对象的应用程序开发方法以及可视化的开发环境,因而成为近几年流行的数据库前端开发工具。目前,PowerBuilder已经广泛地应用于银行、电信、医疗保健、保险等行业中,为这些行业的数据库应用提供了强大的开发功能。销售管理信息系统作为信息管理系统的一个分支,已逐渐成为企业信息化建设的重要组成部分。为企业管理分布在全国的销售网点提供了一个功能强大、安装部署方便、使用成本低廉、操作简捷的实时销售管理系统。不仅能够促进销售业务的拓展,
2、提高销售运作的效益,也为最终实现有效的“供应链管理”和更加广泛的“电子商务”奠定了基础。本章将以典型的销售管理信息系统为例,向读者详细讲述如何使用PowerBuilder开发企业销售管理信息系统。 4.1 PowerBuilder对数据库开发的支持PowerBuilder作为专业的数据库开发工具,以其开放的体系结构、简洁高效的集成开发环境、强大的数据窗口技术、良好的数据库访问能力和友好的用户界面,日益成为数据库开发人员的得力助手。PowerBuilder支持各种常见的数据库,提供了多种数据库接口。PowerBuilder与数据库的连接是建立在驱动程序之上的,可以通过ODBC或JDBC接口来存储
3、数据,也可以通过像专用的数据库接口直接连接数据库。数据窗口(DataWindow)是PowerBuilder中一个独特的对象,是Sybase的专利技术,PowerBuilder的成功在很大程度上归功于它。数据窗口的功能非常强大,它可以方便而快速地处理数据。通过数据窗口,无需编写复杂的SQL语句,就可以实现对数据库的读写操作。本节将对PowerBuilder与Access数据库的连接,以及数据窗口技术的相关知识进行 介绍。4.1.1 实现PowerBuilder访问Access数据库PowerBuilder与Access的连接方法可以通过ODBC调用软件来实现。下面将介绍如何实现PowerBui
4、lder访问Access中的“联系人管理”数据库。因为是通过ODBC连接Access数据库,则需要定义ODBC数据源,具体方法可参阅2.8.1节内容,也可以通过PowerBuilder自带的工具定义ODBC数据源。(1) 为“联系人管理”数据库注册ODBC数据源“联系人管理”,但只定义数据源是不够的,还要建立PowerBuilder的数据库配置文件(Profile)。单击PowerBar上的DB Profile工具按钮,打开如图4-1所示的对话框。在树状视图列出的数据库接口驱动程序中选择所要连接的数据库类ODB ODBC,右击,在弹出的快捷菜单中选择New Profile命令。图4-1 Dat
5、abase Porfile对话框(2) 打开Database Profile Setup对话框,这里只有Connection选项卡中的Profile Name和Data Source两项参数是必须要指定的。Profile Name 指定配置文件的名称,这里指定为“联系人管理”;Data Source指定对应的ODBC数据源,这里选择前面定义好的ODBC数据源“联系人管理”;UserId和Password分别用于指定连接数据源的账户名和口令,它们是可选的,如图4-2所示。(3) 选择Preview选项卡,测试连接是否成功。设置完毕后,单击OK按钮,数据库配置文件的参数将存放到Windows的注册
6、表中,同时,配置文件的名称也会出现在数据库类ODB ODBC的目录中。然后右击该配置文件,在弹出的快捷菜单中选择Connection命令,PowerBuilder将完成对“联系人管理”数据库的连接,如图4-3所示。连接成功后,就可以在PowerBuilder的开发环境中访问“联系人管理”数据库了。如果要在应用程序中连接Access数据库,可以直接在程序中编写脚本。同样,可以使用ODBC接口的语法,根据上面所填写的配置参数,在Application的Open事件中加入代码。若使用ODBC接口的语法连接数据库,代码如下:/ Profile 联系人管理SQLCA.DBMS = ODBCSQLCA.A
7、utoCommit = FalseSQLCA.DBParm = ConnectString=DSN=联系人管理;UID=;PWD=/连接数据库Connect;If sqlca.sqlcode0 then Messagebox(连接数据库失败,sqlca.sqlerrtext) Halt CloseElse Messagebox(提示信息, 连接数据库成功) /其他操作,如打开登录窗口等 /Open(w_login)End if 图4-2 Database Profile Setup 图4-3 Database Profile4.1.2 PowerBuilder的数据窗口技术数据窗口(DataW
8、indow)是PowerBuilder开发数据库应用程序最强有力的工具。数据窗口对象是PowerBuilder数据窗口技术的核心内容,为检索、表现和操作相关数据库或其他数据源中的数据提供了非常方便的手段。开发人员可以通过定义数据窗口对象来指定数据的显示格式、表现风格以及其他数据属性,提高效率并开发出高质量的应用系统。1. 数据窗口对象PowerBuilder中的数据窗口对象主要完成两个方面的工作:一方面,它处理应用程序所需的底层数据源,使开发人员能够方便地操作各种类型的数据源,而不必关心这些数据源的底层调用,如数据源接口API,甚至较为高级的SQL语句也可以由数据窗口对象自动生成;另一方面,数
9、据窗口对象控制着从数据源得到的结果集的显示,负责和应用程序的用户之间的交互,使开发人员不必再在高水平的图形界面设计上花费精力。下面将使用PowerBuilder的数据窗口创建向导来创建一个简单的数据窗口对象。(1) 选择显示风格由于数据窗口对象显示的是数据库表中的信息,在创建数据窗口前对象,PowerBuider要求连接数据库。假设已经成功连接了数据库“联系人管理”(注意:因为PowerBuiler不支持中文字段,这里在数据库中增添了FriendInfo表,在下面的示例中将使用该表进行演示),接下来为数据窗口对象选择所需的显示风格(Presentation Style)。选择File | Ne
10、w命令,弹出New对话框,选择DataWindow选项卡,如图4-4所示。图4-4 选择数据窗口的显示风格在PowerBuilder中,显示风格决定了以什么样的格式显示数据窗口中的数据。图1-32列出了数据窗口对象可用的11种显示风格:Composite,Crosstab,Freeform,Graph,Grid,Group,Label,N-Up,OLE2.0,Rich Text和Tabular,具体介绍可参阅PowerBuilder用户手册中的相关内容。这里选择Freeform样式(因为这种风格应用最为普遍。它允许设计者在数据窗口画板中自由地调整和移动字段对象和字段标签对象),然后单击OK按钮
11、。值得注意的是,如果没有建立并打开任何一个工作区(Workspace),或者工作区中没有任何容纳该数据窗口的PowerBuilder库,那么该按钮是不可用的。(2) 选择数据源接下来PowerBuilder会弹出Choose Data Source for Freeform DataWindow对话框,其中列出了5种类型的数据源,分别是Quick Select,SQL Select,Query,External,Stored Procedure,如图4-5所示。图4-5 选择数据窗口的数据源选择Quick Select类型的数据源。Quick Select数据源是最简单、也是最常用的数据源,该
12、数据源所对应的SQL Select语句完全是由PowerBuilder自动、快速生成的。Quick Select数据源中的数据可以来自一个数据表,或通过外部关键字关联的多个数据表。如果想在预览数据窗口对象或打开预览视图时,让数据窗口对象自动从数据源中重新获取数据,可以选中Retrieve on Preview复选框。(3) 选择并设计数据库表中的字段选中Quick Select后,单击Next按钮,PowerBuilder会弹出Quick Select对话框,如图4-6所示。在这里,PowerBuilder会指导开发者选择并设计数据库表中的字段。图4-6 选择并设计数据库表中的字段在对话框左上
13、侧的Table列表中,列出了所连接上的数据库“联系人管理”中的表。而右上侧的Columns列表用于显示所选中的数据库表中的字段。这里选中数据表FriendInfo,单击Add All按钮,将表中所有的字段添加到对话框底部的列表中。在该列表中,可以定义字段的排序和选择条件。(4) 设置颜色和边框信息在图4-6中单击OK按钮,打开Select Color and Border Settings对话框,如图4-7所示。图4-7 设置颜色和边框信息在该对话框中,可以选择要创建的数据窗口对象的颜色和边界等信息。 Backgroud Color:用于设置整个数据窗口对象的背景颜色。 Text/Color:
14、用于设置字段数据(即字段值)的标签所使用的颜色。 Text/Border:用于设置字段数据(即字段值)的标签所使用的边框。 Columns/Color:用于设置字段标题(即字段名称)的标签所使用的颜色。 Columns/Border:用于设置字段标题(即字段名称)的标签所使用的边框。 Wrap Height:用于设置细目带的高度,只有Freeform显示风格才有这个选项。 Sava as default:用于将上述设置参数的值保存为默认值。选好了这些信息后,单击Next按钮,会打开Ready to Create Freeform DataWindow对话框。这个对话框显示了在创建数据窗口的过程
15、中从设计者那里获取到的各种信息。确认无误后,单击Finish按钮,完成对一个数据窗口对象的创建。(5) 进入数据窗口面板 接下来PowerBuilder会生成刚才所设计的数据窗口对象。这时,在PowerBuilder的工作区中将弹出数据窗口面板。首先给出数据窗口面板中的Design视图,如图4-8所示。图4-8 所生成的数据窗口对象的Design视图Design视图主要用于对数据库进行设计,它分为若干区域,最常用的有页眉/标题(Header)、数据/细节(Detail)、汇总(Summary)和页脚(Footer)等4个区域。其中在标识带的标签旁有一个向上的小箭头,说明在标识带上方是相应区域,
16、可以用鼠标拖动标识带来改变相应区域的大小。下面来简单解释一下各个区域的作用。 页眉/标题(Header)区域:用来显示栏目名(默认在建立数据库表时为列定义的标签名或列名)和报表的标题名及其他页眉信息,如日期等。 数据/细节(Detail)区域:是数据窗口的主体,它可以用来显示和操作来自数据源的数据。 汇总(Summary)区域:可以通过数据窗口表达式,在汇总区域对显示在数据/细节(Detail)区域中的数据进行汇总计算,如求合计、平均值等。 页脚(Footer)区域:在数据窗口的底部,通常用来显示一些页脚信息,如页码等。图4-8所示的数据/细节(Detail)区域中共有10个对象,其中左边的4
17、个对象为Text(文本)类型的对象,它们仅仅在数据窗口中显示一段文本;而右边的4个对象则为Column(字段)类型的对象,在程序运行时它们所显示的内容将和数据源中对应的字段相关。我们会经常用到的另一个视图是Preview视图,如图4-9所示。这个视图用来在设计时预览数据窗口对象运行时的效果,并可以通过该窗口完成对数据库的一些操作。Preview窗口在数据窗口面板中默认是打开的,如果在当前面板中看不到Preview窗口,可以选择View | Preview命令,打开Preview窗口。图4-9直观地显示了所设计的数据窗口运行时的结果,这对设计很有帮助。图4-9 所生成的数据窗口对象的Previe
18、w视图 (6) 保存数据窗口对象一切设计工作完成后,最后就是保持这个新建的数据窗口对象。选择File | Save命令,打开Save DataWindow对话框,如图4-10所示。图4-10 保存数据窗口对象在该对话框中,输入新建的数据窗口的名字,这里输入dw_friendinfo,然后可以在Comments文本框中为该数据窗口添加注释。确认无误后,单击OK按钮。至此,一个完整的数据窗口对象就创建完毕了。2. 数据窗口控件数据窗口控件是数据窗口技术了另一个重要方面,它是数据窗口对象的容器。数据窗口对象定义好之后,一般要与窗口界面上的数据窗口控件相关联,用户通过数据窗口控件操作数据窗口对象,进而
19、操作数据库。数据窗口功能的强大性不仅表现在数据窗口对象具有丰富的显示样式和灵活的数据源,而且还表现在数据窗口控件具有非常多的事件和函数。下面将介绍在用户操作数据窗口时常用到的一些事件和函数。(1) 检索数据连接完数据库后,需要使用Retrieve()函数将数据从数据库检索到数据窗口中。如果为该函数提供了参数,那么这些参数值将用作数据窗口对象的SQL Select语句的提取参数。Retrieve()函数的语法定义如下:dwcontrol.Retrieve(, argument , argument )其中,dwcontrol是数据窗口控件名,argument(可选项)是向数据窗口对象的SQL S
20、elect语句提供的检索参数。函数执行成功时,被检索到的数据将显示在数据窗口控件中,同时函数的返回值是从数据库中检索到的行数,否则该函数返回1。除了可以一开始从数据库中检索数据外,在操作数据库的过程中,任何时候都可以调用Retrieve()函数重新从数据库中检索数据。(2) 添加和删除数据用户通过数据窗口控件操作数据,可以直接以交互方式修改那些可编辑数据;如果要在数据窗口中插入新的行使用InsertRow()函数;如果要删除数据窗口中的行使用DeleteRow()函数。 InsertRow()函数该函数在数据窗口控件指定行前面插入一行。如果数据窗口中某些列定义了默认值,那么在新插入行显示之前,
21、相应数据项的值首先使用默认值进行初始化。InsertRow()函数的语法定义如下:dwcontrol.InsertRow(row)其中,dwcontrol是数据窗口控件名;row指定在哪一行插入新行,如果该参数值为0则在数据窗口尾部追加一新行。 DeleteRow()函数该函数将删除数据窗口控件中指定的数据行。DeleteRow()函数的语法定义如下:dwcontrol. DeleteRow(row)其中,dwcontrol是数据窗口控件名;row指定要删除的行,如果该参数值为0则删除当前行。(3) 更新数据用户交互地对数据窗口进行修改,为数据窗口插入或删除行,但这些都只是发生在数据窗口中,对
22、数据库没有产生影响。Update()函数把数据窗口控件中所有数据修改传送到数据库,从而更新数据库中的数据。Update()函数的语法定义如下:dwcontrol. Update( accept , resetflag )其中,dwcontrol是数据窗口控件名;accept(可选项)指定数据窗口控件在更新数据库之前是否自动执行AcceptText()的功能,把文本框中的内容放置到缓冲区中。resetflag(可选项)指定更新数据库后是否自动复位更新标志。在执行Update()函数之前,必须使用SetTrans()或SetTransObject()函数建立数据窗口与数据库的连接。使用SetTra
23、nsObject()函数建立连接时,应用程序的运行效率更高些,但应用程序本身需要负责事务的提交(使用SQL COMMIT语句)和回滚(使用SQL ROLLBACK)。执行了Update()后,应该检查该函数的返回值,以判断函数的执行是否成功。若函数执行成功时返回1,发生错误时函数返回1。(4) 数据窗口常用事件当用户在数据窗口上选择或单击某一个位置,或者检索、更新数据,或在开始打印报表,结束打印报表,在打印过程中等,都发生相应的事件。可以为这些事件编写程序,在事件触发时完成某些处理。 单击事件(Clicked) 用户在数据窗口控件的任何位置单击时都会触发Clicked事件,典型应用是单击选择要
24、操作的数据行或数据项。该事件提供的参数及其含义如表4-1所示。表4-1 Clicked事件的参数参 数含 义Xpos表示用鼠标单击的位置与数据窗口控件工作区的左边界的位置Ypos表示用鼠标单击的位置与数据窗口控件工作区的上边界的位置Row表示用户单击行的行号Dwo表示用户单击的数据窗口上的对象该事件的返回值的含义如表4-2所示。表4-2 Clicked事件的返回值返 回 值含 义1为默认返回值,继续处理0停止处理,不改变输入焦点 检索事件(RetrieveStart,RetrieveRow和RetrieveEnd)当执行Retrieve()函数进行检索时,与之相关的事件有RetrieveSta
25、rt,RetrieveRow和RetrieveEnd。RetrieveStart事件发生在数据库窗口检索数据之前(即执行Retrieve()函数前),使用该事件可以为用户提供一个可视化的检索进度,有时还可以用来控制检索的权限。该事件返回值的含义如表4-3所示。表4-3 RetriveStart事件的返回值返 回 值含 义0为默认返回值,继续进行索引1不执行索引2从数据库中检索数据前不重置行和缓冲区RetrieveRow事件发生在没检索一条记录并送到数据窗口的时候,该事件返回值的含义如表4-4所示。表4-4 RetriveRow事件的返回值返 回 值含 义0为默认返回值,继续进行索引1停止检索R
26、etrieveEnd事件在检索结束后触发,一般可以用于清除在前面的事件中打开的任务。 更新事件(UpdateStart和UpdateEnd)当执行Update()更新数据库时,与之相关的事件有UpdateStart和UpdateEnd。UpdateStart事件在用户调用了Update()后,修改数据库数据之前发生,该事件返回值的含义如表4-5所示。表4-5 UpdateStart事件的返回值返 回 值含 义0为默认返回值,继续进行更新1不执行更新UpdateEnd事件在数据窗口完成更新数据库操作后发生,该事件的参数及其含义如表4-6所示。表4-6 UpdateEnd事件的参数参 数含 义Ro
27、wsinserted更新操作中新插入数据库的行数Rowsupdated更新操作中更新的行数Rowdeleted更新操作中被删除的行数 错误处理事件(DBError)当操作数据库出现错误时,系统会触发数据窗口的DBError事件,开发人员可以在此编写一些出错处理程序,从而提供系统的容错性。该事件的参数及其含义如表4-7所示。表4-7 DBError事件的参数参 数含 义Sqldbcode包含由数据库厂商提供的特定出错代码Sqlerrtext数据库厂商提供的错误信息文本Slqsyntax发送到DBMS的发生错误的SQL语句(续表) 参 数含 义Buffer数据窗口缓冲区,错误发生时数据行所在的缓冲
28、区Row在对数据进行操作时发生错误的数据行号该事件返回值的含义如图4-8所示。表4-8 DBError事件的返回值返 回 值含 义1为默认返回值,系统显示出错信息0系统不显示出错信息如果开发人员没有为DBError事件编写程序,那么当发生数据库错误时将显示系统提示的错误信息。如果开发人员为DBError事件编写了处理错误的程序,然后不希望再显示系统提示的错误信息,则应该使事件处理程序返回1(禁止显示系统错误信息)。此外,在数据窗口控件中用于出错处理的事件还有error事件和itemerror事件。 数据处理事件ItemChangedItemChanged事件在编辑、修改数据项时触发,即在用户对
29、数据项有修改动作后,用Enter键、Tab键或箭头键等方法离开当前编辑的数据项时触发(如果新值与原值一样则不触发)。该事件的参数及其含义如表4-9所示。表4-9 ItemChanged事件的参数参 数含 义Row数据项所在的行号DwodwObject类型,修改的对象,一般是数据列Data以字符串形式表示的修改后的数据该事件返回值的含义如图4-10所示。表4-10 ItemChanged事件的返回值返 回 值含 义0为默认返回值,接受新修改的值1不接收新修改的值且不允许改变输入焦点2不接收新修改的值但允许改变输入焦点在数据窗口控件中与数据处理有关的事件还有ItemFocusChanged事件和R
30、owFocus- Changed事件等。(5) 数据窗口排序尽管在定义数据窗口对象时可以指定数据窗口中的数据按某种方式排序,在应用程序中还可以动态改变数据窗口的排序方式。为了使数据窗口排序,要先使用SetSort()函数设置排序方式,然后再使用Sort()函数实施排序操作。SetSort()函数的语法定义如下:dwcontrol. SetSort(format)其中,dwcontrol是数据窗口控件名;format用字符串指定排序条件表达式,表达式包括列名或列号,使用列号时,必须在列号前加上符号。如果format参数为NULL,PowerBuilder会提示用户输入排序条件。Sort()函数的
31、语法定义如下:dwcontrol. Sort()其中,dwcontrol是数据窗口控件名。Sort()函数执行成功时返回1,发生错误时函数返回1。如果在调用Sort()函数之前没有执行SetSort()函数,那么Sort()函数就使用定义数据窗口对象时排序条件。此后,当执行Retrieve()函数检索数据时,如果函数执行成功,那么PowerBuilder会直接完成排序任务。只有在使用SetSort()函数修改了排序条件,或由于应用程序数据处理,或用户输入改变了数据时,才需要执行Sort()函数重新排序数据。如果在数据窗口对象设置了Retrieve As Needed选项,那么Sort()函数的执行将取消这个选项的效果,也就是说,执行Sort()函数时将检索出所有满足SQL Select检索条件的数据。(6) 数据窗口过滤在设计数据窗口对象时可以定义过滤条件,在应用程序中也可以动态定
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1