结构化查询语言SQL和报表_第1页
结构化查询语言SQL和报表_第2页
结构化查询语言SQL和报表_第3页
结构化查询语言SQL和报表_第4页
结构化查询语言SQL和报表_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

结构化查询语言SQL和报表2023/3/2024.1SQL语言的基本概述结构化查询语言(StructuredQueryLanguage,简称SQL)SQL是用于对存放在计算机数据库中的数据进行组织、管理和检索的工具,是一种用于和数据库进行交互通信的计算机语言。SQL是1974Boyce和Chamberlin提出的,并在IBMSystemR上首次实现了这种语言,由于它的功能丰富,使用方式灵活和语言简洁易学等突出特点,很受计算机界的欢迎。现在SQL语言已成为关系型数据库操纵语言的国际标准。VFP提供了SQL语言支持2023/3/2034.1.1SQL语言的基本概念SQL语言支持关系型数据库的三级模式结构,其中外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。在SQL语言中,一个关系就对应于一个表,基本表本身是独立存在的表,对应一个存储文件;存储文件的逻辑结构组成了关系型数据库的内模式。视图是从基本表或其他视图导出的表,视图只是一个虚表。在用户看来,视图和基本表都是关系,而存储文件对用户是透明的。2023/3/2044.1.2SQL的基本功能SQL语言由3部分组成:数据定义语言DDL(DateDefinitionLanguage)。数据操纵语言DML(DateManipulationLanguage)。数据控制语言DCL(DateControlLanguage)。其主要命令如表4-1所示。SQL功能命令数据定义语言DDLCreate、Drop、Alter数据操纵语言DMLSelect、Insert、Update、Delete数据控制语言DCLGrant、Revoke其中,数据定义语言DDL提供了完整的定义数据库所必需的语言工具,用来创建、修改、删除数据库对象;数据操纵语言DML用于查询或者修改数据;数据控制语言DCL用来管理用户的访问权限,由于VFP没有权限管理功能,所以不支持DCL命令。

2023/3/2054.2数据定义语言DDL数据定义语言是对关系模式的一级定义,用来定义被存放数据的结构和组织,以及数据项之间的关系。SQL数据定义语言可以用来定义数据表、视图和索引。Create语句:用于定义和生成数据对象,比如创建表、视图和索引。Drop语句:用于删除一个现有的数据对象,比如视图、表、索引。Alter语句:用于改变一个数据库对象。比如对一个表的字段进行删除、添加和修改,或者修改表的结构。2023/3/2064.2.1用Create语句创建基本表命令格式:CREATETABLE表名[FREE] (<FieldName1><FieldType>[(宽度,小数)][NULL][NOTNULL] [CHECK<逻辑表达式>[ERROR<文本信息>]] [DEFAULT<表达式>] [PRIMARYKEY/UNIQUE] ,<FieldName2>…)

命令功能:创建数据表的结构。

2023/3/2074.2.1用Create语句创建基本表(续)命令说明:CREATETABLE表名:指定创建表文件名。FREE:在数据库打开的情况下创建的是自由表。默认在数据库未打开时创建的是自由表,在数据库打开时创建的是数据库表。CHECK<逻辑表达式>:为字段值指定约束条件;ERROR<文本信息>:用来指定当不满足约束条件时显示的出错信息。DFAULT:指定默认的字段值。PRIMARYKEY:指定当前字段为主索引关键字;UNIQUE:指定当前字段为候选索引关键字。NULL/NOTNULL:表示该字段是否可以为空。2023/3/2084.2.1用Create语句创建基本表(续)【例4.1】在图书馆管理系统中创建dzzl(读者种类)表,包含zlbh(种类编号)、zlmc(种类名称)、jssl(借书数量)、jsqx(借书期限)、bz(备注)几个字段。OPENDATABASE图书馆管理CTEATETABLEdzzl(zlbhc(10)notnull,zlmcc(10)notnull,jsslc(8),jsqxc(8),Bzc(20))若在命令窗口执行MODIFYSTRUCTURE命令,就可以在弹出的对话框中见到dzzl表结构,如图4-2所示。

图4-2创建的dzzl表结构2023/3/2094.2.1用Create语句创建基本表(续)【例4.2】创建一个名为“通讯录”的自由表,包含姓名、工作单位、号码、家庭住址4个字段,所得的表预览如图4-3所示。CREATETABLE通讯录FREE(姓名C(10),工作单位C(20),号码C(12),家庭住址C(20))BROWSE由于没有向表中添加任何记录,所以在预览时看不见任何的记录。图4-3创建的通讯录表2023/3/20104.2.1用Create语句创建基本表(续)【例4.3】创建一个“图书订单”的数据库,并在此数据库中创建一个“图书”表,图书表含有订单号、图书编号、书名、单价、数量等字段。CREATEDATEBASE图书订单CREATETABLE图书(订单号

C(10); DEFAULT"10001",图书编号

C(10)PRIMARYKEY,;

书名C(10),单价

N(8,2);

数量

N(6)CHECK数量>=100AND数量<=1000;

ERROR"数量范围在100和1000之间")图4-4图书表的索引图预览此表的设计器可以看见“图书编号”已经被设为主索引,如图4-4所示。

2023/3/20114.2.1用Create语句创建基本表(续)【例4.4】在图书订单数据库中建立一个新表“订单”表,含有订单编号、图书编号、客户编号、订货日期、发货日期几个字段。OPENDATABASE图书订单CREATETABLE订单(订单编号

C(10)PRIMARYKEY,; 客户编号

C(10),订货日期

D,发货日期D; 图书编号C(10),FOREIGNKEY图书编号; TAG图书编号

REFERENCES图书)图4-5图书表和订单表之间的关系在命令窗口中输入“MODIFYDATABASE订数订单”命令,可在弹出的“数据库设计器”窗口中见到图书表和订单表之间已建立的关系,如图4-5所示。

2023/3/20124.2.2用Alter修改基本表命令格式1:ALTERTABLE<表名>ADD/ALTER[COLUMN]<字段名1><字段类型>[(字段宽度[,小数位数])][NULL][NOTNULL][CHECK<逻辑表达式>[ERROR<文本信息>]] [DEFAULT<表达式>] [PRIMARYKEY/UNIQUE][REFERENCES<表名2>[TAG<标识名1>]]命令功能:修改表中原有的字段,或者在表中增加新的字段。2023/3/20134.2.2用Alter修改基本表(续)命令说明:ADD[COLUMN]<字段名1><字段类型>[(字段宽度[,小数位数])]:增加新字段,并指定新增字段的名称、类型、字段宽度及小数位数。[NULL][NOTNULL]:指定新字段是否接受空值。ALTER[COLUMN]<字段名1><字段类型>[(字段宽度[,小数位数])]:修改原有字段,并指定修改后的字段名称、类型、字段宽度及小数位数。其他的参数含义同CREATETABLE。2023/3/20144.2.2用Alter修改基本表(续)【例4.5】修改在例4.2中创建的通讯录表,增加一个“性别”字段,SQL命令如下:ALTERTABLE通讯录

