VFP-VisualFox Pro

发布时间:2025-12-09 11:54:40 浏览次数:1

1、VFP基本概念及术语

1.1、VFP概念

Visual FoxPro是关系型数据库管理系统的典型代表之一。

Visual FoxPro是一个可运行于Windows平台之上的32位数据库管理系统。

1.2、数据库基础知识

  1. 数据:数据是指能被计算机存储和处理、反映客观事物的符号。
  2. 数据处理:数据处理是指对数据进行收集、存储、分类、计算、统计、检索及传输的过程。
  3. 数据库:数据库(DataBase,DB)是有组织的、可共享的相关数据的集合。
  4. 数据库管理系统:(DataBase Management System,DBMS)是管理数据库的软件系统。功能是管理和维护数据。
  5. 实体和实体集:实体是现实世界中客观存在并且可以互相区别的事物。实体集是同一类实体组成的集合。
  6. 联系的分类:一对一关系、一对多关系、多对多关系。
  7. 表格:表格来管理数据,二维表反映事物之间的关系。
  8. 数据类型:层次模型、网状模型、关系模型。
  9. 关系模型:关系模型是用二维表格的形式来表示实体与实体之间联系的数据模型。
  10. 数据库类型:层次数据库、网状数据库、关系数据库。
    • 层次反映一对多的联系
    • 网状反映多对多的联系
    • 关系反映全部联系

2、VFP基础

2.1、基本命令

?"How are you"&&在屏幕上显示How are you 并换行??"How are you"&&在屏幕上显示How are you 不换行clear&&清除屏幕显示信息?date()&&屏幕上按"月/日/年"的格式显示当前系统日期?time()&&显示时间到秒use <表文件名>[in 工作区号][alias 别名]&&打开表create table|dbf <表文件名>(<字段名><类型>[宽度[,小数位]]) &&创建表help <帮助主题> &&获取命令和楷书的帮助信息

2.2、数据运算符

运算符名称运算符名称
+加法-减法
*乘法/除法
^或**乘方%求余
示例:?2+3&&屏幕上显示5?2*3&&屏幕上显示6?2**3&&屏幕上显示8?2^3&&屏幕上显示8?3-2&&屏幕上显示1?6/2&&屏幕上显示3?5%2&&屏幕上显示1

2.3、关系运算符

运算符名称运算符名称
>大于>=大于等于
<小于<=小于等于
=等于==恒等于
<>或!=或#不等于$包含于(仅用于字符)
示例:?5>4&&屏幕显示.T.?5<4&&屏幕显示.F.?5=4&&屏幕显示.F.?5<>4&&屏幕显示.T.?5>=4&&屏幕显示.T.?5<=4&&屏幕显示.F.?7+8==3*5&&屏幕显示.T.?"A">"B"&&屏幕显示.F.根据比较ASCII码?"am"$"I am a student."屏幕显示.T.?"Am"$"I am a student."屏幕显示.F.?Not 2>3&&屏幕显示.T.?3>2 or 2>3&&屏幕显示.T.?3>2 and 2>3&&屏幕显示.F.?.T. > .F.&&屏幕显示.T.

2.4、数据类型

字符型:[China] 、'China'、"China" ;包括

数值型:56、56.5、-56 ;包括

日期型:{^2021/1/19}

逻辑性:.T. 、.F.

常量:常量是指值始终不变的量

变量:其值可以发生改变的量,一般分为字段变量和内存变量。字段变量是存储在数据表中的量,内存变量是指存储在内存中的变量。

内存变量用于在程序中临时保存数据,将数据保存在内存中,使用变量前通常要先给变量赋值。

变量命名规则:

  1. 不得使用关键字、一般不用下划线开头、内存变量不要与字段变量同名,若同名则优先使用字段变量
  2. 内存变量由字母、数字、下划线组成,但不能以数字开头,也不能由空格

内存变量赋值

<内存变量名> = <表达式>

示例:XH = "FoxPro"&&将字符串FoxPro赋值给XH?XH&&屏幕显示FoxProXH = 3*6&&将3*6的值赋值给XH?XH&&屏幕显示18store "Hello" to a,b,c&&将字符串Hello同时赋值给a,b,c三个变量?a,b,c&&屏幕在同一行显示三个Hello

显示内存变量

display memory [like 变量通配名]

示例:display memory &&屏幕显示所有用户自定义变量

删除内存变量

clear memory删除所有用户自定义内存变量

release <内存变量名> 删除指定的用户自定义内存变量

示例:store "Hello" to a,b,c&&将字符串Hello同时赋值给a,b,c三个变量?a,b,c&&屏幕在同一行显示三个Hellorelease a,b&&将变量a,b删除?a,b&&屏幕显示找不到变量的出错信息?c&&屏幕显示Hello

2.5、数组

一组变量名相同、使用下标来区别的内存变量就称为数组。

数组由数组名和下标两部分组成。数组名指定数组的名字,下标指定数组元素的个数。

