在foxpro 字段类型中如何设置前几项字段的组合关系式

2015年石油华东《Visual FoxPro》在线考试及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
2015年石油华东《Visual FoxPro》在线考试及答案
总评分4.1|
浏览量51906
用知识赚钱
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢【图文】Visual_FoxPro_6.0的操作_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Visual_FoxPro_6.0的操作
&&Visual_FoxPro_6.0的河北职称计算机基础操作
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢& && & & &
Visual FoxPro
Visual FoxProVisual FoxProVisual FoxProVisual FoxPro
Visual FoxProSQLIXVisual FoxPro
Visual FoxPro
Visual FoxPro
Emailchengwei@sdfi.edu.cn
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2010928
Visual FoxPro
Visual FoxPro MicrosoftWindows
Visual FoxPro
1.1.1 Visual FoxPro
1Visual FoxPro
2080Ashton-TateDBaseDBase IIDBase IIIDBase III+DBase IV
1986Fox SoftwareDBaseDBaseFoxBase 1.0FoxBase 2.0FoxBase 2.1DBase1989FoxBaseFoxPro 1.0
WindowsFox Software1991FoxPro 2.0RushmoreFoxPro 2.0FoxBase100XBaseXBaseDBaseDBase
1992MicrosoftFox Software19931994FoxPro 2.5FoxPro 2.6DOSWindows
1995Windows 95Microsoft32Visual FoxPro 3.0XBase
1997MicrosoftVisual FoxPro 5.01998Visual FoxPro 6.0Visual Studio 6.02006Visual FoxPro 9.0Visual FoxPro 7.0Visual FoxPro 6.0
2Visual FoxPro
Visual FoxPro 6.0 XBase
Visual FoxPro 6.0 WindowsXBase Visual FoxPro
Visual FoxPro 6.0 XBase .dbf Visual FoxPro 6.0SQLStructured Query LanguageRushmore
Visual FoxPro 6.0
XBaseVisual FoxPro 6.0 Visual FoxPro 6.0
Visual FoxPro 6.0 Object Link and EmbedVisual FoxPro 6.0 Visual FoxPro 6.0
Active DocumentWindowsHTMLActive Document Visual FoxPro Active DocumentInternet ExplorerActive Document
BMPGIFGraphics Interchange FormatJPEGJoint Photographic Electronic GroupInternet
Visual FoxPro 6.032ODBCOpen DataBase Connectivity
Visual FoxPro 6.0Visual FoxPro 6.0ForProFoxProVisual FoxPro 6.0FoxProVisual FoxPro 6.0
Visual FoxPro 6.02000
3Visual FoxPro
Visual FoxPro 6.01-1
4Visual FoxPro 6.0
PentiumIBMPC
9X/NT/2000/XP
1.1.2 Visual FoxPro
Visual FoxProVisual FoxPro1-7
1Visual FoxPro的工作方式
Visual FoxPro
Visual FoxProXBase
Visual FoxPro
Visual FoxPro
2Visual FoxPro的菜单系统
Visual FoxProFEVOTPWH
Visual FoxPro
Visual FoxPro
Visual FoxPro
3Visual FoxPro 的工具栏
Visual FoxProVisual FoxPro101-6
4命令窗口、状态栏和工作区
Visual FoxPro
Visual FoxPro
1.1.4 Visual FoxPro
Visual FoxPro
1打开“选项”对话框
Visual FoxProVisual FoxProVisual FoxProVisual FoxProD:\VFP_User
”按钮,打开“选择目录”对话框选定用户工作目录,单击“选定”按钮返回后,系统自动在文本框中输入用户工作目录的完整路径。
Visual FoxProMSDN LibraryVisual FoxProFoxhelp.chmC:\program files\microsoft visual
studio\msdn98\98vs\2052\
1-8 Visual FoxPro
F1helpVisual FoxPro
2环境参数设置的保存
Visual FoxPro
Visual FoxProVisual FoxProVisual FoxProVisual FoxPro
Visual FoxProWindowsVisual FoxProVisual FoxPro
1.1.5 Visual FoxPro
Visual FoxProVisual FoxPro
1Visual FoxPro的命令格式
Visual FoxPro
&& &[&&]& [[Fields] &&&]& [For &&&]& [To &&1&|&2&]
, , LocateLocal,
注意:命令格式中的符号“& &”、“[ ]”、“|”在实际操作中不能在命令中输入。
Visual FoxPro^yyyy-mm-dd^4-
1.1.4Visual FoxPro1.6Visual
[hh:mm:ss[am|pm]]hhmmss1200ampmam12
? {^,}, {^,
8}, {^, 8 p}, {^,
07/15/10 12:00:00 AM& 07/19/10 08:00:00 AM& 10/20/10 08:00:00 PM& 12/30/10 03:45:00 PM
00:00:00 am12:00:00 am00:00:00 pm12:00:00 pm00:00:0011:59:5912:00:00 am11:59:59 am12:00:0023:59:5912:00:00 pm11:59:59 pm
.t..T..y..Y..n..N..f..F..
Visual FoxPro
Visual FoxPro
Visual FoxPro
Visual FoxProCNYDTL
Visual FoxProASCII254ASCIIVisual FoxPro
abc10XY_1_monb-102abif
Visual FoxPro
Store && To xm&&&&&&&&&&&&&&&&&&&&&&& &&
rq{^}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
bh&201192&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
gz1234.56123.12&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
y.t.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
? , rq, xm, bh, gz, y&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
& &07/28/10
&&& &201192&&&&& 1357.68 &&&.T.
1Dimension&
&&(&1& [,&2&] ) [, &2&(
&&(&1& [,&2&] ) [, &2&(
Dimension x(2), y(2, 3)&&&&&&&&&&&&&&&&&&& &&
x2x(1), x(2)y
6y(1,1), y(1, 2), y(1, 3), y(2, 1), y(2, 2),
Store && To x, y(1, 2) &&&&&& && xy(1, 2)
y(1, 1)&&&&&&&&&&&&&&&&&&&&&&&&& &&
y(1, 3){^}&&&&&&&&&&&& &&
y(2, 1)1234.56123.12&&&&&&&& &&
y(2, 2).t.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&& &&
? x, y&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&& &&
? x(1), x(2), y(1, 1), y(1, 2), y(1,
3), y(2,1), y(2, 2), y(2, 3)&&&&&&&&& &&
xyxy&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
?xy, y, x, y(1), y(3), y(4), y(5), y(6)&&&&&&&& &&
& & & & 07/28/10& 1357.68& .T.&
& & & & 07/28/10&&& 1357.68& .T.&& .F.
? x, yxyxy
, yy(1)y(2)y(3)y(4)y(5)y(6)
Visual FoxPro_
Memory& [Like& &&] [To& Print | File& &&]
Memory& [Like& &&] [To& Print | File& &&]
List , , Display, , ,
All& [Extended]
All& [Like& && | Except& &&]
31Extended
4LikeExcept
Save& To& &&&
[All& Like& && | All& Except& &&]
, LikeExcept
Restore& From& &&&
[Additive]
Additive, ,
Additive, ,
Memo& Like& x*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&x
X&&&&&&&&&&&&&&&& Pub&&&&&&&& A
&&&& 1&&&&&&&&&&&&&&&&&& C&&&&
&&&& 2&&&&&&&&&&&&&&&&&& C&&&&
XY&&&&&&&&&&&&&&&&&&&& Pub&&&&&&&& C&&&&
yx$1234.56&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&yx
yt{^,16:26}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&yt
Memo& Like& y*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&y
Y&&&&&&&&&&&&&&&& Pub&&&&&&&& A
&&&& 1, 1&&&&&&&&&&&&&&& C&&&&
&&&& 1, 2&&&&&&&&&&&&&&& C&&&&
&&&& 1, 3&&&&&&&&&&&&&&& D&&&& 07/28/10
&&&& 2, 1&&&&&&&&&&&&&&& N&&&& 1357.68&&&&&&&&& (&&&&&&&&&&&& 0)
&&&& 2, 2&&&&&&&&&&&&&&& L&&&& .T.
&&&& 2, 3&&&&&&&&&&&&&&& L&&&& .F.
YX&&&&&&&&&&&&&&&&&&&& Pub&&&&&&&& Y&&&&
YT&&&&&&&&&&&&&& Pub&&&&&&&& T&&&& 08/20/10 04:26:00 PM
Save To d:\vfp-user\y All Like y*&& & &&yy.mem
Save To d:\vfp-user\x All Except y* &&yx.mem
Release x, y&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & &&x, y
Disp Memo Like x*&&&&&&&&&&&&&&&&&&&&&&& & &&x
XY&&&&&&&&&&&&&&&&&&&& Pub&&&&&&&& C&&&&
yx=$1.32&&&&&&&&&&&&&&&&&&&&& &&&&&& &&yx
yt={^,11:36}&&&&&&&&&&&&&&&&&&& &&&&&& &&yt
Restore From d:\vfp-user\x additive &&&&&& &&x.mem
Disp Memo Like x*&&&&&&&&&&&&&&&&&&&&&&& &&&&&& &&x
X&&&&&&&&&&&&&&&& Pub&&&&&&&& A
&&&& 1&&&&&&&&&&&&&&&&&& C&&&&
&&&& 2&&&&&&&&&&&&&&&&&& C&&&&
XY&&&&&&&&&&&&&&&&&&&& Pub&&&&&&&& C&&&&
Disp Memo Like y*&&&&&&&&&&&&&&&&&&&&&&& &&y
YX&&&&&&&&&&&&&&&&&&&& Pub&&&&&&&& Y&&&&
YT&&&&&&&&&&&&&& Pub&&&&&&&& T&&&& 12/15/10 11:36:00 AM
Restore From d:\vfp-user\y&&&&&&&&&&&&& &&&&&& &&y.mem
Disp Memo Like y*&&&&&&&&&&&&&&&& &&&&&& &&y
Y&&&&&&&&&&&&&&&& Pub&&&&&&&& A
&&&&&& 1, 1& &&&&&&&&&&&&& C&&&&
&&&&&& 1, 2&&&&&&&&&&&&&&& C&&&&
&&&&&& 1, 3&&&&&&&&&&&&&&& D&&&& 07/28/10
&&&&&& 2, 1& &&&&&& &&&&&& N&&&& 1357.68&&&&&&&&& (&&&&&&&&&&&& 0)
&&&&&& 2, 2& &&&&&& &&&&&& L&&&& .T.
&&&&&& 2, 3& &&&&&& &&&&&& L&&&& .F.
YX&&&&&& &&&&&& &&&&&& Pub&&&&&&&& Y&&&&
YT&&&&&&& &&&&&& Pub&&&&&&&& T&&&& 08/20/10 04:26:00 PM
Visual FoxPro, , , ,
, Visual FoxPro, Visual FoxPro1.5,
Visual FoxPro,
Visual FoxPro, , ,
1-5x15, y4, z-7
? -2^3+5, -2^4+x, (3-1)**-2*6+y, (3-z)**-2*6,
3*y /6**-2, (3*y/6)^-2
-3.00&&&&&&&&&&& 31.00&&&&&&&&&&&& 5.50&&&&&&&&&&&&&& 0.06&&&&&&&&&&&&&& 432.0000&&&&&&&&&&&&&& 0.2500
? x%y, x%-y, -x%y,
-x%-y, -17%z, -17%-z, 17%z, 17%-z
3&&&&&&&&&& -1&&&&&&&&&& 1&&&&
-3&&&&&&&& -3&&&&&&&&&& 4&&&&&&&&&&& -4&&&&&&&&&& 3
? $100.45*x+$2500.82, ($100.45*x+$2500.82)/y,
($100.45*x+$.78*x)/y
&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& 901.4675
1-6x=&&, y=&SDFI& &, z=&&& &
? && &+x, && &-x+y-z+&jsj&
&& &&&&&& && SDFI&&
, , , +1-11
1-7x={^}, y={^,10:30:00}
10+{^}-x, {^}-x,
07/27/10&&&&&&&&&&&&& 20&&&&&&&&&& 80&&& &&&&&& 07/31/10
? 3600*5+y, y-{^,00:30:00},
y-36000, y-36000-{^,23:30}
07/20/03 03:30:00
PM&&&&&&&&&&&&&& 2628000
&&&&&& 07/20/10
12:30:00 AM&&&&&&&&& 5274000
, , , (.T..F.)
Visual FoxPro
Relational
DataBase System RDBS2070
Distributed DataBase System
DDBS2080Client/Server
Multimedia DataBase System
Object Oriented DataBase
SystemOODBSObject Relational DataBase SystemORDBS
DataBase Management SystemDBMSDBMS
Description Language DDL
Manipulation Language DML
DataBase System DBS2-4
Entity Set
TypeValue2-1
2-219980608/21/1952
2-219980608/21/52
ABnn0BAAB1n
ABnn0BAmm0ABmn
Visual FoxPro .dbf2-3
Attribute2-3
Visual FoxPro
Tuple2-319980608/21/52
Visual FoxPro
Candidate Key
Foreign Key
Visual FoxProVisual FoxPro
Visual FoxPro
Visual FoxPro .dbc
1NF2NF3NFBCNF4NF5NF
2-52-52-62-72-8*2-8
Visual FoxPro
RS RSR2-152-16b
Intersection
RS RS2-162-16c
表2-112-17
Projection
&&&&&&&& & &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2-18&&&&&
表2-19表2-202-21
2-192-202-222-21
2.4.32-132-14
通常,一个应用系统中至少有一个数据库,也可以包含多个数据库。建立数据库的目的是将相互之间有联系的信息有机地组织在一起,进行统一的管理和使用。
Visual FoxPro 3.0 .dbfVisual FoxPro 3.0 .dbf是 .dbc
Create Database [&&|?]
3-4“*.dbc”
Set Database To [&&]
Visual FoxPro
Modify Database [&& | ?]
Delete Database && | ? [Deletetables]
Deletetables.dbf3.5
注意:删除数据库文件前,首先要关闭数据库。
Windows“资源管理器”rsgl.dbcVisual FoxProzgqk.dbf3-6
⑴ “表名”文本框
注意: “数据库设计器”
⑵ “记录有效性”组框
zgqk.dbfcsrqgzrqcsrq&gzrq
⑶ “触发器”组框
⑷ “表注释”
Visual FoxPro
格式:Copy Structure To && [Fields &&]
② [Fields &&]
3-2zgqk.dbf4zgqk_f1.dbf
Copy Structure To zgqk_f1 Fields zgbh, xm, csrq, bmbh
Use zgqk_f1
List Structure&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& && zgqk_f1.dbf
:&&&&&&&&&&&&&&&&&&&&&&
D:\RSGL\ZGQK_F1.DBF
:&&&&&&&&&&&&&&&&&&
:&&&&&&&&&&&&&&
:&&&&&&&&&&&&&&&&&&&&&&
&&&&&& &&& &&&&&& & &&&&&& &&&&&& &&&&&&&&&&&&& Nulls
& 1&&&&&&&& ZGBH&&&& &&&
6&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& PINYIN& &&&&&&
& 2&&&&&&&& XM&&&&&&&& &&&
8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& 3&&&&&&&& CSRQ&&&& &&&
8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& 4&&&&&&&& BMBH&&& &&&
3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
**&&&&&&&&&&&
注意:新的数据表是一个只有结构没有数据的空表文件。
格式:Copy To && [&&] [Fields &&] [For &&]
3-3zgqk.dbfzgqk_f2.dbf
Copy To zgqk_f2 Fields xm, csrq For xb=&&
Display All&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
zgqk_f2.dbf
& XM&&&&&&&&&
&&&&&& 1& &&&&&&
08/21/52&&&
&&&&&& 2& &&&&&&&&
03/26/62&&&
&&&&&& 3& &&&&&&
07/02/55&&&
&&&&&& 4& &&&&&&
01/19/76&&&
&&&&&& 5& &&&& 10/23/80&&&
&&&&&& 6& &&&&&&&&
05/29/76&&&
Visual FoxPro
⑴ 菜单方式
Browse [Fields &&] [For &&] [NoAppend] [NoEdit | NoModify]
[NoDelete] [NoWait] [Last]
Fields &&&&
[NoAppend]
[NoEdit | NoModify]
[NoDelelte]
[Last]BrowseBrowse
3-4zgqk.dbfzgbhxmxbcsrqxlzc4
Browse Fields zgbh:H=&&, xm:H=&&, xb:H=&&, ;
csrq:H=&&, xl, zc For zc=&&
浏览”窗口即被分为左右两个区域。单击左侧或右侧区域,再单击“显示”菜单的“浏览”或“编辑”命Browse3-14
注意: “表设计器”<span
lang=EN-US style='mso-fareast-font-family:楷体_GB3zgqk.cdx
Visual FoxPro Index
Index On && To && [Additive]
&索引表达式&:可以由单个字段构成,也可以由多个字段组合而成。表达式的长度最多为100个字符。
[Additive]:默认情况下,建立一个索引文件时,系统会自动关闭此前已打开的索引文件。使用该可选项,则建立索引文件的同时保持先前打开的索引文件不被关闭。
.idxSet Index ToUseIndex3.4.3
④ 单索引文件建立后,自动处于打开状态并作为当前索引生效。
Index On && Tag && [Of &&]
&[For &&] [Ascending | Descending] [Unique | Candidate] [Additive]
&&可以由单个字段构成,也可以由多个字段组合而成240
[Of &&&] .cdx .cdx
[Ascending | Descending]Ascending
[Unique | Candidate]
⑦ [Additive]
3-14 gz.dbfjcgzjcgz_1.idxjcgz_2.idx
Index On jcgz To jcgz_1&&&&&&&&&&&&&& &&
Index On -jcgz To jcgz_2&&&&&&&&&&&&& &&
List Next 5 Fields zgbh, jcgz&&&&&&&& &&
& ZGBH&&&&&& JCGZ
&&&4& &199806&&&&&&&&&& 2760.00
6& &199310&&&&&&&&&& 2470.00
&199313&&&&&&&&&& 2470.00
&&&&&&& &&&&3& &199316&&&&&&&&&& 2190.00
&199006&&&&&&&&&& 1980.00
注意:索引关键字值相同的记录将按原来的物理顺序显示,如67记录。
3-15zgqk.dbfzgbhzgbh.idx
xmcsrqxmcsrq
注意:为了能观察到同姓名<span
lang=EN-US style='mso-fareast-font-family:楷体_GB-03-20
Index On zgbh To zgbh&&&&&&&&&&&&&&
Index On zgbh Tag g_bh Descending Candidate
Index On xm+Dtoc(csrq) Tag xmcsrq&&&&&&&&&& &&
List xm, csrq For xm=&&
&& XM&&&&&& CSRQ&&&
&&&&&& 14&& &&&&& 03/20/80
12&& &&&&&
注意:xm+Ctod(csrq)“//”,Csrq
Set Date To ymd&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
&& XM&&&&& CSRQ&&&
&&&& 76/10/09
&&&& 80/03/20
1Set Index To [&&]
2Use && Index &&
1Set Index To
Set Order To [&&|&&| [Tag] &&]
Set Index.idx.cdx1
Set Order ToSet Order To 0
3-163-15zgqk.dbfSet Order To
Use zgqk Index zgbh&&&&&&&&&&&&&&&&&&&& &&
Set Order To 1&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
List&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Order To 2&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
zgqk.cdxg_bh
List&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Order To 0&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
List&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Order To Tag xmcsrq&&&&&&&&&&&&& &&
zgqk.cdxxmcsrq
List&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Order To&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Recno( )Found( ).T.Eof( ).F.
3-17 zgqk.dbf199816
Set Order To g_bh&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Seek &199316& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
?Found( ), Recno( )
Display zgbh, xm
.T.&&&&&&& 7
&&& ZGBH&&&& XM
Delete Tag && | All
Visual FoxPro
128ASCII10
注意:“属于”
zgbhzgqk.dbfzgbh3-28
zgqkgz3-29
Set Relation To [&& Into && | &&]
Set Relation To
Set Relation Off Into && | &&
3-19zgqk.dbfgz.dbf5
Open Database rsgl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Use gz&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Order To Tag zgbh&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Use zgqk&&&&&&&&&&&&
& &&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Relation To zgbh Into 2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
List Next 5 zgbh, xm, gz-&jcgz, gz-&zwgz
& ZGBH&& XM&&&&& Gz-&JCGZ& Gz-&ZWBT
&&&&& 1&& 199806& &&&& 2760.00&&&&& 990.00
&&&&& 2&& 199006& &&&& 1980.00&&&&& 660.00
&&&&& 3&& 199002& &&&&&&
1800.00&&&&&
&&&&& 4&& 199310& &&&& 2470.00&&&&& 880.00
&&&&& 5&& 199802& &&&& 1800.00&&&&& 570.00
Visual FoxPro
3-20rsgl.dbczgqk.dbfgz.dbfbm.dbf
zgqk.dbfzgbhbmbhzgbhbmbhgz.dbfzgbhzgbhbm.dbfbmbhbmbh
注意:若索引已经建立,上述步骤可以跳过。
zgqk.dbfzgbhgz.dbfzgbhbm.dbfbmbhzgqk.dbfbmbh
3-30zgqk.dbfgz.dbfbm.dbfzgqk.dbf
注意:这种连接是临时性的,并不保存到数据库中。
4-114Inner JoinANDOR
设置查询去向。4-13Visual FoxPro7
4-14-7q2.qpr
4-3zgqk.dbf3
bmbhCount(*)
SQLSQL-Select4-17
注意:“查询设计器”SQL-Select“查询设计器”“查询设计器”
Visual FoxPro
Visual FoxPro
Visual FoxPro
注意:① <span
lang=EN-US style='mso-fareast-font-family:楷体_GB
② “删除”命“移去”
Connection4-21OK
注意:输入字符型、日期型、逻辑型等类型数据时要加定界符。
Visual FoxPro4-26
SQLVisual FoxPro
SQL DELETE
SQL UPDATE
UseIndex OnSet Relation
4-44-191zgbhxmxbzcbmbh1
Open Database rsgl&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Use 1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
1zgqk.dbfgz.dbf
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&
Index On xm Tag v_xm&&&&&&&&&&&&&&&&&&&&&& &&
Seek &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
? Found( )&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Select zgqk&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Set Order To Tag g_bh&&&&&&&&&&&&&&&&&&&&&&& &&
zgqk.dbf3-15
Set Relation To zgbh Into zgqk&&&&&&&&&&& &&
“1”zgqk.dbf
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
List zgbh, xm, zgqk.xl,zgqk.csrq&&&&&&& &&
zgbhxmxlcsrq
注意:① 与视图相关的索引和关联都是临时性的,将随着视图的关闭或数据库的关闭而自动消失。
② Modify Structure“结构”择“数据库设计器”中的视图子窗口,在其快捷菜单中选择“修改”命令时,打开的将是“视图设计器”而不是“表设计器”。因此,只能修改当前视图的定义。
Structured Query Language
198610ANSISQLISO1987619894ISOSQL SQL-89SQLSQLSQL-86SQL-89SQL-92SQL-1999SQL-2003SQL-2006
⑵ SQLSQL“如何”“做什么”SQL “如何做”
⑶ SQLSQL5-1SQLSQL
⑷ SQLSQLSQL
⑸ SQLSQLSQL
Visual FoxProSQLXBaseVisual FoxProSQL
SelectSQLSQLSelectSelect
Select [All | Distinct] [Top nExpr [Percent]]
& [Alias.]Select_Item [[AS] Column_Name] [, [Alias.]Select_Item [[AS] Column_Name] ...]
From [DatabaseName!]Table [[AS] Local_Alias]
& [[Inner | Left [Outer] | Right [Outer] | Full
& Join [DatabaseName!]Table [[AS] Local_Alias] On JoinCondition … ]
[Where JoinCondition [And JoinCondition ...]
[And | Or FilterCondition [And | Or FilterCondition ...]]]
[Group By GroupColumn [, GroupColumn ...]]
[Having FilterCondition]
By Order_Item [Asc | Desc] [, Order_Item [Asc | Desc] ...]]
[Into Destination | To File FileName [Additive] | To Printer [Prompt] | To Screen]
[Union [All] SelectCommand]
⑴ SelectSelect_Item“*”SelectAllDistinct Top
nExpr nExprAs Column_NameAs
⑵ FromSelect
⑺ IntoVisual FoxProSQL—SelectToSQL
⑻ UnionSelect
RsglSelect
⑴ “.”zgqk.zgbhgz.zgbh
6-26-36-16-2
改为“编一次,重复用”
Parameter m, y&&&&&
For i=1 to m
Store 0 To x1, x2, x3&&&
Input &n=& To n
Input &r=& To r
If n&=0 And r&=0 And n&r
& Do fact With n, x1
& Do fact With r, x2
& Do fact With n-r, x3
& c=x1/x2/x3
& ? &c=&, c
Return [ To Master | To &&]
To MasterTo &&6-10
Procedure &1&
Procedure &2&
Set Procedure& To& &&& [Addtive]
1Close Procedure
2Set Procedure To
3Release Procedure &&
** p1Proc1.prg
Store 0 to x1, x2, x3
Set Procedure To proc1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Input &n=& To n
Input &r=& To r
If n&=0 And r&=0 And n&r
Do p1 With n, x1
Do p1 With r, x2
Do p1 With n-r, x3
c=x1/x2/x3
Set Proc To&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Store 0 To x1, x2, x3
Input &n=& To n
Input &r=& To r
If n&=0 And r&=0 And n&r
Do pp1 with n, x1&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Do pp1 with r, x2
Do pp1 with n-r, x3
c=x1/x2/x3
Return&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
Procedure pp1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
For i=1 To m
Input &n=& To n
Input &r=& To r
If n&=0 And r&=0 And n&r
& c=f1(n)/f1(r)/f1(n-r)&&&&&&&&&&&&&&&&&&& &&
& ? &c=&, c
Function f1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
y=1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&
For i=1 To m
Return y&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& && 变量y
变量找不到”的警告提示信息。在使用了子程序的系统中,并不是任何程序模块中定义的内存变量都能够在所有的程序代码段中使用。事实上,每个内存变量都有一定的作用范围,它们中有的能在所有程序模块中使用,有的只能在某些程序模块中使用。内存变量能够合法使用的程序范围就叫做变量的作用域。
② ReleaseClear allClear memory
Visual FoxPro
Private &&&&&&
Private All [Like &&|Except &&]
注意:Private命令并不能建立内存变量,它只能隐藏上级模块中已经存在的同名变量。
6-25x1xx2x3x4x
List Memo Like x*
List Memo Like x*
Procedure sub1
Store .T. To x3, x4
List Memo Like X*
&sub1“x1”x1
Visual FoxPro
菜单项,在下拉菜单中选择“调试器”命令
5的“窗口”菜单中6-115
⑵ 命令方式
1Create Menu &&
2Modify Menu &&
Visual FoxPro
Ctrl+W .mnx .mnt
Set Sysmenu To Default
“快速菜单”
Visual FoxPro
Modify Menu cd2
Visual FoxPro 8-10
cd2.mnxcd2.mntcd2.mpr
Do cd2.mpr
Release Popups &&
RightClick
【8-3】【8-2】
Visual FoxPro4
8-4 gz.dbf
5-8-16(a)zgbh
6-8-16 (b)
1Create Report [&&]
2Modify Report &&
Visual FoxPro
Report Form && [Preview | To Print]
Visual FoxPro&&PreviewTo Printer
8-17Visual FoxPro98-1
8-7 zgqk.dbf
zgqk.dbfxl
8-6zgqk.dbf
1Create Label [&&]
2Modify Label &&
Visual FoxPro
Label Form && [Preview] | [To Printer]
Visual FoxPro&&PreviewTo Printer
Visual FoxPro
1zgqk.dbf9-1
2gz.dbf9-2
3kyqk.dbf9-3
4bm.dbf9-4
9-4:&&&&&&&&&&&&&&&&&
5 “”yh.dbf9-5
6 “”syqk.dbf9-6
注意:在数据表结构中,带有“*”号的字段为主关键字;带有“#”号的字段为外部关键字
ZgqkGzKyqkBm
9-89-8a9-8b1069-99-109-8c
rs_end.prg
Visual FoxPro
Visual FoxPro9.2.59-21rs_main
&O&O9-24kyqk
Visual FoxPro
Visual FoxPro
FoxPro9-279-28~9-31
Visual FoxPro
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
FoxPro 8.0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
FoxPro 6.0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&全国计算机等级考试二级教程visual foxpro 6.0程序设计1 目录第1章 visual foxpro 基础1-1 数据库基础知识 1-2 关系数据库 1-3 数据库设计基础 1-4 visual foxpro 系统概述第2章 v&&&&isual foxpro 系统初步2-1 visual foxpro 6.0 的安装与启动 2-2 visual foxpro 6.0 的用户界面2 目录2-3 项目管理器 2-4 visual foxpro 向导、设计器、生成器简介第3章 数据与数据运算前言:vfp的命令结构 3-1 常量与变量 3-2 表达式 3-3 常用函数数值类 字符类 日期时间类 转换类 测试类第4章 visual foxpro 数据库及其操作3 目录4-1 visual foxpro 数据库及其建立 4-2 建立数据库表 4-3 表的基本操作 4-4 排序和索引 4-5 数据完整性 4-6 多个表的同时使用第5章 关系数据库标准语言 sql5-1 sql 概述4 目录5-2 查询功能 5-3 操作功能 5-4 定义功能第6章 查询与视图6-1 查询 6-2 视图第7章 程序设计基础7-1 程序与程序文件5 目录7-2 程序的基本结构 7-3 多模块程序 7-4 程序调试第8章 表单设计与应用8-1 面向对象的概念 8-2 visual foxpro 基类简介8-3 创建与管理表单8-4 表单设计器 8-5 常用表单控件 自定义类(补充)常用控件(补充) activex控件(补充)6 目录第9章 菜单设计与应用9-1 visual foxpro 系统菜单 9-2 下拉式菜单设计 9-3 快捷菜单设计第10章 报表设计10-1 创建报表10-2 设计报表10-3 数据分组与多栏报表第11章 开发应用程序7 第一章 visual foxpro 基础8 1-1 数据库基础知识1-1-1 计算机数据管理的发展1. 数据与数据处理 数据-存储在某一种媒体上的能够识别的物 理符号描述事物特性的数据内容 存储在某一种媒体上的数据形式数据处理-将数据转换成信息的过程 信息-被加工成特定形式的数据 信息处理-为了产生信息而处理数据9 1-1 数据库基础知识1-1-1 计算机数据管理的发展在计算机应用中,利用存储器来存储数据; 利用计算机软件来管理数据;通过应用程序 来对数据进行加工处理。 2. 计算机数据管理人工管理 文件管理 数据库管理 分布式数据库系统c/s(客户机/服务器)体系与odbc面向对象数据库系统10 1-1 数据库基础知识1-1-2 数据库系统1. 有关数据库的概念数据库(database)- 存储在计算机存储设备上、结构 化的相关数据的集合。不仅包括描述事物的数据本身,而 且包括相关事物的联系。 数据库应用系统 – 数据库开发人员利用数据库系统资源开 发出来的,面向某一类实际应用的应用软件系统。 数据库管理系统(dbms)– 对数据实现专门管理,提供 安全性和完整性等统一控制机制,方便用户以交互命令或 程序方式对数据库进行操作的系统软件。 数据库系统(dbs)- 数据库+数据库管理系统+计算机 系统11 1-1 数据库基础知识1-1-2 数据库系统2. 数据库系统的特点实现数据共享,减少数据冗余 采用特定的数据模型 具有较高的数据独立性 有统一的数据控制功能12 1-1 数据库基础知识1-1-3 数据模型1. 实体的描述实体 – 客观存在并且可以相互区别的事物称为实 体。可为实际事物,也可以是抽象事件 实体的属性 – 描述实体的特性 实体型 – 属性的集合表示一种实体的类型 实体集 – 同类型实体的集合2. 实体间联系及联系的种类实体之间对应的关系称为联系,反映现实世界事 物之间的相互关联13 1-1 数据库基础知识1-1-3 数据模型2. 实体间联系及联系的种类联系的种类
一对一(one-to-one)联系 一对多(one-to-many)联系 多对多(many-to-many)联系3. 数据模型简介为反映事物本身及事物之间的各种联系,数据库 中的数据必须具有一定的结构,这种结构用数据 模型来表示14 1-1 数据库基础知识1-1-3 数据模型3. 数据模型简介层次数据模型 – 树型结构 网状数据模型 – 网状结构 关系数据模型 – 二维表结构&&&&目前广泛应用的数据库管理系统都为关系数据模型 常用的关系数据库管理系统: dbase ⅲ、foxbase、foxpro、visual foxpro access、sql server sybase、oracle15 1-2 关系数据库1-2-1 关系模型1. 关系术语关系 – 一个关系就是一张二维表,每个关系有一 个关系名。 在 visual foxpro 中,关系存储为一个文件,称 为表文件。学号 姓名 王建军 李国华性别 男 女年级 班级 微机 电子16 1-2 关系数据库1-2-1 关系模型1. 关系术语关系结构 :关系名(属性1、属性2,……,属性n)在 visual foxpro 中表示为表结构: 表名(字段1、字段2、……,字段n) 在 visual foxpro 中称为记录 在 visual foxpro 中对应为字段和字段名元组 – 在一个二维表中,水平方向的行称为元组属性 – 二维表中垂直方向的列称为属性,每一列有属性名域 – 属性的取值范围,即不同元组对同一属性的取值所限 定的范围17 1-2 关系数据库1-2-1 关系模型1. 关系术语关键字 – 属性或属性的组合,其值能唯一的标识一个元组 外部关键字 – 如果表中的一个字段不是本表的主关键字或 候选关键字,而是另外一个表的主关键字或候选关键字, 这个字段(属性)就称为外部关键字书号 a01 a02书名 子夜 围城学号 学号 姓名 王建军 李国华18 1-2 关系数据库1-2-1 关系模型2. 关系的特点关系必须规范化每个属性必须是不可分割的数据单元,即表中不能包含表职工号 工资 基本工资 奖金在同一个关系中,不能出现相同的属性名 关系中不能有相同的元组,即冗余 在一个关系中元组的次序无关紧要 在一个关系中列的次序无关紧要19 1-2 关系数据库1-2-1 关系模型3. 实际关系模型20 1-2 关系数据库1-2-1 关系模型3. 实际关系模型21 1-2 关系数据库1-2-2 关系运算1. 传统的集合运算并、差、交 进行运算的两个关系必须具有相同的结构 在 visual foxpro 中不直接提供传统的集合运算, 可以通过其他组合操作或编写程序实现2. 专门的关系运算选择 – 从关系中造出满足给定条件的元组 投影 – 从关系中指定若干个属性组成新的关系 联接 – 将两个关系拼接成一个更宽的关系22 1-2 关系数据库学号 0001 姓名 王建军 学号 0001 性别 男 年级 2002 班级 微机0002学号 李国华姓名 王建军 李国华0002性别 男 女女2003电子班级 微机 电子年级 23 1-2 关系数据库联接的说明和相关术语联接运算是对两个关系(表)的横行结合,联接 过程是通过联接条件来进行的。生成的新关系中 包含满足联接条件的元组,即联接结果是满足条 件的所有记录 如需要联接两个以上的关系(表),应当进行两 两联接 自然联接等值联接 – 在联接运算中,按照字段值对应相等为条 件进行的联接操作 自然联接 – 去掉重复属性的等值联接24 1-3 数据库设计基础1-3-1 数据库设计步骤1. 设计原则关系数据库的设计应当遵从概念单一化“一事一 地”的原则 避免在表之间出现重复的字段 表中的字段必须是原始数据和基本数据元素 用外部关键字保证有关联的表之间的联系2. 设计步骤需求分析→确定需要的表→确定所需字段→确定 联系→设计求精(注:设计过程见p16)25 1-4 visual foxpro 系统概述历史沿革1986年 1987年 1988年 1992年 1994年 1995年 1996年 1998年 2001年 2003年 foxbase+ 1.0 foxbase+ 2.0 foxbase+ 2.1 foxpro 2.5 (微软公司兼并 fox software) foxpro 2.6 visual foxpro 3.0 visual foxpro 5.0 visual foxpro 6.0 visual foxpro 7.0 visual foxpro 8.026 第二章 visual foxpro 系统初步27 第二章 visual foxpro 系统初步2-1 visual foxpro 6.0 的安装与启动 2-2 visual foxpro 6.0 的用户界面 2-3 项目管理器 2-4 visual foxpro 6.0 向导、设计器、生 成器简介以上内容均上机演示28 第三章 数据与数据运算29 前言:vfp的命令结构(补充内容)visual foxpro 的命令结构&命令动词& &短语组&例如:copy to abc all fields 学号,姓名 for 性别=“男”命令说明符:&x&:表示x是必选项 [x]:表示x是可选项 x|y:表示x和y只选其一,而且是必选其一 x表:表示用逗号分开的若干个x 例如:set date [to] american | ansi | british | french | german | italian | japan | usa | mdy | dmy | ymd30 前言:vfp的命令结构(补充内容)visual foxpro 的命令结构常用短语范围短语(限定记录)
all next n record n rest指表文件中的全部记录 自当前记录起的n条记录(包括当前记录) 表文件中的第n条记录 指从当前记录开始到最后一条记录表达式表(限定字段) 形式:&表达式表& 或 fields &表达式表& &表达式表&常写作&字段名表& for &条件& 条件为真的所有记录参加操作 while &条件& 从当前记录起到第一个条件为假的记录的前一个 记录参加操作,若第一个记录条件就不满足,则不操作条件短语(筛选记录) 31 前言:vfp的命令结构(补充内容)visual foxpro 的命令结构书写格式每打入一条命令,以回车符为该命令的结束符 必须先写命令动词其后跟短语,短语的先后次序随意 命令动词与短语之间、短语与短语之间必须用至少一个空格隔开 一条命令最大不能超过254个字符,包括其中的空格。在交互方 式下,通过命令窗口输入命令或通过程序方式输入命令时,如命 令太长,可通过(;)断行,将一条命令多行显示 为了书写及方便记忆,规定命令动词和短语可用其前4个字母简 化使用。英文字母大小写随意。 例如:display 可简化为:disp structure 可简化为:stru display structure 可简化为:disp stru32 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值1. 数值型常量(常数)由数字0-9、小数点、正负号构成
例如:12、3.45、-6.78
可以使用科学计数法表示 12
例如:5.878e12(5.878×10 )
8个字节表示,取值范围: -0.e+19~0.e+2033 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值2. 货币型常量(表示货币值)使用方法同数值型常量,添加前置符号($)
例如:$123.4567
采用4位小数,如超出,自动四舍五入
没有科学计数法表示形式
占8个字节,取值范围: -477.734 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值3. 字符型常量(单字符或字符串)用半角单引号、双引号或方括号做定界符,定界符必 须成对使用
例如:‘123、“ab12c3de”、[好学生] 字符型常量表示一个字符或字符串,不参与数值运算使用花括号做定界符,默认使用/做分割符,也可使用 -、.和空格做分隔符
例如:{10/08/04}354. 日期型常量(表示日期值,即年月日) 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值4. 日期型常量(表示日期值,即年月日)传统日期格式(美国日期格式)
“月/日/年”(mm/dd/yy)
例如:{10/08/04}
此格式受到 set date to 和 set century 等设 置命令的影响 严格日期格式
“年-月-日”(yy-mm-dd)
例如:{^}36 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值4. 日期型常量(表示日期值,即年月日)严格日期格式
“年/月/日”(yy-mm-dd)
花括号内第一个字符必须为脱字符^,年份必须使 用四位表示
8字节宽度,取值范围: {^}~{^}
不受日期设置命令的影响37 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值4. 日期型常量(表示日期值,即年月日)影响日期格式的设置命令
set mark to (指定日期分割符)
例如:set mark to “-”
set date [to] american | ansi | british | french | german | italian | japan | usa | mdy | dmy | ymd (设置日期显示格式)
set century on | off (年份是否四位显示)
set strictdate to [0|1|2] (是否进行日期检查)38 3-1 常量与变量3-3-1 常量用以表示一个具体的、不变的值5. 日期时间型常量
包括日期和时间两部分内容:{&日期&,&时间&} 时间格式为:[hh[:mm[:ss]][a|p]] 时间部分取值范围:00:00:00am~11:59:59pm 例如:{^,11:20:35a} 只有逻辑真和逻辑假两个值 真:(.t.)、(.t.)、(.y.)、(.y.) 假:(.f.)、(.f.)、(.n.)、(.n.)6. 逻辑型常量
39 3-1 常量与变量3-3-2 变量随程序运行,可取不同值的量,由变量名、 变量类型和变量长度组成变量名由汉字、字母、数字和下划线组成,必须 以汉字、字母或下划线开头例如:aa、王ab、a5_c变量类型: 变量内存变量字段变量自定义内存变量 系统内存变量40 3-1 常量与变量3-3-2 变量内存变量的数据类型字符型(c)、数值型(n)、货币型(y)、逻辑型(l) 和日期型(t)内存变量的生存周期和定义声明显式声明全局变量(公用变量)
public &内存变量列表& 本地变量
local &内存变量列表& 局部变量(专业变量)
private &内存变量列表&隐式声明 – 不做声明,直接使用,默认为本地变量41 3-1 常量与变量3-3-3 内存变量的常用命令1.内存变量的赋值格式1:store &表达式& to &变量名表& 格式2:&内存变量名& = &表达式&2. 表达式值的显示格式1:[&表达式表&] 格式2:&表达式&3. 内存变量的显示格式1:list memory [like&通配符&][to printer|to file &文件名&] 格式2:display memory [like&通配符&][to printer |to file &文件 名&] 补充:指定在显示数值时小数位数是否固定:set fixed on | off 指定数值表达式中的小数点位数:set decimals to [ndecimalplaces]42 3-1 常量与变量3-3-3 内存变量的常用命令4. 内存变量的删除格式1:clear memory 格式2:release &内存变量名表& 格式3:release all [extended] 格式4:release all [like&通配符&|except&通配符&] 格式5:clear all 注:格式3中功能同格式1,如果出现在程序中,则应该加上短 语extended,否则不能删除公共内存变量 注:格式4中,like匹配通配符,except与通配符不相匹配 注:格式5将关闭所有打开的数据库、表、索引、备注等文件, 同时释放所有自定义内存变量43 3-1 常量与变量3-3-4 下标变量与数组下标变量:s1 、s2 、s3……sn ,在vfp中书写为s(1)、s(2) 等 由一系列下标变量构成的变量集合称为数组 由若干个单下标变量组成的数组称一维数组、由若干个双下标 变量组成的数组称二维数组,vfp只允许一维数组和二维数组 数组的定义格式1:dimension &数组名&(&行&[,&列&])[,&数组名2& (&行&[,&列&……] 格式2: declare &数组名&(&行&[,&列&])[,&数组名2& (&行&[,&列&……]注:数组下标变量的起始值为1,在未对数组赋值时,默认每个 下标变量为逻辑型,其值为.f.44 3-1 常量与变量3-3-4 下标变量与数组数组的赋值格式1:store &表达式& to &数组名& 格式2:&数组名& = &表达式& 格式3:&下标变量& = &表达式& 注:格式1和格式2为整个数组的所有下标变量赋相同的值,格式3 为数组中某个下标变量单独赋值数组值的显示同内存变量一样,使用 list memory 或 display memory 命令 显示数组的删除同内存变量一样,使用 release 或 clear memory 命令删除, 需注意的是不能仅仅删除数组中的部分元素,只能将整个数组删除45 3-1 常量与变量表中数据与数组的交换单条记录数据赋值给数组元素scatter [fields &字段名表&|fields like&通配符&|fields except &通配符&|[memo] to &数组名& | to &数组名& bland | memvar | name &对象名& gather from [&数组名&|&memvar&]|&name 对象名&] [fields &字段名表&|fields like&通配符&|fields except&通配符&] copy to array &数组& [fields&字段名表&][&范围&][for&条件&] [while&条件&][nooptimize] append from array &数组& [for&条件&] fields &字段名表&数组元素的值代替单条记录字段值多条记录数据复制到数组数组数据做为多条数据复制到表中46 3-2 表达式表达式由常量、变量和函数通过特定的运算符连接起来的 式子。 表达式的形式:单一的运算对象 由运算符将运算对象连接起来形成的式子 例如:
(1+2^(1+2))/ (2+2)* (3 – 2) ‘ visual
foxpro ((int(rand()* 10))& 50). and . (5&7)47 3-2 表达式数值表达式算术运算优先级()→**或^ →*、/、% →+、--求余运算%(与求余函数 mod()功能相同)若除数为正数,返回值为正;若除数为负数,返回值为负字符表达式+:前后两个字符串连接形成一个新的字符串 -:连接前后两个字符串,并将前字符串的尾部空 格移到合并后的新字符串尾部48 3-2 表达式日期时间表达式运算符:+、-&日期&+ &天数& &天数&+ &日期& &日期&- &天数& &日期&- &日期& &日期时间&+ &秒数& &秒数&+ &日期时间& &日期时间&- &秒数& &日期时间&- &日期时 间& 日期型。指定日期若干天后的日期 日期型。指定日期若干天后的日期 日期型。指定日期若干天前的日期 数值型。两个指定日期相差的天数 日期时间型。指定日期时间若干秒后的日期时间 日期时间型。指定日期时间若干秒后的日期时间 日期时间型。指定日期时间若干秒前的日期时间 数值型。指定两个日期时间相差的秒数49 3-2 表达式关系表达式格式:&表达式1&&关系运算符&&表达式2& 返回结果:.t. 或者 .f.& & = &&、#、!= &= &= == $ 小于 大于 等于 不等于小于等于大于等于 字符串精确比较子串包含测试(前串为后串的子串, 为真,否则为假)50 3-2 表达式关系表达式设置字符的排序次序当比较两个字符串时,系统对两个字符串的字符自左向右逐个进 行比较,一旦发现两个对应字符不同,就根据这两个字符的排序 序列决定两个字符串的大小。 命令格式: set collate to “&排序次序名&” 其 中 : “ & 排 序 次 序 名 &” 可 为 : “ machine” ( 机 器 ) 、 “pinyin”(拼音)、 “stroke”(笔画)设置字符串的比较模式set exact on | off (系统默认为 off) 为 off 时,只要右边的字符串与左边的字符串的前面部分内容 相同,就返回真。为 on 时,先在较短的字符串的尾部加上若干 个空格,使两个字符串的长度相等,然后再进行比较。51 3-2 表达式逻辑表达式逻辑运算符: .not.或!(逻辑非,单目运算符) .and. (逻辑与,双目运算符) .or. (逻辑或,双目运算符)a .t. .t. .f. .f. b .t. .f. .t. .f. .not. a .f. .f. .t. .t. a .a n d. b .t. .f. .f. .f. a .o r. b .t. .t. .t. .f.52 3-2 表达式运算符的优先级1. 2. 3.4.5.括号 算术运算符 字符运算符和日期时间运算符 关系运算符 逻辑运算符 注意:圆括号作为运算符,可以改变其他运算符的运算次 序。圆括号中的内容作为整个表达式的子表达式,在与其 他运算对象进行各类运算前,其结果首先要被计算出来。 有时候,在表达式的适当地方插入圆括号,并不是为了改 变其他运算符的运算次序,而是为了提高代码的可读性。53 3-3 常用函数3.3.1 数值类函数绝对值函数 符号函数 平方根函数 指数函数 对数函数 圆周率函数 abs() sign() sqrt() exp() log() pi() int() 取整函数 ceiling() floor() 舍入函数 求模函数 最大值函数 最小值函数 随机数函数 round() mod() max() min() rand()54 3-3 常用函数3.3.2 字符类函数子串位置测试函数 左截子串函数 右截子串函数 中截子串函数 at() left() right() substr() 转换大写字母函数 转换小写字母函数 宏替换 字串替换函数 upper() lower() &c[.] stuff()计算子串出现次数产生空格函数 消除前导空格函数occurs()space() ltrim()字符重复函数字符替换函数 字符串匹配函数replicate()chrtran() like()消除尾随空格函数消除前导和尾随空格 测大写字母开头函数trim()alltrim() isupper()测长函数测字母开头函数 测小写字母开头函数len()isalpha() islower()55 3-3 常用函数3.3.3 日期时间类函数系统日期函数 系统时间函数系统日期时间函数 年份函数 月份函数 天数函数 补充内容: 指定一周中的第一天:set fdow to [nexpression]date() time()datetime() year() month() day()时函数 分函数秒函数 星期函数hour() minute()sec() dow() cdow()56 3-3 常用函数3.3.4 数据类型转换函数数值转换成字符 字符转换成数值 字符转换ascⅱ码 ascⅱ码转换字符 str() val() asc() chr() 字符转换日期 日期转换字符 字符转换日期时间 日期时间转换字符 ctod() dtoc() ctot() ttoc()57 3-3 常用函数3.3.5 测试函数表文件名测试函数 表文件别名测试 表文件字段个数 表问卷字段名测试 表文件记录数测试 表文件记录长度 最近修改日期 当前索引文件名 文件头测试函数 dbf() alias() fcount() field() reccount() recsize() lupdate() ndx() bof() 文件尾测试函数 逻辑删除测试 查找结果测试 当前记录号测试 测试当前工作区 磁盘文件是否存在 值域测试函数 null测试函数 空值测试函数 eof() deleted() found() recno() select() file() between() isnull() empty()58 3-3 常用函数3.3.5 测试函数数据类型测试函数 操作系统测试 vartype() os() 条件测试函数 系统测试函数 iif() sys()59 第四章 visual foxpro 数据库及其操作60 4-1 visual foxpro 数据库及其操作4-1 visual foxpro 数据库及其建立4-1-1 基本概念在visual foxpro 中,数据库是一个逻辑上的概 念和手段,通过一组系统文件将相互联系的数据 库表及其相关的数据库对象统一组织和管理。4-1-2 建立数据库在项目管理器中建立数据库 通过新建对话框建立数据库 使用命令交互建立数据库: create database [databasename|]61 4-1 visual foxpro 数据库及其操作4-1 visual foxpro 数据库及其建立4-1-3 使用数据库打开数据库在项目管理器中打开数据库
通过打开对话框打开数据库
使用命令打开数据库:
open database [filename|][exclusive|shared] [noupdate][validate]
[exclusive|shared] 受 setexclusive on|off 的影响; noupdate为只读方式,但实际不起作用,需在打开表文件 时设置;validate指定检查数据库引用的对象是否合法。 vfp可同时打开多个数据库,只有一个为当前可用数据库:set database to [databasename] (设置当前数据库)62 4-1 visual foxpro 数据库及其操作4-1 visual foxpro 数据库及其建立4-1-4 修改数据库从项目管理器中打开数据库设计器 通过“打开”对话框打开数据库设计器 使用命令打开数据库设计器:modify database [databasename|] [nowait] [noedit] nowait-在程序状态使用,表示在数据库设计器打开 后程序继续运行,否则,程序会中止运行,直到数据 库设计器关闭后才会继续运行。 noedit-只打开数据库设计器,而禁止对数据库进行 修改63 4-1 visual foxpro 数据库及其操作4-1 visual foxpro 数据库及其建立4-1-5 删除数据库从项目管理器中删除数据库移去 – 将选定数据库从当前项目中移出,但并不删除磁盘上 的数据库文件 删除 -将选定数据库从当前项目中移出,并且删除磁盘上的 数据库文件使用命令删除数据库delete database databasename| [deletetables] [recycle] deletetables – 删除数据库文件的同时删除该数据库所包含 的表文件等 recycle – 将删除的内容放入回收站,以后可以还原64 4-2 建立数据库表4-2-1 在数据库中建立表先打开相关数据库利用项目管理器建立表 通过“新建”对话框建立表 使用命令建立表 create [filename | ] 表设计器65 66 4-2 建立数据库表1. 字段名自由表字段名最长为10个字符 数据库表字段名最长为128个字符 字段名必须以字母、汉字、数字和下划线组成 字段名中不能包含空格2. 字段类型和宽度字符型:可为字母、数字等各种字符型文本 货币型:货币单位,如货物的价格 数值型:整数或小数 浮点型:功能同数值型,长度可达20位 日期型:由年、月、日构成的数据类型 日期时间型:由年、月、日、时、分、秒构成的数据类型 双精度型:用于精度要求高的数据 整型:不带小数点的数据 逻辑型:其值为真(.t.)或假(.f.) 备注型:不定长的字符型文本 通用型:ole对象 字符型二进制:代码页更改时字符值不变 备注型二进制:代码页更改时,备注字符不变 67 4-2 建立数据库表3. 空值(null)表示字段是否允许空值 空值即缺值或还没有确定值,即尚未存储任何数据4. 字段有效性组框定义字段的有效性规则、违反规则时的提示信息和字段的默 认值5. 显示组框定义字段显示的格式、输入的掩码和字段的标题 格式:输出掩码,决定字段在表单、浏览窗口等界面的风格 输入掩码:字段的属性,用以限制或空值用户输入的格式 标题:用于字段显示时的标题6. 字段注释可以为字段添加注释,便于日后的维护。68 4-2 建立数据库表附录:掩码格式(format)- 见语言手册 输入掩码(inputmask)设 x 9 # $ $$ * 置可输入任何字符 可输入数字和正负符号 可输入数字、空格和正负符号 在某一固定位置显示(由 set currency 命令指定的)当前货币符号 在微调控件或文本框中,货币符号显示时不与数字分开 在值的左侧显示星号说明.,句点分隔符指定小数点的位置逗号可以用来分隔小数点左边的整数部分69 4-2 建立数据库表4-2-2 修改表结构在项目管理器中修改表结构 在数据库设计器中修改表结构 打开要修改结构的表(use)利用系统菜单切换到表设计器 使用命令 modify structure表设计器1. 2. 3. 修改已有字段 添加新字段 删除不用的字段70 4-3 表的基本操作4-3-1 使用浏览器操作表在项目管理器下选择要操作的表→单击“浏览”按钮 在数据库设计器中选择要操作的表→右击“浏览”命令 使用 use 命令打开表,使 browse 命令调用表的浏览 窗口71 4-3 表的基本操作4-3-1 使用浏览器操作表1. 浏览操作下一记录:下箭头键 前一记录:上箭头键 下一页 :pagedown 键 前一页 :pageup 键 下一字段:tab 键 前一字段:shift + tab 键 可使用 home、end 等键定位2. 修改记录定位光标到记录上直接修改72 4-3 表的基本操作4-3-1 使用浏览器操作表3. 删除记录逻辑删除 – 系统默认删除方式,只为删除记录做删除标记,并 不从表中直接删除,必要时可恢复记录
直接在记录删除栏添加删除标记 使用【表】菜单→【切换删除标记】命令 使用键盘快捷键【ctrl+t】 【表】菜单→【彻底删除】命令物理删除 – 从表中彻底删除记录,无法还原恢复73 4-3 表的基本操作4-3-1 使用浏览器操作表4. 表的基本操作命令创建数据库create database [&数据库文件名&|] create [&表文件名&|] open database [&数据库文件名&|] close database &数据库文件名& [all]创建表打开数据库关闭数据库将表添加到数据库add table &表文件名&|&& [name &长表文件名&]remove table &表文件名& | && [delete] [recycle] use [&表文件名&|] use close &表文件名&| [all] 74从数据库中移出表打开表关闭表 4-3 表的基本操作4-3-1 使用浏览器操作表4. 表的基本操作命令记录指针的操作绝对移动命令
go bottom 相对移动命令
skip -n locate [&范围&] [for &表达式&] continue75查询命令
4-3 表的基本操作4-3-1 使用浏览器操作表4. 表的基本操作命令追加记录append [blank] [in 工作区号 | 表别名] 【from &表文件名&】插入记录insert [before] [blank]delete [for &表达式&] recall [for &表达式&] pack zap删除记录恢复记录物理删除清表命令显示表结构list/display structure76 4-3 表的基本操作4-3-1 使用浏览器操作表4. 表的基本操作命令修改记录交互修改
edit change 替换修改
replace [&范围&] &字段名 & with &表达式& [,&字段名& with &表达式&,……,&字段名& with &表达式&] [for|while &表达式&]显示表记录list [&范围&] [&表达式表&] [for|while &表达式&] [off] [to print] display [&范围&] [&表达式表&] [for|while &表达式&] [off] [to print] 注意:list默认范围子句为all,显示记录时不分屏;display 范围子句默认为当前记录,显示记录时分屏。77 4-3 表的基本操作4-3-1 使用浏览器操作表4. 表的基本操作命令设置表的显示规则:指定可以访问表中的哪些字段
set fields on | off | local | global
set fields to [[fieldname1 [, fieldname2 ...]] | all [like skeleton | except skeleton]] 指定访问当前表中记录时必须满足的条件
set filter to [lexpression] [in nworkarea | ctablealias] 显示所有记录
set filter to78 4-3 表的基本操作4-3-1 使用浏览器操作表4. 表的基本操作命令表结构的复制copy to &文件名& structrue [fields &字段名表&]表记录的复制copy to &文件名& [&范围&] [for &条件&] [fields &字段名表&]copy to &结构描述文件名& structure extended create &表文件名& from &结构描述文件名& count [&范围&] [for &表达式&] [to &内存变量&] sum [&范围&] [&字段名表&] [for &表达式&] [to &内存变量表&]结构描述文件的生成利用结构描述文件生成表结构表记录个数统计统计数值型字段值之和计算平均值average [&范围&] [&字段名表&] [for &表达式&] [to &内存变量表&]79 4-4 排序和索引4-4-1 排序文件的建立sort to &新文件名& on &关键字1& [/a] [/d] [/c] [,&关键字2& [/a] [/d] [/c] ,……] [for &表达式&] [ascending|descending]排序是对表文件记录按某关键字值的大小以升序或降序进行调整, 生成一个新的表文件,称物理排序 /a表示以升序排序(系统默认),/d表示以降序排序,/c表示表 示不区分大小写,默认为区分大小写。可结合使用,例如/ac或 /dc [ascending|descending]指明除用/a或/d指定排序的字段外, 其余字段使用的排序方式是升序还是降序 排序命令将生成一个新的表文件,除记录的物理顺序得以调整以 外,其余一切内容和文件大小都同原表文件相同,在处理容量较 大的表文件时,不甚方便。80 4-4 排序和索引4-4-2 索引索引的概念索引是由指针构成的文件,这些指针在逻辑上按照索引关键字的值进行 排序。索引文件(.idx)和表文件(.dbf)分别存储,并且不改变表的记 录的物理顺序。索引的类型主索引在指定的字段和表达式中不允许出现重复值的索引(建立索引的字段值不允 许重复),建立主索引的字段可看作主关键字,一个表只能有一个主索引 不允许出现重复值的索引,建立候选索引的字段可看作候选关键字,一个表 中允许有多个候选索引 允许建立普通索引的字段出现重复值,一个表中可出现多个普通索引,可以 将普通索引看作表的多种排序方式 要求索引项的唯一,不要求字段值的唯一,仅为保持同早期版本的兼容性, 一般不使用 81候选索引普通索引唯一索引 4-4 排序和索引4-4-2 索引索引的表现形式单一索引以一个字段建立索引关键字复合索引以多个字段生成的表达式的值作为建立索引的关键字索引的建立通过表设计器建立索引 使用命令建立索引index on &索引关键字表达式& to &索引文件名|tag 索引名& [&of 复合索引文件名&] [for &表达式&] [compact] [ascending|descending] [unique|candidate] [additive] [compact]指建立压缩索引, [ascending|descending]指是升 序还是降序, [unique|candidate]指建立唯一索引还是候选索引, [additive]指建立索引时关闭其它索引,使新建的索引为当前索引82 4-4 排序和索引4-4-2 索引使用索引打开索引文件set index to 索引文件列表 set order to [索引序号|[tag] 索引名] [ascending|descending] delete tag 索引名 delete tag all设置当前索引删除索引 快速查询先指定具有查询字段的索引 seek 索引关键字值 [order 索引序号|[tag] 索引名] [ascending|descending]83 4-5 数据完整性数据完整性 – 保证数据正确的特性1. 2. 3.实体完整性 域完整性 参照完整性 保证表中记录唯一的特性,即在一个表中不允许有重复的 记录 vfp利用主关键字或候选关键字来保证表中记录唯一,即保 证实体唯一性 一个字段的值或几个字段的值能够唯一标识表中的一条记 录,则这样的字段称为候选关键字。在表中可有多个候选 关键字,选择其中的一个作为主关键字 在vfp中,主关键字称为主索引,候选关键字称为候选索引4-5-1 实体完整性与主关键字84 4-5 数据完整性4-5-2 域完整性与约束规则字段的数据类型和数据宽度的设定 字段的有效性规则的设置域约束规则也称字 段有效性规则,在 插入或修改字段值 时被激活,主要用 于数据输入正确性 的校验。85 4-5 数据完整性4-5-2 域完整性与约束规则记录有效性规则 触发器插入触发器 更新触发器 删除触发器记录有效性规则用 来进行多个字段关 联性的校验。86 4-5 数据完整性4-5-2 参照完整性与表之间的关联参照完整性 – 当插入、删除、修改一个表中的数据 时,通过参照引用相互关联的另一个表中的数据, 来检查对表的数据操作是否正确。 建立参照完整性之前要先建立表间关系,表间关系 最终因以“一对多”关系为基础。表间关系的建立是以对数据表的实际关系加以具体分析的 结果,是数据库设计的主要内容之一 父表的主关键字设置为主索引,与之相关联的子表的外部 关键字设置为普通索引 利用数据库设计器建立表间关系是最直接的操作方法87 4-5 数据完整性88 4-5 数据完整性4-5-2 参照完整性与表之间的关联设置参照完整性约束关闭数据库中所有打开的表 清理数据库 参照完整性生成器
更新规则(级联、限制、忽略) 删除规则(级联、限制、忽略) 插入规则(限制、忽略)在设置了参照完整性之后,利用以前的vfp的各 种插入或追加记录的方法几乎都不能完成所要的 操作。只是因为以前的append命令或insert命 令都是先插入一条空记录,然后再编辑、输入各 个字段的值,自然无法通过参照完整性检查。这 时可以使用sql的insert命令插入记录。 89 4-6 多个工作区的同时使用vfp一次可以打开多个数据库,在每个数据库中可以打开多个表, 也可以打开多个自由表 打开的每一个表占用一个工作区,系统默认总是从第一个工作区 开始工作 4-6-1 多工作区表的别名使用 use 表文件名 alias 表别名 不指定别名时,系统默认以表的文件名为表的别名 指定工作区 select 工作区号|表别名 最小的工作区号为1,最大的工作区号为32767 如果指定为0,则选择编号最小的可用工作区 注:select()- 返回当前工作区 alias()- 返回当前工作区表别名90 4-6 多个工作区的同时使用4-6-2 使用不同工作区的表除进行工作区的切换之外,允许在一个工作区中使用另一个工作区 中的表 命令短语: in 工作区号|表别名4-6-3 表之间的关联参照完整性是基于索引建立的表间“永久联系”,在数据库设计器 中显示为表索引之间的连接线 “永久联系”不能控制不同工作区中记录指针的联动 能够控制表间记录指针关系的“临时联系”称为关联 设置表间关联在不同的工作区打开需要设置关联的表 set relation to 索引关键字 into 工作区号 | 表别名取消关联set relation to (取消当前表到所有表的关联) set relation off into 工作区号 | 表别名91 第五章 关系数据库标准语言 sql92 5-1 sql 概述sql(structured query language)- 结构化查询语言读作 sql 或 sequel sql 语言特点sql 是一种一体化语言,包括数据定义、数据查询、数据操纵和 数据控制等方面的功能,它可以完成数据库活动的全部工作。 sql 语言是一种高度非过程化的语言,它只是需要描述清楚用户 要“做什么”。 sql 语言非常简洁,语法非常简单,基本接近英语自然语言。 sql 语言可以直接以命令方式交互使用,也可以嵌入到程序设计 语言中以程序方式使用。 vfp sql 由于自身在安全控制方面的缺陷,没有提供数据控制功 能。93 5-1 sql 概述sql 命令动词 sql 功能 命令动词数据查询数据定义 数据操纵selectcreate、drop 、alter insert 、update 、delete数据控制grant 、revoke94 5-2 查询功能sql的核心是查询,即 select 命令,基本形式由 select – from – where 查询块组成,多个查询块可以嵌套执行。 select [all | distinct] [top nexpr [percent]] [alias.] select_item [[as] column_name] [, [alias.] select_item [[as] column_name] ...] from [force] [databasename!] table [[as] local_alias] [ [inner | left [outer] | right [outer] | full [outer] join databasename!] table [[as] local_alias] [on joincondition ...] [[into destination] | [to file filename [additive] | to printer [prompt] | to screen]] [preference preferencename] [noconsole] [plain] [nowait] [where joincondition [and joincondition ...] [and | or filtercondition [and | or filtercondition ...]]] [group by groupcolumn [, groupcolumn ...]] [having filtercondition] [union [all] selectcommand] [order by order_item [asc | desc] [, order_item [asc | desc] ...]]95 5-2 查询功能select – 命令动词,说明要查询的数据 from – 说明要查询的数据来自哪个或哪些表(可以从 单个表或多个表进行查询) where – 说明查询条件,即选择元组(记录)的条件 group by – 用于对查询结果进行分组,可以利用该短 语进行分组汇总 having – 该短语必须跟随 group by 进行,用来限定 分组必须满足的条件 order by – 用来对查询的结果进行排序
以上短语是学习 sql-select 命令必须掌握的,还有 一些短语是 visual foxpro 所特有的,酌情掌握。96 sql语句实例数据源仓库仓库号 wh1 wh2 wh3 城市 北京 上海 广州 面积 370 500 200 仓库号 wh2 wh1 wh2职工职工号 e1 e3 e4 工资 50wh4武汉400wh3wh1e6e7 供应商12301250定购单职工号e3 e1 e7 e6 e3 e1 e3 e3供应商号s7 s4 s4 .null. s4 .null. .null. s3定购单号or67 or73 or76 or77 or79 or80 or90 or91定购日期
.null. .null.
供应商号 s3 s4 s6 s7供应商名 振华电子厂 华通电子公司 607厂 爱华电子厂地址 西安 北京 郑州 北京97 5-2 查询功能5-2-1 简单查询例 5-1 :从职工表中检索所有工资值数据源select 工资 from 职工 select distinct 工资 from 职工 distinct:在查询结果中剔除重复的行。每一个 select 子句只能使用 一次 distinct select * from 仓库 (*表示所有字段)例 5-2 :检索仓库关系中的所有元组(记录) 例 5-3 :从职工表中检索工资多于 1230 元的职工select 职工号 from 职工 where 工资&1230例 5-4 :从职工表中检索哪些仓库有工资多于 1210 元的职工select distinct 仓库号 from 职工 where 工资&1210例 5-5 :在职工表中检索出在仓库 “wh1” 或 “wh2” 工作,并且 工资少于 1250 元的职工select 职工号 from 职工 ; where 工资&1250 and(仓库号=“wh1” or 仓库号=“wh2”) :为续行符98 5-2 查询功能5-2-2 简单的联接查询联接是关系的基本操作之一,联接查询就是一种基于多个关系的查询 例 5-6 :找出工资多于1230元的职工号和他们所在的城市select 职工号,城市 from 职工,仓库; where (工资&1230)and(职工.仓库号=仓库.仓库号) 当from之后的多个关系中含有相同的属性名时,这时必须用关系前缀直 接指明属性所属的关系例 5-7 :找出工作在面积大于400的仓库的职工号以及这些职工工作 所在的城市select 职工号,城市 from 仓库,职工; where (面积&400)and(职工.仓库号=仓库.仓库号)5-2-3 嵌套查询嵌套查询所要求的结果出自一个关系,但相关的条件却涉及多个关系 例 5-8 :哪些城市至少有一个仓库的职工工资为1250元select 城市 from 仓库 where 仓库号 in ; (select 仓库号 from 职工 where 工资 = 1250) in 相当于集合运算符∈,in和其后的括号不能有空格。数据源99 5-2 查询功能5-2-3 嵌套查询例 5-9 :查询所有职工的工资都多于1210元的仓库的信息 (没有一个职工的工资少于或等于1210元的仓库的信息)错误示例: select * from 仓库 where 仓库号 not in ; (select 仓库号 from 职工 where 工资 &= 1210) 上述的命令执行结果中包含没有职工的仓库,为此,分析条件可 知实际上检索条件应当限制为:检索所有职工的工资都多于1210 的仓库的信息,并且该仓库至少要有一名职工。 正确示例: select * from 仓库 where 仓库号 not in ; (select 仓库号 from 职工 where 工资 &= 1210); and 仓库号 in(select 仓库号 from 职工) select 职工号 from 职工 where 工资=; (select 工资 from 职工 where 职工号=“e4”)数据源例 5-10 :找出和职工 e4 挣同样工资的所有职工100 5-2 查询功能5-2-4 几个特殊运算符between……and…… (在……和……之间)例 5-11 :检索出工资在1220元到1240元范围内的职工信息select * from 职工 where 工资 between 1220 and 1240 between 1220 and 1240 等价于(工资&=1220)and(工资&=1240)数据源like (字符串匹配运算符,sql like通配符:%)例 5-12 :从供应商关系中检索出全部公司的信息,不要工厂或 其他供应商的信息select * from 供应商 where 供应商名 like “%公司”not (取反操作,或用 != 表示)例 5-13 :找出不在北京的全部供应商信息 select * from 供应商 where not(地址=“北京”) select * from 供应商 where 地址!=“北京”前例可写作:select * from 职工 where 工资 not between 1220 and 1240101 5-2 查询功能5-2-5 排序使用sql select可以将查询结果排序,排序的短语是 order by,具体格式如下: order by order_item[asc|desc][order_item[asc|desc]…] asc – 升序;desc – 降序。允许按一列或多列排序。 例 5-14 :按职工的工资值升序检索出全部职工信息select * from 职工 order by 工资 select * from 职工 order by 工资 desc例 5-15 :先按仓库号排序,再按工资排序并输出全部职工 信息(多列排序示例)select * from 职工 order by 仓库号,工资注:order by 是对最终的查询结果进行排序,所以不可以在 子查询(查询嵌套)中使用该短语数据源102 5-2 查询功能5-2-6 简单的计算查询sql select 用于计算检索的函数有:count() sum() avg() max() min() – 计数 求和 计算平均值 求最大值 求最小值例 5-16 : 找出供应商所在地的数目select count(distinct 地址)from 供应商 比较错误的命令: select count (*) from 供应商例 5-17 :求支付的工资总数select sum(工资) from 职工 比较错误的命令: select sum(distinct 工资) from 职工数据源103 5-2 查询功能5-2-6 简单的计算查询例 5-18 :求北京和上海的仓库职工的工资总和select sum(工资) from 职工 where 仓库号 in ; (select 仓库号 from 仓库 where (城市=“北京”) ; or (城市=“上海”))数据源例 5-19 :求所有职工的工资都多于1210元的仓库的平均面 积select avg(面积) from 仓库 where 仓库号 not in ; (select 仓库号 from 职工 where 工资&=1210) 以上语句包含了尚没有职工的 wh4 仓库,如果排除没有职工的 仓库,以上语句应改为: select avg(面积) from 仓库 where 仓库号 not in ; (select 仓库号 from 职工 where 工资&=1210) ; and 仓库号 in (select 仓库号 from 职工)select max(工资) from 职工 where 仓库号=“wh2” select min(工资) from 职工 where 仓库号=“wh2”104例 5-20 :求在wh2仓库工作的职工的最高(或最低)工资值 5-2 查询功能5-2-7 分组与计算查询sql select 支持使用 group by 子句进行分组计算查询:group by groupcolumn[,groupcolumn…][having filtercondition] 可以按一列或多列分组,还可以用 having 进一步限定分组的条件 group by 子句一般跟在 where 子句之后,没有 where 子句时, 跟在 from 子句之后。 数据源例 5-21 :求每个仓库的职工的平均工资select 仓库号,avg(工资) from 职工 group by 仓库号例 5-22 :求至少有两个职工的每个仓库的平均工资select 仓库号,count(*),avg(工资) from 职工 ; group by 仓库号 having count(*)&=2 having 子句总是跟在 group by 子句之后,不可以单独使用。 having 子句与 where 子句不矛盾,在查询中是先用where子句 限定元组,然后进行分组,最后用 having 子句限定分组105 5-2 查询功能5-2-8 利用空值查询sql select 支持空值,也可以利用空值进行查询 例 5-23 :找出尚未确定供应商的定购单select * from 定购单 where 供应商号 is null 注意:查询空值时要使用 is null ,而 =null 是无效的,因为 空值不是一个确定的值,所以不能用“=”这样的运算符进行比 较 slect * from 定购单 where 供应商号 is not null例 5-24 :列出已经确定了供应商的定购单信息空值是关系型数据库的一个重要概念,在数据库中可能会 遇到尚未存储数据的字段,这时的空值与空(或空白)字 符串、数值0等具有不同的含义,空值就是缺值或还没有确 定值,不能把它理解为任何意义的数据。比如表示价格的 一个字段值,空值表示没有定价,而数值0可能表示免费。 由于空值的特殊性,在表浏览器中不能直接输入,可以使 用 replace 命令替换。数据源106 5-2 查询功能5-2-9 别名与自联接查询在联接操作中,经常需要使用关系名作前缀,有时这样显得 很麻烦。因此,sql 允许在 from 短语中为关系名定义别名, 格式为:&关系名&&别名& 例如语句:select 供应商名 from 供应商,定购单,职工,仓库 ; where (地址=“北京”)and(城市=“北京”) ; and(供应商.供应商号)=(定购单.供应商号) ; and(定购单.职工号)=(职工.职工号) ; and(职工.仓库号=仓库.仓库号)可以更改为:select 供应商名 from 供应商 s,定购单 p,职工 e,仓库 w ; where (地址=“北京”)and(城市=“北京”) ; and(s.供应商号=p.供应商号) ; and(p.职工号=e.职工号) ; 数据源 and(e.仓库号=w.仓库号)107 5-2 查询功能5-2-9 别名与自联接查询在上述示例中,别名并不是必须的,但是在关系的自联接操作中,别名就是 必不可少的了。sql不仅可以对多个关系实现联接操作,也可以将同一关系与 其自身进行联接,这种联接就称为自联接。在可以进行这种自联接操作的关 系上,实际存在着一种特殊的递归联系,即关系中的一些元组,根据出自同 一值域的两个不同的属性,可以与另外一些元组有一种对应关系(一对多的 联系)。 例如:有一个关系 雇员(雇员号,雇员姓名,经理)雇员号 e3 e4 e6 e8 雇员姓名 赵用 钱潮 孙洁 李渌 e3 e3 e6 雇员号 雇员姓名 经理 经理1:n例 5-25 根据雇员关系列出上一级经理及其所领导的职员清单 select s.雇员姓名,“领导”,e.雇员姓名 from 雇员 s,雇员 e ; where s.雇员号=e.经理 注:这里的 “领导” 为常量,select短语中允许这样使用常量108 5-2 查询功能5-2-10 内外层互相嵌套查询前述的嵌套查询都是外层查询依赖于内存查询的结果,而内层查询 与外层查询无关。事实上,有时也需要内、外层互相关联的查询, 这时内存查询的条件需要外层提供值,而外层查询的条件需要内存 查询的结果。 更改【定购单表】结构,添加总金额字段,并录入相关数据 例 5-26 :列出每个职工经手的具有最高总金额的定购单信息select out.职工号,out.供应商号,out.定购单号,out.定购日期,; out.总金额 ; from 定购单 out where 总金额= ; (select max(总金额) from 定购单 inner1 ; 数据源 where out.职工号=inner1.职工号) 在这个查询中,外层查询和内层查询使用同一个关系,给它们分别指定 别名为 out 和inner1。外层查询提供 out 关系中每个元组的职工号值 给内层查询使用;内层查询利用这个职工号值,确定该职工经手的具有 最高总金额的定购单的总金额;随后外层查询再根据 out 关系的同一元 组的总金额值与该总金额值进行比较,如果相等,则该元组被选择。109 5-2 查询功能5-2-11 使用量词和谓词的查询前面已经使用过和嵌套查询或子查询有关的 in 和 not in 运算符, 除此以外还有两类和子查询有关的运算符:&表达式&&比较运算符&[any|all|some](子查询) [not]exists(子查询) any、all和some是量词,其中any和some是同义词,在进行比较运算时只 要子查询有一行能使结果为真,则结果就为真;而all则要求子查询中的 所有行都使结果为真时,结果才为真。 exists是谓词,exists或not exists是用来检查子查询中是否有结果返 回,即存在元组或不存在元组。例 5-27 :检索那些仓库中还没有职工的仓库的信息select * from 仓库 where 仓库号 not in ; (select 仓库号 from 职工)
可表示为: select * from 仓库 where not exists ; (select * from 职工 where 仓库号=仓库.仓库号) 仓库号=仓库.仓库号 可以写作 职工.仓库号=仓库.仓库号数据源110 5-2 查询功能5-2-11 使用量词和谓词的查询例 5-28 :检索那些仓库中至少有一个职工的仓库的信息select * from 仓库 where 仓库号 in ; (select 仓库号 from 职工)
可表示为: select * from 仓库 where exists ; (select * from 职工 where 仓库号=仓库.仓库号) 仓库号=仓库.仓库号 可以写作 职工.仓库号=仓库.仓库号例 5-29 :检索有职工的工资大于或等于wh1仓库中任何一个职工工 资的仓库号select distinct 仓库号 from 职工 where 工资&= ; (select min(工资) from 职工 where 仓库号=“wh1”)可使用 any 或 some 表示 select distinct 仓库号 from 职工 where 工资&=any ; (select 工资 from 职工 where 仓库号=“wh1”)数据源111 5-2 查询功能5-2-11 使用量词和谓词的查询例 5-30 :检索有职工的工资大于或等于 wh1 仓库中所有职工工资 的仓库号select distinct 仓库号 from 职工 where 工资&= ; (select max(工资) from 职工 where 仓库号=“wh1”)可用all表示为: select distinct 仓库号 from 职工 where 工资&=all ; (select 工资 from 职工 where 仓库号=“wh1”)数据源112 5-2 查询功能5-2-12 超联接查询上述的联接查询均遵循以下特性:即只有满足联接条件,相应的结 果才会出现在结果表中 新的sql标准支持如下的联接查询特性:首先保证一个表中满足条件 的元组都在结果表中,然后将满足联接条件的元组与另一个表的元 组进行联接,不满足联接条件的则将应来自另一个表的属性置为空 值 满足上述超联接查询的联接运算符为:*=(左联接)和 =*(右联接) *=(左联接)--- 在结果表中包含第一个表中满足条件的所有记录; 如果有在联接条件上匹配的元组,则第二个表返回相应值,否则第 二个表返回空值 =* (右联接)--- 在结果表中包含第二个表中满足条件的所有记录; 如果有在联接条件上匹配的元组,则第二个表返回相应值,否则第 一个表返回空值 visual foxpro 不支持超联接运算符 *= 和 =* ;visual foxpro通 过 select 语句的相应语法格式支持联接运算113 5-2 查询功能5-2-12 超联接查询select …… from table inner|left|right|full join table on joincondition where …… inner join 等价于 join ,为普通的联接,在vfp中称内部联接 left join 为左联接 right join 为右联接 full join 在vfp中称完全联接,即两个表中的记录不管是否满 足联接条件都将在目标表或查询结果中出现,不满足联接条件的 记录对应部分为 null 。 on joincondition 指定联接条件 vfp的超联接查询的联接条件在on短语中给出,而不在where短语 中,联接类型在from短语中给出。数据源114 5-2 查询功能5-2-12 超联接查询例 5-31 :内部联接,即只有满足联接条件的记录才出现在查询结 果中。 select 仓库.仓库号,城市,面积,职工号,工资; from 仓库 join 职工 ; on 仓库.仓库号=职工.仓库号
select 仓库.仓库号,城市,面积,职工号,工资; from 仓库 inner join 职工 ; on 仓库.仓库号=职工.仓库号
也定价于:
select 仓库.仓库号,城市,面积,职工号,工资; from 仓库,职工 ; where 仓库.仓库号=职工.仓库号数据源115 5-2 查询功能5-2-12 超联接查询例 5-32 :左联接,即除满足联接条件的记录出现在查询结果中外, 第一个表中不满足联接条件的记录也出现在查询结果中select 仓库.仓库号,城市,面积,职工号,工资; from 仓库 left join 职工 ; on 仓库.仓库号=职工.仓库号为查看有连接和完全联接的效果,在职工表中插入如下一条记录: “wh8”, “e8”, 1200 例 5-33 :右联接,即满足联接条件的记录出现在查询结果中外, 第二个表中不满足联接条件的记录也出现在查询结果中select 仓库.仓库号,城市,面积,职工号,工资; from 仓库 right join 职工 ; on 仓库.仓库号=职工.仓库号例 5-34 :全联接,即满足联接条件的记录出现在查询结果中外, 两个表中不满足联接条件的记录也出现在查询结果中select 仓库.仓库号,城市,面积,职工号,工资; from 仓库 left full join 职工 ; on 仓库.仓库号=职工.仓库号数据源116 5-2 查询功能5-2-12 超联接查询注意:visual foxpro 的 sql select 语句的联接格式只能实现两个表的联 接,如果要实现多个表的联接,还需要使用标准格式。例如下例中的基于4个 关系的查询:select 仓库.仓库号,城市,供应商名,地址 ; from 供应商,定购单,职工,仓库 ; where 供应商.供应商号=职工.职工号 ; and 定购单.职工号=职工.职工号 and 职工.仓库号=仓库.仓库号 这样的格式 visual foxpro 的专用格式就无法写出了,应当采用如上所示的 sql 通用格式5-2-13 集合的并运算sql 支持集合的并(union)运算,即可以将两个select语句的查询结果通过 并运算合并成一个查询结果。为了进行并运算,要求这样的两个查询结果具 有相同的字段个数,并且对应的字段值要出自同一个值域,即具有相同的数 据类型和取值范围。查询北京和上海的仓库信息 select * from 仓库 where 城市=“北京” ; union ; select * from 仓库 where 城市=“上海”数据源117 5-2 查询功能5-2-14 visual foxpro 中的 sql select 的几个特殊选项显示部分结果例 5-34 :只显示前几项记录 top nexpr [percent] nexpr-数学表达式,不使用percent时,nexpr是1-32767之间的整数,说明显示的前几个 记录;当使用percent时,nexpr是0.01-99.99间的实数,说明显示结果中的百分之几的记 录 top短语要与 order by 短语同时使用才有效 select * top 3 from 职工 order by 工资 desc select * top 30 percent from 职工 brer by 工资例 5-36 显示工资最高的三位职工的信息例 5-37 显示工资最低的那30%职工的信息将查询结果存放到数组中into array arraynameselect * from 职工 into array tmp将查询结果存放到临时文件中into cursor cursorname 数据源select * from 职工 into cursor tmp 该短语产生的临时文件是一个只读的dbf文件,当查询结束后该临时文件是当前文件,可 以像一般的dbf文件一样使用,但仅是只读。当关闭该文件时该文件将自动删除118 5-2 查询功能5-2-14 visual foxpro 中的 sql select 的几个特殊选项将查询结果存放到永久表中into dbf|table tablenameselect * top 3 from 职工 into table highsal order by 工资 desc将查询结果存放到文本文件中to file filename [additive]
select * top 3 from 职工 to file tmp order by 工资 desc additive将结果添加到文本文件尾,否则覆盖整个文件 to file filename [additive] 可简写成 to filename [additive]将查询结果直接输出到打印机to printer [prompt]直接将查询结果输出到打印机,如果使用prompt选项,在开始打印之前会打 开打印机设置对话框 select * top 3 from 职工 to printer prompt order by 工资 desc数据源如果 to 短语和 into 短语同时使用,to 短语将被忽略119 5-3 操作功能 sql 的操作功能主要包括数据的插入、更新和删除三个方面的内容 5-3-1 插入标准格式insert into dbf_name [(fname[,fname2,…])] values (eexpression1[,eexpression2,…])vfp特殊格式insert into dbf_name from array arrayname | from memvar 其中dbf_name 为插入记录的表名,fname为字段名, eexpression 为对应的记录值 from array arrayname 说明从指定的数组中插入记录值 from memvar 说明根据同名的内存变量来插入记录值,如果同名 的变量不存在,那么相应的字段值为默认值或空120 5-3 操作功能5-3-1 插入例:向定购单关系中插入元组insert into 定购单 values(”e7”,”s4”,”or01”,{^}) insert into 定购单(职工号,定购单号) values(”e7”,”or01”) 第一条示例代码向定购单表插入一条记录,包含所有字段信息 第二条示例代码向定购单表插入一条记录,只包含两个字段信息, 另外两个字段内容为空。例:利用数组插入记录参看课本示例:p133例:利用同名内存变量插入记录参看课本示例:p133数据源121 5-3 操作功能5-3-1 更新update tablename set column_name = eexpression1[, column_name2 = eexpression2…] where condition 例:给wh1仓库的职工提高10%的工资update 职工 set 工资=工资*1.10 where 仓库号=“wh1”例:给所有学生的年龄增加1岁update 学生 set 年龄=年龄+1 注意:如果不使用where子句,表示全部记录5-3-3 删除delete from tablename [where condition] from指定从哪个表中删除数据(逻辑删除),where指定被删除的记录满 足的条件,如果不使用where子句,表示删除表中的全部记录 例:删除仓库表中仓库号值为wh2的元组 数据源delete from 仓库 where 仓库号=“wh2”122 5-4 定义功能sql 定义功能包括数据库的定义、表的定义、视图的定义,存储过程的 定义、规则的定义和索引的定义等若干部分。由于vfp对sql定义功能支 持的局限,这里仅强调表定义功能和视图定义功能 5-4-1 表的定义create table | dbf tablename1 [name longtablename] [free] ( fieldname1 fieldtype [( nfieldwidth [, nprecision] )] [null | not null] [check lexpression1 [error cmessagetext1]] [autoinc [nextvalue nextvalue [step stepvalue]]] [default eexpression1] [primary key | uni

我要回帖

更多关于 foxpro 设置打印机 的文章

 

随机推荐