ADDCOLUMN性别

C(10)再把表中字段“家庭住址”修改为“工作地址”,SQL命令如下:ALTERTABLE通讯录

RENAMECOLUMN家庭住址

TO工作地址预览修改后的表如图4-6所示,与图4-3对比就可以发现多出了一个字段“性别”,字段“家庭住址”改为了“工作地址”。

图4-6修改后的通讯录表2023/3/20154.2.2用Alter修改基本表(续)【例4.6】修改例4.3中创建的图书表,将“书名”字段的宽度改为20且不准为空值。SQL命令如下:OPENDATABASE图书订单ALTERTABLE图书

ALTER书名

C(20)NOTNULL命令格式2:ALTERTABLE<表名>ALTER[COLUMN] <字段名>[NULL][NOTNULL] [SETCHECK<逻辑表达式>[ERROR<文本信息>]] [SETDEFAULT<表达式>] [DROPCHECK] [DROPDEFAULT]

2023/3/20164.2.2用Alter修改基本表(续)命令功能:删除或者设置字段的默认值或约束条件。命令说明:

[SETCHECK<逻辑表达式>[ERROR<文本信息>]]:为字段设置约束条件。[SETDEFAULT<表达式>]:设置默认值。[DROPDEFAULT]:删除默认值。

[DROPCHECK]:删除约束条件。

2023/3/20174.2.2用Alter修改基本表(续)【例4.7】在例4.3创建的图书表中,为“图书编号”字段设置一个默认值200601并删除数量的约束条件,SQL命令如下:ALTERTABLE图书

ALTER图书编号

SETDEFAULT200601ALTERTABLE图书

ALTER数量

DROPCHECK2023/3/20184.2.2用Alter修改基本表(续)命令格式3:ALTERTABLE<表名>[DROP[COLUMN]<字段名>] [ADDPRIMARYKEY<表达式>TAG<标识名>] [DROPPRIMARYKEY] [ADDUNIQUE<表达式>[TAG<标识名>]] [DROPUNIQUETAG<标识名>] [SETCHECK<逻辑表达式>[ERROR<文本信息>]] [DROPCHECK] [ADDFOREIGNKEY<表达式>TAG<标识名>

REFERENCES<表名>[TAG<标识名>]] [DROPFOREIGNKEYTAG<标识名>[SAVE]] [RENAMECOLUMN<字段名>TO<字段名>]

2023/3/20194.2.2用Alter修改基本表(续)命令功能:删除表中的字段、设置或删除表的主索引、候选索引、对字段重新命名或者删除指定的字段的约束条件。命令说明:[DROP[COLUMN]<字段名>]:删除指定的字段。[ADDPRIMARYKEY<表达式>TAG<标识名>]:建立主索引。[DROPPRIMARYKEY]:删除主索引。[ADDUNIQUE<表达式>[TAG<标识名>]]:建立候选索引。[DROPUNIQUETAG<标识名>]:删除候选索引。[ADDFOREIGNKEY<表达式>TAG<标识名>:建立外索引。REFERENCES<表名>[TAG<标识名>]]:指定建立关联的父表。[DROPFOREIGNKEYTAG<标识名>[SAVE]]:删除外索引。[RENAMECOLUMN<字段名>TO<字段名>]:对字段重新命名。

2023/3/20204.2.2用Alter修改基本表(续)【例4.8】在例4.3创建的图书表中,为“书名”创建一个候选索引,并且删除“数量”字段,如图4-7所示。SQL语句如下:ALTERTABLE图书

ADDUNIQUE书名;ALTERTABLE图书

DROPCOLUMN数量图4-7例4.8图在图4-7中,字段“数量”被删除,并创建候选索引“书名”。

2023/3/20214.2.2用Alter修改基本表(续)【例4.9】在第1章创建的“图书管理系统”的dzzl中,为jssl创建一个默认值15,当输入有错误时就会显示“值为15”,删除表中的候选索引。SQL语句如下:ALETERTABLEdzzlALTERjsslSETDEFAULT15; ERROR“值为15”;ALETERTABLEdzzlDROPUNIQUETAGzlbh

2023/3/20224.2.3用DROP命令删除一个表随着数据库设计的变化,数据库的结构也在不断的变化,新建的表就会不断地代替旧表,这时某些旧表就不再需要了,可以用DROPTABLE命令删除它。命令格式:DROPTABLE<表名>命令功能:删除一个表,包括在这个表上建立的索引。命令说明:<表名>:指定被删除的表。【例4.10】删除在例4.2中创建的通讯录表,SQL命令如下:DROPTABLE通讯录

2023/3/20234.3数据操纵语言DML数据操纵实际上就是管理数据,这也是创建表的基本目的,主要是对关系中的具体数据进行查询、更新、删除和插入,但不能够改变数据的结构。DML命令如表4-2所示。命令功能UPDATE更新数据库中的已有数据DELETE用于从数据表中删除数据INSERT增加一个新的数据到表中SELECT数据查询表4-2DML的命令及功能2023/3/20244.3.1INSERT命令用CREATETABLE命令创建一个表后,创建的表中没有具体的数据,可以用INSERT命令向表中插入数据。命令格式:INSERTINTO表名(列名1,列名2,…)VALUES(<表达式1>,<表达式2>,…)命令说明:INTO表名:指定接受新数据的目标表。VALUES:指明增加记录的字段值。向表中添加的数据必须与指定字段名的类型相匹配。字符串要用单引号或者双引号括起来,日期型可用CTOD函数处理或者直接引用。2023/3/20254.3.1INSERT命令(续)【例4.11】在例4.4创建的订单表中插入一个新的记录:订单编号:200601读者编号:10001订货日期:2006-02-1发货日期:2006-02-10图书编号:100012使用INSERT语句把该记录插入到订单表中,SQL语句如下:INSERTINTO订单(订单编号,读者编号,订货日期,发货日期,图书编号);

VALUES("200601","10001",CTOD("02-1-06"),CTOD("02-10-06"),"100012")