数组名命名规则和变量名命名规则相同。

数组的下标从1开始

示例:ZH(4)&&数组名为ZH,下标为4,一维数组ST(3,5)&&数组名为ST,下标为3和5,二维数组

定义和显示数组:数组通常先定义再赋值

declare <数组名> (行[,列])[,数组名2(行)[,列]]

示例:dimension a(5)&&定义a数组长度为5declare ZH(4),ST(3,5)&&定义ZH长度为4,ST长度为15的两个数组ZH = "FoxPro"&&给数组ZH里的所有元素赋相同的值"FoxPro"ZH(1) = "王公子"  &&将ZH数组的第一个元素赋值"王公子"字符串?ZH(1)&&屏幕显示王公子ST(1,2) = "Java"&&将ST数组的第一行第二列的元素赋值为Java?ST(1,2)&&屏幕显示Java

数组的删除:删除数组可以使用删除内存变量的命令,但这个命令只能删除整个数组

示例:release ZH&&删除ZH数组

2.6、常用函数

示例:1、取整函数:int?int(12.56)&&屏幕显示:12?int(-12.56)&&屏幕显示:-122、四舍五入函数:round?round(12.345,1)&&保留一位小数,屏幕显示:12.3?round(12.345,2)&&保留两位小数,屏幕显示:12.353、平方根函数sqrt?sqrt(81)&&屏幕显示81的算术平方根:9.00?sqrt(-81)&&屏幕显示出错信息4、日期和时间函数?date()&&屏幕显示当前系统日期?year(date())&&屏幕显示当前系统日期的年份?month(date())&&屏幕显示当前系统日期的月份?day(date())&&屏幕显示当期系统日期的日数值?time()&&屏幕显示当前系统时间5、space空格函数?"姓名"&&屏幕从第1列显示:姓名?space(20)+"姓名" &&屏幕从第21列开始显示:姓名6、去空格函数?ltrim(space(4)+"姓名   ")&&屏幕显示:姓名  班级?rtrim(space(4)+"姓名   ")&&屏幕显示:    姓名班级?alltrim(space(4)+"姓名    ")&&屏幕显示:姓名班级7、截取字符串函数?right("xsda.dbf",3)&&屏幕显示:dbf?left("xsda.dbf",4)&&屏幕显示:xsda?substr("数据库管理系统",7,4)  &&屏幕显示:管理(说明:一个汉字占两个字节)8、测试函数?len(space(20))&&屏幕显示字符串长度:20?type("date()")&&屏幕显示date函数的数据类型:D?vartype(date())&&屏幕显示date函数的数据类型:D?empty("  ")&&屏幕显示:.T.?between(5,6,10)&&屏幕显示:.F.(5不在6-10之间)9、数字转换为字符串返回值?str(1357.246,6,2)&&屏幕显示转换后的字符串:1357.2?str(1357.246)&&屏幕显示转换后的字符串:135710、字符串转换为数值函数?val("246xs36")&&屏幕显示转换后的数值:246.00?val("XS246")&&屏幕显示转换后的数值:0.0011、日期转换为字符串函数DTOC?dtoc({^1997/10/5})&&屏幕显示转换后的字符串:10/25/97?dtoc({^1997/10/25},1)&&屏幕显示转换后的字符串:19971025?ctod("1/19/2021")&&屏幕显示转换后的日期1/19/21,类型为日期函数12、大小写字母转换函数?upper("foxPro")&&屏幕显示转换为大写字母的结果:FOXPRO?lower("FoxPro")&&屏幕显示转换为小写字母的结果:foxpro13、字符串转换为ASCII码函数的返回值?asc("A")&&屏幕显示:65?asc("a")&&屏幕显示:97?chr(97)&&屏幕显示a,将数组转换为对应的ascii码值14、绝对值函数abs?abs(-7)&&屏幕显示:715、自然对数函数log?log(数值表达式)16、最值函数,如果是字符则比较的是字符的ascii的值?max(1,2,3,4,5,6)&&屏幕显示6(max函数求最大值)?min(1,2,3,4,5,6)&&屏幕显示1(min函数求最小值)

2.7、VFP常用文件类型

文件类型拓展名文件类型拓展名
表文件.dbf表备注文件.fpt
报表文件.frx报表备注文件.frt
标签文件.lbx标签备注文件.lbt
表单文件.scx表单备注文件.sct
数据库文件.dbc复合索引文件.cdx
项目文件.pjx项目备注文件.pjt
文本文件.txt屏幕格式文件.fmt
查询程序文件.qpr程序文件.prg
应用程序文件.app可执行文件.exe
菜单格式文件.mnx菜单备注文件.mnt
菜单程序文件.mpr内存变量文件.mem

3、数据库和表

3.1、表操作

创建表的命令

create <表文件名>

命令功能:打开表设计器新建一个Visual FoxPro表。

参数说明:“表文件名”指定要创建的表的文件名,其中可以包含路径。

