六、报表设计
报表用来打印数据表的记录。报表主要包括两部分:数据源和布局。数据源通常是自由表、数据库表、视图:布局是指报表格式。
6.1 使用向导创建报表
如果对报表的格式要求简单,可以使用报表向导创建报表。VFP为用户提供了两种类型的报表向导:报表向导和一对多报表向导。下现以“通讯录”表为例,介绍如何使用报表向导创建报表。
例22 使用报表向导,创建一个基于“通讯录”的报表。
操作步骤一:打开:“学生信息”项目文件,单击“文档”选项卡,选择“报表”,再单击“新建”按钮,这时屏幕出击“新建报表”对话框。单击“新建报表”对话框中的“报表向导”按钮,屏幕显示“向导选取”对话框。
操作步骤二:选择“向导选取”对话框中的“报表向导”选项,单击“确定”按钮,打开“报表向导”的“字段选取”对话框,确定报表的数据来源。例如,选定“通讯录”表中的编号、姓名、角色、性别、身高和电子邮箱6个字段,如图所示。
操作步骤三:单击“下一步按钮”,出现“分组记录”对话框。报表中的记录可以按一定的条件进行分组,向导提供了三个条件,这三个条件不是并列关系,是分层关系。分组时,先按经一个每件进行分组,再对每个组中的记录按第二个条件进行分组,依次类推。例如,按“角色”分组,单击“分组选项”按钮,可以确定分组字段的字段间隔,一般选“整个字段”间隔。单击“总结选项”按钮,在“总结选项”按钮,在“总结选项”对话框中可以设置对数值字段进行求和、求平均值,以及报表中是否包含有小计和总计等。
操作步骤四:单击“下一步”按钮,出现“选择报表样式”对话框,提供了5种报表样式:经营式、账务式、简报式、带区式和随意式。
操作步骤五:单击“下一步”按钮,出现“定义报表布局”对话框,确定报表布局。向导提供了两种布局方式:列布局和行布局
由于指定了分组选项,所以“列数”和“字段布局”选项不可用。
操作步骤六:单击“下一步”按钮,出现“排序记录”对话框,确定报表中记录的输出次序,最多可设定三个字段用于排序。按“选定字段”框中字段的先后顺序进行排序,排在前面的优先排序。
操作步骤七:单击“下一步”按钮,出现“完成”对话框,要求为所创建的报表指定一个标题,该标题出现在报表的顶部。
在完成报表前,最好先单击“浏览”按钮,观察报表结果,如果结果不满意,可单击“上一步”按钮进行修改。以文件名“通讯录.frx”保存新创建的报表。单击“预览”按钮,可以观察到报表格式及数据。
从报表中可以观察到:报表为纵向报表,这是在报表布局中设置的。报表按“角色”分组,在每组的最后一行显示汇兑结果,例如,计算平均身高。
如果要创建基于多个表或视图的报表,则先创建一个视图,视图中包含报表所需要的字段,再创建报表。
如果创建报表的数据源是一个具有一对多关系的两个表,例如,“通讯录”表和“家庭成员”表,可以使用一对多报表向导创建一个具有一对多关系的报表。使用向导创建一对多报表的方法与创建一对多表单的方法相似。使用报表向导所创建的报表,可以通过报表设计器进行修改。
6.2快速报表
与快速表单类似,VFP也为用户提供了快速报表的功能,创建一个格式简单的报表,然后可以对该报表进行修改,生成满意的报表。在生成快速报表之彰,必须先打开报表设计器。
例23 使用快速报表功能,生成一个基于“家庭成员”表的报表。
操作步骤一:打开项目文件,在“文档”选项卡中选择“报表”,单击“新建”按钮,在出现“新建报表”对话框中单击“新建报表”按钮,这时屏幕出现“报表设计器”窗口。
操作步骤二:“报表设计器”中的空白区域称为带我。首次启动报表设计器时,报表布局中默认有页标头、细节和页注脚三个基本带区。
操作步骤三:打开“报表设计器”后,单击“报表”菜单中的“快速报表”命令,出现“打开”对话框,确定创建报表所需要的表。例如,选择“家庭成员”表,并单击“确定”按钮,屏幕出现“快速报表”对话框。
在“快速报表”对话框中,需要用户确定报表中字段布局方式是行布局还是列布局,例如,选择列布局方式。这里行布局和列布局的含义与报表向导中行布局和列布局的含义相同。
如果在新创建的报表中选择表的部分字段,单击“快速报表”对话框中的“字段”按钮,打开“字段选择器”对话框,选择报表需要的字段。
操作步骤四:单击“快速报表”对话框中的“确定”按钮,快速表显示 在“报表设计器”窗口中。
在保存报表之前,可以通过工具栏上的预览按钮,预览该报表,报表结果如图所示,每页报表 的页注脚区域显示报表当前的日期和页码。
使用快速报表功能生成的是一个简单的报表,它是基于一个表创建的报表,并且通用型字段内容不能直接显示在报表中。对于使用向导创建的报表和快速创建的报表,可以在报表设计器中进行修改。
七、菜单设计
在应用程序中,一般通过菜单实现调用数据库的表、视图、查询、表单、报表等组件。VFP系统支付用户制作条式、弹出式和下拉式菜单。条式菜单是指菜单选项沿屏幕或窗口水平方向排列的菜单;弹出式菜单是指一个具有封闭边框、在屏幕或窗口中垂直排列、由一组菜单选项组成的菜单;下拉式菜单是由条式菜单和弹出式菜单组合而成的,根据需要从条式菜单的某一个选项中拉出来一个弹出式菜单。每个菜单选项一般都可以设置一个访问键和快捷键,有的菜单项还包含子菜单及菜单项分隔线。
VFP的主菜单由文件、编辑、显示、工具、程序、窗口和帮助菜单项组成。每一个菜单项包含一个弹出式菜单,例如“文件”菜单中包含新建、打开、关闭等选项。每个菜单项都有自己内容的名字,该名字可以直接被调用。
7.1 快速菜单
VFP为用户提供了快速制作菜单的功能,它将系统菜单自动添加到菜单设计器窗口中,这些菜单项可以作为开发的应用程序菜单来使用。
例24 生成一个快速菜单。
操作步骤一:在“项目管理器”对话框的“其他”选项卡中,选择“菜单”选项,单击“新建”按钮,屏幕出现“新建菜单”对话框。
操作步骤二:单击“新建菜单”对话框中的“菜单”按钮,这时系统启动“菜单设计器”,单击“菜单”中的“快速菜单”命令,在“菜单设计器”对话框中自动加载了系统菜单,供用户编辑使用,如图所示。
说明:“菜单名称”栏列出了VFP系统菜单标题,如“文件(\<F)”,它后面括号中的“\<字母”为该菜单标题的访问键,如\F等。“结果”栏显示的都是子菜单,表明它是一个下拉式的菜单。“编辑”按钮表示可以对“结果”栏的内容进行编辑。“选项”按钮表示该菜单栏是否在“提示选项”对话框中进行了设置。选择一个菜单,单击“编辑”按钮,可以查看该菜单所包含的全部菜单项及内部名字,在自行设计菜单时可以通过内容名字调用该菜单项。
操作步骤三:关闭“菜单设计器”,保存生成的快速菜单,扩展名.mnx,例如,以文件名“menu1.mnx”保存该菜单。
由于生成的菜单和系统菜单相同,因此可以预览或运行该快速菜单发生的变化。
7.2? 使用菜单设计器设计菜单
使用菜单设计器可设计用户需要的菜单。在设计菜单前,必须先确定主菜单,其次是主菜单中包含的菜单项以及菜单项中是否含有子菜单等。在设计菜单时,一般不直接给主菜单指定任务,而把任务分配给主菜单中的各菜单项,如果菜单项中有子菜单,则把任务分配给子菜单。初学者在编制菜单时,一般也要按照这个原则来设计菜单。
(1)菜单设计器的组成
在“菜单设计器”对话框,包括“菜单名称”、“结果”和“选项”三列。
A.菜单名称
“菜单名称”是标题栏,是运行时显示的菜单标题,而不是在设计时应用菜单的内部名字。在指定菜单标题时,可以设置菜单项访问键,具体方法是在访问键前加“\<”字符,也可以把菜单项中功能相近的菜单分组,中间用一条水平线分隔,方法是在“菜单名称”栏输入“\-”字符。
在设计菜单标题名称时,应输入一个有意义的菜单标题,该标题能反映菜单项的功能,但要简单,可以用英文,也可以用中文。
B.结果
指选中菜单时要执行的操作,下拉列表包括“命令”、“填充名称”、“子菜单”和“过程”四个选项,其作用见表。
“结果”项的下拉列表的选项及作用
选项名称 |
作???????? 用 |
命令 |
该菜单项用来执行一条命令语句。“结果”列右侧出现一个文本框,用来输入一条具体的命令 |
填充名称 |
“结果”右侧会出现一个文本框,用户可以定义菜单名。设计菜单时,在默认状态下,系统会自动为每个菜单项添加一个惟一的名字,系统通过它来引用该菜单项,但在实际设计菜单时,一般不选此项 |
子菜单 |
表示该菜单项包含一个子菜单。这时在“结果”右侧出现“创建”或“编辑”命令按钮,首次定义菜单时为“创建”按钮,以后是“编辑”按钮,单击它进入编辑子菜单窗口。通过窗口右上侧的“菜单级”下拉列表选项,可以返回到上级菜单或主菜单 |
过程 |
表示该菜单项执行一个由多条命令代码组合而成的过程。这时在“结果”右侧出现“创建”或“编辑”命令按钮,首次定义菜单时为“创建”按钮,以后是“编辑”按钮,单击它进入编辑过程窗口 |
C.选项
单击“选项”列的按钮后,打开“提示选项”对话框,用来设置菜单项的各种高级属性。除了上述的“菜单名称”、“结果”和“选项”外,还包括“菜单级”(该下拉列表框用来指定或改变当前设计的菜单在菜单层次结构中的位置)、“菜单项”(包括“插入”、“插入栏”和“删除”三个按钮,其中“插入栏”按钮只能用于设计子菜单)和“预览”(用来预览设计的菜单,预览时设计的菜单直接显示在主窗口中)选项。
(2)创建菜单
例25 使用菜单设计器,创建一个如表所示功能的菜单。
主菜单及其菜单项和子菜单
主菜单 |
菜单项 |
子菜单 |
主菜单 |
菜单项 |
子菜单 |
文件(\<F) |
新建、打开、关闭 |
|
工具(\<T) |
向导 |
表、查询、表单、报表 |
浏览(\<B) |
通讯录表、家庭成员表 |
|
退出(\<Q) |
退出 |
|
管理(\<M) |
通讯录2表单、通讯录4表单 |
|
|
|
|
A.创建主菜单
操作步骤一:在“项目管理器”窗口的“其他”选项卡中,选择“菜单”选项,然后单击“新建”按钮,屏幕出现“新建菜单”对话框。
操作步骤二:单击“新建菜单”对话框中的“菜单”按钮,屏幕出现“菜单设计器”窗口,在“菜单名称”栏中分别输入主菜单的各个菜单标题:文件、浏览、管理、工具和退出,并为各个菜单标题加上访问键标志:(\<F)、(\<B)、(\<M)、(\<T)、(\<Q),结果如图所示。
B.创建菜单项
主菜单的菜单标题设计后,下面应该给各菜单标题添加菜单项,定义所要执行的命令、过程或包含的子菜单。例如,给菜单标题“文件”添加菜单项:新建、打开和关闭。
操作步骤一:在如图所示的“菜单设计器”窗口中选择要添加菜单项的菜单标题,如选择“文件”,在“结果”框中选择“子菜单”选项,并单击其右侧的“创建”按钮,这时屏幕出现一个新的“菜单设计器”窗口。
操作步骤三:选择“菜单级”框中的“菜单栏”选项,返回到主菜单中的“菜单设计器”窗口。按照操作步骤二,给“浏览”、“管理”、“工具”和“退出”菜单添加所包含的菜单项,同样也可以给每个菜单项定义一个访问键。
C.定义菜单项功能
创建菜单项及其子菜单后,还需要开户银行中菜单项所完成的功能。定义菜单项的功能可以通过“菜单设计器”窗口“结果”框中的四个选项:菜单项#、命令、子菜单和过程来实现。
①菜单项#?? 主菜单“文件”中包含三个菜单项:新建、打开和关闭。定义各菜单项功能的操作方法如下:
在如图所示的“菜单设计器”窗口右侧“结果”下拉列表框中,分别选择“菜单项#”选项,并在其右侧的空白处键入该菜单项所完成功能的内部名字或操作命令。例如“新建”菜单项对应的内部名字为:_mfi_new,“打开”菜单项对应的内部名字为:_mfi_open,“关闭”菜单项对应的内部名字为:_mfi_close,结果如图所示。菜单项的内部名字可以从生成的快速菜单中获得。
②命令?? 在“结果”框中的“命令”选项,表示为菜单项或子菜单指定一条VFP命令,完成指定的操作。将“管理”菜单中的两个菜单项“通讯录2表单”和“通讯录4表单”分别定义为命令,所实现的功能分别表示执行该表单,对应的操作命令分别为:do form d:\txl\通讯录2.scx和do form d:\txl\通讯录4.scx,如图所示。
“退出”菜单项所对应的操作命令为:set sysmenu to default。
③过程? 过程与命令很相似,它是一组命令的集合。将“浏览”菜单中的两个菜单项:通讯录表和家庭成员表,分别定义为过程,其功能分别是浏览“通讯录”表和“家庭成员”表中的记录,如图所示。
单击“结果”框右侧的“创建”按钮,这时屏幕出现过程编辑窗口,键入执行该所对应的命令代码,其中浏览“通讯录”表所对应的过程代码如图所示。
由于VFP会自动生成PROCEDURE语句,因而不必在“过程”编辑对话框中输入此语句。浏览“家庭成员”表记录所对应的过程代码,请自己定义。
D.添加系统菜单项
在使用“菜单设计器”创建菜单时,可以将VFP系统菜单的部分菜单项加载到用户创建的菜单中。例如,在“工具”菜单中设置一个“向导”子菜单,“向导”菜单中包含有表、查询、表单和报表四个菜单项。因此,可以将VFP系统菜单中的这四个向导加载到“菜单设计器”中。
操作步骤一:选择“工具”菜单栏中的“向导”菜单项,将其“结果”项设置为“子菜单”,并单击其右侧的“创建”按钮,进入“向导”子菜单设计器窗口。
操作步骤二:单击“菜单设计器”中的“插入栏”按钮,屏幕显示“插入系统菜单栏”对话框。
操作步骤三:在“插入系统菜单栏”对话框中,选择要插入的菜单项,然后单击“插入”按钮。例如,依次将表、查询、表单和报表四个向导选项插入到“菜单设计器”中,结果如图所示。利用该方法,可以快速生成用户菜单项。
操作步骤四:以文件名“mymenu.mnx”保存以上创建的菜单,单击“运行”按钮,运行结果如图所示,可以查看该菜单所实现的功能。
7.3 创建快捷菜单
VFP系统提供了大量的快捷菜单,为用户操作提供了方便。如创建表单时,在数据环境设计器窗口中,利用快捷菜单可快速地添加数据表、打开属性窗口等。用户在开发应用程序过程中,可以创建快捷菜单,并将它附加到控件或对象中。
用右键单击该控件或对象,则在快捷菜单中显示当前对象可用的所有功能。
例26 创建一个包含有剪切、复制、粘贴和清除功能的快捷菜单。
操作步骤一:在项目管理器的“其他”选项卡中,选择“菜单”选项,单击“新建”按钮,打开“新建菜单”对话框,单击“快捷菜单”按钮,打开“快捷菜单设计器”窗口。
操作步骤二:在“快捷菜单设计器”窗口中,添加“剪切”、“复制”、“粘贴”、“清除”菜单项,并分别指定它所完成的功能,也可以利用添加系统菜单项的方法添加以上四个菜单项。
操作步骤三:以文件名为“kjcd.mnx”保存新创建的快捷菜单。
运行快捷菜单“kjcd.mnx”后,系统生成“kjcd.mpr”文件,利用该文件可以将生成的快捷菜单附加到控件或对象中。
例27 将快捷菜单文件“kjcd.mpr”,附加到“通讯录3”表单中。
操作步骤一:在“表单设计器”窗口中打开“通讯录3.scx”表单文件,在“属性”窗口的“方法程序”选项卡中,双击“RightClick Event”属性,打开过程编辑器窗口。如图所示。
操作步骤二:在过程编辑器窗口中键入过程代码:do kjcd.mpr,然后保存该表单。
经过上述操作后,就将快捷菜单“kjcd”文件附加到表单“通讯录3”中,运行表单“通讯录3”,可以在该表单的任意位置单击鼠标右键,立即显示该快捷菜单,执行快捷菜单中的菜单命令,可以实现相应的功能。如图所示。
八、数据的导入和导出
8.1导入数据
导入数据是指把某一应用程序使用的,具有一定格式的数据(如Microsoft Excel、Lotus1-2-3等),转化生成VFP系统管理的数据表。导入生成的断气表可以是一个新表,也可以追加到一个已存在的数据表中,与建立数据表一样,系统提供了向导功能。
例28? 建立如图所示的Excel工资表,将其导入到VFP中生成一个数据库表。
操作步骤一:单击“文件”菜单中的“导入”命令,打开“导入”对话框,如图所示。
操作步骤二:在“导入”对话框中,文件的类型、来源于、工作表框内不需要输入内容,可以直接单击“导入向导”按钮,启动“导入向导”对话框,如图所示。
操作步骤三:在“数据识别”对话框中,在“文件类型”框中选择要导入的文件类型,例如,选择“Microsoft Excel5.0和97(XLS)”,单击“源文件”右侧的“定位”按钮,从打开的对话框中,选择待导入的文件“工资表.XLS”。“目标文件”中提供了“新建表”和“现有的表”两种选择,选择“新建表”,并单击“定位”按钮,给新创建的表指定保存文件名。单击“下一步”按钮,出现“选择数据库”对话框,如图所示。
操作步骤四:在“选择数据库”对话框中需要确定是创建一个自由表还是把表添加到指定的数据库中。例如,创建一个自由表,单击“下一步”按钮,屏幕出现“定义字段类型”对话框,如图所示。
操作步骤五:在“定义字段类型”对话框中,下半部分显示了“工资.XLS”文件中的数据。由于表格中的数据是从第2行开始的,所以的“导入起始行”框中输入2.。单击“下一步”按钮,出现“定义输入字段”对话框,如图所示。
操作步骤六:在“定义输入字段”对话框中,需要确定每列数据所对应的字段名、数据类型、宽度和小数位。单击表格中的列,选择不同的字段。例如,设置“姓名”字段为字符型,其他字段为数值型。单击“下一步”按钮,屏幕显示“指定国际选项”对话框,如图所示。
操作步骤七:确定各项内容后,单击“下一步”按钮,屏幕显示“完成”对话框,并单击“完成”按钮,这时一个新的数据表“工资表.DBF”就生成了。
打开“工资表”,可以对该表进行一系列的操作。由此可见,导入操作对获取其他应用程序中使用的数据是非常方便的
8.2导出数据
数据的导入和导出是一对相反的操作,导入是将其他类型的数据生成到数据表中,导出是将数据表中的数据转换生成其他文件类型格式的数据。
在导出数据操作中,可以将数据表中的全部记录和字段导出,也可以是其中的一部分记录或字段,通过筛选条件,导出满足条件的数据。下面以“通讯录”表为例,介绍如何导出数据。
例29 通过导出操作将“通讯录”表中记录,导出生成Excel电子表格文件。
操作步骤一:单击“文件”菜单中的“导出”命令,打开“导出”对话框。
操作步骤二:在“导出”对话框中,“类型”框用来选择导出生成数据的文件类型,例如,Microsoft Excel 5.0(XLS):在“到”框中,输入导出生成的文件名,在输入文件名时,如果有路径,也应输入路径,例如,输入d:\txl\通讯录.XLS;在“来源于”框中,选择输入要导出的数据表,例如,选择“通讯录.dbf”表,如图所示。
操作步骤三:单击“确定”按钮,系统自动生成通讯录.XLS文件。
注意:“导出”对话框中的“选项”用来确定导出条件,可以导出满足条件的记录。
通过Microsoft Excel应用程序打开新生成的“通讯录.XLS”文件,如图所示,从图表中可以看出,“通讯录”表中的全部记录导出到“通讯录.XLS”文件中。