2023/3/20264.3.2UPDATE命令UPDATE语句用来更新表中的记录。命令格式:UPDATE<表名>SET<字段名1>=<表达式1>[,<字段名2>=<表达2>…][WHERE<逻辑表达式>]命令说明:UPDATE:指明要修改的记录的表的名称。SET:指明更新的字段名和字段值。WHERE:限定要修改的行,如果没有WHERE子句,该字段下的所有字段值都将被新值替换。2023/3/20274.3.2UPDATE命令(续)【例4.12】把第1章中创建的SJ表中“价格”大于30元且“页数”大于300的图书的“备注”改为“珍贵图书”,SQL命令如下:UPDATESJSETBZ="珍贵图书"WHEREJG>30ANDYS>300若把价格大于30元的或页数大于300页的图书的备注(bz)改为珍贵图书,SQL命令如下:UPDATESJSETBZ="珍贵图书"WHEREJG>30ORYS>300

2023/3/20284.3.3DELETE命令DELETE命令用来删除一行或者多行记录。命令格式:DELETEFROM<表名>WHERE<逻辑表达式>命令说明:FROM子句:指出将删除的目标表。WHERE<逻辑表达式>:指明被删除的记录满足的条件,若没有WHERE子句则删除所有记录。【例4.13】在第1章创建的SJ表中,把“价格”大于30元且“页数”大于300的图书记录删掉,SQL语句如下:DELETEFROMSJWHEREJG>30ANDYS>300

2023/3/20294.4查询和SELECT命令SELECT是数据查询命令。SELECT命令虽然属于数据操纵范围,但它是SQL的核心,在SQL命令中使用的是最多的,我们将它和查询单独作为一节。VFP6.0的查询设计器或SELECT-SQL语句可用来方便地检索存储在表或者视图中的信息。利用查询设计器可以搜索满足条件的记录,并且可将查询保存在.qpr文件中。2023/3/20304.4.1创建和添加查询1.启动查询设计器若要打开查询设计器,应首先打开一个要查询的数据库,然后采用以下方式之一:(1)“文件”菜单启动查询设计器(2)从“工具”菜单启动查询设计器(3)使用CREATEQUERY命令打开查询设计器2023/3/2031(1)“文件”菜单启动查询设计器从“文件”菜单中选择“打开”命令,启动“打开”对话框,并在对话框的“文件类型”中选择“项目”类型,再选取要打开的项目名称,最后单击“确定”按钮,出现项目管理器对话框。在项目管理器中选择“数据”选项卡,再选取“查询”选项。单击“新建”按钮,此时出现“添加表或视图”对话框,然后从数据库下拉列表框中选择待查询的数据库名称。再从“选定”栏中选择“表”或“视图”,本例选择了“表”。从“数据库中的表”列表框中选择要添加的表。重复这一步骤,直到选取了所需要的全部表。单击“关闭”按钮,返回“查询设计器”窗口,如图4-8所示。2023/3/2032(1)“文件”菜单启动查询设计器(续)图4-8查询设计器2023/3/2033(2)从“工具”菜单启动查询设计器在VFP6.0主菜单中,选择“工具”,指向“向导”,选择“查询”,弹出“向导选取”对话框,再选择“查询向导”,可根据查询向导的提示创建查询。(3)使用CREATEQUERY命令打开查询设计器在命令窗口中输入CREATEQUERY即可打开查询设计器。2023/3/20342.创建查询(1)查询设计器查询设计器的窗口如图4-8所示。在查询设计器上半部分的窗口中,列出用户已选定的要查询的表或视图。表或视图之间的连线表示表之间的连接关系。查询设计器下半部分的窗口中有6个选项卡:“字段”:选定包含在查询结果中的字段。“联接”:确定各数据表或视图之间的连接关系。“筛选”:相当于命令SETFILTERTO,利用过滤的方法查找一个特定的数据子集。“排序依据”:决定查询结果输出中记录或行的排列顺序“分组依据”:所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组的计算。“杂项”:指定是否要对重复记录进行检索,同时是否对记录(返回记录的最大数目或最大百分比)做限制。

2023/3/2035(2)创建查询的步骤1)按上面介绍的方法打开查询设计器。2)添加出现在查询结果中的表或视图。如本例已打开“图书馆管理”数据库,并已选择添加了Dz.dbf、Jy.dbf和Sj.dbf三个表。3)选定要包含在查询结果中的字段。在“字段”选项卡中,从可用字段列表框中选择需要的字段,即单击需要的字段,再单击“添加”按钮;或者双击需要的字段。4)如果要“可用字段”列表框中的全部字段都包含在查询结果中,可单击“全部添加”按钮;单击“全部移去”按钮,则将已选定的字段(列于选定字段列表框中)全部作废。此时单击“运行”按钮即可看到查询结果。5)保存查询。从“文件”菜单中选择“保存”命令,打开如图4-9所示的“另存为”对话框中,在“保存类型”下拉框中选择“查询”类型,在“保存文档为:”文本框中输入查询文件名,本例取名为“读者借阅”,然后单击“保存”按钮即可。

2023/3/2036(2)创建查询的步骤(续)图4-9“另存为”对话框2023/3/2037(2)创建查询的步骤(续)【例4.14】查询书籍表中的部分信息。将Sj.dbf表添加到查询设计器中,即只对Sj.dbf表操作。操作如下:1)首先打开“图书馆管理”数据库,然后打开查询设计器,添加表Sj.dbf。2)选定要包含在查询结果中的字段。方法是在“字段”选项卡中,从可用字段列表框中选择需要的字段,即单击需要的字段,再单击“添加”按钮;或者双击需要的字段。图4-10列出了本例选择的全部字段。3)单击“运行”按钮得到查询结果,如图4-11所示。

2023/3/2038(2)创建查询的步骤(续)4)保存查询结果。单击“文件”菜单的“保存”命令,打开“保存”对话框,将查询结果保存。

图4-10例4.14图图4-11例4.14的查询结果2023/3/2039(2)创建查询的步骤(续)【例4.15】统计表Sj.dbf中记录书籍的价格、页数和书名等信息。为完成统计所有书籍的价格和页数的查询,应将Sj.dbf表添加到查询设计器中。由于本例只要求统计所有书籍的价格和页数,因此只需要选择书籍名称、价格和页数三个字段即可。选择所需的字段后,单击“查询”按钮即可看到查询结果,如图4-12所示。图4-12例4.15的“书籍价格”查询结果2023/3/20403.创建SELECT-SQL语句(1)认识SELECT-SQL语句利用查询设计器可以方便地创建查询而SELECT-SQL则是一个功能更强大的查询工具,它可直接从一个或多个表中检索数据,其查询结果可用于创建报表、BROWSE或新的数据库表或是临时表,并且SELECT-SQL语句可直接加入到程序中。利用查询设计器创建查询时,系统会自动创建相应的SQL查询语句。单击“查询设计器工具栏”上的“显示SQL窗口”按钮,如图4-13所示,可打开SQL窗口,窗口中所列出的语句就是刚刚利用查询设计器创建的与查询相对应的SQL语句。2023/3/20413.创建SELECT-SQL语句(续)表4-3所列是上两例使用查询设计器创建查询得到的SQL语句。在命令窗口中键入MODIFYCOMMANDexample命令,打开程序编辑窗口,再输入下述命令,可得到与使用查询设计器相同的查询结果。1)在命令窗口中输入任一SELECT-SQL语句,然后按Ctrl+W键保存所输入的内容。2)DOexample例4.14的SELECTSQL语句例4.15的SELECTSQL语句