实例create 学生档案&&创建一个学生档案表create D:\VFP\学生档案  &&在D\VFP目录下创建一个学生档案表
创建表的SQL语句

create table | dbf <表文件名>(<字段名><类型>[(宽度[,小数位数])])

命令功能:新建一个Visual FoxPro表。

参数说明:表文件名指定要创建的表的文件名,可以包含路径。

实例create table 学生(姓名 C(20),总分 N(5,2))
复制表的命令

copy to <表文件名> [fields 字段列表] [for 条件]

命令功能:复制当前表的数据创建一个新表。

参数说明:

  • “ fields 字段列表 ” 只把字段列表指定的数据复制到新表,若不写则复制所有字段。
  • for条件,只复制满足条件的记录,若不写则复制所有记录。
  • 使用该命令前必先选择一张表作为复制参照,并且表名不能与被复制的表名一样。
实例use 学生copy to 学生成绩 fields 姓名,总分 for 性别="男"

复制表结构

copy structure to <表文件名> [fields 字段列表]

命令功能:复制当前表的机构创建一个新表。

参数说明:

  • 表名可以包含路径,但不能与当前表同名。
  • “ fields 字段列表 ” 只把字段列表指定的字段复制到新表,若不写则复制所有字段,中间用逗号分隔。
实例use 学生copy structure to 学生1 fields 姓名,总分 

创建数据库

create database <数据库名>

命令功能:创建一个数据库。

参数说明:库名可以包含路径

实例create database 学生信息

3.2、数据库操作

打开数据库

open database <数据库名>

命令功能:打开指定的数据库。

参数说明:库名可以包含路径

实例open database 学生信息

设置当前数据库

set database to <数据库名>

命令功能:设置某个打开的数据库为当前数据库。

参数说明:

  • 库名可以包含路径,数据库可以打开多个,但当前数据库只能设置一个。
  • 而且设置数据库前必须先打开数据库,如果打开数据库,那么这个数据库默认为当前数据库。
实例open database 学生信息open database 学生档案set database to 学生信息

关闭数据库

close database

命令功能:关闭当前数据库。

参数说明:若不是当前数据库需要设置为当前数据库。

实例open database 学生信息close database

关闭所有打开的文件

close all

命令功能:关闭所有打开的文件,也包含数据库。

实例open database 学生信息close all

工作区—> 选择当前工作区

select <工作区号>|<别名>

命令功能:选择指定的工作区为当前工作区

参数说明:

  • “ 工作区号 ” 的取值范围是1~32767之间的整数。
  • “ 别名 ” 是使用use命令打开表时指定的别名
  • 1~10工作区号可以用A-J代替
  • select 0 该命令是选择当前没有使用的工作区号最小工作区作为当前工作区
实例select 1select A

打开表

use <表文件名> [in 工作区号] [alias 别名]

命令功能:在指定工作区上打开指定的表文件。

参数说明:

  • “ 表文件名 ” 指定需要打开的表文件,其中可以包含路径。
  • 选择 “ in 工作区号 ” ,在指定的工作区打开表,若不写则在当前工作区打开表。
实例use 学生信息 in 1|A alias xsxx &&在1号工作区打开学生信息表,表的别名为xsxxselect xsxx&&表示使用别名选中1号工作区

关闭表

use [in 工作区号 | 别名]

命令功能:关闭指定工作区上打开的表。

参数说明:“ in 工作区 | 别名 ” ,关闭指定工作区上打开的表。若不写则关闭当前表。

实例use&&关闭当前工作区打开的表use in 5   &&关闭5号工作区打开的表

显示表结构

display structure

命令功能:显示当前表结构。

实例use 学生信息display structure

修改表结构

modify structure

命令功能:打开表设计器修改当前表结构。

实例use 学生信息modify structure

浏览数据

browse [fields 字段列表] [for 条件] [freeze 字段名] [lock 锁定字段名] [noappend] [nodelete] [noedit]

命令功能:打开窗口浏览/编辑当前表的数据。

参数说明:

  • “ fields 字段列表 ” ,只显示“字段列表”中指定的字段,并且显示顺序由字段列表决定,若不写则显示所有字段。
  • “ for 条件 ” ,只显示满足条件的记录,若不写则显示全部。
  • “ lock 锁定字段数 ” ,可以将浏览窗口分成两个窗格,左边窗格显示数目的字段。
  • “ noappend ” 表示不能向表添加新纪录。
  • “ nodelete” 表示不能删除表中记录。
  • “ noedit ” 表示不能修改表记录的数据。
实例list offbrowse fields 学号,姓名,年龄,性别 for 年龄>=18 freeze 姓名 lock 1

移动指针记录—>绝对移动指针记录

go top | bottom | 记录号

命令功能:移动当前表的记录指针。

参数说明:“ go top ” 指针移到第一条记录,“ go bottom” 指针移到最后一条记录,“ go 5 ” 指针移到第五条记录

移动指针记录—>相对移动指针记录

skip [记录数]

