Visual Fox Pro
信息与数据
信息:可以被传递,可以被理解
数据:1.参与运算的数值类型(例如1,5,9)
2.不能参与运算的非数值型数据(例如“Hello World”,‘男’)
关系:信息用数据来表示,数据是信息的载体
数据处理
海量的数据通过加工处理得到想要的信息
例如:13 07 28 20050521 12 4 6
省份 城市 区县 出生日期 辖区派出所编号 性别 随机码
数据库系统
- 数据库(DB):放置数据的虚拟仓库
- 数据库管理系统(DBMS):维护和统筹规划数据库
- 数据库系统(DBS):应用程序,操作系统,服务器,数据库,是一个完整的数据生态。
数据库发展史
-
人工管理
(入学资料,身份证复印件,户口本复印件,个人档案) -
文件系统管理
(Windows系统,每个文件相互独立) -
数据库系统管理
(vf,mysql,oracle…)
数据模型
- 层次模型
- 网状模型
- 关系模型
面向对象模型
关系型数据库特点
- 表中记录的增删不会影响到表的结构
- 每列中的字段是唯一的
- 不允许出现完全相同的两行
- 字段和记录的顺序可以随意更改
- 字段不可分割,原子性(原子是组成世界的最小单位)
常见的关系型数据库
Oracle MySql VFP SqlServer Access
vf发展史
- 1986 年 vf1.0
- 1998 年 vf6.0
vf启动
- 快捷方式
- 开始 ----> vf程序(狐狸图标)
vf关闭
- 点关闭按钮
- 文件 ----> 退出
- 命令窗口中输quit回车
环境配置
- 图形操作方式修改-----修改默认文件保存位置
- 使用命令方式修改-----modify window screen font “宋体”,32(修改控制台显示字体样式)
vf工作方式
- 交互操作方式(鼠标点击方式)
- 命令交互方式(每次只能执行一条命令)
- 程序执行方式(多条命令同时执行)
命令演示
*键盘输入数值,数值存储在age中
input to age
?age
*控制台打印字符串,数值以及运算结果
?"Hellow World"
?13
?12*21
*清空控制台
clear
*打印当前日期
?date()
*打印当前时间
?time()
命令规则
- 通常以命令动词开头create database input to a
- 各部分(不同的单词)之间要使用空格隔开
- 一般情况下一行只写一条口令,执行一条口令,如果一行写不下,使用续行符**;**连接
常用数据类型
数据类型 | 取值范围 | 说明 |
---|---|---|
字符型C | 任意长度最大值255 | 任意文本 |
货币型Y | -922337203685477.5808~+ | 货币量 |
日期型 | 0001-01-01~9999-12-31 | 年月日 |
日期时间 | 0001-01-01 00:00:00 a | 日期和时间 |
逻辑型L | .T. .F. .t. .f. .Y. .N. .n. .y. | 布尔值 |
整型I | -2147483647~+ | 整数 |
数值型N | -0.9999999999E+19~0.9999999999E+20 | 整数或小数 |
浮点型 | 同上 | 同上 |
双精度 | +/-4.94065645841247E-324~+/-8.9884656743115E307 | 双精度浮点数 |
通用型G | 受可用空间限制 | OLE对象引用 |
备注型M | 数据块引用 |
常量
数据处理中其值固定不变的量称为常量
PI = 3.14
S = PI*r*r &&PI表示圆周率,其值固定,所以为常量
数值型常量
-
整数:由数字组成,如0,-2,3
-
实数:1.十进制表示形式:由数字,正负号,小数点组成。如0.23,-3.14
2.指数形式:由数字,小数点,E或e组成 1.23*(10^3)------------->1.23E3
字符型常量
字符是使用定界符(“”‘’[])括起来的一些列有效字符,也称为字符串;字符串最大长度为254个字符
>?'123'
>?[看着我的"眼睛"]
❤注意❤:
- 如果字符串中包含一种定界符,必须使用另一种定界符括起来
- 定界符必须成对出现
- 空串和空格字符串不一样
- 字母的大小写不同
- 定界符内纯数字则为字符类型
逻辑型常量
只有**真(True)和假(False)**两种值
表现方式:
- 逻辑真:.Y. .y. .T. .t.
- 逻辑假:.N. .n. .F. .f.
货币型常量
以$开头,四舍五入到小数点后4位
?$100.12345 &&输出结果为100.1235
日期型常量
必须使用**{ }**括起来
-
通用格式{mm/dd/yyyy}
-
严格格式{^yyyy-mm-dd}
-
set strictdate to 0 设置通用
-
set strictdate to 1 设置严格
❤通用格式与工具中区域设置相关联,使用前确定区域设置是否正确
日期时间型常量
-
1.通用格式:{mm/dd/yyyy[hh[:mm][:ss][a|p]]}
?{9/15/99 8:45}
-
2.严格格式:{^yyyy-mm-dd[hh[:mm][:ss][a|p]]}
?{^2008-08-08 08:08:08 p}
变量
- 值可以改变的量
- 分为字段变量和内存变量
- 变量拥有名称,统称为标识符
命名规则
- 由数字,字母,下划线组成
- 以字母,下划线开头
- 避免使用vf关键字
变量的定义和赋值
-
直接创建
变量名 = 表达式 | 值
x=2 x = 3*3
-
同时为多个变量赋值
store 表达式 | 值 to 变量名
store 3 to a,b,c
显示变量内存
display memory [like 变量通配名]
变量通配名中?表示一个字符,*表示任意个字符
删除内存变量
- clear memory —删除所有变量
- release 变量名 —删除指定变量(支持多个)
变量的输出?|??
- ? 换行输出
- ?? 不换行输出
数组
- 数组是按一定顺序排列的数据集合
- 数组中每一个数据称为一个元素
- 数组中每一个元素的序号称为下标(从1开始)
- 数组中的所有元素在内存中是连续存放的
数组的定义
语法:dimension | declare 数组名(元素个数)
dimension Array1(3)
declare Array2(3)
&&以上两种方式都能进行数组的创建
❤数组定义后默认为每个元素赋值,默认值为**.F.**
&&定义成功后使用命令查看数组内元素
display memory
数组的访问
-
使用元素下标访问对应元素
&&打印数组中的元素 ?Array1(1) ?Array1(2) ?Array1(3)
数组中元素的赋值
-
单独赋值
&&使用数组下标对单个元素赋值 Array1(2) = "中国" Array1(3) = "遥遥领先"
-
统一赋值
&&使用变量赋值方式对数组中的所有元素进行统一赋值 Array1 = "我爱VF" ?Array1(1),Array1(2),Array1(3) &&"我爱VF" "我爱VF" "我爱VF"
二维数组
语法:dimension | declare 数组名(行数,列数)
declare Array2(2,4) &&创建一个两行四列的数组
二维数组的访问
数组名(行数,列数)
?Array2(1,1)
?Array2(1,2)
?Array2(1,3)
?Array2(1,4)
二维数组的赋值
Array2(1,1) = "华为手机"
运算符
算数运算符
运算符 | 说明 |
---|---|
+ - * / | 与数学中用法相同 |
() | 子表达式分组,提高优先级 |
**或^ | 乘方 |
% | 模运算、取余操作 |
?3+2 &&结果为5
?3-2 &&结果为1
?3*2 &&结果为6
?3/2 &&结果为1.5
?(3-2)*3 &&结果为3
?3**2 &&结果为9
?3^2 &&结果为9
?10%3 &&结果为1
字符运算符
运算符 | 操作 |
---|---|
+ | 字符串连接 |
- | 字符串连接 ,删除连接处空格 |
$ | 包含运算 ,结果为逻辑型 |
a = "华为 "
b = "遥遥领先"
?a+b &&>华为 遥遥领先
?a-b &&>华为遥遥领先
?"abc"$"abcdefg" &&>.T.
日期和日期时间型运算
运算符 | 操作 |
---|---|
+ | {^2004-02-18}+10 {^2004-02-18 11:10 a}+10 |
{^2004-02-18}- {^2004-02-8} | |
- | {^2004-02-18 11:10} - {^2004-02-18 11:10} |
{^2004-02-18}-10 |
?{^2023-09-21}+10 &&2023-10-01
?{^2023-09-21}-10 &&2023-9-11
?{^2023-09-21 8:8:8 a}-10 &&2023-9-21 08:07:58 AM
?{^2023-09-21 16:28:30}-{^1996-03-14 08:30:00} &&868521510
❤两个日期不能相加;日期与日期时间型不能相减
关系运算符
运算符 | 操作 | 示例 |
---|---|---|
< 、 > | 小于、大于 | 10>20;10<20 |
= | 等于 | 10=20;’abc’=‘ab |
<>、#、!= | 不等于 | 10<>20 |
>= <= | 大于等于 小于等于 | 10>=20 10<=20 |
= = | 精确比较 ,针对字符串 | “abc”==“ab” |
逻辑运算符
运算符 | 操作 | 示例 |
---|---|---|
NOT | ! | 逻辑非 | NOT .F. |
AND | 逻辑与 | .T. AND .F. |
OR | 逻辑或 | T. OR .F. |
运算符优先级
数值运算符 > 关系运算符 > 逻辑运算符
表达式
由不同运算符组成的表达式
&&算数表达式
#DEFINE PI=3.14
R=10
S=PI*R*R
&&字符表达式
“姓名:”+TRIM(js.xm)
LEFT(“中华人民共和国”,4)
&&日期表达式
DATE()-{^2004-02-10}
{^2004-02-10}+10
&&关系表达式
30>30
‘A’==‘a’
DATE()-10>{^2004-02-10}
&&逻辑表达式
NOT (50>300)
‘A’=‘a’ AND .F.
.T. OR .F.
函数
定义:函数是一种预先编制好的程序代码,可供用户调用。
注意:函数可以接受0或多个参数
函数只能由一个返回值
使用:函数名([参数],[参数2])
分类:
-
数值函数
函数名 说明 示例 结果 abs() 求绝对值 abs(-5) 5 int() 取整 int(10.5) 10 round() 四舍五入 round(3.1415,2) 3.14 sqrt() 求算数平方根 sqrt(9) 3 log() 求自然对数 log(10) 2.3 max() 最大值 max(1,5,6,2) 6 min() 最小值 min(2,5,9,3) 2 mod() 取余 mod(10,3) 1 rand() 随机数,默认0~1随机数 int(rand()*10) 0~10随机数 ?abs(-5) &&绝对值 ?max(10,5,2) &&求最大值 ?int(10.5) &&求整 ?round(3.14159) &&四舍五入 ?round(3.14159,3) &&四舍五入 ?sqrt(9) &&开平方根 ?mod(10,3) &&取余 ?rand() &&随机数 ?int(rand()*10) &&随机数 ?log(10) &&自然对数
-
字符函数
函数名 说明 示例 结果 space() 生成空格 space(2) " " trim() 删除左右两边空格 trim(" abc ") “abc” ltrim() 删除左边空格 ltrim(" abc ") "abc " rtrim() 删除右边空格 rtrim(" abc ") " abc" alltrim() 删除左右两边空格 alltrim(" 132 ") “132” left() 从左边开始截取指定字符串 left(“abcd”,2) ab right() 从右边开始截取指定字符串 right(“abcd”,2) cd substr() 从指定位置开始,截取指定个个数字符串 substr(“abcdef”,3,2) cd len() 计算字符串的长度 len(“abc”) 3 at() 返回一个字符串在另一个字符串中出现的位置 at(‘b’,‘abcabc’) 2 ?trim(" 1 12 2 ") ?alltrim(" 1 12 2 ") ?left("abcd",2) ?right("abcd",2) ?substr("abcdef",2,3) ?len("jhfdk") ?AT('b','abcabc') ?AT('b','abcabc',2)
-
日期时间函数
函数名 说明 示例 结果 date() 返回当前系统日期 date() 09/26/23 year() 返回日期表达式年份 year({^2023-09-26}) 2023 month() 返回日期表达式月份 month({^2023-09-26}) 9 day() 返回日期表达式日的数值 day({^2023-09-26}) 26 time() 返回当时系统时间hh:mm:ss time() 10:56:31 datetime() 返回当时系统日期时间 datetime() 09/26/23 10:56:31 AM dow() 返回星期几的域 dow({^2023-09-26}) 3 ?DOW(DATE()) ?date() ?year({^2023-09-26}) ?month({^2023-09-26}) ?day({^2023-09-26}) ?time() ?datetime()
-
类型转换函数
函数名 说明 示例 结果 str() 将数值转换为字符串 str(123) “123” val() 将字符型数值转换为数值型数据 val(“132”) 123 ctod() 将字符型日期转换为日期型数据 ctod(“09/26/23”) 09/26/23 dtoc() 将日期类型转换为字符型类 dtoc({^2023-09-26}) 09/26/23 upper() 将小写字母转换为大写 upper(“abc”) ABC lower() 将大写字母转换为小写 lower(“ABC”) abc asc() 返回第一个字符的ASCII码 asc(“a”) 97 chr() 将数值转换为ASCII对应的字符 chr(97) a ?str(123) ?val("123") ?ctod("09/26/23") ?dtoc({^2023-09-26}) ?upper("abc") ?lower("ABC") ?asc("a") ?chr(97)
-
其他函数
函数名 说明 示例 结果 between() 判断是否位于某个区间内 BETWEEN(“b”,“a”,“c”) .T. inkey() 返回所摁键盘的键值 INKEY(),INKEY(0),INKEY(2) type() 返回查询的数据类型 type(123) N iif() 判断函数 iif(a=b,“T”,“F”) T diskspace() 返回空闲磁盘空间 diskspace() file() 查询文件是否存在 file(“c:\sparkraw.log”) .T. messagebox() 创建消息对话框 ?MESSAGEBOX(“是否重来”,4+32+256, “错” ) getfile 返回一个和指定路径中文件相对应的 File 对象 empty 测试是否为空 empty(“123”) .F. ?INKEY(),INKEY(0),INKEY(2) ?DISKSPACE() ?FILE("c:\sparkraw.log") ?MESSAGEBOX("是否重来",4+32+256, "错" ) ?empty(133)
|
| file() | 查询文件是否存在 | file(“c:\sparkraw.log”) | .T. |
| messagebox() | 创建消息对话框 | ?MESSAGEBOX(“是否重来”,4+32+256, “错” ) | |
| getfile | 返回一个和指定路径中文件相对应的 File 对象 | | |
| empty | 测试是否为空 | empty(“123”) | .F. |?INKEY(),INKEY(0),INKEY(2) ?DISKSPACE() ?FILE("c:\sparkraw.log") ?MESSAGEBOX("是否重来",4+32+256, "错" ) ?empty(133)