SELECTsj.sjbh,sj.sjmc,sj.sjzz,sj.cbs;FROM图书馆管理!sjSELECTsj.sjmc,sj.jg,sj.ys;FROM图书馆管理!sj表4-3查询设计器创建的SELECTSQL语句图4-13查询设计器工具栏2023/3/2042(2)SELECT-SQL语句的语法格式SELECT[ALL|DISTINCT][TOPnExpr[PERCENT]][Alias.]Select_Item[ASColumn_Name][,[Alias.]Select_Item[ASColumn_Name]...]FROM[FORCE][DatabaseName!]Table[[AS]Local_Alias][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOINDatabaseName!]Table[[AS]Local_Alias][ONJoinCondition…][[INTODestination]|[TO[ADDITIVE]|TOPRINTER[PROMPT] |TOSCREEN]][PREFERENCEPreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHEREJoinCondition[ANDJoinCondition...][AND|ORFilterCondition[AND|ORFilterCondition...]]][GROUPBYGroupColumn[,GroupColumn...]][HAVINGFilterCondition][UNION[ALL]SELECTCommand][ORDERBYOrder_Item[ASC|DESC][,Order_Item[ASC|DESC]...]]2023/3/2043(2)SELECT-SQL语句的语法格式(续)SELECT-SQL语句相当复杂,它既可以用于单表的查询,也可以用于多表的查询。1)SELECT子句:在SELECT子句中指定在查询结果中包含的字段、表达式。2)FROM子句:指定所有从中检索数据的表。如果表没有打开,VFP6.0显示“打开”对话框,以便指定文件位置。表打开以后,直到查询结束时才关闭。如果包含FORCE关键字,则在建立查询时会严格按照FROM子句中描述的顺序连接表;若不包含FORCE关键字,则对查询进行优化。使用FORCE关键字,可加快查询速度。DatabaseName!用来指定数据的名称。当包含表的数据库不是当前数据库时,必须指定数据库名称,并且应在数据库名称之后表名之前加上感叹号(!)分隔符。例如,“图书馆管理!sj”表示数据管理数据库的sj表。

2023/3/2044(2)SELECT-SQL语句的语法格式(续)【例4-16】对图书馆管理数据库,使用FROM子句,查看所有读者的编号、姓名和性别。其中,SELECT子句指定要查询的字段名称,dz.dzbh、dz.dzxm和dz.dzxb分别对应dz表中的编号、姓名和性别。FROM子句表示要查询的字段来自“图书馆管理”数据库的dz表。SELECTdz.dzbh,dz.dzxm,dz.dzxb;FROMdz注意:下面的SELECT语句和上面的语句具有相同的效果:SELECTdz.dzbh,dz.dzxm,dz.dzxb;FROM图书馆管理!dz

2023/3/20454.定义查询结果(1)使用排序选项排序能决定查询输出结果中记录或行的顺序。例如,可按书籍的价格以升序或降序方式对书籍记录进行排序。利用排序依据选项卡可设置查询的排序次序。在“排序依据”选项卡中,“选定字段”可选择要用来排序的关键字段。选定后,添加到“排序条件”框,“排序条件”框中字段的次序决定了查询结果排序时的条件,第一个字段决定了主排序次序,其余字段决定了第二排序次序。例如,在“排序条件”框中的字段顺序是sj.jg、sj.ys,则查询结果将首先按sj.jg进行排序,如果sj表中有一个以上的记录具有同样的jg字段值,这些记录则再按ys进行排序。

2023/3/20464.定义查询结果(续)【例4.17】建立查询按书籍价格从低到高排序。观察例4.15的查询结果,可以发现其结果并没有完全按书籍价格的高低输出,若要使输出按书籍价格从低到高排列,可按以下步骤操作:1)打开查询设计器,首先选择“排序依据”选项卡。其中,“选定字段”列出了可用来排序的字段,供用户选择,“排序条件”是用户已选择好的用来排序的字段。2)从“选定字段”框中选定用来排序的字段,由于本例要按书籍价格从小到大的顺序排序,所以应选择字段sj.jg,然后单击“添加”按钮,把它移到“排序条件”框中。3)从“排序选项”的两个单选按钮“升序”和“降序”中选择一个,本例选择“升序”。

4)单击常用工具栏中的“运行”按钮。将查询结果同例4.15比较。2023/3/20474.定义查询结果(续)对查询结果进行排序时,在对应的SELECT-SQL命令中可包括ORDERBY子句,它的格式如下:ORDERBYOrder_item[ASC|DESC]其中,Order_item是排序条件框中选定的排序字段,字段间用逗号(,)分隔。另外,Order_item也可以是一个数字表达式,表示查询结果中列的位置(最左边列的编号为1)。ASC指定查询结果根据排序以升序排序,DESC指定以降序排列,缺省时为升序。如果不使用ORDERBY子句指定查询结果的排列顺序,则查询结果不排序。例4.17对应的SELECT-SQL语句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM图书馆管理!sjORDERBYsj.jg2023/3/2048(2)给字段添加说明标题为使查询结果易于阅读和理解,可以给字段添加说明标题,又称别名。给前面设计的“书籍价格”添加说明标题,操作步骤如下:1)打开“书籍价格”查询。2)在“函数和表达式”文本框中键入字段名,接着输入AS和说明标题,如下所示:sj.sjmcAS书籍名称3)单击“添加”按钮,在“选定字段”框中放置带有别名的字段。4)重复步骤2)、3),分别给sj.jg和sj.ys添加说明标题“书籍价格”和“书籍页数”。5)单击“运行”按钮,查询结果中各字段名称已变成相应的汉字说明。对应的SELECT语句如下:SELECTsj.sjbhAS书籍编号,sj.jgAS书籍价格,sj.ysAS书籍页数;FROM图书馆管理!sj2023/3/2049(3)使用选择条件选择数据库或表中符合条件的一部分记录而不是全部记录是查询的重要任务。例如,要查询一定日期范围内的借书记录、查询所有女性读者的基本情况等。在查询设计器中,“筛选”选项卡可确定用于选择记录的字段和比较准则,以及输入与该字段进行比较的示例值。设置筛选条件是指设置筛选的逻辑表达式,这个表达式由字段、操作符和数值组成。逻辑表达式主要有下述形式:字段操作符表达式其中,字段是要查询的表中的字段。操作符的含义及使用示例如表4-4所示。2023/3/2050(3)使用选择条件(续)在表4-4中,Like筛选操作符的含义是查找每个与字符表达式相匹配的字段。在字符串表达式中可使用百分号“%”和下划线“_”通配符,下划线表示字符串中的任意一个字符,百分号表示任意长度的字符串。