命令功能:以当前记录为基准,移动当前表的记录指针。

参数说明:选择 “ 记录数 ” ,指定记录指针需要移动的记录数,若记录数为正则向下移动,若为负则向上移动,若不写则移动一条记录

实例skip -1 &&指针向上移动一条记录skip 4&&指针向下移动四条记录skip       &&指针向下移动一条记录

测试记录函数

recno()

命令功能:返回当前表的当前记录号。如果当前工作区没有打开表,则函数返回0。

返回值类型:数值型。

实例use 学生信息go 5?recno()&&屏幕显示5

测试记录总数函数

reccount()

函数功能:返回当前表的记录总数。

返回值类:型数值型。

实例use 学生档案&&这张表有12条记录?reccount()&&屏幕显示12

显示数据

display [all] [fields 字段列表]

命令功能:显示当前表的数据。

参数说明:

  • 选择 “ all ” ,显示所有记录,若不写则显示当前指针指定的记录
  • 选择 “ fields 字段列表 ” ,显示指定的字段的数据,若不写则显示所有字段。
实例use 学生成绩display all fields 学号,姓名,总分

追加记录

append [blank]

命令功能:在当前表的末尾追加记录。

参数说明:选择 “ blank ” ,追加一条空记录,若不写则进入追加记录方式,允许追加多条记录。

实例use 学生档案append

从表文件追加记录

append from <表文件名> [fields 字段列表] [for 条件]

命令功能:把指定表文件中的记录追加到当前表。

参数说明:

  • “ 表文件名 ” 指定提供数据的表文件,可以包含路径。
  • 选择 “ fields 字段列表 ” ,只有指定字段的数据追加到当前表。若不写则追加全部字段。
  • 选择 “ for 条件 ” ,只有满足条件的数据追加到当前表。若不写则追加全部字段。
实例use 学生档案append from 学生档案2 fields 学号,姓名,年龄,成绩 for 等级="优秀"

逻辑删除记录

delete [all] [for 条件]

命令功能:逻辑删除当前表中的指定记录。

参数说明:选择“all” 而不选择“for”,将逻辑删除所有记录,选择“for”将删除满足条件的所有记录,两者都不写则只逻辑删除当前记录。

实例use 学生档案delete for 年龄<=18  &&逻辑删除年龄小于等于18岁的所有记录

测试逻辑删除

delete()

函数功能:如果记录有删除标记,返回逻辑真值,否则,返回逻辑假值。

返回值类型:逻辑型。

实例use 学生档案delete for 年龄<=18?delete()&&屏幕显示 .T.

撤回逻辑删除

recall [all] [for 条件]

命令功能:撤回当前表中的逻辑删除。

参数说明:选择“all” 而不选择“for”,将撤回逻辑删除所有记录,选择“for”将撤回逻辑删除满足条件的所有记录,两者都不写则只撤回逻辑删除当前记录。

物理删除

pack

命令功能:物理删除当前表中已被逻辑删除的记录

zap

命令功能:物理删除当前表中的所有记录

说明:使用物理删除记录时,通常先给自己记录添加删除标记,经检查无误后,再进行物理删除。

更新数据

replace <字段名> with <表达式1>[,<字段名2> with <表达式2>…] [all] [for 条件]

命令功能:成批替换当前表的数据。

参数说明:

  • 使用表达式的值替换字段的值。
  • 选择“all” 而不选择“for”,将对所有记录进行替换操作,选择“for”将对所有满足条件记录进行替换操作,两者都不写则只对当前记录进行替换操作。
实例use 学生档案replace 班级 with "18级软工3班" all

创建索引

index on <关键字> tag <索引名> [of 复合索引文件名] [for 条件] [descending]

命令功能:为当前表创建一个索引。

参数说明:

  • “ 关键字 ” 指定索引的关键字。
  • “ 索引名 ” 指定索引的名字。索引由字母、数字和下划线组成,最大长度为10个字符,必须以字母或下划线组成。
  • 选择 “ of 符合索引文件名 ” ,索引存放在指定的符合索引文件中。若不写则索引存放在结构索引文件中。
  • 选择 “ for 条件 ” ,只有满足条件的记录创建索引。若不写则所有记录创建索引。
  • 选择 “ descending ”,指定索引顺序为降序,若不写则为升序。
实例use 学生档案index on 入学成绩 tag 成绩1 for 班级="计算机01" descending

打开索引文件

set index to [索引文件列表]

命令功能:打开当前表的索引文件。

参数说明:选择 “ 索引文件列表 ” ,指定打开的索引文件,其中两个文件名之间用逗号分隔。若不写则关闭当前表除结构索引外的其他打开的索引文件。

指定当前索引

set order to <索引名> [of 索引文件名]

命令功能:指定当前表的当前索引。

参数说明:选择 “ of 索引文件名 ” ,指定该索引文件中的所用为当前索引,若不写则指定结构索引文件中的索引为当前索引。

