VFP第9部分(查询统计及扫描循环)解析
Visual FoxPro VF第9章 表单设计及应用(2)
8.2 创建与管理表单
8.2.3 表单生成器
在表单设计环境下,可以调用表单生成器快速地产 生表单。调用表单生成器的方法有以下3种: (1)在系统菜单中选择“表单”菜单下的“快速表单” 命令。 (2)单击“表单设计器”工具栏中的“表单生成器”按 钮。 (3)右键单击表单窗口,然后在弹出的快捷菜单中选择 “生成器”命令。
Visual FoxPro数据库应用教程 7
8.1 面向对象程序设计的概念
在VFP中,当对象被创建后,就可以调用这 个对象的方法了。为对象设置方法的命令格式 如下: <对象引用>.<方法> 【例8.2】调用当前表单的方法,使文本框Textl获 得焦点,然后刷新表单。 Thisform.Textl.Setfocus Thisform.Refresh
Visual FoxPro数据库应用教程
2
8.1 面向对象程序设计的概念
8.1.2 常用对象的基类、容器类与控件类
1.容器类 容器(Container)类是能够包含其他对象的类。 容器对象称为父对象,其包含的对象称为子对象。 2.控件类 控件(Control)是指容器类对象内的一个图形 化的、能与用户进行交互的对象。控件类对象不 能容纳其他对象,如命令按钮、选择按钮、复选 框、文本框、标签等控件对象。
4.代码窗口
图8.21 代码窗口
Visual FoxPro数据库应用教程
18
8.3 表单设计器
8.3.2 表单的数据环境
1.打开数据环境设计器 打开数据环境设计器的方法有以下几种: (1)在表单设计器环境下,选择“显示”菜单中的“数据 环境”命令。 (2)单击“表单设计器”工具栏中的“数据环境”按钮。 (3)右键单击表单,从快捷菜单中选择“数据环境”命令。 打开数据环境设计器后,系统菜单栏上将出现“数据环境” 菜单。 2.数据信息与数据环境
vfp第九讲
一.视图
视图设计器中各选项卡的功能 选择表:必须选择本数据库中的表或视图。 选择表:必须选择本数据库中的表或视图。 字段: 字段:从左侧的可用字段列表中选择视图中 希望出现的字段到右侧列表框中, 希望出现的字段到右侧列表框中,若没有现 成的字段,还可在下方的“函数与表达式” 成的字段,还可在下方的“函数与表达式” 中进行编写。 中进行编写。 联接:在数据库中已建立的联接会自动出现 联接: 在此,默认为内部联接, 在此,默认为内部联接,一般情况都使用此 类联接。还有左联接、右联接、完全联接。 类联接。还有左联接、右联接、完全联接。
三.视图与查询的比较
视图的创建与使用必须依赖于数据库,查询不需要; 视图的创建与使用必须依赖于数据库,查询不需要; 视图兼有表和查询的功能,可更新源表数据, 视图兼有表和查询的功能,可更新源表数据,而查 询不能; 询不能; 视图只能以表的形式输出, 视图只能以表的形式输出,查询可以有多种输出形 式; 视图只是个虚表,其中没有存储数据, 视图只是个虚表,其中没有存储数据,只存储视图 的定义,而查询会以.qpr为文件的后缀名真正地保 的定义,而查询会以 为文件的后缀名真正地保 存到指定位置中; 存到指定位置中; 要想看到视图结果,只须浏览视图表即可, 要想看到视图结果,只须浏览视图表即可,要看查 询的结果,需要先运行查询。 询的结果,需要先运行查询。
VFP数据的统计与查询
语法
MODIFY QUERY QueryFileName
这是查询文件 的名称,可不 加文件扩展 名 .qpr
第 18 页
共 18 页
目 录
上一步
下一步
关 闭
8-2-5 显示查询结果 4. 查看查询程序 可以随时在查询设计器中打开查询文件,然后在设计器窗口中编辑修改查 询文件。也可以用命令打开查询设计器,编辑一个已经存在的查询文件。
1. 菜单方式
第8页
共 18 页
目 录
上一步
下一步
关 闭
8-2-1 选择数据表 创建查询的目的无非是为了进行表的查询处理,因此启动查询 设计器以后的第一件事就是指定所要查询的表。 1. 未打开任何数据库
1. 未打开任何数据 18 页
目 录
上一步
下一步
关 闭
8-2 创建查询
8-2-1 8-2-2 8-2-3 8-2-4 8-2-5
选择数据表 选择要出现在查询结果中的字段 指定字段出现在查询结果中由左至右的顺序 检查查询设计情况与保存查询文件 显示查询结果
第1页
共 18 页
目 录
上一步
下一步
关 闭
8-3 统计和计算
8-3-1 添加统计计算字段 8-3-2 修改查询结果中列标题
语法 范例
DO QueryFileName
这是查询文件 的名称,您必 须加上文件扩 展名 .qpr
第 17 页
共 18 页
目 录
上一步
下一步
关 闭
8-2-5 显示查询结果 3. 编辑查询文件 可以随时在查询设计器中打开查询文件,然后在设计器窗口中 编辑修改查询文件。也可以用命令打开查询设计器,编辑一个已经 存在的查询文件;
Visual FoxPro 6.0程序设计与实现第9章 表单设计
25
VFP程序设计与实现
9.4.1 表单修改 1.方法一 用菜单方式修改表单 2.方法二 使用MODIFY FORM命令修改表单。 命令格式: MODIFY FORM <表单名>
26
VFP程序设计与实现
9.4.2 表单运行
1.方法一 用菜单方式运行表单 2.方法二 选择“常用”工具栏里的 ! 3.方法三 使用DO FORM命令运行表单。 命令格式: DO FORM <表单名>
16
VFP程序设计与实现
9.2.3 控件的操作 1.移动控件 2.缩放控件 3.删除控件 4.复制控件 5.在表单上画多个同类控件 6.调整和对齐控件
17
VFP程序设计与实现
9.2.4 设置Tab键顺序
运行表单时可以利用交互方式和列表方式来确定 表单中的控件获得焦点的次序,设置方法是:单 击菜单中的“工具”“选项”命令,再单击“选 项”对话框中的“表单”选项卡,从“Tab键次序” 下拉列表框中选择“交互”或“按列表”。
选择表单样式
排序次序
完成
5
运行结果
VFP程序设计与实现
2.创建一对多表表单 【例9.2】利用一对多表单向导,设计教师综合情况表。
一对多表单向导
6
从父表中选定字段
VFP程序设计与实现
从子表中选定字段
建立表之间的关系
选择表单样式
7
排序次序
VFP程序设计与实现
完成
运行结果
8
VFP程序设计与实现
9.1.2 用表单设计器设计表单 1.创建的方法
3.设置数据环境 (1)向数据环境添加表或视图 (2)从数据环境移去表或视图 (3)在数据环境中设置关系
Visual FoxPro9.0中设计与使用查询
建立起了表后,使用Visual FoxPro 9的查询功能即可迅速地在屏幕上查看各记录,而且还可按用户所定义的方式来显示数据记录,这就是"查询"的用途,本文就将讲述创建"查询"的有关操作。
一、使用Query Wizard设计并制作查询一张表可以包含的字段与记录行可能很多,对于数据记录较丰富的表,在前面所述的"浏览窗口"中逐行浏览观看是费时又费力的工作,而且许多时候是并不会完整地浏览各行记录的,只了解其中的某些字段数据就行了,此时就可以考虑使用Visual FoxPro 9的查询功能,在屏幕上控制显示一个或者多个字段与记录,并且打印输出。
为此可启动Query Wizard(查询向导)来快速创建一个"查询",如按下面的步骤来操作即可建立一个这样的查询。
步骤一、参照前面的操作启动Visual FoxPro 9,并打开要查询的表。
接着,单击Standard 工具栏条中的New按钮。
然后在New对话框中打开Query单选按钮,参见图1。
图1 打开Query单选按钮步骤二、单击Wizard按钮后,参见图2,在Wizard Selection(向导选取)对话框中选定Query Wizard,然后单击OK按钮。
图2 选定Query Wizard此后,屏幕上就将显示Query Wizard,如图3所示。
图3 单击Open按钮步骤三、打开要查询的表后在Available Fields列表窗中选定要查询的字段,接着单击Add按钮,将它们添加到Selected fields列表窗中,如图4所示。
图4 将它们添加到Selected fields列表窗中步骤四、单击Next按钮。
下一步操作所用的对话框名为Step 3-Filer Records(步骤三-筛选记录),如图5所示。
查询一张数据"表"中的数据记录时,可能会仅看一看某些字段中的记录,这就需要对字段进行筛选,操作时可以使用下列步骤:步骤五、将光标对准Field字段下拉按钮。
vfp9基本命令
vfp9基本命令VFP9常用命令Set filter to 字段名= 按照条件查询浏览页面信息Set filter to 返回筛选前Dele for year(日期)<2010 删除2010年以前的数据DELETE ALL 删除预览页面所有信息Use 远程试图执行语句PACK 本地表执行语句Replace all 销售价with 单价*1.2Sort on 字段名to 新表名Replace all 材料名称with alltrim(材料名称) 字符型函数Replace all 零件号with upper(零件号) 小写转换成大写Replace all 规格with subs(零件号,1,3) 取零件号的前三位Replace all 登记日期with date() 替换登记日期为今天Replace all 序号with recno() 替换序号列为序号(从零开始排序)Append blank 增加一条空的记录Recall all 取消删除标志Replace all 零件号with alltrim (零件号) 删除零件号前面的空格Replace all 利润with 出库金额-单价*出库数量把利润从新进行替换Sum 出库金额for month(日期)=2 to chhj 统计2月份出库金额存入变量ckhj 中Set filter to 结算日期=ctod(‘09/29/2011’) 查询结算日期等11年09月29日Set filter to 结算日期ctod(‘01/01/2011’) 查询日期1月份和9月份之间的replace all 材料编码WITH SUBS(材料编码,1,1)+'5'+subs(材料编码,3,6)把材料编码的第二位替换成5 保留3到6位(只是替换材料编码的第二位)replace all 仓库WITH SUBS(仓库,0,1)+'5'把字段“仓库”全都替换成5查询材料编码第二位不等于仓库Set filter to subs(材料编码,2,1)<>alltrim(仓库)查询材料编码第二位等于几号仓库(例如:想查询3仓库)Set filter to subs(材料编码,2,1)=’3’如何查询人为的修改维护编码表Set filter to at(‘修改’, 备注1)<>0如何替换标志F 或是T (例如:替换结欠款标志把T 替换成F ) Replace all 结欠款标志WITH .F. FOR 结欠款标志=.T.如何替换日期在xccllk1 表了把结算日期替换成日期Replace all 结算日期WITH日期如何把某项内容替换为空例如把日期替换为空Replace all 结算日期WITH ’’Replace all 日期WITH ctod(‘01/01/2012’)销售价小数点后四舍五入(小数点后全部舍掉)replace all 销售价with round(销售价,0)销售价小数点后保留一位其余都四舍五入replace all 销售价with round(销售价,1)。
vfp9基本命令
VFP9常用命令Set filter to 字段名= 按照条件查询浏览页面信息Set filter to 返回筛选前Dele for year(日期)<2010 删除2010年以前的数据DELETE ALL 删除预览页面所有信息Use 远程试图执行语句PACK 本地表执行语句Replace all 销售价with 单价*1.2Sort on 字段名to 新表名Replace all 材料名称with alltrim(材料名称) 字符型函数Replace all 零件号with upper(零件号) 小写转换成大写Replace all 规格with subs(零件号,1,3) 取零件号的前三位Replace all 登记日期with date() 替换登记日期为今天Replace all 序号with recno() 替换序号列为序号(从零开始排序)Append blank 增加一条空的记录Recall all 取消删除标志Replace all 零件号with alltrim (零件号) 删除零件号前面的空格Replace all 利润with 出库金额-单价*出库数量把利润从新进行替换Sum 出库金额for month(日期)=2 to chhj 统计2月份出库金额存入变量ckhj 中Set filter to 结算日期=ctod(‘09/29/2011’) 查询结算日期等11年09月29日Set filter to 结算日期<ctod(‘09/29/2011’) and 结算日期>ctod(‘01/01/2011’) 查询日期1月份和9月份之间的replace all 材料编码WITH SUBS(材料编码,1,1)+'5'+subs(材料编码,3,6)把材料编码的第二位替换成 5 保留3到6位(只是替换材料编码的第二位)replace all 仓库WITH SUBS(仓库,0,1)+'5'把字段“仓库”全都替换成5查询材料编码第二位不等于仓库Set filter to subs(材料编码,2,1)<>alltrim(仓库)查询材料编码第二位等于几号仓库(例如:想查询3仓库)Set filter to subs(材料编码,2,1)=’3’如何查询人为的修改维护编码表Set filter to at(‘修改’, 备注1)<>0如何替换标志F 或是T (例如:替换结欠款标志把T 替换成F )Replace all 结欠款标志WITH .F. FOR 结欠款标志=.T.如何替换日期在xccllk1 表了把结算日期替换成日期Replace all 结算日期WITH日期如何把某项内容替换为空例如把日期替换为空Replace all 结算日期WITH ’’Replace all 日期WITH ctod(‘01/01/2012’)销售价小数点后四舍五入(小数点后全部舍掉)replace all 销售价with round(销售价,0)销售价小数点后保留一位其余都四舍五入replace all 销售价with round(销售价,1)。
VF辅导:vfp查询(query)
⽣成SQL语句:不论是使⽤向导还是使⽤"查询设计器",其结果都是⽣成⼀条SQL语句.可以通过选择"查询"菜单(或者快捷菜单)中的"查看SQL"菜单项或单击"查询设计器"⼯具栏上的"SQL"按钮,即可看到所⽣成的select-sql语句. ⼀般情况下,⽤查询设计器创建查询的⽬的是通过交互设置,⽣成SQL命令,然后复制下来,粘贴到应⽤程序中或保存到查询⽂件中.如果对select-sql⽐较熟悉,完全可以不使⽤查询. 3.⽣成查询⽂件:查询创建完成后,单击"常⽤"⼯具栏上"保存"按钮或"⽂件"下的"保存"命令,输⼊⽂件名,⽐如Query1,系统⾃动为该⽂件加上扩展名.QPR,即⽣成了查询⽂件Query1.QPR.该⽂件中保存的是SQL语句.运⾏查询:(1).在项⽬管理器打开的情况下,选择查询⽂件,单击"项⽬管理器"上的"运⾏"按钮.(2)在查询⽂件打开的情况下,单击"常⽤"⼯具栏上的"运⾏"按钮或"查询"菜单中的"运⾏查询"命令,即可运⾏查询.(3)在命令窗⼝或应⽤程序中⽤DO命令运⾏查询,例如:do Query1.QPR 例⼀:查询男⼥职⼯⼈数,⼯资总额及平均⼯资,并按平均⼯资降序排序.查询输出必须包括性别,⼈数,⼯资总额和平均⼯资. 分析:本例按性别进⾏分组,即把所有性别相同的记录压缩成⼀个记录.利⽤count(),sum()和avg()函数可以对每⼀组记录进⾏计数,求和及求平均值.另外还有max()是求值函数,min()是求最⼩值函数. 1.新建⼀个查询,选"职⼯档案"表,在"查询设计器"对话框的"字段"选项卡中将下列字段和表达式设置到"选定字段"列表框中, 向"选定字段"列表添加表达式"count(*) as ⼈数"的⽅法:在"函数和表达式"⽂本框中输⼊表达式"count(*) as ⼈数",然后单击右侧的"添加"按钮即可,这⾥,给表达式"count(*)"起了⼀个别名"⼈数". 2.在"排序依据"选项卡中,选择"avg(职⼯档案.⼯资)"作为排序条件,设置为降序排序. 3.在"分组依据"选项卡中,把"可⽤字段"中的"职⼯档案.性别"字段添加到"分组字段"中.这样就完成了本例的查询要求. 4.如果在分组的基础上,还要对查询结果记录进⾏筛选,可以单击在"分组依据"选项卡中的"满⾜条件"按钮,打开"满⾜条件"对话框,例如输⼊"avg(职⼯档案.⼯资)<1000"。
重要资料VFP表操作索引、统计、关联、连接等讲解
查询、统计和多表操作表文件中记录的顺序通常是人们在输入数据时按输入的先后次序存储的,并以记录号表示,这个顺序只反映了存放数据的先后顺序。
但在数据处理实际应用中,由于数据库十分庞大,为了高效方便地处理数据,常常需要对记录位置进行重新整理,并按某种指定的顺序对表记录进行处理。
例如,对学生成绩表按学号为序显示输出记录,以便查找;或按总分高低为序输出记录,以便进行比较等等。
对记录位置进行重新整理通常有排序和索引两种方法。
排序是对表文件进行物理位置的整理;索引是对表文件进行逻辑位置的整理。
一、排序表文件的排序操作就是根据表的某个关键字或关键字表达式重新排列表记录的位置。
执行排序操作后将生成一个新的表文件(称为:排序文件)。
新文件的结构和数据可以与源文件完全相同,也可以只取源文件的部分字段。
新文件不改变源文件内容和记录顺序。
【命令】 SORT TO<新文件名>ON <字段名1>[/A] [/D] [/C] [,<字段名2> [/A] [/D] [/C]…] [ASCENDING|DESCENDING][<范围>][FOR<条件>|WHILE<条件>][FIELDS<字段名表>| FIELDS LIKE<通配符>|FIELDS EXCEPT<通配符>]【功能】对当前表中指定范围内、满足条件的记录按指定字段升序或降序重新排序,并将排序结果存入新文件名中。
【说明】①排序结果存入由TO <新文件名>指定的表文件中,系统默认文件扩展名为.DBF。
②在ON子句中的字段名表示排序的关键字段。
当使用一个关键字时,叫“单重排序”;使用多个关键字时,叫“多重排序”。
在多重排序中,关键字有主次之分。
主关键字是指能够唯一标识某个记录的关键字;次关键字是指标识具有某种相同属性的某些记录的关键字。
在关键字表达式中,主关键字排在前面,次关键字排在后面。
Visual FoxPro第二篇VFP9
表2-3向导列表
向导名称 数据库向导 远程视图向导 查询向导 交叉表向导 数据透视表向 导 邮件合并向导 图形向导 表单向导 文档向导 功能说明 生成一个数据库 创建远程视图 创建查询 创建一个交叉表 查询 创建数据透视表 创建邮件合并文 件 创建一个图形 创建一个表单 从项目和程序的 代码 中生成文本文件 ,并编排其格式 向导名称 本地视图向导 选项卡向导 Oracle升迁向 导 一对多表单向 导 表向导 应用程序向导 一对多报表向 导 报表向导 功能说明 创建本地视图 创建邮件选项卡 创建一个SQL Server数 据库 创建一对多表单 创建表 创建一个VFP的应用 程序 创建一对多报表 创建报表 …
2.3 生成器
• 2.3.1.生成器的定义 . • 生成器是一种 Visual FoxPro 工具,如“列表框生成器”, 用以帮助用户对特定的控件设置属性,或者组合子句创建 特定的表达式。生成器由一个或多个提供一系列简单选项 的对话框组成。 • 2.3.2 生成器的作用 • 生成器的功能主要是方便使用者快速地设置一些辅助选项。 例如表达式生成器可以由相关的设计器、向导及其它一些 对话框中访问。允许创建并编辑表达式。一个表达式可以 简单得象一个字段名,也可以象一个包括函数、级连和数 据类型转换的计算一样复杂。“表达式生成器”的主要目 标是通过提供方法中每一步骤的合适选项的列表使创建表 达式更容易。该对话框可从设计器、窗口、生成器和向导 中访问。 • 若要创建表达式,可直接在表达式框中键入,或者从对话 框中的函数下拉列表中选取并将其粘贴到表达式框中。
第3章 数据库的基本操作 章
3.1 VFP9.0的数据库概述 的数据库概述
在使用项目、数据库、数据库表及“自由表”时,应注 意他们之间的关系及区别: 项目: 项目:文件扩展名为.PJX。其用于跟踪创建应用程序所需要 的所有程序、表单、菜单、库、报表名。标签、查询和一 些其他类型的文件。项目用”项目管理器”进行维护。 数据库: 扩展名,可以包含一个或多 数据库:数据库文件具有 .DBC 扩展名 个表、视图、到远程数据源的连接和存储过程。 数据库表: 文件扩展名为.DBF。包含在数据库文件中的表。 数据库表 其结构体现了关系型数据库管理系统的基本结构。在 Visual FoxPro 中,一个表以记录(行)和字段(列)的 形式存储数据。数据常常是关于某一类事物的信息。 自由表: 自由表:文件扩展名为.DBF。其以 .DBF 扩展名存于自己的 文件中,其区别于数据库表就在于其未包含在一个数据库 文件中。
VF 第9章 结构化程序的设计
1. 打开工作数据表 2. 增加数据表记录 3. 删除数据表记录 4. 修改数据表记录 5. 打印数据表记录 6. 关闭工作数据表
WAIT “请选择相应代码:” TO CHOICE ? “您选择的是第” + CHOICE + “个选项”
2019/11/9 滕永晨* 15
4. 格式输入语句
第9章
格式: <行,列> SAY <提示信息> GET <变量>
3.程序文件的执行
第9章
命令格式: DO <程序文件名>
功 能 : 将程序文件从磁盘调入内存, 编译 成.FXP目标文件后并执行。
菜单方式:①.CANCEL:终止程序运行,清除 所有的私有变量,返回命令窗口。 ②.RETURN:结束程序执行,返回调用它的上 级程序,若无上级程序则返回命令窗口。 ③.QUIT:结束程序执行并退出Visual.FoxPro 系统,返回操作系统。
② 输入L 型数据时,.T. 和 .F. ,两边的 . 不能省;
③ 输入D 型数据时,要用{ } 或CTOD( ) 将字符串转成 日期型变量。
2019/11/9 滕永晨* 11
第9章
例9-2:求任意两数之和。 INPUT “请输入另一个数x:” TO x INPUT “请输入另一个数y:” TO Y ?X+Y
Visual FoxPro提供双分支选择语句、多分支选 择语句两种选择结构。
2019/11/9 滕永晨* 30
第9章
9.3.1 双分支选择语句(选择判断语句)
.T.
条件
语句序列1
.F.
IF
<语句序列1 [ELSE
<语句序列2>] ENDIF
ENDIF 后 的 语 句
实验09 VFP数据查询命令的使用
实验九 VFP查询查询命令的使用一、实验目的熟悉VFP的查询命令及其使用格式。
二、实验指导1、相关知识(1)VFP中几条常用命令1、记录筛选命令: Set Filter To <条件>功能:设置当前表中被访问的记录必须满足的条件。
要撤消已经设置的筛选,只要执行: Set Filter To2、字段筛选命令:Set Fileds To <字段名表>功能:设置当前表中可被访问的字段要撤消已经设置的筛选,只要执行:Set Fields To All3、顺序定位位命令:Locate [<范围>] For <条件>功能:把记录指针定位到指定<范围>内,满足<条件>的首条记录上。
4、索引定位命令:Seek <表达式>功能:把记录指针定位到主控索引关键字的值与<表达式>的值相匹配的记录上。
5、记录数统计命令:Count [<范围>] [For/While <条件>] [To <内存变量名>]功能:统计在指定<范围>内,满足<条件>的记录数,并把结果保存到指定的<内存变量名>中。
6、按列求数值字段的和:Sum [<范围>] [<数值表达式>] [For/While <条件>] [To <内存变量名表>]功能:在打开的表中,按指定范围内满足条件的记录对<数值表达式表>中的各个表达式分别求和7、Average <数值表达式表>[<范围>][For<条件1>] [While<条件2>][to<内存变量表>|Array<数组>]功能:在打开的表中,按指定范围内满足条件的记录对<数值表达式表>中的各个表达式分别求平均值8、Calculate[<表达式表>][<菹围>] [For<条件1>][While<条件2>][TO<内存变量表>|Array<数组>]功能:在当前打开的表中,对指定范围内满足条件的记录分别计算<表达式表>中表达式的值。
2012-2013-2VFP第9部分(查询表单)
【例】在文本框中输入一个学生的姓名,在文本框text2、 text3中分别显示该学生所选课程的总学分和平均分 。
这种时候就不用将学生.dbf添加到数据环 境中,因为界面上需要用户去输入,而不是事 先用控件从表里提出数据。
表单text1的valid事件代码如下: xm=alltrim(this.value) select count(*),sum(学分),avg(成绩) from 学生,选课 成绩,课程 where 学生.学号=选课成绩.学号 and 选课成绩.课程号=课程.课程号 and 姓名=xm into array jg if jg(1)<>0 thisform.text2.value=jg(2) thisform.text3.value=jg(3) else messagebox("该生没有选课信息") endif
【例6-29】输入图书编号,查询借阅该图书 的读者姓名、单位、联系电话。 查询值在题 目中未知, 由用户输入 确定
实现方法: 1、先从控件中获取查询的值; 2、再将该值写入到SQL代码的WHERE条件中。
“查询”按钮的Click事件代码如下: bh=alltrim(thisform.text1.value)
表单Form1的Init事件代码如下: select avg(价格) from 图书 into array dj bel1.caption=”图书的平均价格; 为:”+ str(dj(1),5,2)+"元"
【例】在列表框中选择一个学生,在文本框text1、text2中分 别显示该学生所选课程的总成绩和所选科目数。 。
说明:计算实发工资的公式中需要的字段:基本工资,奖金,水电 费都在当前的表中间,这样我们可以直接用赋值表达式计算实发工 资的值。
vfp第9章 报表
第5章 查询与视图
第 9章
报表设计与应用
LOGO
报表基础 报表是表中数据的一种输出打印文档。 报表主要包括两部分:
数据源:指报表的数据来源,通常是表(数据库表、 自由表、临时表),也可以是视图或查询。 布局:指报表的输出格式。
创建报表有三种常用方法:
使用报表向导 使用快速报表 使用报表设计器
预览报表
REPORT FORM <报表文件名> PREVIEW
第5章 查询与视图
使用报表向导Biblioteka 【练习】 基本操作:33(3,4)、52(1-3) 简单应用:50.2(先做简1)、71.1(14分) 综合应用:54(先做基2,3)(28分)、75 (27分)
第5章 查询与视图
使用快速报表 【练习】
VFP-For循环语句解析
EXIT循环断路命令
循环变量自动增加一个步长
FOR循环命令说明
• 首先将初值赋于循环控制变量 • 如果不超过终值,就执行语句序列
• 之后循环控制变量的值自动增加步长
• 再与终值比较,如果仍不超过终值,则再次执行语句序列 • 如此反复,直到循环变量的值超过终值时退出循环,执行ENDFOR
语句后面的语句
条件当循环条件当循环dowhileenddo语句步长计数循环步长计数循环forendfor循环语句数据表扫描循环数据表扫描循环sacn循环变量循环变量初值初值终值终值stepstep步长步长语句序列语句序列逻辑表达式逻辑表达式looploopexitexitendifendifendforendfor1for?endfor语句步长计数循环步长计数循环步长是循环控制变量在每一次循环后变化的数值可为正数
ENDFOR
循环体中可以包含 EXIT命令和LOOP命令: LOOP | EXIT
省略 STEP <步长> 时,等价于 STEP 1 LOOP 和 EXIT 语句通常与 IF 分支语句相结
合使用 ,以决定是否结束本次循环或是否彻 底退出循环
将初值赋给循环变量 N
循环短路命令
S=S+1/X
ENDFOR ?“倒数和 S=”,S
LOOP
ENDIF
RETURN
FOR循环结构语句的局限性
CLEAR S=0 FOR I=1 TO 100 S=S+I ENDFOR ? ”S=”,S RETURN
如题目改为: 计算1到100的累加和,但 当和值达到4000时停止计 算,并输出当时的结果
数据表扫描循环 SACN / ENDSACN语句
1、FOR…ENDFOR语句(步长(计数)循环)
11.VFP查询统计及扫描循环
【EX4】设计如图所示表单,在编辑框中显示所有 读者的姓名、办证日期,单位和联系电话。
怎样构成数据表 数据来源于读者.dbf表,
数据输扫入 描循环???打开表
数据表扫描循环的三要素:
循环变量——记录指针,初值对为表中1,的go每t一op条记录 循数环据条处件理——记录指针没有到进文行件逐结条束扫描not eof()
DIMENSION X(4) SCAN FOR 读者.读者姓名=xm
X(1)=图书.书号
X(2)=图书.书名
X(3)=图书.价格
X(4)=借阅日期
INSERT INTO temp FROM ARRAY X
ENDSCAN THISFORM.GRID1.RECORDSOURCE="temp" SET SAFETY ON
处理一个记录 skip endd
扫描循环 scan 处理一个记录
ends
【EX5】设计如图所示表单,在组合框中选择任一 出版社,在编辑框中显示该出版社的图书的书名、 价格和数量。
方法1:
组合框combo1的Interactivechange事件代码:
thisform.edit1.value=“书名 价格 数量" cbs=alltrim(bo1.value) locate for alltrim(出版社)=cbs Do while not eof()
Xm=ALLTRIM(THISFORM.TEXT1.VALUE) IF FILE("TEMP.dbf") DROP TABLE TEMP ENDIF COPY STRUCTURE TO temp fields 图书.书号, 图书.书名, 图书. 价格,借阅日期
DIMENSION X(4) SCAN FOR 读者.读者姓名=xm
vfp9
值设为0,1时 Sorted属性——是否字符按顺序排列 值设为3,4时 Requery方法重新显示数据源的值,用新的值更新列表 值设为2(别名),6(字段)时 表记录指针将移动到所选项的记录上 InteractiveChange事件——选择所列条目后引发 一对多表单 Incrementalsearch属性——递增搜索
PasswordChar属性:口令显示(FMTB13B) DateFormat取有些值时,DateMark才有用(SHOW) Value属性:指定文本框的当前选定的值(字符型)
• 在程序中操作文本框中显示的文本时,可通过设置(写)或引用 (读)Value属性
8
8.2.2 文本框和编辑框
主要属性
InputMask属性(参见P56):指定控件中数据的输入 格式和显示方式 Format属性(参见P56):指定控件的Value属性的输 入和输出格式,即指定数据输入的限制条件和显示的格 式 Format 属性指定了整个输入区域的特性 可以组合使用多个格式代码,它们对输入区域的所有输 入都有影响 ScrollBars属性:是否有滚动条
4
8.2 选择合适的控件
对于某个特定的任务,可以用多种控件来完成
例如需要显示一个逻辑型的数据,既可以用文本框也可 用复选项
表单主要是用来显示数据、输入(或修改)数据
用于显示数据的表单通常不同于输入数据的表单 例如显示数据的表单其(部分)控件的属性应为只读 (即ReadOnly属性设置为真)
• 原 来 就 是 可 写 的 ( 文 本 框 、 组 合 框 ) 则 有 ReadOnly 属 性 (show) • 原 来 是 不 可 写 的 ( 标 签 、 列 表 框 ) 则 没 有 ReadOnly 属 性 (show)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)索引查询(p79页) 索引查询是在数据表文件建立了索引的基础上进行的, 因此必须打开相应的索引文件。打开索引后,记录将按索 引关键字值升序或降序排列,查询的速度比顺序查询要快 得多。
(1)FIND
格式:FIND<字符串>|<数值型常量>|<&字符变量> 功能:在索引文件中查找索引关键字值与指定的字符串 或数值常数相等的记录。
可以不加引号
find <字符>|<数字>|&<内存变量> seek <表达式>|<内存变量>
只能是字符、数值和日期表达式
【例】使用FIND命令和SEEK命令在学生档案表(dab.dbf)中
②查找1987 USE dab INDEX ON 姓名 TAG xmsy FIND 那措央中 &&或 SEEK "那措央中" DISPLAY
数据表的查询(P67页)
表中记录的查询就是在表的所有记录中查找满足条件的记录, 并把记录指针定位在要查询的记录上。这里介绍2种传统查询方法: 1)顺序查询(条件定位) 顺序查询是一种按照记录的排列顺序,在表文件中逐个地查找 (1)LOCATE 格式:LOCATE [范围] [FOR|WHILE <条件>] 功能:按顺序搜索数据表,并将记录指针定位在满足条件的第一条 记录上。
方法三: clear use student rs=0 scan for籍贯="江苏" rs=rs+1 endscan ?rs use return
Байду номын сангаас
方法二: clear use student index on 姓名 tag sxm accept "请输入学生姓名:" to xm seek xm if found() disp else ?"查无此人" endif use return
例:在student.dbf中统计江苏籍学
生的人数。
(实验14 任务1(1) )
方法一: clear use student store 0 to rs,zf do while not eof() if 籍贯="江苏" rs=rs+1 endif skip enddo ? rs use return
方法二: clear use student rs=0 locate for籍贯="江苏" do while found() rs=rs+1 continue enddo ?rs use return
例:在student.dbf中输入学生 姓名,查询该学生的信息。 (实验14 任务1(1) )
方法一: clear use student accept "请输入学生姓名:" to xm locate for 姓名=xm if found() display else ?"查无此人" endif use return
(2)CONTINUE
格式:CONTINUE 功能:LOCATE命令执行后继续移动记录指针到下一条满足条件的记录。
①LOCATE命令在指定范围内查找满足条件的第一条记录,并将该记录置为 当前记录。如果找不到符合条件的记录,则显示“已到定位范围末尾”;缺 省[范围]子句为ALL ②CONTINUE命令只能放在LOCATE命令后使用;可多次执行CONTINUE命 ③若LOCATE发现一条满足条件的记录,可使用 RECNO()返回该记录号,且 FOUND()函数的返回值为“真”(.T.),EOF( )函数的返回值为“假”(.F.)
INDEX ON 性别+RIGH(DTOC(出生日期),2) TAG xbrq
SEEK "男"+ "87" && ?FOUND() && 根据FOUND()的值判断查找结果
【例】:逐条显示学生表中84年出 生的学生的信息。
clear 循环条件 use 学生 循环体 do while .not.eof() if year(出生日期)=1984 disp endif 改变条件取 skip 值的命令 enddo use cancel
(2)SEEK
格式:SEEK <表达式> 功能:在索引文件中查找索引关键字值与指定表达式值相等 的记录。 ①只能在索引文件打开后使用 SEEK
②SEEK命令查找的是表达式,表达式可以是C、N、D、L 型的常量、变量及其组合。查找的字符串常量必须用定界符; 变量不用&函数。 ③如果 SEEK找到了与索引关键字相匹配的记录,则 RECNO()返回匹配记录的记录号;FOUND()返回 “真”(.T.);EOF()返回“假”(.F.) ④若找不到相匹配的关键字,则 RECNO()返回表中记录 个数加 1。FOUND()返回“假”(.F.);EOF()返回 “真”(.T.)。
方法一:
方法二:
clear use 学生 Locate for year(出生日期)=1984 do while .not.eof() disp 改变条件取 continue 值的命令 enddo use cancel
该循环只对数据表中的指定记 录逐个进行某种处理
扫描循环(scan…endscan循环)
命令格式:
locate [范围] for <条件>
继续查找命令
配对使用
命令格式: continue
不能单独使用
【例】 在学生档案表(dab.dbf)中找出计算机1班的前2位同学,并将记录输出。 USE dab
LOCATE ALL FOR 专业班级="计算机1班"
? FOUND() DISPLAY CONTINUE ? FOUND() DISPLAY USE && && 结果为.T.
格式: (见教科书146页,练习 册148页)
方法三:
clear use 学生 scan for year(出生日期)=1984 disp endscan use cancel
当循环 go top do whil not eof() 扫描循环 scan 处理一个记录 ends
处理一个记录
skip endd
找什么索引什么
①FIND只能找C、N型数据,字符串常量可不加定界 符;字符串变量前面必须用宏代换函数& ②FIND找到了与索引关键字相匹配的记录,则 RECNO()返回匹配记录的记录号;FOUND()返回 “真”(.T.);EOF()返回“假”(.F.) ③FIND命令找到的是与查询数据相匹配的第一条记录,