操作符比较关系举例=相等xk.cj=60,xk.kcbm='02'==完全相等xk.cj==60,xk.kcbm=='02'Like不精确匹配xk.xhLIKE"19964%",查询所有学号前五位是“19964”的学生>大于xk.cj>60,xk.kcbm>'02'>=大于等于xk.cj>=60,xk.kcbm>='02'<小于xk.cj<60,xk.kcbm<'02'<=小于等于xk.cj<=60,xk.kcbm<='02'表4-4操作符及其举例2023/3/2051(3)使用选择条件(续)在“实例”文本框中,输入比较条件时需要注意以下几点:1)仅当字符串与待查询表中字段名相同时,用引号括起字符串;否则,无需用引号括起字符串。2)日期也不必用花括号括起来。3)逻辑值的前后必须使用句点号,如.T.。4)若输入查询中表的字段名,VFP就将它识别为一个字段。在搜索字符型数据时,如果想忽略大小写匹配,应选择“大小写”下面的按钮。当需要多个筛选条件时,需要在“筛选”卡中加进多个语句(多个行)。各个筛选条件之间使用.AND.和.OR.连接,即“筛选”选项卡中的“逻辑”下拉列表。当有多个筛选条件且“逻辑”选项设置为“无”时,系统自动加入.AND.值。当想否定设置的筛选条件时,选择“否”按钮。例如,筛选条件sj.jg>=30,选择“否”按钮后,变为sj.jg<30。2023/3/2052(3)使用选择条件(续)【例4.18】在例4.15的“书籍价格”查询中,筛选出价格在30元以上的书籍。1)打开“书籍价格”查询,并选择“筛选”选项卡。2)在“字段”下拉列表中选择sj.jg字段。3)在“条件”下拉列表中选择>=操作符。4)在“实例”文本框中输入30。对应的SELECT语句如下:SELECTsj.sjmcAS书籍名称,sj.jgAS书籍价格,sj.ysAS书籍页数;FROM图书馆管理!sj;WHEREsj.jg>=302023/3/2053(3)使用选择条件(续)【例4.19】在例4.15创建的“书籍价格”查询中,使用LIKE操作符,筛选出书籍名为软件工程的记录。1)打开“统计学生成绩”查询,并选择“筛选”选项卡。2)在“字段”下拉列表中选择sj.sjmc字段。3)在“条件”下拉列表中选择LIKE操作符。4)在“实例”文本框中输入“软件工程”。对应的SELECT语句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM图书馆管理!sjWHEREsj.sjmcLIKE"软件工程"2023/3/2054(4)多个筛选条件的组合使用实际使用中,经常需要查询某一范围内的记录。例如,书籍价格在30元以下或者50元以上的所有书籍,或者书籍页数在300页以上且价格在40元以上的书籍等。由于可能同时需要输入两个筛选条件,因此需要考虑筛选条件之间的关系问题。在VFP中,筛选条件间共有三种关系,即与(and)、或(or)和否(not)。例如,“书籍价格在30元以下或者50元以上”可写成sj.jg<=30orsj.jg>=50,而“书籍页数在300页以上且价格在40元以上的书籍”可写成sj.ys>=300andsj.jg>=40。在“筛选”选项卡中,可同时输入多个筛选条件,每一个筛选条件占一行,行与行之间的缺省逻辑关系是“与”(AND),当选择其他关系时,可通过逻辑项对应行的列表来选择。

2023/3/2055(4)多个筛选条件的组合使用(续)【例4.20】设置“与”筛选条件。前面已经分析过,“书籍页数在300页以上且价格在40元以上的书籍”,可看成两个筛选条件的组合,即sj.ys>=300andsj.jg>=40。首先建立筛选条件sj.ys>=300,然后再建立另一个筛选条件sj.jg>=40。由于两个筛选条件之间是“与”的关系,因此不用设置“逻辑”选项。对应的SELECT语句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM图书馆管理!sjWHEREsj.ys>=300andsj.jg>=40

2023/3/2056(4)多个筛选条件的组合使用(续)【例4.21】设置“或”(OR)筛选条件。统计“书籍价格在30元以下或者50元以上”的所有书籍,其筛选条件可写成sj.jg<=30orsj.jg>=50。在“筛选”选项卡中首先建立两个筛选条件,第一个是sj.jg<=30,第二个筛选条件是sj.jg>=50。由于两个筛选条件是“或”关系,因此,还要在第一个筛选条件对应的“逻辑”下拉列表中选择OR运算符。对应的SELECT语句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM图书馆管理!sjWHEREsj.jg<=30ORsj.jg>=502023/3/2057(4)多个筛选条件的组合使用(续)【例4.22】设置“非”(NOT)筛选条件。查询“所有书名不是‘软件工程’的书籍”。考察“所有书名不是‘软件工程’的书籍”和“所有书名是‘软件工程’的书籍”是互为否定的。“所有书名是‘软件工程’的书籍”可写成“LIKE”软件工程“”,可先设置筛选条件“LIKE”软件工程“”,然后单击该筛选条件行对应的“否”按钮。对应的SELECT语句是:SELECTsj.sjmc,sj.jg,sj.ys;FROM图书馆管理!sjWHEREsj.sjmcNOTlike"软件工程"2023/3/20585.定向输出查询结果VFP允许查询结果以不同的形式输出。例如,可输出到文件、打印机、临时表和屏幕等。缺省形式是将查询结果显示在浏览窗口中。选择查询结果输出形式的方法是:(1)从“查询”菜单中选择“查询去向”命令,打开“查询去向”对话框,如图4-14所示。打开该对话框的另一个方法是在“查询设计器”工具栏中单击“查询去向”按钮。(2)“查询去向”对话框中列出了7个查询结果的输出形式,且均以按钮形式给出。选择需要的按钮,并单击“确定”按钮即可。

图4-14“查询去向”对话框2023/3/20595.定向输出查询结果(续)定向输出对应的SELECT子句是INTODestination子句。表4-5为该子句常用格式。如输出到临时表“学生成绩清单”中可写成“INTOCURSOR学生成绩清单”,输出到活动窗口中,可写成TOSCREEN。如果只想暂时保存结果,可将它们发送到数组或临时表中。若要永久保存结果,将它发送到一个表中。查询结果输出形式SELECT子句格式独立的表INTOTABLE表名称数组INTOARRAY数组名称临时表INTOCURSOR临时表名称活动窗口TOSCREEN浏览窗口系统缺省值表4-5定向输出查询结果子句形式2023/3/20604.4.2运行查询1.运行查询在完成了查询设计并指定了输出目的地后,可以单击“运行”按钮启动该查询,也可以在命令窗口使用DO命令。例如,运行“数籍价格”查询,可在命令窗口输入:DO书籍价格.qpr