实例use 学生档案&&在当前工作区打开学生档案表set order to 年龄       &&指定结构索引文件中的入学成绩为当前索引browse    &&按当前索引指定的顺序浏览数据

维护索引

reindex

命令功能:对当前表的所有打开的索引文件重新索引。

使用说明:仙子啊当前工作区打开表文件和需要维护的索引文件,再执行该命令,当前表所有打开的索引文件中都将被重新建立。

检索数据

locate for <条件>

命令功能:在当前表中查找满足条件的第一条记录。

参数说明:“ 条件 ” ,是一个逻辑表达式,它用于指定记录满足的条件。

实例use 学生档案locate for 学号="1001"display&&显示查询到的数据

继续检索

contiune

命令功能:在当前表中继续查找满足条件的下一条记录。

实例use 学生档案locate for 年龄>=17displaycontinuedisplay……

测试检索函数

found()

函数功能:测试检索数据是否成功的函数。若检索成功则返回逻辑真,否则返回逻辑假。

返回值类型:逻辑性。

测试指针是否在文件尾

eof()

函数功能:测试记录是否在文件尾的函数。若在文件尾则返回逻辑真,否则返回逻辑假。

返回值类型:逻辑性。

求和命令

sum [表达式列表] [for条件]

命令功能:计算当前表中指定数值型字段数据之和。

参数说明:

  • “ 表达式列表 ” ,对指定的表达式求和。若不写则对所有数值型字段求和。
  • 选择 “ for 条件 ” ,对满足条件的记录求和,若不写则对所有记录求和。
实例use 学生成绩sum 语文

求平均值命令

average [表达式列表] [for 条件]

命令功能:计算当前表中指定数值型字段数据的算术平均值。

参数说明:与sum相同。

实例use 学生成绩average(数学)

4、SQL

SQL语言包括以下四个部分:

  1. dml (数据操作语言):用来插入。修改和删除表中的数据,如 insert、update、delete语句。
  2. ddl (数据定义语言):在数据库中创建或删除数据库对象操作, 如create. drop alter等语句。
  3. dql (数据查询语言):用来对数据库中的数据进行查询,指 select语句。
  4. dcl (数据控制语言):用来控制数据库组件的存取许可、存取权限等,如grant. revoke 等。

本记主要学习数据操作语言数据查询语言、数据定义语言

4.1、数据操作语言

添加数据

insert into <表文件名>(字段1,字段2……) values(值1,值2……)

SQL功能:向数据表中添加一条记录。

insert into <表文件名>(字段1,字段2……) values(值1,值2……),(值1,值2……),(值1,值2……),……

命令功能:向数据表中添加n条记录。

参数说明:字段和值要一 一对应,字段类型和值类型也要一 一对应。

实例insert into 学生档案(学号,姓名,总成绩) values('1001','韩信',686)

删除数据

delete from <表文件名> [where 条件]

SQL功能:按条件删除记录。

参数说明:若写where条件则按条件进行删除记录,若不写则删除表中所有记录。

实例delete from 学生档案 where 年龄>20-- 删除学生档案 表中年龄所欲大于20岁的记录delete from 学生档案 -- 删除学生档案 表中所有记录

修改数据

update <表文件名> set 字段名1=新值1,字段名2=新值2,… [where 条件]

SQL功能:根据条件修改表中记录的值。

参数说明:字段名要和值一 一对应,且最少有一对,写where条件则根据条件对满足条件的所有记录进行数据修改,若不写where条件,则修改表中所有数据。

实例update 学生档案 set 学号="1002",姓名="叶总" where 学号="1003"-- 将原来学号为1003的学生修改学号为1002且姓名为叶总update 学生档案 set 性别="男" -- 将学生档案表的所有记录的性别都修改为男

4.2、数据查询语言

单表查询

select 字段列表 from <表文件名> []

SQL功能:查询表文件指定字段的所有记录。

参数说明:字段列表若写成 * 则代表所有字段

实例select * from 学生档案-- 查询学生档案所有信息select 学号,姓名      -- 查询学生档案所有信息,但只包含学号和姓名字段

单表条件查询

select 字段列表 from <表文件名> where 条件

SQL功能:根据where条件查询数据

参数说明:where条件可以是and或or

实例select * from 学生档案 where 学号="1001"-- 查询学号为1001的记录select * from 学生档案 where 班级="18软工3班" and 姓名="李白"-- 查询班级为18软工三班并且姓名为李白的记录select * from 学生档案 where 班级="18软工3版" or 姓名="廉颇"-- 查询班级为18软工三班或者姓名为李白的记录

表别名和字段别名

select 字段 as 字段别名, 字段 as 字段别名,…… from <表文件名> as 表文件名的别名

SQL功能:为字段和表起别名

参数说明:as 为别名关键字,可以省略不写,中间留出空格即可。

实例select 成绩 as 学生成绩 from 学生成绩 as xscj--  ==========等价于==========select 成绩 学生成绩 from 学生成绩 xscj

