VFP数据库操作常用命令.docx
《VFP数据库操作常用命令.docx》由会员分享,可在线阅读,更多相关《VFP数据库操作常用命令.docx(15页珍藏版)》请在冰豆网上搜索。
VFP数据库操作常用命令
1,FoxPro文件的主要类型
库文件和备注文件.dbf.fpt
程序文件.prg.fxp
索引文件.idx.cdx
查询文件.qpr
屏幕格式文件.scx.sct.spr.spx
选单格式文件.mnx.mnt.mpr.mpx
报表格式文件.frx.frt
标签格式文件.lbx.lbt
内存变量文件.mem
视图文件.vue
文本文件.txt
2,命令中,规定使用的单词叫保留字,保留字大小写随意,并且可以只写前面的四个字母。
命令窗口中,保留字以蓝色显示。
3,表中的字段类型
字符型C字符串格式:
'abc',"abc",[abc]
数值型N
货币型Y货币常量格式:
$12,$12.68
日期型D日期型常量:
{^2013-1-16},{^2013.1.16},{^2013/1/16},{^2013116}
日期时间型T日期时间型常量:
{^日期,时间},
时间格式:
8:
10:
30,20:
10:
30,8:
10:
30A,8:
10:
30AM,8:
10:
30P,8:
10:
30PM
逻辑型L格式:
真(.T./.t./.Y./.y.),假(.F./.f./.N./.n.)
浮点型F
整型I
双精度型B
备注型M
通用型G
4,各类型数据大小的规定
数值型和货币型:
同数学中大小
日期型和日期时间型:
靠后的大
逻辑型:
真大于假
字符型:
当setcollateto"Machine"(机器顺序)时:
字符:
空格<数字<大写字母<小写字母
汉字:
按拼音
当setcollateto"PinYin"(拼音顺序)时:
字符:
空格<数字<'a'<'A'<'b'<'B'......
汉字:
按拼音
当setcollateto"Stroke"(笔画顺序)时:
字符:
空格<数字<'a'<'A'<'b'<'B'......
汉字:
笔画多的大
5,字符串大小的规定
setexacton设置为精确比较,比较进行到最长字符串为止
setexactoff设置为非精确比较,从左到右,比较到能分辨出大小的某个字符
"=":
按当前的比较方式比较
"==":
精确比较
6,数值运算符
**或^:
乘方运算
*:
乘法运算
/:
除运算
%:
求余运算
+:
加运算
-:
减运算
7,字符运算符
+:
将前后两个字符串合并,如"abc"+"def",结果为"abcdef"
-:
将前后两个字符串合并,前字符串尾部的空格会移到结果的后面,如"abc"+"def",结果为"abcdef"
8,逻辑运算符
.not.或not或!
:
非
.and.或and:
与
.or.或or:
或
优先级:
非>与>或
9,日期表达式
日期和日期,日期和数值,日期时间和数值可以加减
不能:
数值-日期,数值-日期时间,日期时间-日期时间
10,查看当前日期
?
date()
11,查看当前日期格式
?
set('date')
12,设置日期格式
setdateto日期格式
常用日期格式:
american,ansi,mdy,dmy,ymd
13,设置年份显示
setcenturyon|off
显示两位(on),显示四位(off)
14,设置年月日之间的分隔符
setmarkto分隔符
常用:
'-',"-",[-]
15,显示当前默认目录
?
sys(5)+sys(2003)
16,设置默认目录
setdefaultto目录
如:
setdefaulttod:
\driverg
一次性,再次进入VFP时无效,在"选项"对话框中可以设置长期有效的默认目录
17,改变主窗口的属性
主窗口对象:
_screen
_screen.fontname="黑体"
_screen.fontsize=25
18,变量的赋值
变量=表达式
store表达式to变量1,变量2,......
19,变量的定义
普通变量在赋值时被自动定义,数组变量必须先定义后使用
dimensionkleclare数组名(下标上限)一维数组
dimensionkleclare数组名(下标上限1,下标上限2)二维数组
20,显示变量信息(变量名/类型/值)
listmemory[like通配名][toprinter][tofile文件名]
displaymemory[like通配名][toprinter][tofile文件名]
display和list的区别,当对全表操作时display只显示当前第一条记录,list显示所有记录,相当于displayall;当显示的信息超过一页时,display会分页显示,list会将前面的信息滚出屏幕
21,清除所有变量(系统变量无法清除)
clearmemory
releaseall
22,清除指定变量
release变量1,变量2,...
releasealllike通配名
releaseallexcept通配名
23,建立数据库
creatdatabase[数据库(不写时会出现对话框)]
在没有指定保存路径的情况下,数据库默认保存位置:
c:
\programfiles\microsoftvisualstudio\vfp98
24,打开已经存在的数据库
opendatabase[数据库]
25,指定当前数据库
setdatabaseto数据库名
26,向数据库中添加表
addtable[表]
27,从数据库中移走表
removetable表
28,关闭数据库
closedatabases关闭当前数据库
closedatabasesall关闭所有打开的数据库
29,删除数据库
deletedata住院信息
30,建立"患者信息"表
create患者信息
31,打开已存在的表
used:
\driverg\spk1230.dbf
usespk1230.dbf在没有指定路径的情况下,默认打开c:
\programfiles\microsoftvisualstudio\vfp98这个位置的spk1230.dbf表
32,定义表的别名
use患者信息alias病人信息未定义别名时,以表的基本名为别名
33,打开表设计器
modifystructure
34,打开数据库设计器
modidatabase住院信息
35,关闭"数据库设计器"
closedata
36,打开表窗口
browse[last/edit/change/append]
37,表的复制
copyto新表[范围][for条件][字段s]
copystructureto新表[字段s]复制当前表的结构产生新表
38,根据字段过滤表信息
browforid=101
39,选择工作区2
select2/b工作区可以用区号表示(1,2,..),也可以用别名表示(A,B,..),还可以用工作区中打开的表的别名表示.
40,在不同工作区打开不同的表
select1
use患者信息aliashzxx
select2
use床位分配
select1/selecthzxx/selecta&&这三条命令是等效的
还可以:
use患者信息in1
use床位分配in2
当use表in0时,指的是未使用的最小工作区
41,记录指针
recno()获知当前记录
gotop或gototop将指针指向最前面的记录
gobottom或gotobottom将指针指向最后面的记录
go记录号或goto记录号或记录号
skip将指针后移一个记录
skipn将指针后移n个记录
skip-n将指针前移n个记录
42,查看记录
go2&&记录指针指向2号记录
disp住院号,姓名,b.医生姓名,b.床位号&&显示2号记录的字段值
skip2&&记录指针下移2位
?
recno()&&显示当前记录的记录号
disp住院号,姓名,b.医生姓名,b.床位号&&显示当前记录的字段值
gobottom&&记录指针指向最后一条记录
?
recno()
skip&&记录指针下移一位
?
recno()
gotop&&记录指针指向第一条记录
?
recno()
skip-1&&记录指针上移一位
?
recno()
setrelationto&&取消关联
43,在主窗口中显示记录
list显示所有记录
display显示当前记录
list/display[范围(all/nextn/rest/recordn)][for<条件>][字段名表][off]显示指定范围(全部/当前开始的n条/当前到最后/第n条)并符合条件的字段记录,加off则不显示记录号
listallforbs>=80andjs<=80xm,nl,bs,js
go5
listnext6lb,bm,mc显示第5-10条记录
44,在工作区1显示当前工作区部分字段的值
select1
list住院号,姓名,性别,出生日期
45,在工作区1显示非当前工作区部分字段的值
select1
display住院号,姓名,性别,出生日期,b.床位号
或
select1
display住院号,姓名,性别,出生日期,b->床位号
46,插入记录
insert在当前记录之后插入空记录,同时打开表窗口
insertblank在当前记录之后插入空记录,但不打开表窗口
insertbefore在当前记录之前插入空记录,同时打开表窗口
insertbeforeblank在当前记录之前插入空记录,但不打开表窗口
append打开表窗口添加新纪录
appendblank在表的最后添加空记录,但不打开表窗口
appendfrom表1[for条件][fields字段1,字段2,...]将表1中满足条件的记录添加到当前表,表1无须打开
47,删除记录
逻辑删除(在记录上做一个删除标记,不是真正的删除)
delete[范围][for条件]如果没有范围和条件,仅删除当前记录,其delete()为真
recall[范围][for条件]恢复
物理删除
pack物理删除已经逻辑删除的记录
zap物理删除表的全部记录
48,替换字段内容
replace字段1with表达式1,字段2with表达式2,......[范围][for条件]对表中指定范围内满足条件的记录进行替换,如果没有范围和条件,只替换当前记录
49,字段和变量之间值的传递
scatter字段sto数组名/memvar将当前记录的各字段放到指定数组/同名变量中,数组不用预先定义
scatter字段slike通配名to数组名/memvar
scatter字段sexcept通配名to数组名/memvar
当存在同名变量时,直接写出名称表示字段,'m.名称'或者'm->名称'表示变量
gatherfrom数组名/memvar字段s将数组/同名变量中的元素依次放到当前记录的字段中
gatherfrom数组名/memvar字段slike通配名
gatherfrom数组名/memvar字段sexcept通配名
50,过滤器
setfilterto条件表中只看到符合条件的记录
setfilterto取消过滤,可以看到所有记录
setfieldsto字段1,字段2,...表中只看到指定字段
setfieldsoff可以看到所有字段
51,排序(对当前表根据要求进行排序,产生一新表)
sortto新表on字段1[/A(升序,默认)或/D(降序)][/C(忽略大小写)],字段2[/A或/D][/C],...[ascending或descending(对未指定排序的字段而言)][范围][for条件][字段s]
52,索引
索引得到的记录顺序放在索引文件中,只有一个索引的文件叫单索引文件(.IDX),有多个索引的文件叫复合索引文件(.CDX),当复合索引文件与表同名时,它被称为结构化复合索引文件.如果某个索引文件被指定为当前索引,对表进行处理时,会以索引中的顺序进行.
53,索引得到的文件和排序得到的新表的区别
新表独立于旧表,不随旧表改变;索引文件依附于表,当索引打开时,会随表内容自动更新;索引文件占用的空间比排序的表小
54,索引的建立
在单索引文件中(只能以索引项升序建立)
indexon索引项to文件名[unique/candidate]
在结构化复合索引文件中
indexon索引项tag索引名[ascending(默认)/descending][unique(唯一索引)/candidate(候选索引)]
在非结构化复合索引文件中
indexon索引项tag索引名of文件名[ascending(默认)/descending][unique(唯一索引)/candidate(候选索引)]
55,索引的打开
和表一起打开
use表index索引文件1,索引文件2,...
表打开后再打开
setindexto索引文件1,索引文件2,...[additive(不关闭之前打开的索引,默认关闭)]
56,设置当前索引
setorderto索引号[ascending/descending]
索引号从1开始,顺序:
打开的单索引文件->结构化复合索引文件->打开的非结构化复合索引文件
setorderto[tag]索引名[ascending/descending]
setorderto或setorderto0表示不指定当前索引
order()函数可以得到当前索引的索引名
57,重新索引
reindex对所有打开的索引进行重新索引
58,关闭索引
closeindexes或setindexto
59,索引的删除
结构化复合索引文件
deletetag索引名1,索引名2,...
deletetagall
非结构化复合索引文件(索引要打开)
deletetag索引名1of文件名,索引名2of文件名,......
deletetagallof文件名
单索引文件(索引要关闭)
直接在文件夹窗口删除
60,记录查找
一般查找
locatefor条件[范围]从整个表中找出符合条件的第一个记录,但不会自动显示该记录.查找下一个continue.
索引查找
seek索引项值根据当前索引,找出指定索引项值的第一个记录,比一般查找快.查找下一个skip
61,关联
父表记录指针改变时,会引起子表记录指针的改变.
两表关联必须要有关联依据(共有字段),且子表以关联依据为索引项建立了索引,并设为当前索引.
62,建立关联(当前工作区为父表工作区)
setrelationto关联依据1into子表1所在工作区,关联依据2into子表2所在工作区,...[additive(不取消父表和其他子表的关联,默认取消)]
63,取消关联
setrelationto取消所有关联
setrelationoffinto工作区取消父表与指定工作区中的子表的关联
64,设置一对多关联
建立关联后加上:
setskipto子表1所在工作区,子表2所在工作区,...
65,取消一对多关联
setskipto
66,建立临时性关联(一对一)
select2
use床位分配
indexon住院号tosy
select1
use患者信息
setrelationon住院号intob
list住院号,姓名,性别,出生日期,b->床位号
67,建立临时性关联(一对多)
select2
use住院费用
indexon住院号tosy
select1
use患者信息
setrelationon住院号intob
setskiptob
list住院号,姓名,性别,出生日期,b->费用类别
68,将两表以关键字段相等为条件连接成独立的新表
select2
use床位分配
select1
use患者信息
joinwithbto患者床位for住院号=b.住院号fields住院号,姓名,住院科室,诊断,b.床位号,b.医生姓名
select0
use患者床位
browse
69,使用"住院费用"表的"费用小结"字段更新"患者费用合计"表中的"费用合计"字段
select2
use住院费用
indexon住院号tosy
select1
use患者费用合计
setordertotagsy
updateon住院号from住院费用replace费用合计with费用合计+b.费用小结random&&按住院号更新费用合计字段值
browse
70,数据统计
记录数统计
count[to内存变量][范围][for条件]
求和
sum[字段1,字段2,...][to变量1,变量2,...][范围][for条件]
求平均值
average[字段1,字段2,...][to变量1,变量2,...][范围][for条件]
分类汇总
totalon分类依据to新表[字段s][范围][for条件]
综合统计
calculate统计项目1,统计项目2,...[to变量1,变量2,...][范围][for条件]
统计项目:
cnt()--统计记录个数;sum()--求和统计;avg()--求平均值统计;max()--求指定字段中的最大值;min()--求指定字段中的最小值
71,SQL语句
当一个命令太长需要换行输入时,应在行后面加上分号再回车
例:
查看学生表中的学号
select学号from学生表
查看学生表中的内容
select*from学生表
查看学生表中年龄在18岁以上的学生信息
select*from学生表where年龄>18
显示借过书的学生学号(去重)
selectdistinct学号from借阅表
显示三年后学生的年龄(别名)
select学号,姓名,年龄+3as三年后年龄from学生表
显示年龄在18和22之间的学生信息
select*from学生表where年龄>=18and年龄<=22
select*from学生表where年龄between18and22
显示年龄不在18和22之间的学生信息
select*from学生表wherenot(年龄>=18and年龄<=22)
select*from学生表wherenot年龄between18and22
显示学号为"2004003"和"2004006"两位学生的信息
select*from学生表where学号="2004003"or学号="2004006"
select*from学生表where学号in("2004003","2004006")
以年龄降序显示学生表的内容
select*from学生表orderby年龄desc
显示年龄最大的三位同学信息(top要和order一起使用)
selecttop3*from学生表orderby年龄desc
显示前40%的学生信息
selecttop40percent*from学生表orderby年龄
学生人数
selectcount(*)from学生表
借过书的学生人数
selectcount(distinct学号)from借阅
求年龄和
selectsum(年龄)from学生表
求平均年龄
selectavg(年龄)from学生表
求最大,最小年龄
selectmax(年龄)min(年龄)from学生
统计每个人的借书本数
select学号,count(*)from借阅groupby学号
显示借书在一本以上的学生学号及借书本数
select学号,count(*)from借阅groupby学号havingcount(*)>1
显示借书者的学号,姓名,所借书的书号以及借书日期
select学生.学号(两表都有的字段要在前面加上表名),姓名,书号,借阅日期from学生,借阅where学生.学号=借阅.学号
显示借过书的学生信息
select*from学生where学号in(select学号from借阅)
72,将查询结果放到数组中
select命令intoarray数组名(不用预先定义)
73,将查询结果放到临时表中
select命令intocursor文件名
74,将查询结果放到永久表中
select命令intotabledbf文件名
75,将查询结果放到指定的文本文件中
select命令tofile文件名[additive(查询结果追加到文件后,默认覆盖)]
76,将查询结果送到打印机
select命令toprinter[prompt(显示打印对话框)]
77,将查询结果显示到主窗口
select命令toscreen
78,视图的创建
createview视图名asSQL语句
79,视图的修改
modifyview视图
80,将视图移除
dropview视图名