2023/3/20612.分组查询(1)分组查询。所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组记录的计算。【例4.23】将读者按家庭住址分组。操作步骤如下:1)新建一个“按读者住址查询”,选择读者表的所有字段。2)选择“分组依据”选项卡,选择dz.jtzz,并单击“添加”按钮。3)为保证分组正确,在“排序依据”选项卡中设置排序条件。例如dz.dzbh。4)运行查询,结果如图4-15所示。

2023/3/2062(1)分组查询(续)【例4.24】统计在书籍表中每个出版社出版的书籍的数目。操作步骤如下:1)建立一个查询,选择sj表中的所有字段,在“分组依据”选项卡中选择sj.cbs,在“排序依据”选项卡中选择sj.sjbh。2)在“字段”选项卡中,在“函数和表达式”框中输入“count(sj.cbs)as数量”,并单击“添加”按钮。3)运行查询,其结果如图4-16所示。图4-16统计出版社的出版数量2023/3/2063(2)为查询增加计算字段【例4.25】统计每个出版社的所出书中价格最低的书籍,可按如下步骤操作:1)创建一个查询,选择书籍表中的sj.sjmc、sj.sjzz、sj.jg,sj.ys。2)选择“字段”选项卡,在“函数和表达式”文本框中输入“MIN(sj.jg)AS最便宜的图书”。3)单击“添加”按钮。4)选择“分组依据”选项卡,选择sj.cbs,并单击“添加”按钮。5)若需要排序,此时可在“排序依据”选项卡中设置排序条件,如sj.ys。

“MIN(sj.jg)AS最便宜的图书”是一个函数表达式,在查询结果中以“最便宜的图书”名称给出。此列不是表中原有的字段,而是在生成查询的过程中经过计算得到的,又称为计算列或计算字段。2023/3/2064(2)为查询增加计算字段(续)VFP提供了“字符串、数学、逻辑和日期”4类函数。表4-6列出了在SELECT-SQL中经常使用的列函数。列函数均产生一个单值,因此以下查询求出所有图书的总价格。SELECTsj.mcsj.jgsj.sjbhSUM(sj.jg)AS总价格;FROMsj函数功能AVG(列名)求出指定列上的平均值,只适用于数字类型的列SUM(列名)求出指定列上的和。只适用于数字类型的列MIN(列名)求出指定列上的最小值。列可以是数字型、字符型或日期型MAX(列名)求出指定列上的最大值,列可以是数字型、字符型或日期型COUNT(列名)求出指定列上的值的出现个数表4-6常用列函数2023/3/2065(2)为查询增加计算字段(续)在“函数和表达式”文本框中输入函数可以使用表达式生成器,单击“函数和表达式”文本框旁的“...”按钮可启动表达式生成器,如图4-17所示。在表达式生成器中,有“字符串、数学、逻辑和日期”4类函数,每一类函数对应一个下拉列表,在列表中可选择相应的函数,然后再输入相应的变量。图4-17表达式生成器2023/3/2066(2)为查询增加计算字段(续)例,“SUM(sj.jg)AS总价格”函数的输入方法如下:1)在“数学”下拉列表中选择SUM函数,表达式文本框中出现SUM(expN)。2)选取expN。3)在“字段”列表框中选择需要的字段变量或从键盘输入相应的表达式,例如si.jg以便代替expN。4)在“表达式”文本框的SUM函数后添加“AS总价格”,将表达式修改成“SUM(sj.jg)AS总价格”。5)单击“检验”按钮可检验输入的表达式的正确性,若正确无误后,可单击“确定”按钮,返回查询设计器。此时在“函数和表达式”框中出现“SUM(sj.jg)AS总成绩”。6)单击“添加”按钮,“总成绩”项将出现在查询结果中。2023/3/2067(2)为查询增加计算字段(续)【例4.26】已知sj表,可以使用AVG()列函数求每个出版社的书籍的平均价格。下面给出SELECT语句:SELECTsj.mc,sj.jg,sj.ys,sj.sjzz,;AVG(sj.jg)AS平均价格;FROMsj;GROUPBYsj.cbs;ORDERBYsj.sjbh【例4.27】在“统计平均价格”查询中,添加“总价格”列。相应的SELECT语句如下:SELECTsj.mc,sj.jg,sj.ys,sj.sjzz,;AVG(sj.jg)AS平均价格,SUM(sj.jg);FROMsj;GROUPBYsj.cbs;ORDERBYsj.sjbh

2023/3/20683.筛选分组WHERE、HAVING子句都能为查询提供过滤条件。一般来说,HAVING子句用来过滤GROUPBY后的分组结果,用WHERE子句过滤一般表的元组。下面SELECT语句输出家住在北京且读者编号小于2006005的读者记录。SELECTDz.dzbh,Dz.dzxm,Dz.jtzz,Dz.dznl;FROM图书馆管理!dz;WHEREDz.jtzz="北京"ANDDz.dzbh<"20060005"; GROUPBYDz.dzbh; ORDERBYDz.dzbh如果要查询年龄小于等于30的读者,可继续修改SELECT语句:SELECTDz.dzbh,Dz.dzxm,Dz.jtzz,Dz.dznl;FROM图书馆管理!dz;WHEREDz.jtzz="北京"ANDDz.dzbh<"20060005"; GROUPBYDz.dzbh; ORDERBYDz.dzbh;HAVINGDz.dznl<=30

2023/3/20694.查询多个表数据库中的表之间的关系可由表间的公共字段体现。例如,“图书馆管理”数据库中,表dz.dbf、jy.dbf和sj.dbf、dz.dbf和jy.dbf之间由公共字段dzbh相连接,jy.dbf和sj.dbf之间由公共字段sjbh相连接。当需要获取存储在两个或更多表或视图中的信息时,需要指出这些表或视图之间的连接关系。使用SELECT-SQL的INNERJOIN子句可完成表间的连接。2023/3/20704.查询多个表(续)在VFP中,表之间的连接有4种类型,如表4-8所示。