模糊查询

select 字段列表 from <表文件名> where 字符名 like “%值%”

SQL功能:根据条件进行模糊查询。

参数说明:%为占位符。

实例select * from 学生档案 where 姓名 like "%白%"-- 查询所有名字中带白的记录select * from 学生档案 where 姓名 like "李%" -- 查询所有以李字开头的记录

聚合函数

SUMAVGCOUNTMINMAX

函数功能:对数值型字段进行统计总和、计算平均值、计算总条数、求最小值、求最大值

参数说明:

  • sum函数用于求总指定字段的累计值
  • avg函数用于求指定字段的怕平均值
  • count函数用于求指定字段的总条数
  • min函数用于求指定字段的最小值
  • max函数用于求指定字段的最大值
实例select sum(年龄) from 学生档案-- 求年龄字段的总累加值select avg(年龄) from 学生档案-- 求年龄字段的平均值select count(学号) from 学生档案-- 求总共有多少个学号select min(语文成绩) from 学生档案    -- 求语文成绩最低的记录select max(英语成绩) from 学生档案  -- 求英语成绩最高的记录

去重查询

distinct(字段名)

函数功能:给指定的字段去重查询,查询出来的每条数据对于指定的字段不会有重复的数据。

实例select distinct(地区) from 学生信息-- 根据地区字段进行去重查询,查询出来的每条数据不会有重复的地区名称

分组查询

group by [having 条件]

SQL功能:对数据进行分组

参数说明:having 条件可以不写

需求:查询18级软工3班男生和女生的平均年龄分别是多少?select 性别,avg(年龄) from 学生档案 group by 性别 having 班级="18级软工3班" 

having 和 where 的区别:

  1. where可以用于select、update、delete、insert语句中,而having只能用于select语句中
  2. where的搜索条件是在执行语句进行分组之前应用,having的搜索条件是在分组条件后执行的,即如果where和having一起用时,where会先执行,having后执行。
  3. having后面可以跟聚合函数,而where不可以

多表查询

[数据库名 !]<表名> [inner | left | right | full] join [数据库名 !]<表名>[on 链接条件]

SQL功能:使多表之间进行联查。

参数说明:

  • on 链接条件指表与表之间的连接条件,链接条件是一个逻辑表达式。

  • 链接类型:

    选项名称说明
    inner内部链接只返回完全满足链接条件的记录
    left左链接返回join左侧中的所有记录及右侧表中匹配的记录
    right右链接返回join右侧中的所有记录及左侧表中匹配的记录
    full完全链接返回两个表中的匹配和不匹配的所有记录
实例select * from xsgl!xsda inner join xsgl!xscj on xsda.id = xscj.id-- xsda表和xscj表的链接

嵌套查询

select 字段列表 from 表名 where 条件

命令功能:嵌套查询语句,条件可以是查询语句,但值必须是唯一的。

实例select * from xsda where 年龄>(select avg(年龄) from xsda)-- 查询年龄比平均年龄高的记录

4.3、数据定义语言

删除表

drop table <表文件名>

SQL功能:删除表文件及所有数据

实例drop table 学生档案-- 删除学生档案这个表文件及所有数据 -- 温馨提示:数据无价,谨慎操作!

删除数据库

delete database <数据库名>

SQL功能:删除数据库文件。

添加自由表到数据库中

add table <表名>

SQL功能:添加自由表到数据库中。

将表移出

remove table <表名>

SQL功能:将表从数据库中移出。

修改表名

alter table <新表名>

SQL功能:修改表名。

修改字段列名称

alter table <表名> rename 字段名 to 新字段名

SQL功能:修改字段列名称。

添加字段

alter table <表名> add 字段名 类型(长度)

SQL功能:从表中添加字段。

删除字段

alter table <表名> drop 字段名

SQL功能:删除表中的字段。

复制表

copy files 表1.* to 表2.*

SQL功能:复制表到一个新的表。其中不要打开被复制的表。

显示文件内容

type 文件名.后缀名

命令功能:显示文件信息。

5、查询与视图

5.1、查询

创建查询

create query

命令功能:创建一个查询文件,打开查询对话框。

运行查询

do <查询文件名>

命令功能:运行查询文件。查询文件名可以包含路径名。

打开查询文件

modify query <查询文件名>

命令功能:修改查询文件。查询文件名可以包含路径名。

查询去向

[into 目标 | to file 文件名 [additive] | to printer | to screen]

命令功能:将查询结果输出到具体对象。

参数说明:

  • to file,将指定查询结果输出到文本文件中。选择additive,查询结果追加到文件尾,否则将覆盖原来的内容。

  • to printer,将指定查询结果输送到打印机输出。

  • to screen,将指定查询结果显示到屏幕上。

  • into 目标,将指定查询结果输出到表文件或数组中。

    选项意义
    cursor 表文件名将查询结结果保存到一个只读的临时表中
    dbf 表文件名将查询结果保存到一个表文件中
    array 数组名将查询结果保存到二维数组中
