2010-5-21 1
第 二 章
Visual FoxPro基础及数据运算
目录
上页
下页
退出
2010-5-21 2
本 章 目 录
?第一节 Visual FoxPro系统简介
?第二节 Visual FoxPro的数据及其运算
?第三节 常用函数
目录
上页
下页
退出
2010-5-21 3
第一节 Visual FoxPro系统简介
Visual FoxPro 6.0系统是一个关系型
DBMS,是微软公司 1998年推出的可视化语言
集成包 Visual Studio 6.0系统中的一个产品。
能运行于各种平台上的 32位数据库开发系统。
目录
上页
下页
退出
2010-5-21 4
一, Visual FoxPro 的特点
Visual FoxPro 具有界面友好, 工具丰富, 速
度较快等优点, 并在数据库操作与管理, 可视化
开发环境, 面向对象程序设计等方面具有较强的
功能 。 其特点主要体现在以下几方面:
( 1) 兼容性好
( 2) 应用程序的开发更简便
( 3) 改进了程序调试工具
( 4) 更简便的表设计和扩充内容的数据字典
( 5) 增强了查询和视图设计功能
( 6) 增强了表单设计功能
( 7) 更多更好的向导
( 8) 增强了 OLE与 ActiveX的集成
目录
上页
下页
退出
2010-5-21 5
二,Visual FoxPro 6.0的安装与启动
1,最低运行环境
( 1) 486DX/66MHZ或更高的处理器 。
( 2) 16M以上内存 。
( 3) 硬盘空间:典型安装需要 85M,最大安装需要 90MB。
( 4) VGA或更高分辨率以上的显示器 。
( 5) 操作系统,Windows95或 98以上 。
2,Visual FoxPro 6.0系统的 安装
( 1) 将 Visual FoxPro 6.0系统 光盘插入光驱 。
( 2) 打开光盘, 找到 setup.exe文件, 双击该文件, 运行
安装向导 。
( 3) 按安装向导的提示, 单击, 下一步, 按钮进行安装 。
( 4) 进入系统安装界面, 根据提示按步操作, 直到安
装完毕 。
目录
上页
下页
退出
2010-5-21 6
3,Visual FoxPro 6.0的启动与退出
启动 Visual FoxPro 6.0常用方法:
( 1) 单击, 开始, 菜单, 选择, 程序,, 从级联菜单
中单击 Visual FoxPro 6.0。
( 2) 双击桌面建立的 Visual FoxPro 6.0的快捷
图标。
Visual FoxPro 6.0的退出有以下四种方法:
( 1) 单击 VFP窗口标题栏右边的关闭按钮 。
( 2) 在 VFP“文件, 下拉菜单中选择, 退出, 。
( 3) 按快捷键 ALT+F4.
( 4) 在 VFP的命令窗口中输入命令 QUIT。
目录
上页
下页
退出
2010-5-21 7
三,Visual FoxPro 6.0用户界面
Visual FoxPro 6.0的主窗口包括:标题栏、菜单栏、
常用工具栏、状态栏、命令窗口和主窗口工作区几个
组成部分。
目录
上页
下页
退出
2010-5-21 8
四,Visual FoxPro 6.0的操作方式
Visual FoxPro 6.0系统为用户提供
了几种各具特点的操作方式, 用户可根据
情况以及应用的需要, 选择合适的操作方
式, 实现数据库的操作, 应用 。
Visual FoxPro 6.0系统的操作方式主
要有:
( 1)命令操作方式
( 2)菜单操作方式
( 3)程序操作方式
目录
上页
下页
退出
2010-5-21 9
1,命令操作方式
命令操作是在命令窗口中逐条输入命
令, 直接操作指定对象的操作方式 。 命令
操作为用户提供了一个直接操作的手段,
其优点是能够直接使用系统的各种命令和
函数, 有效操纵数据库, 但要求熟练掌握
各种命令和函数的格式, 功能, 用法等细
节;
目录
上页
下页
退出
2010-5-21 10
2,菜单操作方式
Visual FoxPro 6.0系统将许多命令
做成菜单命令选项,用户通过选择菜单项
来使用数据库的操作方式。在菜单方式中,
很多操作是通过调用相关的向导、生成器、
设计器工具,以直观、简便、可视化方式
完成对系统的操作,用户不必熟悉命令的
细节和相应的语法规则,通过对话来完成
操作。有了这种方式,一般用户无需编程
就可完成数据库的操作与管理;
目录
上页
下页
退出
2010-5-21 11
3,程序操作方式
程序操作就是预先将实现某种操作处
理的命令序列编成程序,通过运行程序来
实现操作、管理数据库的操作方式。根据
实际应用需要编写的应用程序,能够为用
户提供界面更简洁直观、操作步骤更符合
业务处理流程和规范要求的操作应用环境。
但程序的编制,需要经过专门训练,只有
具备一定设计能力的专业人员方能胜任,
普通用户很难编写大型的、综合性较强的
应用程序。
目录
上页
下页
退出
2010-5-21 12
Visual FoxPro 6.0系统环境的设置
Visual FoxPro 6.0系统的环境设置决定了系统
的操作运行环境和工作方式,设置是否合理、适当,
直接影响系统的操作运行效率和操作的方便性。系
统安装时按默认方式进行了相应的设置,用户通过
设置系统环境,可添加或删除 Visual FoxPro 6.0的
相关组件,也可对系统当前环境重新调整设置。添
加或删除 Visual FoxPro 6.0组件的操作,要通过系
统安装程序来实现,而当前环境的设置可通过相关
命令和菜单操作方式来实现。
环境设置包括主窗口标题、默认目录、项目、
编辑器、调试器及表单工具选项、临时文件存储、
拖放字段对应的控件和其他选项等内容。
运用“选项”对话框或 SET命令进行附加的配
置设定,还可以通过配置文件进行设置。
目录
上页
下页
退出
2010-5-21 13
1,Visual FoxPro 6.0的设计器
Visual FoxPro 6.0 提 供 的 一 系 列 设 计 器
( Designers), 为用户提供了一个友好的图形界面
操作环境, 用以创建, 定制, 编辑数据库结构, 表
结构, 报表格式, 应用程序组件等 。
Visual FoxPro 6.0提供的设计器及其功能如下表所示。
表设计器 查询设计器 视图设计器
表单设计器 报表设计器 标签设计器
数据库设计器 数据库设计器 连接设计器
菜单设计器 数据环境设计器
五,Visual FoxPro 6.0常用工具
目录
上页
下页
退出
2010-5-21 14
2,Visual FoxPro 6.0的向导
Visual FoxPro 6.0系统为用户提供了许多功能强大的向
导 (Wizards)。 用户可以在向导程序的引导, 帮助下, 不
用编程就能快速地建立良好的应用程序, 完成许多数据
库操作, 管理功能, 为非专业用户提供了一种较为简便
的操作使用方式 。
Visual FoxPro 6.0系统提供的向导及其功能如下表所示 。
表向导 报表向导 一对多报表向导 标签向导
分组 /总计报表向导 表单向导 一对多表单向导 查询向导
交叉表向导 本地视图向导 远程视图向导 导入向导
文档向导 图表向导 应用程序向导 SQL升迁向导
数据透视表向导 安装向导
目录
上页
下页
退出
2010-5-21 15
3,Visual FoxPro 6.0的生成器
Visual FoxPro 6.0系统提供了若干个生成器, 用
以简化创建, 修改用户界面程序的设计过程, 提高软
件开发的质量和效率 。 每个生成器包含若干个选项卡,
允许用户访问并设置所选择对象的相关属性 。 用户可
将生成器生成的用户界面直接转换成程序编码, 使用
户从逐条编写程序代码, 反复调试程序的手工作业中
解放出来 。
Visual FoxPro 6.0提供的生成器及功能如下表所示。
自动格式化生成器 组合框生成器 命令组生成器 编辑框生成器
表达式生成器 表单生成器 网格生成器 列表框生成器
选项组生成器 文本框生成器 参照完整性生成器
目录
上页
下页
退出
2010-5-21 16
六,Visual FoxPro 6.0命令语法
1.一般的命令格式
<命令动词 >[范围 ][FOR<条件 >][WHILE <条件 >][FIELDS
<字段名表 >]…
Visual FoxPro 6.0中常用短语介绍:
⑴ FIELDS子句用来规定当前处理的字段或表达式 。
⑵ 范围子句用来规定对表进行操作的记录的范围 。 通常
有以下四种范围:
ALL,对表中所有记录进行操作 。
NEXT N,只对包括当前记录在内的连续 N条记录进行操作 。
RECORD N,只对第 N条记录进行操作 。
REST,从当前记录开始 (含当前记录 )到表尾的所有记录 。
目录
上页
下页
退出
2010-5-21 17
⑶ FOR子句和 WHILE子句
FOR<条件 >的作用是:在规定的范围内, 按条件检
查全部记录 。
WHILE<条件 >的作用是:在规定的范围内, 只要条
件成立, 就对当前记录执行该命令, 并把记录指
针指向下一条记录, 一旦遇到条件不满足的记录,
就停止查找并结束该命令的执行 。
若同时使用 FOR子句和 WHILE子句,则 WHILE有较
高的优先级。
目录
上页
下页
退出
2010-5-21 18
例, 读者表内容如下,分析以下命令的运行结果。
USE 读者
LIST NEXT 4
LIST REST
LIST FIELDS 学号,姓名,入学成绩
LIST FOR 性别 =, 男,
LIST WHILE 性别 =, 男,
USE
目录
上页
下页
退出
2010-5-21 19
2,Visual FoxPro 6.0命令的书写规则
( 1) 命令动词必须写在一条命令的最前面, 而后面子句
的次序可以任意排列 。
( 2) 命令行中, 命令动词与短语, 短语与短语和短语的
各部分之间必须以一个或多个空格分开 。
( 3) 命令动词, 各短语中的保留字及函数名都可简写为
前四个字符, 且大小写无关 。 如 DISPLAY 可简写为
DISP。
( 4) 一个命令行的最大长度是 254个字符, 如果命令太长,
一行写不下, 可在行末用, ;, 续行 。 并按回车换行,
在下一行继续输入该命令 。
( 5) 一行只能写一个命令 。
目录
上页
下页
退出
2010-5-21 20
3.符号约定
[]:方括号, 表示是可选的项目 。 若选择该项目, 不
要写方括号本身 。
<>:角括号, 表示括号内的项目是必须要选的, 但不
要写角括号本身 。
|,坚线号, 表示两个项目中选择其中一个, 但不
要写坚线号本身 。
…,省略号,表示前项可继续重复多次选择。
目录
上页
下页
退出
2010-5-21 21
第二节 Visual FoxPro的数据及其运算
在 Visual FoxPro系统中,数据可用常量、变
量、数组表示,数据还可以用字段、记录和对象,
由它们存储、容纳各种类型的数据。因此,常把
这些供数据存储的常量、变量、数组、字段、记
录和对象等称为数据存储容器。用户正是利用不
同的数据存储容器,在 Visual FoxPro系统中表示、
存储、操作、处理各种类型的数据,实现数据处
理的应用。
目录
上页
下页
退出
2010-5-21 22
一,Visual FoxPro的数据类型
1,字符型 (character)
用字母 C表示, 字符型数据包括中文字符, 英文
字符, 数字字符和其他 ASCII字符, 其长度最长不超
过 254个字符 。
2,数值型 (Numeric)
用字母 N表示, 用来表示数量并可以进行算术运
算的数据类型 。 由阿拉伯数字, 正负号, 小数点组成 。
Visual FoxPro中, 具有数值特征的数据类型还有整
型, 浮点型和双精度型, 但这三种数据类型只用于字
段变量 。
目录
上页
下页
退出
2010-5-21 23
3.日期型 (Date)
用字母 D表示,用来表示日期的数据类型。日期的默认
格式为,{mm/dd/yy}
其中 MM表示月,DD表示日,YY表示年。日期型数据的长
度固定为 8位。
4.日期时间型 (DateTime)
用字母 T表示,是用来表示日期和时间,默认格式为:
{mm/dd/yy hh:mm:ss}
其中 mm,dd,yy的意义与日期型相同,hh,mm,ss分别表
示时、分、秒。长度也固定为 8位。
5.逻辑型 (Logic)
用字母 L表示,用来描述客观事物真假或是非判断的数
据类型。只有两个取值:真 (.t.或,T.)和假 (.f.或,F.),
逻辑型数据长度固定为 1位。
目录
上页
下页
退出
2010-5-21 24
6,货币型 (Currency)
用字母 Y表示, 为存储货币值而使用的一种数据类型,
它默认保留 4位小数, 占据 8字节的存储空间 。
7,备注型 (Memo)
用字母 M表示, 用来存放较多字符的数据类型 。 只用
于表中字段类型的定义 。 字段长度固定为 4个字节 。 实
际数据存放在与表文件同名的备注文件 (,ftp) 中,其
长度依实际需要而定 。
8,通用型 (General)
用字母 G表示, 是用来存储 OLE对象的数据类型 。 可
以是电子表格, 文挡, 图形, 声音等, 跟备注型数据
一样, 它只用于表中字段类型的定义, 通用型数据字
段长度固定为 4位 。
目录
上页
下页
退出
2010-5-21 25
二, 常量
常量是在命令或程序中可直接引用, 具有
具体值的数据项, 其特征是在整个操作过程
中它 的值 和 表现 形 式保 持不 变 。 Visual
FoxPro按常量取值的数据类型, 将常量分为 6
种类型:
数值型常量, 货币型常量, 字符型常量,
逻辑型常量, 日期型常量, 日期时间型常量 。
目录
上页
下页
退出
2010-5-21 26
1,字符型常量
由任意 ASCII字符, 汉字和汉字字符组成
的字符型数据, 字符型常量又称为字符串 。 为
与其他类型常量, 变量和标识符相区别,
Visual FoxPro要求将字符串中所有字符, 用
一对双引号, "” 或单引号, '” 或方括号, []”
作为定界符对括起来 。
如,,I am a student.”,‘中华人民共和
国 ’, [Visual FoxPro 6.0系统 ]都是字符串 。
目录
上页
下页
退出
2010-5-21 27
2,日期型常量
日期型常量是表示日期值的数据, 其默认格式
是, {mm/dd/[yy]yy}
如 {10/01/02}和 {10/01/2002}均表示 2002年 10月 1
日这一日期常量值 。
3,日期时间型常量
Visual FoxPro系统中增加了一种表示日期和时
间值的日期时间型常量, 其默认格式是:
{mm/dd/[yy]yy [,] hh:mm:ss[a|p]}
其中 a和 p分别表示 AM( 上午 ) 和 PM( 下午 ) 。
日期值和日期时间值的输入格式与输出格式并
不完全相同,特别是输出格式受系统环境设置的影
响,用户可根据应用需要进行相应调整、设置。
目录
上页
下页
退出
2010-5-21 28
( 1) 日期格式中的世纪值
通常日期格式中用 2位数表示年份, 但涉及到世纪
问题就不便区分 。 Visual FoxPro提供设置命令进行相
应设置 。
命令格式:
SET CENTURY ON | OFF | TO [nCentury]
命令功能:
ON,日期数据显示 10位, 其中年份 4 位, 即日期
值输出时显示年份值;
OFF,(默认值 )。 日期数据显示 8位, 年份 2位, 即
日期值输出时不显示年份值;
TO [nCentury],指定日期数据所对应的世纪值。
nCentury是一个 1~ 99的整数,代表世纪数。
目录
上页
下页
退出
2010-5-21 29
( 2) 设置日期显示格式
用户可以调整, 设置日期值和时间值的显示输
出格式 。 既可以用命令方式设置, 也可以用菜单方
式设置 。
命令格式:
SET DATE [TO] AMERICAN | ANSI | BRITISH |
FRENCH | GERMAN | ITLIAN | JAPAN | USA |
MDY | DMY | YMD | SHORT | LONG
命令功能:设置日期型和日期时间型数据的显示输
出格式 。 系统默认为 AMERICAN美国格式 。
如果日期格式设置为 SHORT或 LONG格式,
Visual FoxPro系统将按 Windows系统设置的短日期
格式或长日期格式显示输出日期数据,而且 SET
CENTURY命令的设置被忽略。
目录
上页
下页
退出
2010-5-21 30
各种日期格式设置所对应的日期显示输
出格式,见表 2-1所示。
表 2-1 系统日期格式
设 置 值 日 期 格 式 设 置 值 日 期 格 式
AMERICAN mm/dd/yy USA mm-dd-yy
ANSI yy.mm.dd MDY mm/dd/yy
BRITISH / FRENCH dd//mm/yy DMY dd//mm/yy
GERMAN dd.mm.yy YMD yy/mm/dd
ITALIAN dd-mm-yy SHORT Windows短日期格式
JAPAN yy/mm/dd LONG Windows长日期格式
目录
上页
下页
退出
2010-5-21 31
( 3) 设置日期 2000年兼容性
通常日期型和日期时间型数据的结果, 与 SET
DATE命令和 SET CENTURY命令设置状态及当前系统时
间有关 。 由于系统时间与相应设置不同, 同一数据
的结果可能有不同的解释 。 如日期值 {10/11/12}可
以解释为 1912 年 10 月 11 日, 2012 年 10 月 11
日, 1912 年 11 月 10 日, 1910 年 11 月 12 日
或者 2010 年 11 月 12 日等 。 这显然会导致系统
混乱, 而且还可能造成 2000年兼容性错误, 影响系
统正常, 有效的操作运行 。
目录
上页
下页
退出
2010-5-21 32
( 4) 严格的日期格式
Visual FoxPro系统增加了一种所谓严格的日
期格式 。 不论哪种设置, 按严格日期格式表示的日期
型和日期时间型数据, 都具有相同的值和表示形式 。
严格的日期格式是:
{^yyyy-mm-dd[,][hh[:mm[:ss]][a|p]]}
^ 符号表明该格式是严格的日期格式, 并按照 YMD
的格式解释日期型和日期时间型数据, 它是严格日期
格式的标志, 不可缺少 。 有效的日期型和日期时间型
数据分隔符为:连字符, -”, 正斜杠, /”, 句点
,.” 和空格 。 如 {^2002-10-01},{^2002-10-01
10:30:30a},分别表示 2002年 10月 1日及该日上午 10
时 30分 30秒这两个日期数据 。
目录
上页
下页
退出
2010-5-21 33
Visual FoxPro系统默认采用严格的日期格式, 并
以此检测所有日期型和日期时间型数据的格式是否规
范, 合法 。 为与早期版本兼容, 用户通过命令或菜单
设置改变这一格式 。
命令设置的命令格式:
SET STRICTDATE TO [0 | 1 | 2]
命令功能:
0:关闭严格的日期格式检测, 即设置日期格式按传统
的严格的格式;
1:设置严格的日期格式检测 (默认值 ),要求所有日期
型和日期时间型数据均按严格的格式;
2:设置与 1相同, 但如果程序代码中出现 CTOD()和
CTOT()函数时, 会出现编译错误 。 这个设置最适合调
试时使用, 用来检测 2000年兼容性错误;
省略:恢复系统默认值, 等价于 1的设置 。
目录
上页
下页
退出
2010-5-21 34
4,逻辑型常量
逻辑型常量就是表示逻辑判断结果, 真,
或, 假, 的逻辑值 。 逻辑常量只有真和假两
种, 分别用 (,t.或,y.) 和 (,f.或,n.) 表示真
和假 。 一般应在表示逻辑常量的字母左右加
注圆点符,,” 以示区别 。
逻辑型常量在内存中占用一个字节 。
目录
上页
下页
退出
2010-5-21 35
5,数值型常量
也称常数, 用来表示一个数量的大小, 由数字 0-9、
小数点和正负符号组成 。 例如, 12.3,-67,3.14等 。
也可以使用科学计数法形式表示, 例如,6.789*105
可表示为 6.789E5。
6,货币型常量
用来表示货币值, 书写格式与数值型类似, 但要
加上一个前置的符号 $。 货币型数据在存储和计算时,
采用 4位小数, 如果多于 4位, 那么系统自动四舍五入 。
货币型常量不能用科学计数法表示 。
目录
上页
下页
退出
2010-5-21 36
三,变量
变量是在操作过程中可以改变其取值或
数据类型的数据项 。 在 Visual FoxPro系统中
变量分为字段变量, 内存变量, 数组变量和
系统变量 4类 。 此外, 作为面向对象的程序语
言, Visual FoxPro在进行面向对象的程序设
计中引入了对象的概念, 对象实质上也是一
类变量 。
确定一个变量, 需要确定其三个要素:
变量名, 数据类型和变量值 。
目录
上页
下页
退出
2010-5-21 37
1,命名规则
在 Visual FoxPro系统中,将表示、存储数据的常
量、变量、数组、字段、记录、对象、表、数据库等,
都称之为数据容器。所有数据容器均需命名以相互区
别,为规范各类对象的命名,Visual FoxPro系统推荐
了若干, 命名规则, 供用户参考,以提高操作命令与
程序的可读性和规范性。
● 使用字母, 下划线和数字命名 。 一般建议不采
用汉字命名;
● 命名以字母或下划线开头;除自由表中字段名,
索引的 TAG标识名最多只能 10个字符外, 其他的命名
可使用 1~ 128个字符;
● 避免使用 Visual FoxPro的保留字;
● 文件名的命名应遵循操作系统的约定 。
目录
上页
下页
退出
2010-5-21 38
2,内存变量的赋值
内存变量是在内存中定义的一种单个数据元素的临时性
变量 。
( 1) 内存变量的数据类型
内存变量的数据类型包括:数值型, 字符型, 逻辑型,
日期型和日期时间型;
( 2) 内存变量的建立
建立内存变量就是给内存变量赋值 。 内存变量赋值既可
定义一个新的内存变量, 也可改变已有内存变量的值或数
据类型 。
命令格式一:
STORE <表达式 > TO <内存变量表 >
命令功能:计算 <表达式 >的值并赋值给各个内存变量 。
命令格式二:
<内存变量 > = <表达式 >
命令功能:计算 <表达式 >的值并赋值给指定内存变量 。
目录
上页
下页
退出
2010-5-21 39
3,表达式的显示输出
可以用两个命令在屏幕上显示输出内存变量的值 。
命令格式:
? |?? <表达式表 > [AT <列号 >]
命令功能:计算表达式表中各表达式的值, 并在屏
幕上指定位置显示输出各式的值 。
?,先回车换行, 再计算并输出表达式的值;
??,在屏幕上当前位置, 计算并直接输出表达式
的值;
<表达式表 >:多个用逗号两两分隔的表达式, 各表
达式的值输出时, 以空格分隔;
AT <列号 >子句指定表达式值从指定列开始显示输
出 。 AT的定位只对它前面的一个表达式有效, 多个表达
式必须用多个 AT子句分别定位输出, 而且可反序定位 。
目录
上页
下页
退出
2010-5-21 40
4,内存变量的显示
( 1) 变量的显示
用? /?? 命令可以分别显示单个或一组变量的
值 。 有时用户还需了解变量其他相关信息, 如数据类
型, 作用范围, 或了解系统变量的信息 。 Visual
FoxPro系统提供了相应操作命令 。
命令格式:
DISPLAY | LIST MEMORY [LIKE <通配符 >]
[TO PRINTER [ PROMPT] | TO FILE <文本文件名 >]
[NOCONSOLE]
命令功能:显示指定变量的信息 。
目录
上页
下页
退出
2010-5-21 41
说明:
( 1) LIKE选项子句可以使用通配符来代替变量名的一部
分, 以显示与通配符相符合的变量 。 有两种通配符:
,?, 代表任意一个字符,, *” 代表任意多个字符 。
( 2) LIST 和 DISPLAY的区别是:前者连续显示, 后者分
屏显示 。
( 3) TO FILE <文件名 >子句功能是将内存变量有关信息
送至一个文本文件。 TO PRINTER 则是送至打印机打印。
例,定义并显示内存变量:
STORE "dggaf" TO a1
a2={^2004-04-25}
c=.t.
LIST MEMO LIKE a?
目录
上页
下页
退出
2010-5-21 42
5,内存变量文件的建立
Visual FoxPro提供相应命令, 可用文件形式将某
些内存变量保存起来, 以便重复使用 。
命令格式:
SAVE TO <变量文件名 > [ALL LIKE <通配符 > |
ALL EXCEPT <通配符 > ]
命令功能:将指定变量的信息保存到指定的变量文
件 ( *.MEM) 中 。
ALL LIKE <通配符 >:只保存符合通配符条件的所
有变量;
ALL EXCEPT <通配符 >:只保存不符合通配符条件的
所有变量 。
目录
上页
下页
退出
2010-5-21 43
6,内存变量的恢复
需要保存在文件中的变量信息时, 必须先恢复到内存后
方可使用 。
命令格式:
RESTORE FROM <变量文件名 > [ADDITIVE]
命令功能:将指定变量文件 ( *.MEM) 中变量信息恢复
到内存中 。
ADDITIVE,省略此项, 清除内存所有变量后再恢复文件
中变量的信息;加选此项, 将变量文件中的变量信息追加
到内存现有变量信息中 。
7.内存变量的清除
Visual FoxPro系统对定义内存变量的数量是有限制的,
应及时清理, 尽量减少内存的占用, 定义其他变量 。
命令格式:
RELEASE <变量表 >
RELEASE ALL [LIKE <通配符 > | EXCEPT <通配符 > ]
目录
上页
下页
退出
2010-5-21 44
8,数组变量
数组变量是结构化的变量, 是一组具有相
同名称, 以下标相互区分的有序内存变量 。 一
个数组通常都包含多个数据元素 。 Visual
FoxPro系统中只允许使用一维数组 ( 相当于数
列 ) 和二维数组 (相当于行列式或矩阵 )。
( 1) 数组元素
● 数组中各有序变量 ( 数据元素 ) 组成数组
的成员, 称为数组元素 。 数组元素实质上是一
个内存变量, 也称数组变量, 它们具有相同变
量名即数组名, 彼此以下标区分;
目录
上页
下页
退出
2010-5-21 45
● 数组元素的名称 ( 变量名 ) 用数组名加下标构
成 。 如 AA( 1), BB( 2,3) 分别表示一维数组 AA
的第 1个元素, 二维数组 BB中第 2行第 3列的元素;
● 下标必须用圆括号对括;一维数组的元素只有
一个下标, 二维数组的元素有两个以逗号分隔的
下标;
● 下标必须是非负数值, 可以是常量, 变量, 函
数或表达式, 下标值会自动取整 。 如 AA( 1.5),
AA( nA1), AA( 2+10/3) 等;
● 数组元素的数据类型决定于最后赋值的数据类
型;不同数组元素的数据类型可以不同;
● 数组元素与普通内存变量一样操作, 可以赋值
和引用 。
目录
上页
下页
退出
2010-5-21 46
( 2) 数组的定义
数组必须先定义后使用, 定义数组是向系统申
请数组元素在内存中的存储空间 。
命令格式:
DIMENSION | DECLARE <数组名 1>(<数值表达式
1>[,<数值表达式 2>])[,<数组名 2>(<数值表达式
3>[,<数值表达式 4>]) …]
命令功能:定义指定的各个数组 。
( 3) 数组的赋值与引用
数组元素的赋值与引用, 与普通内存变量的规
则相同 。
目录
上页
下页
退出
2010-5-21 47
9,字段变量
表由若干记录构成, 每个记录都包含若
干个数量相同的字段, 同一字段在不同记录
中分别对应不同的字段值, 因此, 字段也是
变量 。 与其他变量不同的是, 字段变量是定
义在表中的变量, 随表的存取而存取, 因而
是永久性变量 。 字段名就是变量名;变量的
数据类型为 Visual FoxPro中任意数据类型,
字段值就是变量值 。
目录
上页
下页
退出
2010-5-21 48
10,系统变量
系统变量是 Visual FoxPro系统特有的内
存变量, 它由 Visual FoxPro系统定义, 维护 。
系统变量有很多, 其变量名均以下划线, _”
开始, 因此在定义内存变量和数组变量名时,
不要以下划线开始, 以免与系统变量名冲突 。
系统变量设置, 保存了很多系统的状态, 特
性, 了解, 熟悉并且充分地运用系统变量,
会给数据库系统的操作, 管理带来很多方便,
特别是开发应用程序时更为突出, 学习时可
对此有所关注 。
目录
上页
下页
退出
2010-5-21 49
四,Visual FoxPro的表达式
在 Visual FoxPro系统中, 表达式是由常量,
变量, 函数及其他数据单独或与运算符组成的有
意义的运算式子 。
运算符是对数据对象进行加工处理的符号,
根据其处理数据对象的数据类型, 运算符分为算
术 ( 数值 ) 运算符, 字符运算符, 日期时间运算
符, 逻辑运算符和关系运算符五类, 相应的, 表
达式也分为算术表达式, 字符表达式, 日期时间
表达式, 逻辑表达式和关系表达式五类 。
常量, 变量和函数可以作为表达式的特例 。
今后涉及到表达式的描述, 除特别指明, 均可包
含这些特殊的形式 。
目录
上页
下页
退出
2010-5-21 50
在一个表达式中可能包含多个由不同运算符连接
起来的, 具有不同数据类型的数据对象, 但任何运算
符两侧的数据对象必须具有相同数据类型, 否则运算
将会出错;由于表达式中有多种运算, 不同的运算顺
序可能得出不同结果, 甚至出现运算错误, 因此当表
达式中包含多种运算时, 必须按一定顺序施行相应运
算, 才能保证运算的合理性和结果的正确性, 惟一性 。
用户也可以通过给表达式加圆括号的方式, 改变其默
认运算顺序 。 在 Visual FoxPro系统中, 各类运算的
优先顺序如下:
圆括号 >算术和日期运算 >字符串运算 >关系运算 >逻辑
运算
同一类运算符也有一定的运算优先顺序, 这在各
类表达式中分别介绍 。 如果有多个同一级别的运算,
则按在表达式中出现的先后顺序进行运算 。
目录
上页
下页
退出
2010-5-21 51
1,算术表达式
算术表达式又称数值表达式, 其运算对象和
运算结果均为数值型数据 。 数值运算符的功能及
运算优先顺序, 如表 2-2所示 。 表中运算符按运算
优先级别从高到低顺序排列 。
表 2-2 算术运算符
运算符 功 能 表 达 式 举 例 运算结果 优先级别
( ) 圆括号 (2-5)*(3+2) -15 最高
|
|
|
最低
- 取相反数 -(3-8) 5
**,^ 乘幂 2**5,3^2 32,9
*,/ 乘、除 2*10,25/5 20,5
% 取余数 20%5 0
+,- 加、减 36+19,29-47 55,-18
目录
上页
下页
退出
2010-5-21 52
2,字符表达式
字符表达式是由字符运算符将字符型数据对
象连接起来进行运算的式子 。 字符运算的对象是
字符型数据对象, 运算结果是字符常量或逻辑常
量 。 表 2-3为字符运算符 的功能 。
,+” 与, -” 都是字符连接运算符, 都将两
个字符串顺序连接, 但, +” 是直接连接,, -”
则将串 1尾部所有空格移到串 2尾部后再连接;
,$” 运算实质上是比较两个串的包含关系, 因
此有些书籍中将其归于关系运算, 其作用是比较,
判断串 1 是否为串 2的子串, 如果串 1是串 2的子
串, 运算结果为, 真,, 否则为, 假, 。 所谓子
串, 如果串 1中所有字符均包含在串 2中, 且与串
1中排列方式与顺序完全一致, 则称串 1为串 2的
子串 。
目录
上页
下页
退出
2010-5-21 53
表 2-3 字符运算符
两个连接运算的优先级别相同, 但高于 $的比较运算 。
运算符 功能 表达式举例 运算结果
+ 串 1+串 2:两串顺序相连
接
’ 12 ‘ +’ 56’ ’ 12 56’
- 串 1-串 2:串 1尾空格移到
串 2尾后再顺序相连接
’ 12 ‘ -‘ 56’ ‘ 1256 ‘
$ 串 1$串 2:串 1是否为串 2
子串
‘ 1234’ $
‘ a12345’
‘1234’$ ‘34512’
.T.
.F.
目录
上页
下页
退出
2010-5-21 54
3,日期表达式
由日期运算符将一个日期型或日期时间型数
据与一个数值型数据连接而成的运算式称为日期
表达式 。 日期运算符分为, +” 和, -” 两种, 其
作用分别是在日期数据上增加或减少一个天数,
在日期时间数据上增加或减少一个秒数 。 两个运
算的优先级别相同 。
例如,? {^2004-05-10}+10
{^2004-05-10}-{^2003-05-10}
主屏幕显示:
05/20/04
366
目录
上页
下页
退出
2010-5-21 55
4,关系表达式
由关系运算符连接两个同类数据对象进行关系比
较的运算式称为关系表达式 。 关系表达式的值为逻辑
值, 关系表达式成立则其值为, 真,, 否则为, 假, 。
表 2-4 关系运算符
运算符 功 能 表 达 式 举 例 结果
< 小于 15<4*6,T.
> 大于 ‘ A’ > ‘1’,T.
= 等于 2+4 = 3*5,F.
<>,#,!= 不等于 5 <> -10,T.
<= 小于或等于 'abc' <= 'AB',F.
>= 大于或等于 {10-10-02}>={10/01/02},T.
== 字符串恒同 ‘ abc’==’abcabc’,F.
目录
上页
下页
退出
2010-5-21 56
关系运算符的优先级别相同 。 关系表达式运算时,
就是比较同类两数据对象的, 大小,, 对于不同类型
的数据, 其, 大小, 或者是值的大小, 或者是先后顺
序 。 日期或日期时间数据以日期或时间的先后顺序为
序 。 在 Visual FoxPro系统中, 字符型数据的比较相
对复杂, 默认规则为:
( 1) 单个字符
单个字符的比较是以字符 ASCII码的大小作为字符
的, 大小,, 也就是先后顺序 。
( 2) 字符串
两个字符串进行比较的基本原则是从左到右逐个
字符进行比较, 但因系统相关设置状态不同, 比较的
结果与预期的不完全相同 。
目录
上页
下页
退出
2010-5-21 57
● 相等比较:用运算符, =, 进行两串比较时, 或
者到达右端串的末尾字符为止 (当 SET EXACT OFF时 )或
者当到达两串的末端为止 (当 SET EXACT ON时 ),以判断
两串是否相等;
● 恒同比较:用运算符 ==进行两串的恒同比较时,
不论 SET EXACT的设置如何, 只有当两串长度相同, 字
符相同, 排列一致时才成立;
● 大小比较:用运算符, <” 或, >” 进行两串比较
时, 比较到第1个不相同字符为止, 否则, 长度较长
的串较, 大, ;
● 其他比较:除上述运算符之外的其他运算符 <>、
<=和 >=的比较, 均可看作是两个运算符以逻辑, 或,
的关系构成的复合运算;
目录
上页
下页
退出
2010-5-21 58
( 3) 汉字
系统默认按汉字的拼音排列汉字的顺序, 也就
是以汉字的拼音顺序比较, 大小,, 因此, 汉字比
较实质上是以字母的顺序进行比较;但 Visual
FoxPro系统可以设置汉字按笔画排列顺序, 因而,
汉字的, 大小, 就决定其笔画数的多少 。
用菜单设置汉字排列顺序方式的操作步骤为:
单击 【 工具 】 |【 选项 】 命令, 将打开, 选项, 对话
框中, 在, 数据, 选项卡的, 排序序列, 下拉列表
框中选择, Stroke”项并确定, 系统将按汉字的笔
画数进行汉字的排序, 比较运算 。 若选择, M
achine”项则 字符按机内码次序排序, 汉字在所有
西文字符后, 汉字内部按国标码排序 。
目录
上页
下页
退出
2010-5-21 59
例,在不同的字符排序设置下比较字符串的大小。
SET COLLATE TO "MACHINE"
"x"<"xyz","x"<"XYZ","x"<" X"
"湖南 "<"湖北 ","湖 "<"湖南 ","你好 "<"您好 "
SET COLLATE TO "PINYIN"
"x"<"xyz","x"<"XYZ","x"<" X"
"湖南 "<"湖北 ","湖 "<"湖南 ","你好 "<"您好 "
SET COLLATE TO "stroke”
"x"<"xyz","x"<"XYZ","x"<" X"
"湖南 "<"湖北 ","湖 "<"湖南 ","你好 "<"您好 "
目录
上页
下页
退出
2010-5-21 60
5,逻辑表达式
由逻辑运算将逻辑型数据对象连接而成的式
子称为逻辑表达式 。 逻辑表达式的运算对象与运
算结果均为逻辑型数据 。 表 2-5为逻辑运算符的功
能 。 逻辑运算符前后一般要加圆点,,” 标记, 以
示区别 。
表 2-5 逻辑运算符
运算符 功 能 优先级别
( ) 圆括号 最高
|
|
最低
.NOT.或! 逻辑非
.AND,逻辑与
.OR,逻辑或
目录
上页
下页
退出
2010-5-21 61
对于各种逻辑运算, 其运算规则可由逻辑运
算真值表确定, 表 2-6所示就是逻辑运算真值表 。
表 2-6 逻辑运算真值表
A B A,AND.B A,OR,B,NOT,A
.T.,T.,T.,T.,F.
.T.,F.,F.,T.,F.
.F.,T.,F.,T.,T.
.F.,F.,F.,F.,T.
目录
上页
下页
退出
2010-5-21 62
在 Visual FoxPro系统中, 经常需要与一种
特殊的, 数据, 空值 (NULL( 或,NULL.) 打交道 。
表中字段可根据需要允许或限制其取空值 。 空
值对于逻辑运算的影响如表 2-7所示 。
表 2-7 NULL值对逻辑运算的影响
逻辑运算 A=.T,A=.F,A=.NULL
A,AND,NULL,NULL,F.,NULL.
A,OR,NULL,T.,NULL.,NULL.
.NOT,A,F.,T.,NULL.
目录
上页
下页
退出
2010-5-21 63
对于两个逻辑型数据, 一般不用比较的方
式来确定它们之间的关系, 而是直接运用逻辑
运算的方式进行处理 。 如对表中记录实施选择
运算时, 是用 FOR <条件 >或 WHILE <条件 >进行
逻辑判断, 其中 <条件 >就是一个关系表达式或
逻辑表达式 。 对于以逻辑型字段进行逻辑判断
的情况, 一般不用关系表达式而直接用逻辑表
达式 。 如, 性别, 是一个逻辑型字段, 并约定
,真, 表示男性,, 假, 表示女性 。 那么判断
某记录对应人员是否为男性, 用 FOR 性别, 而
不用 FOR 性别 =.T.,判 断 是否 为 女性, 用
FOR,NOT,性别, 不用 FOR 性别 =.F.。
目录
上页
下页
退出
2010-5-21 64
6.运算符优先级
先执行算术运算, 字符运算和日期运算, 再执行
关系运算, 最后执行逻辑运算 。 当然可以用括号来改
变其优先级 。 括号括起来的应优先运算 。
例, 多种表达式运算示例
9>3 AND 5<3 OR "a"$"ab" AND,NOT.f.
主屏幕显示:
.t.
(100%3=1) AND (15-4=0) OR "张 "="张三 "
主屏幕显示:
.f.
目录
上页
下页
退出
2010-5-21 65
第三节 Visual FoxPro常用函数
Visual FoxPro系统中, 函数是一段程序代码, 用
来进行一些特定的运算或操作, 支持和完善命令的功
能, 帮助用户完成各种操作与管理 。 Visual FoxPro系
统有数百种不同函数, 按函数提供方式, 可分为系统
( 标准 ) 函数和用户自定义函函数, 按函数运算, 处
理对象和结果的数据类型, 可分为数值型函数, 字符
型函数, 逻辑型函数, 日期时间型函数, 数据转换函
数等, 按函数的功能和特点, 可分为数据处理函数,
数据库操作函数, 文件管理函数, 键盘和鼠标处理函
数, 输出函数, 窗口界面操作函数, 程序设计函数,
数据库环境函数, 网络操作函数, 系统信息函数, 动
态数据操作函数等 。
目录
上页
下页
退出
2010-5-21 66
Visual FoxPro的函数由函数名与自变量两部
分组成。标准函数是 Visual FoxPro系统提供的系
统函数,其函数名是 Visual FoxPro保留字,自定
义函数是用户自已定义的函数,函数名用户指定;
自变量必须用圆括号对括起来,如有多个自变量,
各自变量以逗号分隔;有些函数可省略自变量,
或不需自变量,但也必须保留括号;自变量数据
类型由函数的定义确定,数据形式可以是常量、
变量、函数或表达式等。
函数是一类数据项,除个别(如宏替换)函
数外,函数都不能像命令一样单独使用,只能作
为命令的一部分进行操作运算。
目录
上页
下页
退出
2010-5-21 67
一, 数值函数
数值函数用于数值运算, 其自变量与函数都是
数值型数据 。
1,取绝对值函数 ABS( )和符号函数 SIGN( )
【 格式 】 ABS(<nExp>)
SIGN(<nExp>)
【 功能 】 计算 nExp的值, 并返回该值的绝对值 。
SIGN()返回指定数值表达式的符号 。
2,指数函数 EXP( )
【 格式 】 EXP(<nExp>)
【 功能 】 求以 e为底, nExp值为指数的幂, 即返
回 ex的值 。
3,取整函数 INT( )
【 格式 】 INT(<nExp>)
【 功能 】 计算 nExp的值, 返回该值的整数部分 。
目录
上页
下页
退出
2010-5-21 68
4,上界函数 CEILING( )
【 格式 】 CEILING(<nExp>)
【 功能 】 计算 nExp的值, 返回一个大于或等于该值
的最小整数 。
5,下界函数 FLOOR( )
【 格式 】 FLOOR(<nExp>)
【 功能 】 计算 nExp的值, 返回一个小于或等于该值
的最大整数 。
6,自然对数函数 LOG( )
【 格式 】 LOG(<nExp>)
【 功能 】 求 nExp的自然对数 。 nExp的值必须为正数 。
7,常用对数函数
【 格式 】 LOG10(<nExp>)
【 功能 】 求 nExp的常用对数 。 nExp的值必须为正数 。
目录
上页
下页
退出
2010-5-21 69
8,平方根函数 SQRT( )
【 格式 】 SQRT(<nExp>)
【 功能 】 求非负 nExp的平方根 。
9,最大值函数 MAX( )和最小值函数 MIN( )
【 格式 】 MAX(<nExp1>,< nExp2>[,< nExp3>...])
MIN(<nExp1>,< nExp2>[,< nExp3>...])
【 功能 】 返回数值表达式中的最大值 MAX( )和最小 】
值 MIN( )。
10,求余数函数 MOD( )
【 格式 】 MOD(<nExp1>,<nExp2>)
【 功能 】 返回 nExp1除以 nExp2的余数,符号与 nExp2
相同 。 如果两个表达式符号相异, 则函数值
为两数相除的余数再加上除数的值 。
目录
上页
下页
退出
2010-5-21 70
11,四舍五入函数 ROUND( )
【 格式 】 ROUND(<nExp1>,< nExp2>)
【 功能 】 返回 nExp1四舍五入的值, nExp2表示
保留的小数位数 。
12,π 函数 PI( )
【 格式 】 PI( )
【 功能 】 返回常量 π 的近似值
13,正弦函数 SIN( )
【 格式 】 SIN(<nExp>)
【 功能 】 返回 nExp的正弦值 。 nExp以弧度为单
位, 函数值域为 [-1,1]。
14,余弦函数 COS( )
【 格式 】 COS(<nExp>)
【 功能 】 返回 nExp的余弦值 。 nExp以弧度为单
位, 函数的值域为 [-1,1]。
目录
上页
下页
退出
2010-5-21 71
15,正切函数 TAN( )
【 格式 】 TAN(<nExp>)
【 功能 】 返回 nExp的正切值 。 nExp以弧度为单位, 其
值为 π /2或 - π /2时, 系统返回一个绝对值很大的数 。
16,反正弦函数 ASIN( )
【 格式 】 ASIN(<nExp>)
【 功能 】 返回 nExp的反正弦值 。 自变量值必须在 [-1,1]
内, 函数值为弧度, 且值域为 [-π /2,π /2]。
17,反余弦函数 ACOS( )
【 格式 】 ACOS(<nExp>)
【 功能 】 返回 nExp的反余弦值 。 自变量的值必须在 [-
1,1]内, 函数值为弧度, 值域为 [-π /2,π /2]。
18,反正切函数 ATAN( )
【 格式 】 ATAN(<nExp>)
【 功能 】 返回 nExp的反正切值 。 函数值为弧度, 值域
为 (-π /2,π /2)。
目录
上页
下页
退出
2010-5-21 72
分析下例各命令的执行结果:
例 1,a=3
ABS(10-a),ABS(a-10),SIGN(10-a),SIGN(a-10)
例 2,x=6.9
INT(x),INT(-x),CEILING(x),CEILING(-x),FLOOR(x),FLOOR(-x)
例 3,x=314.356
ROUND(x,2),ROUND(x,1),ROUND(x,0),ROUND(x,-1)
例 4:
MOD(10,3),MOD(10,-3),MOD(-10,3),MOD(-10,-3)
例 5,MOD()函数与 INT()函数使用示例
x=356
x1=INT(x/100)
x2=INT(MOD(x,100)/10)
x3=MOD(x,10)
x1,x2,x3
目录
上页
下页
退出
2010-5-21 73
二, 字符函数
字符函数是处理字符型数据的函数, 其自变量或函数
值中至少有一个是字符型数据 。 函数中涉及的字符型数据
项, 均以 cExp表示 。
1,子串位置函数
【 格式 】 AT(<cExp1>,< cExp 2>[,< nExp>])
【 功能 】 返回串 cExp1在串 cExp2中的起始位置 。 函数值
为整数 。 如果串 cExp2不包含串 cExp1,函数返回值为零 。
第三个参数数值表达式用于表明要搜索字符表达式 1在
字符表达式 2中第几次出现, 其默认值为 1,可缺省 。
例如, a="This is Visual FoxPro"
AT("fox",a),ATC("fox",a),AT("is",a,3),AT("th",a)
主屏幕显示:
0 16 10 0
目录
上页
下页
退出
2010-5-21 74
2,取子串函数
【 格式 】 1) LEFT(<cExp>,<nExp>)
2) RIGHT(<cExp >,< nExp>)
3) SUBSTR(<cExp>,<nExp1>[,<nExp2>])
【 功能 】 1)返回从 cExp串中第一个字符开始, 截取 nExp
个字符的子串 。
2)返回从 cExp串中右边第一个字符开始,截取
nExp个字符的子串 。
3)返回从串 cExp中第 nExp1个字符开始, 截取
nExp2个字符的子串 。
例如, a="This is Visual FoxPro"
LEFT(a,3),RIGHT(a,4),SUBSTR(a,6,2)+SUBSTR(a,9)
主屏幕显示:
Thi xPro isVisualFoxPro
目录
上页
下页
退出
2010-5-21 75
3,字符串长度函数 LEN( )
【 格式 】 LEN(<cExp>)
【 功能 】 返回 cExp串的字符数 ( 长度 ) 。 函数值为 N型 。
4,删除字符串前后空格函数
【 格式 】 1) LTRIM(<cExp>)
2) RTRIM | TRIM(<cExp>)
3) ALLTRIM(<cExp>)
【 功能 】 1) 删除 cExp串的前导空格字符 。
2) 删除 cExp串尾部空格字符 。
3) 删除字符串前导和尾部空格后的字符串 。
5,空格函数 SPACE( )
【 格式 】 SPACE (<nExp>)
【 功能 】 返回一个包含 nExp个空格的字符串 。
目录
上页
下页
退出
2010-5-21 76
6,字符串替换函数 STUFF( )
【 格式 】 STUFF(<cExp1>,<nExp1>,<nExp2>,<cExp2>)
【 功能 】 从 nExp1指 定 位 置 开始, 用 cExp2串替换
cExp1串中 nExp2个字符 。
例如, a="This is Visual FoxPro"
b="xxx"
STUFF(a,6,2,b)
STUFF(a,6,0,b)
STUFF(a,6,2,"")
主屏幕显示:
This xxx Visual FoxPro
This xxxis Visual FoxPro
This Visual FoxPro
目录
上页
下页
退出
2010-5-21 77
7,字符复制函数 REPLICATE( )
【 格式 】 REPLICATE (<cExp>,<nExp>)
【 功能 】 返回将 cExp串重复 nExp次的字符串 。
8,计算子串出现次数函数 OCCURS( )
【 格式 】 OCCURS (<cExp1>,<cExp2>)
【 功能】 返回第一个字符串在第二个字符串中出现的次数。
例如, a="This is Visual FoxPro"
OCCURS("is",a),OCCURS("fox",a),OCCURS("o",a)
主屏幕显示:
3 0 2
目录
上页
下页
退出
2010-5-21 78
9,大小写转换函数 LOWER( ) 和 UPPER( )
【 格式 】 LOWER (<cExp>)
UPPER (<cExp>)
【 功能 】 LOWER( )将 cExp串中字母全部变成小写
字母, UPPER( )将 cExp串中字母全部变成大写字
母, 其它字符不变 。
例如,? LOWER("ABCxyz"),UPPER("abcefg123")
主屏幕显示:
abcxyz ABCEFG123
10,宏替换函数 &
【 格式 】 & < cVar >[.< cExp >]
【 功能 】 替换出字符型变量 cVar中字符 。
目录
上页
下页
退出
2010-5-21 79
11,字符替换函数
【 格式】 CHRTRAN(字符表达式 1,字符表达式 2,字符表达式 3)
【 功能】 当第一个字符串中的一个或多个字符与第二个字符串中
的某个字符相匹配时,就用第三个字符串中对应 (相同位置)的
字符替换这些字符。如果第三个串字符包含的字符个数少于第二
个字符串包含的字符个数,因而没有对应字符,那么第一个字符
串中相匹配的字符将被删除。如果第三个字符串包含的字符个数
多于第二个字符串包含的字符个数,多余的字符被忽略。
例如,? CHRTRAN("abcdef","bdf","123")
主屏幕显示,a1c2e3
? CHRTRAN("abcdef","bdf","12"),
主屏幕显示,a1c2e
? CHRTRAN("中华人民共和国 ","华和 ","1234")
主屏幕显示,中 12人民共 34国
目录
上页
下页
退出
2010-5-21 80
三, 日期时间函数
日期时间函数是处理日期型或日期时间型数据
的函数 。 其自变量为日期型表达式 dExp或日期时间
型表达式 tExp。
1,系统日期函数 DATE( )
【 格式 】 DATE()
【 功能 】 返回当前系统日期, 此日期由 Windows
系统设置 。 函数值为 D型 。
2,系统时间函数 TIME( )
【 格式 】 TIME([<nExp>])
【 功能 】 返回当前系统时间, 时间显示格式为
hh:mm:ss。 若选择了 nExp, 则不管为何值, 返回
的系统时间还包括秒的小数部分, 精确至小数点后
两位 。 函数值为 C型 。
目录
上页
下页
退出
2010-5-21 81
3,日期函数 DAY( )
【 格式 】 DAY(<dExp>)
【 功能 】 返回 dExp式中的天数 。 函数值为 N型
4,星期函数 DOW( ),CDOW( )
【 格式 】 DOW(<dExp>)
CDOW(<dExp>)
【 功能 】 DOW( )函数返回 dExp式中星期的数值, 用 1~7表
示星期日~星期六 。 函数值为 N型 。 CDOW( ) 函数返回
dExp式中星期的英文名称 。 函数值为 C型 。
5,月份函数 MONTH( ),CMONTH( )
【 格式 】 MONTH(<dExp>)
CMONTH(<dExp>)
【 功能 】 MONTH( )函数返回 dExp式中月份数 。 函数值为 N
型 。 CMONTH( )函数则返回月份的英文名 。 函数值为 C型 。
6,年份函数 YEAR( )
【 格式 】 YEAR(<dExp>)
【 功能 】 函数返回 dExp式中年份值 。 函数值为 N型 。
目录
上页
下页
退出
2010-5-21 82
7,求时, 分, 秒函数
【 格式 】 1) HOUR(<dExp>)
2) MINUTE(<dExp>)
3) SEC(<dExp>)
【 功能 】 1) HOUR()函数返回日期时间型表达式所对应的
小时部分 。
2) MINUTE()函数返回日期时间型表达式所对应
的分钟部分 。
3) SEC()函数返回日期时间型表达式所对应的
秒钟部分 。
例如, x={^2004-06-20,05:25:45 p}
HOUR(x),MINUTE(x),SEC(x)
主屏幕显示:
17 25 45
目录
上页
下页
退出
2010-5-21 83
四, 转换函数
在数据库应用的过程中, 经常要将不同数据类
型的数据进行相应转换, 满足实际应用的需要 。
Visual FoxPro系统提供了若干个转换函数, 较好
地解决了数据类型转换的问题 。
1,ASCII码函数 ASC( )
【 格式 】 ASC (<cExp>)
【 功能 】 返回 cExp串首字符的 ASCII码值 。 函数
值为 N型 。
2,ASCII字符函数 CHR( )
【 格式 】 CHR(<nExp >)
【 功能 】 返回以 nExp值为 ASCII码的 ASCII字符 。
函数值为 C型 。
例如,? CHR(ASC("M")+ASC("a")-ASC("A"))
目录
上页
下页
退出
2010-5-21 84
3,字符日期型转换函数 CTOD( )
【 格式 】 CTOD(<cExp>)
【 功能 】 把, ×× /×× /××, 格式的 cExp串转换成
对应日期值 。 函数值为 D型 。
4,日期字符型转换函数 DTOC( )
【 格式 】 DTOC(<dExp >[,1] )
【 功能 】 把日期 dExp转换成相应的字符串 。 函数值
为 C型 。
5,数值字符型转换函数 STR( )
【 格式 】 STR(<nExp1>[,< nExp2>][,< nExp3>])
【 功能 】 将 nExp1的数值转换成字符串形式 。 函数
值为 C型 。
6,字符数值型转换函数 VAL( )
【 格式 】 VAL (<cExp>)
【 功能 】 将 cExp串中数字转换成对应数值, 转换结
果取两位小数 。 函数值为 N型 。
目录
上页
下页
退出
2010-5-21 85
7.宏替换函数
【 格式 】 &字符型变量 [.]
【 功能 】 替换出字符变量的内容 。 如果该函数与其后
的字符无明确分界, 则要用,,” 作为函数结束标记 。
例如, a="5"
b="6"
c56="good"
good=123456
c&a.&b,&c56
主屏幕显示:
good 123456
目录
上页
下页
退出
2010-5-21 86
五, 测试函数
在数据库应用的操作过程中, 用户需要了解数据
对象的类型, 状态等属性, Visual FoxPro提供了相关
的测试函数, 使用户能够准确地获取操作对象的相关
属性 。
1,数据类型函数 TYPE( )
【 格式 】 TYPE(<cExp >)
【 功能 】 返回 cExp 串表示的数据对象的数据类型, 返
回值是一个表示数据类型的大写字母 。 C,字符型, D:
日期型, N,数值型, L,逻辑型, M,备注型, G,通
用型, U,未定义 。
2,文件查找函数 FILE( )
【 格式 】 FILE(<cExp>)
【 功能 】 根据 cExp串中指定路径查找文件, 如未指定
路径, 则在默认目录中查找 。 文件存在, 返回逻辑真
(.T.) 值, 否则为逻辑假 (.F.)值 。
目录
上页
下页
退出
2010-5-21 87
3,条件测试函数 IIF( )
【 格式 】 IIF(<lExp >,<eExp 1>,<eExp2>)
【 功能 】 逻辑表达式 lExp值为真 (.T.),返回表达式
eExp1的值, 否则返回表达式 eExp2的值 。 eExp1和
eExp2可以是任意数据类型的表达式 。
例, IIF()函数使用示例
a=10
b=50
IIF(a>10,a-5,IIF(b>=50,b-20,b+20))
主屏幕显示:
30
目录
上页
下页
退出
2010-5-21 88
4,表结束标志测试函数 EOF( )
【 格式 】 EOF([<工作区号 > | <别名 >])
【 功能 】 测试记录指针是否移到表结束处 。 如果记录指针指向表
尾记录, 函数返回真 (,T.), 否则为假 (,F.) 。
注意:
( 1)文件尾不是表中的最后一条记录, 而是最后一条记录的后面 。
( 2)如指定工作区没有打开表文件, 函数返回值为假 。
( 3)表文件中不包含任何记录, 函数返回值为真 。
例, EOF()函数使用示例
USE 图书 && 打开图书表
GO BOTTOM && 将记录指针指向最后一条记录
EOF() && 主屏幕显示,.f.
SKIP && 记录指针下移一条
EOF() && 主屏幕显示,.t.
USE && 关闭图书表
目录
上页
下页
退出
2010-5-21 89
5,表起始标识测试函数 BOF ( )
【 格式 】 BOF ([<工作区号 > | <别名 >])
【 功能 】 测试记录指针是否移到表起始处 。 如果记录指针
指向表中首记录前面, 函数返回真 (,T.), 否则为假
(,F.) 。
6,当前记录号函数 RECNO()
【 格式 】 RECNO([<工作区号 > | <别名 >])
【 功能 】 返回指定工作区中表的当前记录的记录号 。 对于
空表返回值为 1。
注意,
( 1) 如果指定工作区没有打开表文件, 返回函数值 0。
( 2) 如果记录指针指向文件尾, 函数值为表文件的记录
数 +1。
( 3) 如果记录指针指向文件首, 函数值为表文件中第一
条记录的记录号 。
目录
上页
下页
退出
2010-5-21 90
例,RECNO()函数使用示例
USE 图书
GO BOTTOM
? RECNO() && 屏幕显示,49 此表总共 49条记录
SKIP && 记录指针下移一条
? RECNO() && 屏幕显示,50
GO 1
SKIP –1
? RECNO() && 屏幕显示,1
USE
目录
上页
下页
退出
2010-5-21 91
7,当前记录逻辑删除标志测试函数 DELETED( )
【 格式 】 DELETED([<工作区号 > | <别名 >])
【 功能 】 测试指定工作区中表的当前记录是否被逻辑删
除 。 如果有逻辑删除标记, 函数返回真 (.T.),否则为
假 (.F.)。
8,记录数函数 RECCOUNT( )
【 格式 】 RECCOUNT ([<工作区号 > | <别名 >])
【 功能 】 返回指定工作区中表的记录个数 。 如果工作区
中没有打开表则返回 0。
9,记录大小测试函数 RECSIZE( )
【 格式 】 RECSIZE( [<工作区号 > | <别名 >] )
【 功能 】 返回指定工作区中表的记录总长度 。 如果工作
区中没有打开表则返回 0。
目录
上页
下页
退出
2010-5-21 92
10,值域测试函数 BETWEEN( )
【 格式 】 BETWEEN(表达式 A,表达式 B,表达式 C)
【功能】判断一个表达式的值是否介于另两个表达式值之间。
当表达式 A值大于等于表达式 B的值,且小于等于表达式 C的
值时,函数值为逻辑值真,否则为假。如果表达式 B或表达
式 C有一个是 NULL值则函数值也是 NULL值。
例如, x=10
y=50
BETWEEN(15,x,y),BETWEEN(15,NULL,x),;
BETWEEN(15,x,null)
屏幕显示:
.t.,null.,null,
目录
上页
下页
退出
2010-5-21 93
11.空值( NULL) 测试函数 ISNULL( )
【 格式 】 ISNULL(表达式 )
【 功能 】 测试一个表达式的结果是否为 NULL值, 若是
NULL值返回逻辑真 (,t.), 否则返回逻辑假 (,f.) 。
例如, x=null
ISNULL(x)
屏幕显示:
.T.
12., 空, 值测试函数 EMPTY( )
【 格式 】 EMPTY(表达式 )
【功能】根据表达式的结果是否为, 空, 值,返回逻辑
真(,t.) 或逻辑假 (.f.)。
目录
上页
下页
退出
2010-5-21 94
13,屏幕列坐标和行坐标函数 COL( ),ROW( )
【 格式 】 COL( )
ROW( )
【 功能 】 COL( )返回光标的列坐标值, ROW( )返回光
标的行坐标值 。
14.打印机列坐标和行坐标函数 PCOL( ) PROW( )
【 格式 】 PCOL( )
PROW( )
【 功能 】 返回打印机打印头所处位置的列坐标和行坐
标 。
2010-5-21 95
结 束
第 二 章
Visual FoxPro基础及数据运算
目录
上页
下页
退出
2010-5-21 2
本 章 目 录
?第一节 Visual FoxPro系统简介
?第二节 Visual FoxPro的数据及其运算
?第三节 常用函数
目录
上页
下页
退出
2010-5-21 3
第一节 Visual FoxPro系统简介
Visual FoxPro 6.0系统是一个关系型
DBMS,是微软公司 1998年推出的可视化语言
集成包 Visual Studio 6.0系统中的一个产品。
能运行于各种平台上的 32位数据库开发系统。
目录
上页
下页
退出
2010-5-21 4
一, Visual FoxPro 的特点
Visual FoxPro 具有界面友好, 工具丰富, 速
度较快等优点, 并在数据库操作与管理, 可视化
开发环境, 面向对象程序设计等方面具有较强的
功能 。 其特点主要体现在以下几方面:
( 1) 兼容性好
( 2) 应用程序的开发更简便
( 3) 改进了程序调试工具
( 4) 更简便的表设计和扩充内容的数据字典
( 5) 增强了查询和视图设计功能
( 6) 增强了表单设计功能
( 7) 更多更好的向导
( 8) 增强了 OLE与 ActiveX的集成
目录
上页
下页
退出
2010-5-21 5
二,Visual FoxPro 6.0的安装与启动
1,最低运行环境
( 1) 486DX/66MHZ或更高的处理器 。
( 2) 16M以上内存 。
( 3) 硬盘空间:典型安装需要 85M,最大安装需要 90MB。
( 4) VGA或更高分辨率以上的显示器 。
( 5) 操作系统,Windows95或 98以上 。
2,Visual FoxPro 6.0系统的 安装
( 1) 将 Visual FoxPro 6.0系统 光盘插入光驱 。
( 2) 打开光盘, 找到 setup.exe文件, 双击该文件, 运行
安装向导 。
( 3) 按安装向导的提示, 单击, 下一步, 按钮进行安装 。
( 4) 进入系统安装界面, 根据提示按步操作, 直到安
装完毕 。
目录
上页
下页
退出
2010-5-21 6
3,Visual FoxPro 6.0的启动与退出
启动 Visual FoxPro 6.0常用方法:
( 1) 单击, 开始, 菜单, 选择, 程序,, 从级联菜单
中单击 Visual FoxPro 6.0。
( 2) 双击桌面建立的 Visual FoxPro 6.0的快捷
图标。
Visual FoxPro 6.0的退出有以下四种方法:
( 1) 单击 VFP窗口标题栏右边的关闭按钮 。
( 2) 在 VFP“文件, 下拉菜单中选择, 退出, 。
( 3) 按快捷键 ALT+F4.
( 4) 在 VFP的命令窗口中输入命令 QUIT。
目录
上页
下页
退出
2010-5-21 7
三,Visual FoxPro 6.0用户界面
Visual FoxPro 6.0的主窗口包括:标题栏、菜单栏、
常用工具栏、状态栏、命令窗口和主窗口工作区几个
组成部分。
目录
上页
下页
退出
2010-5-21 8
四,Visual FoxPro 6.0的操作方式
Visual FoxPro 6.0系统为用户提供
了几种各具特点的操作方式, 用户可根据
情况以及应用的需要, 选择合适的操作方
式, 实现数据库的操作, 应用 。
Visual FoxPro 6.0系统的操作方式主
要有:
( 1)命令操作方式
( 2)菜单操作方式
( 3)程序操作方式
目录
上页
下页
退出
2010-5-21 9
1,命令操作方式
命令操作是在命令窗口中逐条输入命
令, 直接操作指定对象的操作方式 。 命令
操作为用户提供了一个直接操作的手段,
其优点是能够直接使用系统的各种命令和
函数, 有效操纵数据库, 但要求熟练掌握
各种命令和函数的格式, 功能, 用法等细
节;
目录
上页
下页
退出
2010-5-21 10
2,菜单操作方式
Visual FoxPro 6.0系统将许多命令
做成菜单命令选项,用户通过选择菜单项
来使用数据库的操作方式。在菜单方式中,
很多操作是通过调用相关的向导、生成器、
设计器工具,以直观、简便、可视化方式
完成对系统的操作,用户不必熟悉命令的
细节和相应的语法规则,通过对话来完成
操作。有了这种方式,一般用户无需编程
就可完成数据库的操作与管理;
目录
上页
下页
退出
2010-5-21 11
3,程序操作方式
程序操作就是预先将实现某种操作处
理的命令序列编成程序,通过运行程序来
实现操作、管理数据库的操作方式。根据
实际应用需要编写的应用程序,能够为用
户提供界面更简洁直观、操作步骤更符合
业务处理流程和规范要求的操作应用环境。
但程序的编制,需要经过专门训练,只有
具备一定设计能力的专业人员方能胜任,
普通用户很难编写大型的、综合性较强的
应用程序。
目录
上页
下页
退出
2010-5-21 12
Visual FoxPro 6.0系统环境的设置
Visual FoxPro 6.0系统的环境设置决定了系统
的操作运行环境和工作方式,设置是否合理、适当,
直接影响系统的操作运行效率和操作的方便性。系
统安装时按默认方式进行了相应的设置,用户通过
设置系统环境,可添加或删除 Visual FoxPro 6.0的
相关组件,也可对系统当前环境重新调整设置。添
加或删除 Visual FoxPro 6.0组件的操作,要通过系
统安装程序来实现,而当前环境的设置可通过相关
命令和菜单操作方式来实现。
环境设置包括主窗口标题、默认目录、项目、
编辑器、调试器及表单工具选项、临时文件存储、
拖放字段对应的控件和其他选项等内容。
运用“选项”对话框或 SET命令进行附加的配
置设定,还可以通过配置文件进行设置。
目录
上页
下页
退出
2010-5-21 13
1,Visual FoxPro 6.0的设计器
Visual FoxPro 6.0 提 供 的 一 系 列 设 计 器
( Designers), 为用户提供了一个友好的图形界面
操作环境, 用以创建, 定制, 编辑数据库结构, 表
结构, 报表格式, 应用程序组件等 。
Visual FoxPro 6.0提供的设计器及其功能如下表所示。
表设计器 查询设计器 视图设计器
表单设计器 报表设计器 标签设计器
数据库设计器 数据库设计器 连接设计器
菜单设计器 数据环境设计器
五,Visual FoxPro 6.0常用工具
目录
上页
下页
退出
2010-5-21 14
2,Visual FoxPro 6.0的向导
Visual FoxPro 6.0系统为用户提供了许多功能强大的向
导 (Wizards)。 用户可以在向导程序的引导, 帮助下, 不
用编程就能快速地建立良好的应用程序, 完成许多数据
库操作, 管理功能, 为非专业用户提供了一种较为简便
的操作使用方式 。
Visual FoxPro 6.0系统提供的向导及其功能如下表所示 。
表向导 报表向导 一对多报表向导 标签向导
分组 /总计报表向导 表单向导 一对多表单向导 查询向导
交叉表向导 本地视图向导 远程视图向导 导入向导
文档向导 图表向导 应用程序向导 SQL升迁向导
数据透视表向导 安装向导
目录
上页
下页
退出
2010-5-21 15
3,Visual FoxPro 6.0的生成器
Visual FoxPro 6.0系统提供了若干个生成器, 用
以简化创建, 修改用户界面程序的设计过程, 提高软
件开发的质量和效率 。 每个生成器包含若干个选项卡,
允许用户访问并设置所选择对象的相关属性 。 用户可
将生成器生成的用户界面直接转换成程序编码, 使用
户从逐条编写程序代码, 反复调试程序的手工作业中
解放出来 。
Visual FoxPro 6.0提供的生成器及功能如下表所示。
自动格式化生成器 组合框生成器 命令组生成器 编辑框生成器
表达式生成器 表单生成器 网格生成器 列表框生成器
选项组生成器 文本框生成器 参照完整性生成器
目录
上页
下页
退出
2010-5-21 16
六,Visual FoxPro 6.0命令语法
1.一般的命令格式
<命令动词 >[范围 ][FOR<条件 >][WHILE <条件 >][FIELDS
<字段名表 >]…
Visual FoxPro 6.0中常用短语介绍:
⑴ FIELDS子句用来规定当前处理的字段或表达式 。
⑵ 范围子句用来规定对表进行操作的记录的范围 。 通常
有以下四种范围:
ALL,对表中所有记录进行操作 。
NEXT N,只对包括当前记录在内的连续 N条记录进行操作 。
RECORD N,只对第 N条记录进行操作 。
REST,从当前记录开始 (含当前记录 )到表尾的所有记录 。
目录
上页
下页
退出
2010-5-21 17
⑶ FOR子句和 WHILE子句
FOR<条件 >的作用是:在规定的范围内, 按条件检
查全部记录 。
WHILE<条件 >的作用是:在规定的范围内, 只要条
件成立, 就对当前记录执行该命令, 并把记录指
针指向下一条记录, 一旦遇到条件不满足的记录,
就停止查找并结束该命令的执行 。
若同时使用 FOR子句和 WHILE子句,则 WHILE有较
高的优先级。
目录
上页
下页
退出
2010-5-21 18
例, 读者表内容如下,分析以下命令的运行结果。
USE 读者
LIST NEXT 4
LIST REST
LIST FIELDS 学号,姓名,入学成绩
LIST FOR 性别 =, 男,
LIST WHILE 性别 =, 男,
USE
目录
上页
下页
退出
2010-5-21 19
2,Visual FoxPro 6.0命令的书写规则
( 1) 命令动词必须写在一条命令的最前面, 而后面子句
的次序可以任意排列 。
( 2) 命令行中, 命令动词与短语, 短语与短语和短语的
各部分之间必须以一个或多个空格分开 。
( 3) 命令动词, 各短语中的保留字及函数名都可简写为
前四个字符, 且大小写无关 。 如 DISPLAY 可简写为
DISP。
( 4) 一个命令行的最大长度是 254个字符, 如果命令太长,
一行写不下, 可在行末用, ;, 续行 。 并按回车换行,
在下一行继续输入该命令 。
( 5) 一行只能写一个命令 。
目录
上页
下页
退出
2010-5-21 20
3.符号约定
[]:方括号, 表示是可选的项目 。 若选择该项目, 不
要写方括号本身 。
<>:角括号, 表示括号内的项目是必须要选的, 但不
要写角括号本身 。
|,坚线号, 表示两个项目中选择其中一个, 但不
要写坚线号本身 。
…,省略号,表示前项可继续重复多次选择。
目录
上页
下页
退出
2010-5-21 21
第二节 Visual FoxPro的数据及其运算
在 Visual FoxPro系统中,数据可用常量、变
量、数组表示,数据还可以用字段、记录和对象,
由它们存储、容纳各种类型的数据。因此,常把
这些供数据存储的常量、变量、数组、字段、记
录和对象等称为数据存储容器。用户正是利用不
同的数据存储容器,在 Visual FoxPro系统中表示、
存储、操作、处理各种类型的数据,实现数据处
理的应用。
目录
上页
下页
退出
2010-5-21 22
一,Visual FoxPro的数据类型
1,字符型 (character)
用字母 C表示, 字符型数据包括中文字符, 英文
字符, 数字字符和其他 ASCII字符, 其长度最长不超
过 254个字符 。
2,数值型 (Numeric)
用字母 N表示, 用来表示数量并可以进行算术运
算的数据类型 。 由阿拉伯数字, 正负号, 小数点组成 。
Visual FoxPro中, 具有数值特征的数据类型还有整
型, 浮点型和双精度型, 但这三种数据类型只用于字
段变量 。
目录
上页
下页
退出
2010-5-21 23
3.日期型 (Date)
用字母 D表示,用来表示日期的数据类型。日期的默认
格式为,{mm/dd/yy}
其中 MM表示月,DD表示日,YY表示年。日期型数据的长
度固定为 8位。
4.日期时间型 (DateTime)
用字母 T表示,是用来表示日期和时间,默认格式为:
{mm/dd/yy hh:mm:ss}
其中 mm,dd,yy的意义与日期型相同,hh,mm,ss分别表
示时、分、秒。长度也固定为 8位。
5.逻辑型 (Logic)
用字母 L表示,用来描述客观事物真假或是非判断的数
据类型。只有两个取值:真 (.t.或,T.)和假 (.f.或,F.),
逻辑型数据长度固定为 1位。
目录
上页
下页
退出
2010-5-21 24
6,货币型 (Currency)
用字母 Y表示, 为存储货币值而使用的一种数据类型,
它默认保留 4位小数, 占据 8字节的存储空间 。
7,备注型 (Memo)
用字母 M表示, 用来存放较多字符的数据类型 。 只用
于表中字段类型的定义 。 字段长度固定为 4个字节 。 实
际数据存放在与表文件同名的备注文件 (,ftp) 中,其
长度依实际需要而定 。
8,通用型 (General)
用字母 G表示, 是用来存储 OLE对象的数据类型 。 可
以是电子表格, 文挡, 图形, 声音等, 跟备注型数据
一样, 它只用于表中字段类型的定义, 通用型数据字
段长度固定为 4位 。
目录
上页
下页
退出
2010-5-21 25
二, 常量
常量是在命令或程序中可直接引用, 具有
具体值的数据项, 其特征是在整个操作过程
中它 的值 和 表现 形 式保 持不 变 。 Visual
FoxPro按常量取值的数据类型, 将常量分为 6
种类型:
数值型常量, 货币型常量, 字符型常量,
逻辑型常量, 日期型常量, 日期时间型常量 。
目录
上页
下页
退出
2010-5-21 26
1,字符型常量
由任意 ASCII字符, 汉字和汉字字符组成
的字符型数据, 字符型常量又称为字符串 。 为
与其他类型常量, 变量和标识符相区别,
Visual FoxPro要求将字符串中所有字符, 用
一对双引号, "” 或单引号, '” 或方括号, []”
作为定界符对括起来 。
如,,I am a student.”,‘中华人民共和
国 ’, [Visual FoxPro 6.0系统 ]都是字符串 。
目录
上页
下页
退出
2010-5-21 27
2,日期型常量
日期型常量是表示日期值的数据, 其默认格式
是, {mm/dd/[yy]yy}
如 {10/01/02}和 {10/01/2002}均表示 2002年 10月 1
日这一日期常量值 。
3,日期时间型常量
Visual FoxPro系统中增加了一种表示日期和时
间值的日期时间型常量, 其默认格式是:
{mm/dd/[yy]yy [,] hh:mm:ss[a|p]}
其中 a和 p分别表示 AM( 上午 ) 和 PM( 下午 ) 。
日期值和日期时间值的输入格式与输出格式并
不完全相同,特别是输出格式受系统环境设置的影
响,用户可根据应用需要进行相应调整、设置。
目录
上页
下页
退出
2010-5-21 28
( 1) 日期格式中的世纪值
通常日期格式中用 2位数表示年份, 但涉及到世纪
问题就不便区分 。 Visual FoxPro提供设置命令进行相
应设置 。
命令格式:
SET CENTURY ON | OFF | TO [nCentury]
命令功能:
ON,日期数据显示 10位, 其中年份 4 位, 即日期
值输出时显示年份值;
OFF,(默认值 )。 日期数据显示 8位, 年份 2位, 即
日期值输出时不显示年份值;
TO [nCentury],指定日期数据所对应的世纪值。
nCentury是一个 1~ 99的整数,代表世纪数。
目录
上页
下页
退出
2010-5-21 29
( 2) 设置日期显示格式
用户可以调整, 设置日期值和时间值的显示输
出格式 。 既可以用命令方式设置, 也可以用菜单方
式设置 。
命令格式:
SET DATE [TO] AMERICAN | ANSI | BRITISH |
FRENCH | GERMAN | ITLIAN | JAPAN | USA |
MDY | DMY | YMD | SHORT | LONG
命令功能:设置日期型和日期时间型数据的显示输
出格式 。 系统默认为 AMERICAN美国格式 。
如果日期格式设置为 SHORT或 LONG格式,
Visual FoxPro系统将按 Windows系统设置的短日期
格式或长日期格式显示输出日期数据,而且 SET
CENTURY命令的设置被忽略。
目录
上页
下页
退出
2010-5-21 30
各种日期格式设置所对应的日期显示输
出格式,见表 2-1所示。
表 2-1 系统日期格式
设 置 值 日 期 格 式 设 置 值 日 期 格 式
AMERICAN mm/dd/yy USA mm-dd-yy
ANSI yy.mm.dd MDY mm/dd/yy
BRITISH / FRENCH dd//mm/yy DMY dd//mm/yy
GERMAN dd.mm.yy YMD yy/mm/dd
ITALIAN dd-mm-yy SHORT Windows短日期格式
JAPAN yy/mm/dd LONG Windows长日期格式
目录
上页
下页
退出
2010-5-21 31
( 3) 设置日期 2000年兼容性
通常日期型和日期时间型数据的结果, 与 SET
DATE命令和 SET CENTURY命令设置状态及当前系统时
间有关 。 由于系统时间与相应设置不同, 同一数据
的结果可能有不同的解释 。 如日期值 {10/11/12}可
以解释为 1912 年 10 月 11 日, 2012 年 10 月 11
日, 1912 年 11 月 10 日, 1910 年 11 月 12 日
或者 2010 年 11 月 12 日等 。 这显然会导致系统
混乱, 而且还可能造成 2000年兼容性错误, 影响系
统正常, 有效的操作运行 。
目录
上页
下页
退出
2010-5-21 32
( 4) 严格的日期格式
Visual FoxPro系统增加了一种所谓严格的日
期格式 。 不论哪种设置, 按严格日期格式表示的日期
型和日期时间型数据, 都具有相同的值和表示形式 。
严格的日期格式是:
{^yyyy-mm-dd[,][hh[:mm[:ss]][a|p]]}
^ 符号表明该格式是严格的日期格式, 并按照 YMD
的格式解释日期型和日期时间型数据, 它是严格日期
格式的标志, 不可缺少 。 有效的日期型和日期时间型
数据分隔符为:连字符, -”, 正斜杠, /”, 句点
,.” 和空格 。 如 {^2002-10-01},{^2002-10-01
10:30:30a},分别表示 2002年 10月 1日及该日上午 10
时 30分 30秒这两个日期数据 。
目录
上页
下页
退出
2010-5-21 33
Visual FoxPro系统默认采用严格的日期格式, 并
以此检测所有日期型和日期时间型数据的格式是否规
范, 合法 。 为与早期版本兼容, 用户通过命令或菜单
设置改变这一格式 。
命令设置的命令格式:
SET STRICTDATE TO [0 | 1 | 2]
命令功能:
0:关闭严格的日期格式检测, 即设置日期格式按传统
的严格的格式;
1:设置严格的日期格式检测 (默认值 ),要求所有日期
型和日期时间型数据均按严格的格式;
2:设置与 1相同, 但如果程序代码中出现 CTOD()和
CTOT()函数时, 会出现编译错误 。 这个设置最适合调
试时使用, 用来检测 2000年兼容性错误;
省略:恢复系统默认值, 等价于 1的设置 。
目录
上页
下页
退出
2010-5-21 34
4,逻辑型常量
逻辑型常量就是表示逻辑判断结果, 真,
或, 假, 的逻辑值 。 逻辑常量只有真和假两
种, 分别用 (,t.或,y.) 和 (,f.或,n.) 表示真
和假 。 一般应在表示逻辑常量的字母左右加
注圆点符,,” 以示区别 。
逻辑型常量在内存中占用一个字节 。
目录
上页
下页
退出
2010-5-21 35
5,数值型常量
也称常数, 用来表示一个数量的大小, 由数字 0-9、
小数点和正负符号组成 。 例如, 12.3,-67,3.14等 。
也可以使用科学计数法形式表示, 例如,6.789*105
可表示为 6.789E5。
6,货币型常量
用来表示货币值, 书写格式与数值型类似, 但要
加上一个前置的符号 $。 货币型数据在存储和计算时,
采用 4位小数, 如果多于 4位, 那么系统自动四舍五入 。
货币型常量不能用科学计数法表示 。
目录
上页
下页
退出
2010-5-21 36
三,变量
变量是在操作过程中可以改变其取值或
数据类型的数据项 。 在 Visual FoxPro系统中
变量分为字段变量, 内存变量, 数组变量和
系统变量 4类 。 此外, 作为面向对象的程序语
言, Visual FoxPro在进行面向对象的程序设
计中引入了对象的概念, 对象实质上也是一
类变量 。
确定一个变量, 需要确定其三个要素:
变量名, 数据类型和变量值 。
目录
上页
下页
退出
2010-5-21 37
1,命名规则
在 Visual FoxPro系统中,将表示、存储数据的常
量、变量、数组、字段、记录、对象、表、数据库等,
都称之为数据容器。所有数据容器均需命名以相互区
别,为规范各类对象的命名,Visual FoxPro系统推荐
了若干, 命名规则, 供用户参考,以提高操作命令与
程序的可读性和规范性。
● 使用字母, 下划线和数字命名 。 一般建议不采
用汉字命名;
● 命名以字母或下划线开头;除自由表中字段名,
索引的 TAG标识名最多只能 10个字符外, 其他的命名
可使用 1~ 128个字符;
● 避免使用 Visual FoxPro的保留字;
● 文件名的命名应遵循操作系统的约定 。
目录
上页
下页
退出
2010-5-21 38
2,内存变量的赋值
内存变量是在内存中定义的一种单个数据元素的临时性
变量 。
( 1) 内存变量的数据类型
内存变量的数据类型包括:数值型, 字符型, 逻辑型,
日期型和日期时间型;
( 2) 内存变量的建立
建立内存变量就是给内存变量赋值 。 内存变量赋值既可
定义一个新的内存变量, 也可改变已有内存变量的值或数
据类型 。
命令格式一:
STORE <表达式 > TO <内存变量表 >
命令功能:计算 <表达式 >的值并赋值给各个内存变量 。
命令格式二:
<内存变量 > = <表达式 >
命令功能:计算 <表达式 >的值并赋值给指定内存变量 。
目录
上页
下页
退出
2010-5-21 39
3,表达式的显示输出
可以用两个命令在屏幕上显示输出内存变量的值 。
命令格式:
? |?? <表达式表 > [AT <列号 >]
命令功能:计算表达式表中各表达式的值, 并在屏
幕上指定位置显示输出各式的值 。
?,先回车换行, 再计算并输出表达式的值;
??,在屏幕上当前位置, 计算并直接输出表达式
的值;
<表达式表 >:多个用逗号两两分隔的表达式, 各表
达式的值输出时, 以空格分隔;
AT <列号 >子句指定表达式值从指定列开始显示输
出 。 AT的定位只对它前面的一个表达式有效, 多个表达
式必须用多个 AT子句分别定位输出, 而且可反序定位 。
目录
上页
下页
退出
2010-5-21 40
4,内存变量的显示
( 1) 变量的显示
用? /?? 命令可以分别显示单个或一组变量的
值 。 有时用户还需了解变量其他相关信息, 如数据类
型, 作用范围, 或了解系统变量的信息 。 Visual
FoxPro系统提供了相应操作命令 。
命令格式:
DISPLAY | LIST MEMORY [LIKE <通配符 >]
[TO PRINTER [ PROMPT] | TO FILE <文本文件名 >]
[NOCONSOLE]
命令功能:显示指定变量的信息 。
目录
上页
下页
退出
2010-5-21 41
说明:
( 1) LIKE选项子句可以使用通配符来代替变量名的一部
分, 以显示与通配符相符合的变量 。 有两种通配符:
,?, 代表任意一个字符,, *” 代表任意多个字符 。
( 2) LIST 和 DISPLAY的区别是:前者连续显示, 后者分
屏显示 。
( 3) TO FILE <文件名 >子句功能是将内存变量有关信息
送至一个文本文件。 TO PRINTER 则是送至打印机打印。
例,定义并显示内存变量:
STORE "dggaf" TO a1
a2={^2004-04-25}
c=.t.
LIST MEMO LIKE a?
目录
上页
下页
退出
2010-5-21 42
5,内存变量文件的建立
Visual FoxPro提供相应命令, 可用文件形式将某
些内存变量保存起来, 以便重复使用 。
命令格式:
SAVE TO <变量文件名 > [ALL LIKE <通配符 > |
ALL EXCEPT <通配符 > ]
命令功能:将指定变量的信息保存到指定的变量文
件 ( *.MEM) 中 。
ALL LIKE <通配符 >:只保存符合通配符条件的所
有变量;
ALL EXCEPT <通配符 >:只保存不符合通配符条件的
所有变量 。
目录
上页
下页
退出
2010-5-21 43
6,内存变量的恢复
需要保存在文件中的变量信息时, 必须先恢复到内存后
方可使用 。
命令格式:
RESTORE FROM <变量文件名 > [ADDITIVE]
命令功能:将指定变量文件 ( *.MEM) 中变量信息恢复
到内存中 。
ADDITIVE,省略此项, 清除内存所有变量后再恢复文件
中变量的信息;加选此项, 将变量文件中的变量信息追加
到内存现有变量信息中 。
7.内存变量的清除
Visual FoxPro系统对定义内存变量的数量是有限制的,
应及时清理, 尽量减少内存的占用, 定义其他变量 。
命令格式:
RELEASE <变量表 >
RELEASE ALL [LIKE <通配符 > | EXCEPT <通配符 > ]
目录
上页
下页
退出
2010-5-21 44
8,数组变量
数组变量是结构化的变量, 是一组具有相
同名称, 以下标相互区分的有序内存变量 。 一
个数组通常都包含多个数据元素 。 Visual
FoxPro系统中只允许使用一维数组 ( 相当于数
列 ) 和二维数组 (相当于行列式或矩阵 )。
( 1) 数组元素
● 数组中各有序变量 ( 数据元素 ) 组成数组
的成员, 称为数组元素 。 数组元素实质上是一
个内存变量, 也称数组变量, 它们具有相同变
量名即数组名, 彼此以下标区分;
目录
上页
下页
退出
2010-5-21 45
● 数组元素的名称 ( 变量名 ) 用数组名加下标构
成 。 如 AA( 1), BB( 2,3) 分别表示一维数组 AA
的第 1个元素, 二维数组 BB中第 2行第 3列的元素;
● 下标必须用圆括号对括;一维数组的元素只有
一个下标, 二维数组的元素有两个以逗号分隔的
下标;
● 下标必须是非负数值, 可以是常量, 变量, 函
数或表达式, 下标值会自动取整 。 如 AA( 1.5),
AA( nA1), AA( 2+10/3) 等;
● 数组元素的数据类型决定于最后赋值的数据类
型;不同数组元素的数据类型可以不同;
● 数组元素与普通内存变量一样操作, 可以赋值
和引用 。
目录
上页
下页
退出
2010-5-21 46
( 2) 数组的定义
数组必须先定义后使用, 定义数组是向系统申
请数组元素在内存中的存储空间 。
命令格式:
DIMENSION | DECLARE <数组名 1>(<数值表达式
1>[,<数值表达式 2>])[,<数组名 2>(<数值表达式
3>[,<数值表达式 4>]) …]
命令功能:定义指定的各个数组 。
( 3) 数组的赋值与引用
数组元素的赋值与引用, 与普通内存变量的规
则相同 。
目录
上页
下页
退出
2010-5-21 47
9,字段变量
表由若干记录构成, 每个记录都包含若
干个数量相同的字段, 同一字段在不同记录
中分别对应不同的字段值, 因此, 字段也是
变量 。 与其他变量不同的是, 字段变量是定
义在表中的变量, 随表的存取而存取, 因而
是永久性变量 。 字段名就是变量名;变量的
数据类型为 Visual FoxPro中任意数据类型,
字段值就是变量值 。
目录
上页
下页
退出
2010-5-21 48
10,系统变量
系统变量是 Visual FoxPro系统特有的内
存变量, 它由 Visual FoxPro系统定义, 维护 。
系统变量有很多, 其变量名均以下划线, _”
开始, 因此在定义内存变量和数组变量名时,
不要以下划线开始, 以免与系统变量名冲突 。
系统变量设置, 保存了很多系统的状态, 特
性, 了解, 熟悉并且充分地运用系统变量,
会给数据库系统的操作, 管理带来很多方便,
特别是开发应用程序时更为突出, 学习时可
对此有所关注 。
目录
上页
下页
退出
2010-5-21 49
四,Visual FoxPro的表达式
在 Visual FoxPro系统中, 表达式是由常量,
变量, 函数及其他数据单独或与运算符组成的有
意义的运算式子 。
运算符是对数据对象进行加工处理的符号,
根据其处理数据对象的数据类型, 运算符分为算
术 ( 数值 ) 运算符, 字符运算符, 日期时间运算
符, 逻辑运算符和关系运算符五类, 相应的, 表
达式也分为算术表达式, 字符表达式, 日期时间
表达式, 逻辑表达式和关系表达式五类 。
常量, 变量和函数可以作为表达式的特例 。
今后涉及到表达式的描述, 除特别指明, 均可包
含这些特殊的形式 。
目录
上页
下页
退出
2010-5-21 50
在一个表达式中可能包含多个由不同运算符连接
起来的, 具有不同数据类型的数据对象, 但任何运算
符两侧的数据对象必须具有相同数据类型, 否则运算
将会出错;由于表达式中有多种运算, 不同的运算顺
序可能得出不同结果, 甚至出现运算错误, 因此当表
达式中包含多种运算时, 必须按一定顺序施行相应运
算, 才能保证运算的合理性和结果的正确性, 惟一性 。
用户也可以通过给表达式加圆括号的方式, 改变其默
认运算顺序 。 在 Visual FoxPro系统中, 各类运算的
优先顺序如下:
圆括号 >算术和日期运算 >字符串运算 >关系运算 >逻辑
运算
同一类运算符也有一定的运算优先顺序, 这在各
类表达式中分别介绍 。 如果有多个同一级别的运算,
则按在表达式中出现的先后顺序进行运算 。
目录
上页
下页
退出
2010-5-21 51
1,算术表达式
算术表达式又称数值表达式, 其运算对象和
运算结果均为数值型数据 。 数值运算符的功能及
运算优先顺序, 如表 2-2所示 。 表中运算符按运算
优先级别从高到低顺序排列 。
表 2-2 算术运算符
运算符 功 能 表 达 式 举 例 运算结果 优先级别
( ) 圆括号 (2-5)*(3+2) -15 最高
|
|
|
最低
- 取相反数 -(3-8) 5
**,^ 乘幂 2**5,3^2 32,9
*,/ 乘、除 2*10,25/5 20,5
% 取余数 20%5 0
+,- 加、减 36+19,29-47 55,-18
目录
上页
下页
退出
2010-5-21 52
2,字符表达式
字符表达式是由字符运算符将字符型数据对
象连接起来进行运算的式子 。 字符运算的对象是
字符型数据对象, 运算结果是字符常量或逻辑常
量 。 表 2-3为字符运算符 的功能 。
,+” 与, -” 都是字符连接运算符, 都将两
个字符串顺序连接, 但, +” 是直接连接,, -”
则将串 1尾部所有空格移到串 2尾部后再连接;
,$” 运算实质上是比较两个串的包含关系, 因
此有些书籍中将其归于关系运算, 其作用是比较,
判断串 1 是否为串 2的子串, 如果串 1是串 2的子
串, 运算结果为, 真,, 否则为, 假, 。 所谓子
串, 如果串 1中所有字符均包含在串 2中, 且与串
1中排列方式与顺序完全一致, 则称串 1为串 2的
子串 。
目录
上页
下页
退出
2010-5-21 53
表 2-3 字符运算符
两个连接运算的优先级别相同, 但高于 $的比较运算 。
运算符 功能 表达式举例 运算结果
+ 串 1+串 2:两串顺序相连
接
’ 12 ‘ +’ 56’ ’ 12 56’
- 串 1-串 2:串 1尾空格移到
串 2尾后再顺序相连接
’ 12 ‘ -‘ 56’ ‘ 1256 ‘
$ 串 1$串 2:串 1是否为串 2
子串
‘ 1234’ $
‘ a12345’
‘1234’$ ‘34512’
.T.
.F.
目录
上页
下页
退出
2010-5-21 54
3,日期表达式
由日期运算符将一个日期型或日期时间型数
据与一个数值型数据连接而成的运算式称为日期
表达式 。 日期运算符分为, +” 和, -” 两种, 其
作用分别是在日期数据上增加或减少一个天数,
在日期时间数据上增加或减少一个秒数 。 两个运
算的优先级别相同 。
例如,? {^2004-05-10}+10
{^2004-05-10}-{^2003-05-10}
主屏幕显示:
05/20/04
366
目录
上页
下页
退出
2010-5-21 55
4,关系表达式
由关系运算符连接两个同类数据对象进行关系比
较的运算式称为关系表达式 。 关系表达式的值为逻辑
值, 关系表达式成立则其值为, 真,, 否则为, 假, 。
表 2-4 关系运算符
运算符 功 能 表 达 式 举 例 结果
< 小于 15<4*6,T.
> 大于 ‘ A’ > ‘1’,T.
= 等于 2+4 = 3*5,F.
<>,#,!= 不等于 5 <> -10,T.
<= 小于或等于 'abc' <= 'AB',F.
>= 大于或等于 {10-10-02}>={10/01/02},T.
== 字符串恒同 ‘ abc’==’abcabc’,F.
目录
上页
下页
退出
2010-5-21 56
关系运算符的优先级别相同 。 关系表达式运算时,
就是比较同类两数据对象的, 大小,, 对于不同类型
的数据, 其, 大小, 或者是值的大小, 或者是先后顺
序 。 日期或日期时间数据以日期或时间的先后顺序为
序 。 在 Visual FoxPro系统中, 字符型数据的比较相
对复杂, 默认规则为:
( 1) 单个字符
单个字符的比较是以字符 ASCII码的大小作为字符
的, 大小,, 也就是先后顺序 。
( 2) 字符串
两个字符串进行比较的基本原则是从左到右逐个
字符进行比较, 但因系统相关设置状态不同, 比较的
结果与预期的不完全相同 。
目录
上页
下页
退出
2010-5-21 57
● 相等比较:用运算符, =, 进行两串比较时, 或
者到达右端串的末尾字符为止 (当 SET EXACT OFF时 )或
者当到达两串的末端为止 (当 SET EXACT ON时 ),以判断
两串是否相等;
● 恒同比较:用运算符 ==进行两串的恒同比较时,
不论 SET EXACT的设置如何, 只有当两串长度相同, 字
符相同, 排列一致时才成立;
● 大小比较:用运算符, <” 或, >” 进行两串比较
时, 比较到第1个不相同字符为止, 否则, 长度较长
的串较, 大, ;
● 其他比较:除上述运算符之外的其他运算符 <>、
<=和 >=的比较, 均可看作是两个运算符以逻辑, 或,
的关系构成的复合运算;
目录
上页
下页
退出
2010-5-21 58
( 3) 汉字
系统默认按汉字的拼音排列汉字的顺序, 也就
是以汉字的拼音顺序比较, 大小,, 因此, 汉字比
较实质上是以字母的顺序进行比较;但 Visual
FoxPro系统可以设置汉字按笔画排列顺序, 因而,
汉字的, 大小, 就决定其笔画数的多少 。
用菜单设置汉字排列顺序方式的操作步骤为:
单击 【 工具 】 |【 选项 】 命令, 将打开, 选项, 对话
框中, 在, 数据, 选项卡的, 排序序列, 下拉列表
框中选择, Stroke”项并确定, 系统将按汉字的笔
画数进行汉字的排序, 比较运算 。 若选择, M
achine”项则 字符按机内码次序排序, 汉字在所有
西文字符后, 汉字内部按国标码排序 。
目录
上页
下页
退出
2010-5-21 59
例,在不同的字符排序设置下比较字符串的大小。
SET COLLATE TO "MACHINE"
"x"<"xyz","x"<"XYZ","x"<" X"
"湖南 "<"湖北 ","湖 "<"湖南 ","你好 "<"您好 "
SET COLLATE TO "PINYIN"
"x"<"xyz","x"<"XYZ","x"<" X"
"湖南 "<"湖北 ","湖 "<"湖南 ","你好 "<"您好 "
SET COLLATE TO "stroke”
"x"<"xyz","x"<"XYZ","x"<" X"
"湖南 "<"湖北 ","湖 "<"湖南 ","你好 "<"您好 "
目录
上页
下页
退出
2010-5-21 60
5,逻辑表达式
由逻辑运算将逻辑型数据对象连接而成的式
子称为逻辑表达式 。 逻辑表达式的运算对象与运
算结果均为逻辑型数据 。 表 2-5为逻辑运算符的功
能 。 逻辑运算符前后一般要加圆点,,” 标记, 以
示区别 。
表 2-5 逻辑运算符
运算符 功 能 优先级别
( ) 圆括号 最高
|
|
最低
.NOT.或! 逻辑非
.AND,逻辑与
.OR,逻辑或
目录
上页
下页
退出
2010-5-21 61
对于各种逻辑运算, 其运算规则可由逻辑运
算真值表确定, 表 2-6所示就是逻辑运算真值表 。
表 2-6 逻辑运算真值表
A B A,AND.B A,OR,B,NOT,A
.T.,T.,T.,T.,F.
.T.,F.,F.,T.,F.
.F.,T.,F.,T.,T.
.F.,F.,F.,F.,T.
目录
上页
下页
退出
2010-5-21 62
在 Visual FoxPro系统中, 经常需要与一种
特殊的, 数据, 空值 (NULL( 或,NULL.) 打交道 。
表中字段可根据需要允许或限制其取空值 。 空
值对于逻辑运算的影响如表 2-7所示 。
表 2-7 NULL值对逻辑运算的影响
逻辑运算 A=.T,A=.F,A=.NULL
A,AND,NULL,NULL,F.,NULL.
A,OR,NULL,T.,NULL.,NULL.
.NOT,A,F.,T.,NULL.
目录
上页
下页
退出
2010-5-21 63
对于两个逻辑型数据, 一般不用比较的方
式来确定它们之间的关系, 而是直接运用逻辑
运算的方式进行处理 。 如对表中记录实施选择
运算时, 是用 FOR <条件 >或 WHILE <条件 >进行
逻辑判断, 其中 <条件 >就是一个关系表达式或
逻辑表达式 。 对于以逻辑型字段进行逻辑判断
的情况, 一般不用关系表达式而直接用逻辑表
达式 。 如, 性别, 是一个逻辑型字段, 并约定
,真, 表示男性,, 假, 表示女性 。 那么判断
某记录对应人员是否为男性, 用 FOR 性别, 而
不用 FOR 性别 =.T.,判 断 是否 为 女性, 用
FOR,NOT,性别, 不用 FOR 性别 =.F.。
目录
上页
下页
退出
2010-5-21 64
6.运算符优先级
先执行算术运算, 字符运算和日期运算, 再执行
关系运算, 最后执行逻辑运算 。 当然可以用括号来改
变其优先级 。 括号括起来的应优先运算 。
例, 多种表达式运算示例
9>3 AND 5<3 OR "a"$"ab" AND,NOT.f.
主屏幕显示:
.t.
(100%3=1) AND (15-4=0) OR "张 "="张三 "
主屏幕显示:
.f.
目录
上页
下页
退出
2010-5-21 65
第三节 Visual FoxPro常用函数
Visual FoxPro系统中, 函数是一段程序代码, 用
来进行一些特定的运算或操作, 支持和完善命令的功
能, 帮助用户完成各种操作与管理 。 Visual FoxPro系
统有数百种不同函数, 按函数提供方式, 可分为系统
( 标准 ) 函数和用户自定义函函数, 按函数运算, 处
理对象和结果的数据类型, 可分为数值型函数, 字符
型函数, 逻辑型函数, 日期时间型函数, 数据转换函
数等, 按函数的功能和特点, 可分为数据处理函数,
数据库操作函数, 文件管理函数, 键盘和鼠标处理函
数, 输出函数, 窗口界面操作函数, 程序设计函数,
数据库环境函数, 网络操作函数, 系统信息函数, 动
态数据操作函数等 。
目录
上页
下页
退出
2010-5-21 66
Visual FoxPro的函数由函数名与自变量两部
分组成。标准函数是 Visual FoxPro系统提供的系
统函数,其函数名是 Visual FoxPro保留字,自定
义函数是用户自已定义的函数,函数名用户指定;
自变量必须用圆括号对括起来,如有多个自变量,
各自变量以逗号分隔;有些函数可省略自变量,
或不需自变量,但也必须保留括号;自变量数据
类型由函数的定义确定,数据形式可以是常量、
变量、函数或表达式等。
函数是一类数据项,除个别(如宏替换)函
数外,函数都不能像命令一样单独使用,只能作
为命令的一部分进行操作运算。
目录
上页
下页
退出
2010-5-21 67
一, 数值函数
数值函数用于数值运算, 其自变量与函数都是
数值型数据 。
1,取绝对值函数 ABS( )和符号函数 SIGN( )
【 格式 】 ABS(<nExp>)
SIGN(<nExp>)
【 功能 】 计算 nExp的值, 并返回该值的绝对值 。
SIGN()返回指定数值表达式的符号 。
2,指数函数 EXP( )
【 格式 】 EXP(<nExp>)
【 功能 】 求以 e为底, nExp值为指数的幂, 即返
回 ex的值 。
3,取整函数 INT( )
【 格式 】 INT(<nExp>)
【 功能 】 计算 nExp的值, 返回该值的整数部分 。
目录
上页
下页
退出
2010-5-21 68
4,上界函数 CEILING( )
【 格式 】 CEILING(<nExp>)
【 功能 】 计算 nExp的值, 返回一个大于或等于该值
的最小整数 。
5,下界函数 FLOOR( )
【 格式 】 FLOOR(<nExp>)
【 功能 】 计算 nExp的值, 返回一个小于或等于该值
的最大整数 。
6,自然对数函数 LOG( )
【 格式 】 LOG(<nExp>)
【 功能 】 求 nExp的自然对数 。 nExp的值必须为正数 。
7,常用对数函数
【 格式 】 LOG10(<nExp>)
【 功能 】 求 nExp的常用对数 。 nExp的值必须为正数 。
目录
上页
下页
退出
2010-5-21 69
8,平方根函数 SQRT( )
【 格式 】 SQRT(<nExp>)
【 功能 】 求非负 nExp的平方根 。
9,最大值函数 MAX( )和最小值函数 MIN( )
【 格式 】 MAX(<nExp1>,< nExp2>[,< nExp3>...])
MIN(<nExp1>,< nExp2>[,< nExp3>...])
【 功能 】 返回数值表达式中的最大值 MAX( )和最小 】
值 MIN( )。
10,求余数函数 MOD( )
【 格式 】 MOD(<nExp1>,<nExp2>)
【 功能 】 返回 nExp1除以 nExp2的余数,符号与 nExp2
相同 。 如果两个表达式符号相异, 则函数值
为两数相除的余数再加上除数的值 。
目录
上页
下页
退出
2010-5-21 70
11,四舍五入函数 ROUND( )
【 格式 】 ROUND(<nExp1>,< nExp2>)
【 功能 】 返回 nExp1四舍五入的值, nExp2表示
保留的小数位数 。
12,π 函数 PI( )
【 格式 】 PI( )
【 功能 】 返回常量 π 的近似值
13,正弦函数 SIN( )
【 格式 】 SIN(<nExp>)
【 功能 】 返回 nExp的正弦值 。 nExp以弧度为单
位, 函数值域为 [-1,1]。
14,余弦函数 COS( )
【 格式 】 COS(<nExp>)
【 功能 】 返回 nExp的余弦值 。 nExp以弧度为单
位, 函数的值域为 [-1,1]。
目录
上页
下页
退出
2010-5-21 71
15,正切函数 TAN( )
【 格式 】 TAN(<nExp>)
【 功能 】 返回 nExp的正切值 。 nExp以弧度为单位, 其
值为 π /2或 - π /2时, 系统返回一个绝对值很大的数 。
16,反正弦函数 ASIN( )
【 格式 】 ASIN(<nExp>)
【 功能 】 返回 nExp的反正弦值 。 自变量值必须在 [-1,1]
内, 函数值为弧度, 且值域为 [-π /2,π /2]。
17,反余弦函数 ACOS( )
【 格式 】 ACOS(<nExp>)
【 功能 】 返回 nExp的反余弦值 。 自变量的值必须在 [-
1,1]内, 函数值为弧度, 值域为 [-π /2,π /2]。
18,反正切函数 ATAN( )
【 格式 】 ATAN(<nExp>)
【 功能 】 返回 nExp的反正切值 。 函数值为弧度, 值域
为 (-π /2,π /2)。
目录
上页
下页
退出
2010-5-21 72
分析下例各命令的执行结果:
例 1,a=3
ABS(10-a),ABS(a-10),SIGN(10-a),SIGN(a-10)
例 2,x=6.9
INT(x),INT(-x),CEILING(x),CEILING(-x),FLOOR(x),FLOOR(-x)
例 3,x=314.356
ROUND(x,2),ROUND(x,1),ROUND(x,0),ROUND(x,-1)
例 4:
MOD(10,3),MOD(10,-3),MOD(-10,3),MOD(-10,-3)
例 5,MOD()函数与 INT()函数使用示例
x=356
x1=INT(x/100)
x2=INT(MOD(x,100)/10)
x3=MOD(x,10)
x1,x2,x3
目录
上页
下页
退出
2010-5-21 73
二, 字符函数
字符函数是处理字符型数据的函数, 其自变量或函数
值中至少有一个是字符型数据 。 函数中涉及的字符型数据
项, 均以 cExp表示 。
1,子串位置函数
【 格式 】 AT(<cExp1>,< cExp 2>[,< nExp>])
【 功能 】 返回串 cExp1在串 cExp2中的起始位置 。 函数值
为整数 。 如果串 cExp2不包含串 cExp1,函数返回值为零 。
第三个参数数值表达式用于表明要搜索字符表达式 1在
字符表达式 2中第几次出现, 其默认值为 1,可缺省 。
例如, a="This is Visual FoxPro"
AT("fox",a),ATC("fox",a),AT("is",a,3),AT("th",a)
主屏幕显示:
0 16 10 0
目录
上页
下页
退出
2010-5-21 74
2,取子串函数
【 格式 】 1) LEFT(<cExp>,<nExp>)
2) RIGHT(<cExp >,< nExp>)
3) SUBSTR(<cExp>,<nExp1>[,<nExp2>])
【 功能 】 1)返回从 cExp串中第一个字符开始, 截取 nExp
个字符的子串 。
2)返回从 cExp串中右边第一个字符开始,截取
nExp个字符的子串 。
3)返回从串 cExp中第 nExp1个字符开始, 截取
nExp2个字符的子串 。
例如, a="This is Visual FoxPro"
LEFT(a,3),RIGHT(a,4),SUBSTR(a,6,2)+SUBSTR(a,9)
主屏幕显示:
Thi xPro isVisualFoxPro
目录
上页
下页
退出
2010-5-21 75
3,字符串长度函数 LEN( )
【 格式 】 LEN(<cExp>)
【 功能 】 返回 cExp串的字符数 ( 长度 ) 。 函数值为 N型 。
4,删除字符串前后空格函数
【 格式 】 1) LTRIM(<cExp>)
2) RTRIM | TRIM(<cExp>)
3) ALLTRIM(<cExp>)
【 功能 】 1) 删除 cExp串的前导空格字符 。
2) 删除 cExp串尾部空格字符 。
3) 删除字符串前导和尾部空格后的字符串 。
5,空格函数 SPACE( )
【 格式 】 SPACE (<nExp>)
【 功能 】 返回一个包含 nExp个空格的字符串 。
目录
上页
下页
退出
2010-5-21 76
6,字符串替换函数 STUFF( )
【 格式 】 STUFF(<cExp1>,<nExp1>,<nExp2>,<cExp2>)
【 功能 】 从 nExp1指 定 位 置 开始, 用 cExp2串替换
cExp1串中 nExp2个字符 。
例如, a="This is Visual FoxPro"
b="xxx"
STUFF(a,6,2,b)
STUFF(a,6,0,b)
STUFF(a,6,2,"")
主屏幕显示:
This xxx Visual FoxPro
This xxxis Visual FoxPro
This Visual FoxPro
目录
上页
下页
退出
2010-5-21 77
7,字符复制函数 REPLICATE( )
【 格式 】 REPLICATE (<cExp>,<nExp>)
【 功能 】 返回将 cExp串重复 nExp次的字符串 。
8,计算子串出现次数函数 OCCURS( )
【 格式 】 OCCURS (<cExp1>,<cExp2>)
【 功能】 返回第一个字符串在第二个字符串中出现的次数。
例如, a="This is Visual FoxPro"
OCCURS("is",a),OCCURS("fox",a),OCCURS("o",a)
主屏幕显示:
3 0 2
目录
上页
下页
退出
2010-5-21 78
9,大小写转换函数 LOWER( ) 和 UPPER( )
【 格式 】 LOWER (<cExp>)
UPPER (<cExp>)
【 功能 】 LOWER( )将 cExp串中字母全部变成小写
字母, UPPER( )将 cExp串中字母全部变成大写字
母, 其它字符不变 。
例如,? LOWER("ABCxyz"),UPPER("abcefg123")
主屏幕显示:
abcxyz ABCEFG123
10,宏替换函数 &
【 格式 】 & < cVar >[.< cExp >]
【 功能 】 替换出字符型变量 cVar中字符 。
目录
上页
下页
退出
2010-5-21 79
11,字符替换函数
【 格式】 CHRTRAN(字符表达式 1,字符表达式 2,字符表达式 3)
【 功能】 当第一个字符串中的一个或多个字符与第二个字符串中
的某个字符相匹配时,就用第三个字符串中对应 (相同位置)的
字符替换这些字符。如果第三个串字符包含的字符个数少于第二
个字符串包含的字符个数,因而没有对应字符,那么第一个字符
串中相匹配的字符将被删除。如果第三个字符串包含的字符个数
多于第二个字符串包含的字符个数,多余的字符被忽略。
例如,? CHRTRAN("abcdef","bdf","123")
主屏幕显示,a1c2e3
? CHRTRAN("abcdef","bdf","12"),
主屏幕显示,a1c2e
? CHRTRAN("中华人民共和国 ","华和 ","1234")
主屏幕显示,中 12人民共 34国
目录
上页
下页
退出
2010-5-21 80
三, 日期时间函数
日期时间函数是处理日期型或日期时间型数据
的函数 。 其自变量为日期型表达式 dExp或日期时间
型表达式 tExp。
1,系统日期函数 DATE( )
【 格式 】 DATE()
【 功能 】 返回当前系统日期, 此日期由 Windows
系统设置 。 函数值为 D型 。
2,系统时间函数 TIME( )
【 格式 】 TIME([<nExp>])
【 功能 】 返回当前系统时间, 时间显示格式为
hh:mm:ss。 若选择了 nExp, 则不管为何值, 返回
的系统时间还包括秒的小数部分, 精确至小数点后
两位 。 函数值为 C型 。
目录
上页
下页
退出
2010-5-21 81
3,日期函数 DAY( )
【 格式 】 DAY(<dExp>)
【 功能 】 返回 dExp式中的天数 。 函数值为 N型
4,星期函数 DOW( ),CDOW( )
【 格式 】 DOW(<dExp>)
CDOW(<dExp>)
【 功能 】 DOW( )函数返回 dExp式中星期的数值, 用 1~7表
示星期日~星期六 。 函数值为 N型 。 CDOW( ) 函数返回
dExp式中星期的英文名称 。 函数值为 C型 。
5,月份函数 MONTH( ),CMONTH( )
【 格式 】 MONTH(<dExp>)
CMONTH(<dExp>)
【 功能 】 MONTH( )函数返回 dExp式中月份数 。 函数值为 N
型 。 CMONTH( )函数则返回月份的英文名 。 函数值为 C型 。
6,年份函数 YEAR( )
【 格式 】 YEAR(<dExp>)
【 功能 】 函数返回 dExp式中年份值 。 函数值为 N型 。
目录
上页
下页
退出
2010-5-21 82
7,求时, 分, 秒函数
【 格式 】 1) HOUR(<dExp>)
2) MINUTE(<dExp>)
3) SEC(<dExp>)
【 功能 】 1) HOUR()函数返回日期时间型表达式所对应的
小时部分 。
2) MINUTE()函数返回日期时间型表达式所对应
的分钟部分 。
3) SEC()函数返回日期时间型表达式所对应的
秒钟部分 。
例如, x={^2004-06-20,05:25:45 p}
HOUR(x),MINUTE(x),SEC(x)
主屏幕显示:
17 25 45
目录
上页
下页
退出
2010-5-21 83
四, 转换函数
在数据库应用的过程中, 经常要将不同数据类
型的数据进行相应转换, 满足实际应用的需要 。
Visual FoxPro系统提供了若干个转换函数, 较好
地解决了数据类型转换的问题 。
1,ASCII码函数 ASC( )
【 格式 】 ASC (<cExp>)
【 功能 】 返回 cExp串首字符的 ASCII码值 。 函数
值为 N型 。
2,ASCII字符函数 CHR( )
【 格式 】 CHR(<nExp >)
【 功能 】 返回以 nExp值为 ASCII码的 ASCII字符 。
函数值为 C型 。
例如,? CHR(ASC("M")+ASC("a")-ASC("A"))
目录
上页
下页
退出
2010-5-21 84
3,字符日期型转换函数 CTOD( )
【 格式 】 CTOD(<cExp>)
【 功能 】 把, ×× /×× /××, 格式的 cExp串转换成
对应日期值 。 函数值为 D型 。
4,日期字符型转换函数 DTOC( )
【 格式 】 DTOC(<dExp >[,1] )
【 功能 】 把日期 dExp转换成相应的字符串 。 函数值
为 C型 。
5,数值字符型转换函数 STR( )
【 格式 】 STR(<nExp1>[,< nExp2>][,< nExp3>])
【 功能 】 将 nExp1的数值转换成字符串形式 。 函数
值为 C型 。
6,字符数值型转换函数 VAL( )
【 格式 】 VAL (<cExp>)
【 功能 】 将 cExp串中数字转换成对应数值, 转换结
果取两位小数 。 函数值为 N型 。
目录
上页
下页
退出
2010-5-21 85
7.宏替换函数
【 格式 】 &字符型变量 [.]
【 功能 】 替换出字符变量的内容 。 如果该函数与其后
的字符无明确分界, 则要用,,” 作为函数结束标记 。
例如, a="5"
b="6"
c56="good"
good=123456
c&a.&b,&c56
主屏幕显示:
good 123456
目录
上页
下页
退出
2010-5-21 86
五, 测试函数
在数据库应用的操作过程中, 用户需要了解数据
对象的类型, 状态等属性, Visual FoxPro提供了相关
的测试函数, 使用户能够准确地获取操作对象的相关
属性 。
1,数据类型函数 TYPE( )
【 格式 】 TYPE(<cExp >)
【 功能 】 返回 cExp 串表示的数据对象的数据类型, 返
回值是一个表示数据类型的大写字母 。 C,字符型, D:
日期型, N,数值型, L,逻辑型, M,备注型, G,通
用型, U,未定义 。
2,文件查找函数 FILE( )
【 格式 】 FILE(<cExp>)
【 功能 】 根据 cExp串中指定路径查找文件, 如未指定
路径, 则在默认目录中查找 。 文件存在, 返回逻辑真
(.T.) 值, 否则为逻辑假 (.F.)值 。
目录
上页
下页
退出
2010-5-21 87
3,条件测试函数 IIF( )
【 格式 】 IIF(<lExp >,<eExp 1>,<eExp2>)
【 功能 】 逻辑表达式 lExp值为真 (.T.),返回表达式
eExp1的值, 否则返回表达式 eExp2的值 。 eExp1和
eExp2可以是任意数据类型的表达式 。
例, IIF()函数使用示例
a=10
b=50
IIF(a>10,a-5,IIF(b>=50,b-20,b+20))
主屏幕显示:
30
目录
上页
下页
退出
2010-5-21 88
4,表结束标志测试函数 EOF( )
【 格式 】 EOF([<工作区号 > | <别名 >])
【 功能 】 测试记录指针是否移到表结束处 。 如果记录指针指向表
尾记录, 函数返回真 (,T.), 否则为假 (,F.) 。
注意:
( 1)文件尾不是表中的最后一条记录, 而是最后一条记录的后面 。
( 2)如指定工作区没有打开表文件, 函数返回值为假 。
( 3)表文件中不包含任何记录, 函数返回值为真 。
例, EOF()函数使用示例
USE 图书 && 打开图书表
GO BOTTOM && 将记录指针指向最后一条记录
EOF() && 主屏幕显示,.f.
SKIP && 记录指针下移一条
EOF() && 主屏幕显示,.t.
USE && 关闭图书表
目录
上页
下页
退出
2010-5-21 89
5,表起始标识测试函数 BOF ( )
【 格式 】 BOF ([<工作区号 > | <别名 >])
【 功能 】 测试记录指针是否移到表起始处 。 如果记录指针
指向表中首记录前面, 函数返回真 (,T.), 否则为假
(,F.) 。
6,当前记录号函数 RECNO()
【 格式 】 RECNO([<工作区号 > | <别名 >])
【 功能 】 返回指定工作区中表的当前记录的记录号 。 对于
空表返回值为 1。
注意,
( 1) 如果指定工作区没有打开表文件, 返回函数值 0。
( 2) 如果记录指针指向文件尾, 函数值为表文件的记录
数 +1。
( 3) 如果记录指针指向文件首, 函数值为表文件中第一
条记录的记录号 。
目录
上页
下页
退出
2010-5-21 90
例,RECNO()函数使用示例
USE 图书
GO BOTTOM
? RECNO() && 屏幕显示,49 此表总共 49条记录
SKIP && 记录指针下移一条
? RECNO() && 屏幕显示,50
GO 1
SKIP –1
? RECNO() && 屏幕显示,1
USE
目录
上页
下页
退出
2010-5-21 91
7,当前记录逻辑删除标志测试函数 DELETED( )
【 格式 】 DELETED([<工作区号 > | <别名 >])
【 功能 】 测试指定工作区中表的当前记录是否被逻辑删
除 。 如果有逻辑删除标记, 函数返回真 (.T.),否则为
假 (.F.)。
8,记录数函数 RECCOUNT( )
【 格式 】 RECCOUNT ([<工作区号 > | <别名 >])
【 功能 】 返回指定工作区中表的记录个数 。 如果工作区
中没有打开表则返回 0。
9,记录大小测试函数 RECSIZE( )
【 格式 】 RECSIZE( [<工作区号 > | <别名 >] )
【 功能 】 返回指定工作区中表的记录总长度 。 如果工作
区中没有打开表则返回 0。
目录
上页
下页
退出
2010-5-21 92
10,值域测试函数 BETWEEN( )
【 格式 】 BETWEEN(表达式 A,表达式 B,表达式 C)
【功能】判断一个表达式的值是否介于另两个表达式值之间。
当表达式 A值大于等于表达式 B的值,且小于等于表达式 C的
值时,函数值为逻辑值真,否则为假。如果表达式 B或表达
式 C有一个是 NULL值则函数值也是 NULL值。
例如, x=10
y=50
BETWEEN(15,x,y),BETWEEN(15,NULL,x),;
BETWEEN(15,x,null)
屏幕显示:
.t.,null.,null,
目录
上页
下页
退出
2010-5-21 93
11.空值( NULL) 测试函数 ISNULL( )
【 格式 】 ISNULL(表达式 )
【 功能 】 测试一个表达式的结果是否为 NULL值, 若是
NULL值返回逻辑真 (,t.), 否则返回逻辑假 (,f.) 。
例如, x=null
ISNULL(x)
屏幕显示:
.T.
12., 空, 值测试函数 EMPTY( )
【 格式 】 EMPTY(表达式 )
【功能】根据表达式的结果是否为, 空, 值,返回逻辑
真(,t.) 或逻辑假 (.f.)。
目录
上页
下页
退出
2010-5-21 94
13,屏幕列坐标和行坐标函数 COL( ),ROW( )
【 格式 】 COL( )
ROW( )
【 功能 】 COL( )返回光标的列坐标值, ROW( )返回光
标的行坐标值 。
14.打印机列坐标和行坐标函数 PCOL( ) PROW( )
【 格式 】 PCOL( )
PROW( )
【 功能 】 返回打印机打印头所处位置的列坐标和行坐
标 。
2010-5-21 95
结 束