连接类型查询内容(条件)内部连接(INNER)两个表中仅满足条件的记录,这是最普通的连接类型左连接表中在连接条件左边的所有记录,和表中连接条件右边的且满足连接条件的记录右连接表中在连接条件右边的所有记录,和表中连接条件左边的且满足连接条件的记录完全连接表中不论是否满足条件的所有记录表4-8表间联接类型及使用条件2023/3/20714.查询多个表(续)在多表间建立查询和单表基本相同,惟一不同的是要指明表间的关系。【例4.28】统计借书的读者和他们所借的书籍,要求包括“读者姓名”和“书籍名称”等字段。1)首先打开“图书馆管理”数据库,然后打开查询设计器。因为本例要求包含“读者姓名”和“书籍名称”,故需添加dz.dbf、sj.dbf和jy.dbf三个表。2)选定要包含在查询结果中的字段。在“字段”选项卡中,从“可用字段”列表框中选择需要的字段,单击这些字段,再单击“添加”按钮;或者双击需要的字段。相应的SELECT语句是:SELECTDz.dzxm,sj.sjmc,Jy.cjrq,Jy.sjbh;FROM图书馆管理!dzINNERJOIN图书馆管理!jy; INNERJOIN图书馆管理!sj; ONsj.sjbh=Jy.sjbh; ONDz.dzbh=Jy.dzbh2023/3/20724.查询多个表(续)图4-18列出了上例选择的全部字段。单击“运行”按钮可看到例4.28的查询结果,如图4-19所示。图4-18例4.28选定的字段图4-19例4.28查询结果2023/3/20734.5报表和标签报表和标签是将需要的数据表格化的重要工具。本节主要介绍如何快速创建报表,并将应用程序有机地连接起来。2023/3/20744.5.1VisualFoxPro的报表和标签报表包括两个基本组成部分:数据源和布局。数据源通常是数据库中的表,或是视图、查询或临时表。报表布局定义了报表打印格式。在定义表和视图或查询后,便可创建报表或标签。创建报表的过程包括定义报表的样式并指定数据源。系统将报表样式保存在报表文件中,报表文件的扩展名为.frx,其相关文件是.frt。报表文件指定了想要的字段、要打印的文本(数据源)及数据在页面上的位置。报表文件不存储每个数据字段的值,只存储特定数据库或表中各字段值在报表中的位置和格式信息。标签的创建过程和创建报表基本相同,标签保存在.lbx文件中,相关文件为.lbt。2023/3/20751.创建报表布局创建报表之前,首先应该确定报表的常规格式,系统提供了几种基本的报表布局,列报表、行报表、一对多报表、多栏报表和标签。每种报表布局的一般用途如表4-8所示。用户可以使用“报表设计器”进行修改布局,直至符合用户的要求为止。布局类型说明示例列报表每行一条记录,每条记录的字段在页面上按水平方向放置分组/总计报表、财政报表、存货清单和销售总结行报表每列一字段,每条记录的字段在一侧竖直放置列表一对多一条记录或一对多关系发票多列多列记录,每条记录的字段沿左边缘竖直放置电话号码薄,名片标签多列的记录,每条记录的字段左边缘竖直放置,打印在特殊纸上邮件标签,名签表4-8报表常规布局及用途2023/3/2076(1)用报表向导创建报表VFP6.0提供了3种方法创建报表布局:用报表向导创建简单的单表或多表的布局用快速报表从单表中创建一个简单报表用报表设计器修改已有的报表或创建自己的报表。每种方法创建的报表布局文件都可以用“报表设计器”进行修改。“报表向导”是创建报表的最简单途径,它自动提供很多“报表设计器”的定制功能。“快速报表”是创建简单布局的最迅速途径。直接在“报表设计器”内创建报表,“报表设计器”提供一个空白布局。2023/3/2077(2)用“快速报表”命令创建报表详细步骤如下:1)在“文件”菜单中选择“新建”命令,打开“新建”对话框,并在该对话框中选择“报表”单选按钮,然后单击“新建文件”命令按钮。此时将打开“报表设计器”,同时在菜单中增加“报表”菜单项,如图4-20所示。2)在“报表”菜单中选择“快速报表”命令,此时出现“打开”对话框,用户可在此对话框中选择报表要使用的表或视图。例如选择dz.dbf表。3)选择完报表要使用的数据源后,系统出现“快速报表”对话框,如图4-21所示。在“快速报表”对话框中,提供了简单的字段布局,例如列布局或行布局。2023/3/2078(2)用“快速报表”命令创建报表(续)4)可在字段布局、标题和别名选项中做出选择。如果不想让表中的所有字段全部出现在报表中,可单击“字段”按钮,在字段选择器对话框中选择适当的字段后,单击“确定”按钮,返回“快速报表”对话框。5)在“快速报表”对话框中单击“确定”按钮返回报表设计器。用户所做的选择反映在报表设计器中。用户可在报表设计器中继续修改报表,直至符合要求为止。图4-20“报表”菜单项图4-21“快速报表”对话框2023/3/2079(3)使用报表设计器创建报表报表设计器可用来设计报表布局,规划数据在页面上的打印位置以及添加各种组件。可通过“文件”菜单的“新建”命令,打开一个具有空白报表的报表设计器;也可以通过“文件”菜单的“打开”命令,打开一个已存在的报表。图4-22是报表设计器窗口。图4-22报表设计器窗口2023/3/2080(3)使用报表设计器创建报表(续)【例4.29】已知有dz.dbf表,请设计一个报表,显示读者信息。1)打开报表设计器2)单击“报表”菜单的“快速报表”命令。3)选择需要的表。本例选择表dz.dbf,此时已生成了一个简单的表。单击“打印预览”按钮可看到运行结果。2023/3/2081(4)报表带区VFP将报表的不同部分定义成不同的带区,不同的带区可根据需要在报表设计器中进行增加或取消。图4-22中列出了报表完整的带区,表4-9给出了这些带区的用途。名称用途添加方法标题每报表出现一次,用来放置标题、日期、页码、公司标志或围绕标题的各种式样的框从“报表”菜单中选择“标题/总结”带区页标头每页面出现一次,用来放置日期、页码和列标题默认组标头每组出现一次,组标头个数和分组数相等,用来放置分组字段和分隔线等从“报表”菜单中选择“数据分组”细节带区每记录出现一次,用来放置数据和说明性文本等默认组注脚区每组出现一次,用来放置分组总计、小计文本等从“报表”菜单中选择“数据分组”页注脚每页面出现一次,用来放置日期、页码、分类总计及说明性文本等默认总结每报表出现一次,用来放置有关总计文本从“报表”菜单中选择“标题/总结”带区表4-9报表带区用途2023/3/20822.打开报表布局利用下面的命令可打开如图4-22所示的报表设计器:MODIFYREPORT报表名称其中,报表名称文件的扩展名是.frx。已创建的报表布局不符合设计要求时,可利用报表设计器修改。用报表设计器可更改数据环境、页面设置或报表控件。数据环境定义了报表中将包含的数据源,而页面设置定义了报表页面和报表带区的总体形状,报表控件定义了出现于页面上的数据项。