实例select 学号,姓名,成绩,年龄,班级 from xsda into dbf xsxx-- 将查询结果保存到xsxx表中select 学号,姓名,成绩,年龄,班级 from xsda into cursor xsxx -- 将查询结果保存到xsxx一个临时的只读表中select 学号,姓名,成绩,年龄,班级 from xsda into array xsxx -- 将查询结果保存到一个名为xsxx的二位数组中select 学号,姓名,成绩,年龄,班级 from xsda to file xsxx   -- 将查询结果保存到名为xsxx的文本文档中select 学号,姓名,成绩,年龄,班级 from xsda to printer       -- 将查询结果送打印机输出select 学号,姓名,成绩,年龄,班级 from xsda to screen              -- 将查询结果打印在屏幕上

5.2、视图

创建和运行本地视图

create view <视图名> as <查询语句>

命令功能:为当前数据库创建视图

参数说明:查询语句是指SQL查询语句,该查询语句指定视图显示的数据。

实例open database xsglcreate view xsxx_v as select 学号,姓名,年龄,班级 from xsxx

do 视图名

命令功能:运行指定的视图

参数说明:视图名是指已经创建好的视图

实例do xsxx_v

删除视图的SQL命令

drop view <视图名>

SQL功能:删除指定的视图。

6、制作报表

使用命令新建报表

create retport <报表文件名>

命令功能:新建一个空白报表。

参数说明:“报表文件名”指要创建的报表文件名,可以包含路径。

create report E:\VFP\xsda_r

打开报表文件

modify report <报表文件名>

命令功能:打开指定的报表文件。

参数说说明:报表文件名可以包含路径。

7、结构化程序设计

创建与运行程序

modify command <程序文件名>

命令功能:启动文本编辑器创建和编辑程序文件。

参数说明:程序文件名指定要创建的文件名,可以包含路径。

do <程序文件名>

命令功能:运行程序。

参数说明:程序文件名指定要运行的文件名,可以包含路径。

清屏命令

clear

命令功能:清除屏幕上的显示信息。

简单输入输出命令

accept [提示信息] to <内存变量>

命令功能:把用户输入的字符串保存到指定的内存变量。

参数说明:提示信息是一个字符型表达式,选择该项则显示要提示的信息,若不写则不提示。

accept "请输入你的姓名:" to name

input [提示信息] to <内存变量>

命令功能:把用户输入的表达式的值保存到指定的内存变量。

参数说明:提示信息是一个字符型表达式,选择该项则显示要提示的信息,若不写则不提示。

input "请输入你的成绩:" to score

wait [提示信息] [to 内存变量] [window] [timeout 时间]

命令功能:等待用户输入一个字符。

参数说明:

  • 提示信息是一个字符型表达式,选择该项则显示要提示的信息,若不写则显示默认的提示信息“按任意键继续···”。
  • to 内存变量,把输入的字符保存到指定的内存变量,若不写则不保存输入的字符。
  • window,在系统窗口显示信息,若不写则在屏幕上当前光标的下一行显示信息。
  • timeout 时间,指定等待输入的时间,若不写则无限等待,时间为输入数值表达式,以秒为单位。
wait "请输入(Y/N)" to msg window timeout 5

格式化输入输出命令

@<行,列> say <显示信息> [字体属性]

命令功能:在指定位置输出显示信息。

参数说明:

  • 行,列,是一对数值表达式,指定输出数据的起始位置。
  • 显示信息,是一个字符表达式,指定输出的数据。
@ 1,10 say "学生档案" font "隶书",20&&在屏幕第一行第10列开始处打印"学生档案"并且设置字体为隶书,字号20

@ <行,列> say <显示信息> get <变量>

命令功能:在指定位置输入数据,并把输入的数据保存在指定的变量

参数说明:

  • 行,列,是一对数值表达式,指定输出数据的起始位置。
  • 选择“say 显示信息”,显示指定的信息,若不写则不显示。
x = "Hello"@1,10 say "学生档案" get x

测试行、列函数

row()

函数功能:返回当前光标的行坐标。

返回值类型:数值型。

?row()&&屏幕显示当前光标的行号

col()

函数功能:返回当前光标的列坐标。

返回值类型:数值型。

?col()&&屏幕显示当前光标的列号

设置程序运行环境

set talk on | off

命令功能:设置是否显示某些命令执行的结果。选择on则显示执行的结果,选择off反之亦然。

set talk off……set talk on

set safety on | off

命令功能:设置删除文件数据时是否显示提示信息。选择on显示提示信息,选择off反之亦然。

set safety off……set safety on

clear all

命令功能:清除用户自定义内存变量和对象

双分支结构

if <条件>

​<语剧组1>

else

​<语句组2>

endif

参数说明:条件为逻辑性值,语句组是由Visual FoxPro的程序语句组成。

执行流程:如果满足条件则执行语句组1然后结束,若不满足条件则执行语句组2然后结束。

