ERROR’出生日期必须大于工作日期’&&设置表的有效性
ALTERTABLEJSDROPCHECK&&删除表的有效性规则
ALTERTABLEJSADDPRIMARYKEYjybhTAGjybh&&增加一个主索引
3、插入表数据
INSERT-SQL命令
该命令的一般格式为:
INSERTINTO<表名>[(字段名1[,字段名2…])]VALUES(表达式1[,表达式2…])
例:
INSERTINTOxscj(xh,xm,cj)VALUES("81991001","张良",85.5)
4、更新表数据
UPDATE-SQL命令
命令格式:
UPDATE<表名>SET字段1=表达式1[,字段2=表达式2…]WHERE条件表达式
例:
UPDATExscjSETcj=cj*1.05WHEREcj>80
5、删除表数据
DELETE-SQL命令。
命令格式:
DELETEFROM<表名>[WHERE条件表达式]
例:
DELETEFROMxscjWHEREcj<60
要将表记录彻底物理删除再在“命令”窗口中输入:
PACK
补充:
1>DELETE不能删除个别的字段,它对于给定表只能整个记录整个记录地删除.
2>与INSERT和UPDATA一样,删除一个表中的记录可能会导致与其他表的引用完整性问题.当对数据库进行修改时一定在头脑中有这个概念.
3>DELETE语句只会删除记录,不会删除表.如果要删除表需使用DROPTABLE命令.
6、查询记录
SELECT-SQL命令创建查询
常用的格式:
SELECT表名1.字段名1[AS标题名1],表名1.字段名2[AS标题名2],…
FROM数据库名!
表名1[,数据库名!
表名2][,数据库名!
表名3]
[TOFILE文本文件名|intotable|intocursor表文件名]
[WHERE选定条件]
[GROUPBY分组字段名]
[HAVING分组中的满足条件]
[ORDERBY排序字段名1[ASC|DESC][,排序字段名2[ASC|DESC]...]]
示例:
浏览学生中的查询学生student.qpr:
SELECT表xs.xhas学号,表xs.xmas姓名,表xs.xbas性别,表xs.csrqas出生日期,表xs.bjas班级名称;
FROM数据test!
表xs;
WHERE表xs.bj=cs1;
ORDERBY表xs.xh;
INTOTABLExs
浏览成绩中的按课程查询sub_cj.qpr:
SELECT表xs.bjas班级名称,COUNT(表xs.xh)as班级人数,AVG(表cj.cj)as平均分,;
MAX(表cj.cj)as最高分,MIN(表cj.cj)as最低分;
FROM数据test!
表xs,数据test!
表cj,数据test!
表kc;
WHERE表cj.xh=表xs.xh;
AND表kc.kcm=表cj.kcm;
AND表cj.kcm=sc1;
GROUPBY表xs.bj;
ORDERBY表xs.bj;
INTOTABLEsub_cj
补充:
子查询:
见书P125
UNION组合查询:
见书P125,组合查询必须用SQL语句实现,请大家着重看下。
SELECTDISTINCT……表示只显示一次
SELECTTOP5……表示显示前五条记录
7、创建视图
CREATESQLVIEW命令创建视图
打开数据库,用命令来创建视图:
OPENDATABASE数据库名
CREATESQLVIEW视图文件名ASSQL-SELECT语句
例:
OPENDATABASESJ
CREATSQLVIEWSCOREASSELECTSJCJ.XH,SJCJ.CJ;
FROMSJ!
SJCJWHERESJCJ.KCH=”计算机基础”
8、索引
一、建立索引文件:
格式:
indexon索引关键字|tag索引名|to索引文件名说明:
(1).tag索引名:
指定索引名,此索引存放在与表名相同的.cdx文件中。
(2).to索引文件名:
选择此项生成独立索引,即一个索引存放在一个索引文件中;否则生成的是结构化复合索引。
例1:
建立“工资情况”表的结构化复合索引文件,其索引关键字分别为姓名和工资,而索引名分别为xm和gz.
use工资情况
browse
indexon姓名tagxm
indexon工资taggz
browse
&&分别执行以上命令后,生成了“工资情况.cdx”文件,其中存放了xm和gz两个索引。
例2:
用“姓名”作索引关键字,建立“职工档案.dbf”的独立索引文件,文件名为a.idx。
use职工档案
indexon姓名tohello&&执行此命令,检查默认目录e:
\myvfp,会发现多了一个文件:
hello.idx
use
二、打开索引:
打开表时,系统会自动打开结构化复合索引,但此时显示的仍是物理顺序。
要使索引起作用,必须指定主控索引。
主控索引就是控制当前显示顺序的索引。
也可以在打开表的同时指定主控索引。
1.打开表的同时打开索引并指定主控索引:
格式:
use表名[index索引文件名][ordertag顺序号|索引名]
说明:
(1).index索引文件名:
用于打开独立索引文件。
(2).ordertag顺序号|索引名:
用于打开结构化复合索引。
其中,顺序号为该索引在复合索引文件中的先后顺序,即在“表设计器”的“索引”选项卡中看到的该索引的位置。
例:
在命令窗口输入以下命令依次执行:
use职工档案indexhello&&打开表的同时打开独立索引hello
browse&&显示的是按姓名索引的顺序,use
use工资情况ordertag2&&显示的是gz索引的顺序,因为gz在“表设计器”中位置为2,use
2.打开表后再打开索引:
格式1:
setindexto索引文件名
功能:
打开独立索引文件
格式2:
setorderto顺序号|tag索引名
功能:
打开结构化复合索引
例:
在命令窗口依次执行以下命令:
use职工档案
brow&&显示物理顺序,setindextohello&&打开独立索引文件hello.idx
browse&&显示的是按姓名索引的顺序,use
use工资情况
browse&&显示物理顺序
setorderto1&&即将xm指定为主控索引,因为xm在“表设计器”中位置为1,browse&&显示按姓名索引的顺序,setorertogz&&将gz指定为主控索引
browse&&显示的是gz索引的顺序,use
三、关闭索引:
格式1:
setindexto
格式2:
setorderto
说明:
上两条命令后不加选项,可关闭当前索引。
格式1用于关闭独立索引,格式2关闭复合索引。
索引关闭后,表仍处于打开状态,显示物理顺序。
四、删除索引:
1.独立索引文件的删除:
用删除文件的方法删除,在“我的电脑”中找到对应的.idx文件,将其删除即可。
2.复合索引文件的删除:
格式1:
deletetagall
格式2:
deletetag索引名
说明:
格式1删除复合索引文件中的所有索引,格式2删除复合索引文件中的指定索引。
一个复合索引文件中的所有索引都被删除后,该复合索引文件即自动删除了。
VFP程序设计部分
课堂例题
例1:
求1/2+2/3+3/5+……前20项的和
程序:
clear
s=0
p=1
q=2
fori=1to20
s=s+p/q
t=p
p=q
q=t+q
endfor
?
's='+str(s,10,6)
?
'i='+str(i)
例2:
判断某数是否为素数
程序:
clear
input"输入一个数:
"ton
fori=2toint(sqrt(n)+1)
ifn%i=0
exit
endif
endfor
ifn=2
?
alltrim(str(n))+'是一个素数'
else
ifi>int(sqrt(n)+1)
?
alltrim(str(n))+'是一个素数'
else
?
alltrim(str(n))+'不是一个素数'
endif
endif
例3:
scan语句对比
程序:
clear
usexs
go1
scanforxb='女'andxdh='01'
?
xh,xm,xb,xdh
endscan
第二种程序:
clear
selexs
go1
dowhileeof()=.f.
ifxb='女'andxdh='01'
?
xh,xm,xb,xdh
endif
skip
enddo
例4:
将星期输出为“日一二三四五六”。
程序:
clear
datt(date())
datt({^2009-5-5})
functiondatt
parametersdat
da='日一二三四五六'
i=dow(dat)
?
'星期'+substr(da,i*2-1,2)
endfunc
例5:
计算所给英语句子中的单词数。
程序:
clear
input"输入一个英语句子:
"tostr
i=1
count=0
word=0
fori=1tolen(str)
ch=substr(str,i,1)
ifch=''
word=0
else
ifword=0
count=count+1
word=1
endif
endif
endfor
?
'单词的个数:
'+alltrim(str(count))
例6:
字符串中每个字母出现的次数
程序:
clear
input"输入英语句子:
"tostr
fori=1to26
ch=chr(i+96)
n&ch=0
endfor
other=0
fori=1tolen(str)
ch=substr(str,i,1)
ifbetween(ch,'a','z')orbetween(ch,'A','Z')
n&ch=n&ch+1
else
other=other+1
endif
endfor
fori=1to26
ch=chr(i+96)
ifn&ch!
=0
?
ch+'出现过'+alltrim(str(n&ch))+'次'
endif
endfor
?
'other'+'出现过'+alltrim(str(other))+'次'
各种函数的实现
1、ABS
程序:
clear
input'一个数:
'toa
ifa>0
?
a
else
?
-a
endif
2、MAX和MIN由于牵扯到数组应该不会考,下面写一个三个数比较的代码,以MAX函数为例。
程序:
clear
inputtoa
inputtob
inputtoc
max=a
ifmax
max=b
endif
ifmaxmax=c
endif
?
'最大的数为:
'+alltrim(str(max))
3、MOD
程序:
clear
input'被除数:
'toa
input'除数:
'tob
t=a-b
dowhilet>=0
t=t-b
enddo
t=t+b
?
alltrim(str(a))+'除以'+alltrim(str(b))+'的余数为:
'+alltrim(str(t))
4、ALLTRIM、LTRIM、RTRIM
ALLTRIM可以由LTRIM和RTRIM组成,所以下面我写的是LTRIM和RTRIM的代码,组合后就是ALLTRIM的代码。
LTRIM程序:
clear
input'输入一个英语句子:
'tostr
ch=left(str,1)
l=len(str)
dowhilech=''
l=l-1
str=right(str,l)
ch=left(str,1)
enddo
?
str
RTRIM程序:
clear
input'输入一个英语句子:
'tostr
ch=right(str,1)
l=len(str)
dowhilech=''
l=l-1
str=left(str,l)
ch=right(str,1)
enddo
?
str
联想:
去除字符串中所有空格
程序:
input'输入一个字符串:
'tostr
p=space(0)
fori=1tolen(str)
ch=substr(str,i,1)
ifch!
=''
p=p+ch
endif
endfor
?
str+'去掉所有空格后为'+p
5、LEN
程序:
clear
input'输入一个字符串:
'tostr
p=space(0)
len=0
dowhilep!
=str
len=len+1
p=p+substr(str,len,1)
enddo
?
'字符串长度为:
'+alltrim(str(len))
6、SPACE
程序:
clear
input'输入一个数字:
'toa
fori=1toa
?
?
''
endfor
补充部分
题目1:
变量值的交换,如交换a,b的值。
程序:
clear
input"一个数a:
"toa
input"一个数b:
"tob
c=a
a=b
b=c
?
'a,b交换后为'+alltrim(str(a))+','+alltrim(str(b))
题目2:
根据学生的成绩给予相应的等低,对应关系如下:
90——100 A
80——89 B
60——79 C
60以下 D
程序:
clear
input"输入一个学生的成绩:
"tocj
docase
casecj>90
?
'A'
casecj>80
?
'B'
casecj>60
?
'C'
otherwise
?
'D'
endcase
题目3:
位数对调,输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的数。
程序:
clear
input"一个三位数a:
"toa
b1=int(a/100)
b2=mod(int(a/10),10)
b3=mod(a,10)
b=b3*100+b2*10+b1
?
alltrim(str(a))+'位数对调后为:
'+alltrim(str(b))
类似题型:
计算一个三位数个十百位数字的和。
程序:
input"输入一个三位数:
"tox
s=0
fori=1to3
a=val(substr(str(x,3),i,1))
s=s+a
endfor
?
"这个三位数的各位之和是:
"+alltrim(str(s,2))
题目4:
求出1-100中所有的素数,并将每个素数按照一排五个输出?
程序:
clear
y=0&&此变量用来判断输出的素数是第几个,逢五换行
fori=2to100
f=0&&此变量用来判断该数是否为素数
forj=2toint(sqrt(i))
ifmod(i,j)=0
f=1
endif
endfor
iff=0
?
?
alltrim(str(i))+""&&双问号表示在同一行输出,不换行
y=y+1
ifmod(y,5)=0
?
""
endif
endif
endfor
题目5:
寻找水仙花数数,求所有这样的三位数,这些三位数等于它各位数字的立方和。
例如,153=1^3+5^3+3^3。
程序:
clear&&此方法为穷举法,即将所有可能全部列出。
fori=1to9
forj=0to9
fork=0to9
a=100*i+10*j+k
ifa=i^3+j^3+k^3
?
alltrim(str(a))
endif
endfor
endfor
endfor