修改报表布局主要包括设置报表数据环境,修改报表带区,修改或添加控件,调整控件位置和大小,定义字段格式,更改报表中的字体,添加线条、矩形和圆形,向报表添加图片,向报表添加注释、在布局上分组数据等。2023/3/20833.报表控件的使用(1)控件工具栏在报表设计器中可插入各种控件,包括标签、字段、变量和表达式。如图4-23所示是报表设计器中的控件工具栏。表4-10列出了报表控件及其作用。控件名称作用域用来显示表的字段、变量和其他表达式标签用来显示文本线条用来显示直线矩形用来显示框和边界圆角矩形用来显示圆、椭圆、圆角矩形和边界图片/ActiveX用来显示位图或通用字段表4-10报表控件名称及作用图4-23控件工具栏2023/3/2084(2)添加域控件可以采用以下方式之一添加域控件:1)从数据环境中添加字段。在报表设计器中,打开报表数据环境,选择需要的表或视图,并将需要的字段拖放到报表布局上。2)从工具栏添加字段。在报表控件工具栏中:选择“域控件”,弹出如图4-24所示的报表表达式对话框;然后在“报表表达式”对话框中,选择“表达式”框后的“…”按钮,出现“表达式生成器”对话框,如图4-25所示。在“表达式生成器”对话框的“字段”列表框中,列出了已添加到数据环境中的表或视图中包含的字段,双击想要的字段名。表名和字段名将出现在“报表字段的表达式”框内;最后,单击“检验”按钮,可检验表达式的正确性。2023/3/2085(2)添加域控件(续)图4-24“报表表达式”对话框图4-25“表达式生成器”对话框

2023/3/2086(3)选择和移动报表控件可通过移动或者改变的大小来调整报表布局上已存在控件的布局。选择控件的方法是:1)选择单个控件:单击控件,已选择的控件周围会出现若干个黑色控点。2)选择多个控件:按住Shift键,单击要选择的控件或者在控件周围拖动,将需要选择的控件均置于拖出的方框中。已选择的多个控件可一起移动、复制、删除或改变格式。控件在布局内移动位置的增量并不是连续的。增量取决于网格的设置。按住Ctrl键再拖动控件时,则可忽略网格的作用。2023/3/2087(4)调整控件大小1)手动调整控件大小:首先选择要调整大小的控件,然后将鼠标指针指向控件周围的控点,最后拖动即可。2)自动匹配控件大小:先选定这些控件,再单击“格式”菜单中的“大小”命令。“大小”命令中提供了5种调整控件的方法,分别是“对齐网格”、“调整到最高”、“调整到最窄”、“调整到最宽”、“调整到最短”,可按照需要选择,系统自动匹配控件大小。2023/3/2088(5)对齐报表控件将彼此有关系的控件相互对齐,以便它们能整齐地显示或打印在表格中。VFP6.0中提供了若干种对齐选项,主要有左对齐、右对齐、底对齐和顶对齐等13种,如图4-26所示。按先选取要对齐的控件再单击控件工具栏中的相应对齐按钮的方法操作。图4-26布局工具栏2023/3/20894.报表分组系统允许在一个报表中添加一个或多个组,已建立的分组可根据需要改变组的顺序,重复组标头或者更改或删除组带区。报表分组之后,报表布局就有了组标头和组注脚带区,可向其中添加控件。组注脚通常包含组总计和其他组总结性信息。报表分组并不重排数据记录,只是按记录原来的顺序进行分组,而不会将表中所有具有相同分组特性的记录分在一个组。报表内最多可定义20级数据分组。嵌套分组有助于组织不同层次的数据和总表达式。2023/3/2090(1)添加单个组一个单组报表具有基于输入表达式的一级数据分组。例如,在前面建立的dz表中,按读者性别进行分组,即将女读者放在一组,男读者放在另一组。1)从“报表”菜单中选择组,打开“数据分组”对话框。2)在“数据分组”对话框中,输入分组表达式,或者单击分组表达式框后面的“…”按钮,在表达式生成器中输入分组表达式。本例的表达式是:dz.dzxb=“女”。3)在组属性区域中选定想要的属性。组属性主要用来为组指定页面分隔选项VFP6.0提供了4个选项。4)添加表达式后,可在带区内放置任何希望的控件。例如,说明性文字、求和、求平均值,以及求分组个数统计等。2023/3/2091(1)添加单个组(续)图4-27显示了增加组带区后的报表设计器画面,其中只选了读者表中的4个属性。图4-28是报表的运行结果。图4-27添加一个报表设计器图4-28本例的报表2023/3/2092(2)添加多个数据分组若要添加多个数据分组,可从“报表”中选择“数据分组”。在第一个“分组表达式”框下方键入新的分组表达式,然后在“组属性”区域选择想要的属性。分组顺序将利用“组注脚X”(其中X=1,2,3,...)来标识其次序。2023/3/2093(3)更改组带区若要更改分组表达式和组打印选项,可从“报表”菜单中选择“数据分组”,然后在“数据分组”对话框中选定要更改的分组表达式,并输入新的表达式。(4)删除组带区若要删除组带区,可从“报表”菜单中选择“数据分组”,选定希望删除的组,然后选择“删除”按钮,则该组带区将从布局中删除。2023/3/20945.使用标签向导标签是多列报表布局。在VFP6.0中,提供“标签向导”、标签设计器和语言三种方法创建标签。用户可根据标签向导提示逐步完成标签的布局设计。使用标签向导完成的标签布局不一定完全符合用户的要求,用户还可以使用“标签设计器”进行修改布局,直至符合用户的要求为止。2023/3/20956.标签设计器标签设计器是报表设计器的一部分,它们使用相同的菜单和工具栏。设计标签和设计报表的方法是一样的。详细请参见“报表设计”部分。2023/3/20967.预览报表报表在设计过程中或设计完成后,可通过报表预览查看报表的页面外观;检查数据列的对齐和间隔;查看报表是否返回希望的数据。可以采用以下方式之一预览报表:菜单方法。从“显示”菜单中选择“预览”,或单击“常用”工具栏中的“预览”按钮。命令方法。VFP6.0提供了命令方法预览报表或标签。命令格式如下:REPORTFORM报表名称PREVIEW2023/3/20978.打印报表可以采用以下方式之一打印报表:菜单方法:从“文件”菜单中选择“打印”命令,在弹出的“打印选项”对话框中,可配置有关打印机的属性、纸张大小、打印份数和打印页码范围。命令方法:此方法可直接写入程序中。例如,将“读者表”报表送打印机打印,可执行下述命令:REPORTFORM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论