if 3>2    ?"真"else     ?"假"endif&&屏幕上将打印"真"

多分枝结构

do case

case <条件1>

​<语句组1>

case <条件2>

​<语句组2>

​……

​[otherwise

​<语句组>]

endcase

参数说明:

  • do case 表示多分枝选择结构的开始,endcase 表示多分枝选择结构结束,它们必须成对出现,缺一不可。
  • 条件1、条件2都是逻辑表达式。

程序流程:程序从第一个条件开始执行,若满足条件则执行当前条件下的语句组然后结束程序,若不满足则继续匹配满足条件的分支然后执行当前分支下的语句组然后结束程序。若选择了otherwise当条件都不满足时则执行otherwise语句组然后结束程序。

do casecase 1>1?"错"case 1<2?"对"otherwise?"不知道"endcase&&屏幕将打印"对"

基于条件的循环

do while <条件>

​<语句组>

enddo

参数说明:

  • do while表示循环开始,enddo表示循环结束,它们必须成对出现,缺一不可。
  • 条件是一个逻辑表达式,它指定循环满足的条件。
  • 语句组也称循环体,它由一组Visual FoxPro的语句组成。

执行流程:只要条件的逻辑值为.T.则一直执行循环体。

do while .T.?"Hello"enddo&&死循环,屏幕将一直打印"Hello"

针对记录的循环

scan [for条件]

​<语句组>

endscan

参数说明:

  • scan表示循环开始,endscan表示循环结束,它们必须成对出现,缺一不可。
  • “语句组”也称循环体,它由一组Visual FoxPro语句组成。
  • 选择for 条件,对满足条件的记录执行循环体的语句,若不写则对所有记录进行循环体的语句,条件是一个逻辑值。
use 学生档案scan for 班级 = "18级软工1班"?学号endscan

指定次数的循环

for <变量>=<初值> to <终值> [step 步长]

​<语句组>

endfor

参数说明:

  • for 表示循环开始,endfor表示循环结束,它们必须成对出现,缺一不可。
  • “语句组”也称循环体,它由一组Visual FoxPro语句组成。
  • 变量指定循环控制变量。
  • 初值指定循环控制变量的初始值,终值指定循环控制变量的终止值,它们都是数值表达式。
  • 选择step 步长,循环控制变量将按指定的步长增值,若不写则默认增值为1.
for n = 1 to 10??nendfor&&屏幕将打印12346789&&-----------------------------for n = 1 to 10 step 2??nendfor&&屏幕将打印13579

loop

命令功能:终止本次循环执行下一次循环。

for n = 1 to 10if n%2=0loopendif??nendfor&&屏幕将打印13579

exit

命令功能:终止当前循环结构执行循环结构后面的语句。

for n = 1 to 10if n%2=0exitendif??nendfor&&屏幕不会打印任何内容

定义过程

procedure <过程名>

​<语句组>

endproc

参数说明:“过程名”指定过程的名字,过程的命名规则与变量的命名规则相同。

procedure totalCicle?"Hello"endproc

打开与关闭过程文件

set procedure to [过程文件名]

参数说明:选择”过程文件名“,打开指定的过程文件,若不写则关闭已经打开的过程文件。

set procedure to totalCicle

传递参数命令

do <程序名 | 过程名> [with 参数列表]

命令功能:调用指定的程序,并把指定的参数传递给调用的下级程序

参数说明:选择 with 参数列表,将把指定的参数传递给调用的子程序或过程,若不写则不传递参数,参数可以是变量、常量、表达式。

do totalCicle with 5

接收参数的命令

parameters <参数表>

命令功能:接收上级程序传递来的参数。

参数说明:”参数表“中的参数只能是变量名,并且参数的个数要与do 命令传递参数的数目相同。

注意:接收参数命令必须是子程序或过程的第一条可执行程序。

parameters n,m

过程的实际应用

set talk offclearinput "请输入圆的半径:" to rdo totalCicle with r*定义的过程procedure totalCicleparameters rs = 3.14 * r^2?sset talk on 

自定义函数

function 函数名

[parameter 参数名]

[return 表达式]

endfunc

函数功能:作用和过程一样.

参数说明:

  • 如果不写return 返回值 则打印.T.
  • parameter 参数名用于接收参数
set talk offclear?totolsum(5)&&调用函数&&自定义函数function totolsumparameter XP = 1for n = 1 to XP=P+nendforreturn Pendfuncset talk off$$屏幕将打印16

8、面向对象程序设计基础

创建表单

create form <表单文件名>

命令功能:创建一个空白表单。

create form E:\VFP\表单1

运行表单

do form <表单文件名>

命令功能:运行指定的表单。

do form E:\VFP\表单1

打开表单

modify form <表单文件名>

命令功能:打开指定的表单

modify form E:\VFP\表单1

表单常用命令

thisform.refresh&&刷新表单thisform.release&&释放并关闭表单,从内存中清除表单
visualfoxpro教程
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477