VF中的命令格式说明

补充:

VF中的命令格式说明:

(1)、VF中命令可以只写前四个字母或四个字母以上

     例如命令replace,可以写成repl  repla  replac

     字母不区分大小写。

(2)、如果命令带有参数,则命令和参数间、参数与参数间要加空格

(3)、命令格式说明:<>表示必选项目 []表示可选项 | 表示二选一

     例如:P58 copy stru to 命令

(4)、注意:所有的字符都要使用半角字符

(5)、命令和参数、参数和参数之间需要用空格隔开

     例如:P48【例4-5】

(6)、一般来讲,参数和参数之间的顺序可以相互交换  例如:P48【例4-5】

(7)、命令执行时必须回车

(8)命令换行:每条命令最多不能超过8192个字符(包括括号)。若屏幕一行不能显示,可用分号“;”换行。换行时仍然需要回车。

注意:命令工作方式中常见的错误

(1)命令动词写错

(2)格式不符合要求

·标点符号不对(一定要用英文状态的标点)

·缺少必需的空格或添加了不该有的空格

·数据类型不一致,要注意字符型、日期型、逻辑型数据的书写格式

(3)打不开所需要的文件:没有正确输入盘符和路径或文件名输入错误

重要提示:VFP中的符号应该都是半角符号(即英文标点符号)!!这个是对的

这个是错的

第四章 表的建立和操作

4.1建立数据表文件

一、表结构的建立

1、命令方式

命令格式:

(1)CREAT TABLE <新表文件名>(<字段名1>   <类型>(长度))[,<字段名2>    <类型>(<长度>)……]

例如:CREAT   TABLE   选课表(学号   C(8),课程号    C(4),成绩   N(3))

(2)create [<表名>|?]

例如:create xsda

2、菜单方式

文件菜单->新建-> 表->新件文件

注意: 希望大家能有好的保存习惯

设置默认目录方法:

 1、工具=>选项=>文件位置=>默认目录

2、set default to 完整路径

如:set  defa  to   e:\vf

 二、数据的输入

1、立即输入

(1)、备注型数据的输入

方法:光标定位“memo”处,双击鼠标。输入、编辑结束后,点击编辑窗口的“关闭”按钮,VFP会自动将修改后的数据保存)返回到数据输入的正常状态;按<Ctrl>+<Q>或Esc键则清除当前输入的信息,返回到数据输入的正常状态。

(2)、通用型数据的输入(同上)

打开窗口后,通过VFP的“编辑”菜单的“粘贴”或“插入对象”选项来完成

注意:1、数据输入时不要有空格

2、关闭就存盘

3、如字段名输错、字段宽度或类型设计错、多输或少输了字段名、字段位置调整

    可使用:

(1)显示菜单->表设计器

(2)在命令窗口中输入命令

        Modify structure

(3)如果字段值需要修改,可输入命令browse。或点击显示菜单的“浏览”和“编辑”选项也可以进行操作。

(4)如果要添加新的记录输入append。

    或在“显示”菜单里选择“追加方式”选项

4、备注型:宽度为4。系统默认显示为memo或者Memo(有内容时)

通用型:宽度为4。系统默认显示为gen或者是Gen(有内容时) 

4个字节存放的是地址指针,指向备注文件(文件名和表文件名一样,扩展名为.FPT)对应的内容。

重要提示:只要表中有备注或者通用字段(不管是一个或者多个),或者两个同时都有,系统就会自动产生一个与表文件名相同的备注文件,扩展名为FTP 。用于存放备注型和通用型字段的内容

4.2表的打开、显示和关闭

一、打开表

1、打开表

(1)命令方式

   【格式】USE  <表文件名>| ?

   【功能】在当前工作区打开一个表文件

注:表文件名如没有加路径则默认打开c:\program files\microsoft visual studio\vfp98下的表文件。在打开表文件的同时同名的备注文件和复合索引文件也同时打开

(2)菜单方式

单击“文件”菜单中的“打开”选项 (打开时请将“独占”选项选中,否则表不能进行修改)

注意:(1)、表建立时就会被打开。

(2)、表是否被打开可查看状态栏是否显示有表名。或看“显示”菜单。 在窗口上是不会有任何的显示。想要查看记录可用命令或选择菜单项来完成。

二、 关闭表

 命令方式

【格式 1】USE

       功能: 关闭当前工作区中正打开的表文件及其索引文件。

【格式 2】CLOSE   ALL                     

功能:关闭所有工作区中的所有各类型文件,但不释放内存变量,并选择工作区1为当前工作区

【格式 3】CLOSE  <文件类型>

例如:CLOSE   DATABASES

         CLOSE  TABLE

  关闭打开的所有表文件、索引文件、备注文件、格式文件并选择工作区1为当前工作区。

【格式 4】CLEAR   ALL

功能:关闭所有工作区中的所有表及各类型文件,并释放内存变量。

三、表记录的显示

1、显示文件记录的两个命令(list和 display)

LIST [OFF] [<范围>] [FIELDS <字段名表>]  [FOR/ WHILE <条件>] [TO PRINTER | TO  FILE  <文件名>]

【功能】:显示当前表文件中指定的记录和字段的内容。

【说明】:

 (1)范围:用于确定执行该命令涉及的记录。有如下几种

   all  :全部记录

   next  <n> :从当前记录开始的N条记录

   record   <n>:第N条记录

   rest :当前记录起到最后一条记录为止的所有记录

注意:如没指定范围,则LIST命令默认范围为ALL(即全部记录);DISPLAY默认范围为当前记录。

例如:

Use    学生登记表

DISP

LIST

GO  2

LIST  NEXT  3

LIST  RECORD  4

GO  3

LIST REST

LIST ALL

(2)FIELDS 子句:用于确定需要操作的字段

例如: Use    学生登记表

List   fields  学号,姓名,性别,入校总分

Go top

List  next  3   fields  学号,姓名,出生年月

(3)for <条件>:<条件>为逻辑表达式,用于指定选择记录的条件。在LIST命令中没有指定范围时默认是所有的记录中筛选。

例如:

Use    学生登记表

List  for  入校总分>570.00   &&显示入校总分大于                        570的记录

List  for  left(姓名,2)=“李”       &&显示姓李的同学

List  for  substr(姓名,1,2)=“李”  and  性别=“男”

&&显示姓李的男生

Go top

List  rest for year(出生年月)>1980 and 性别=女 or 入校总分<580   fields 姓名,性别,出生年月,入校总分

优先级:for/while <条件>的优先级最高  然后是 范围 ,最后才是list和display

(4)while <表达式>:用于条件筛选,但仅在当前记录符合条件时开始筛选,一旦遇到不满足条件的记录时就停止筛选。

例如:

Go top

List  while  left(姓名,2)=“魏”

Go 2

List while 性别=“男”

注意:

FOR 子句默认范围是全部记录筛选

While子句则遇到不满足条件的记录就停止

(5) [OFF]选项:在命令中使用时不显示记录号

(6) To printer: 到打印机

To file <文件> : 这里的文件类型是TXT

List和display异同:

1、list默认显示是全部记录,display默认显示是当前记录

2、如有多条记录, LIST以滚动方式输出,DISPLAY以分屏方式输出

3、如命令中指定了条件或范围,则两条命令结果相同

思考下列命令的显示结果:

Use  学生登记表

Disp

?recno(),eof(),bof()

List

?recno(),eof(),bof()

disp

2、浏览窗口显示记录(了解)

BROWSE  [[FILESD]<字段名表>[FOR<条件>[REST]]

【功能】:打开浏览窗口

四、记录指针的定位

1、记录指针的绝对移动

(1)命令方式

【格式】GO[TO] [RECORD] <数值表达式>| top| bottom

【功能】将当前表文件的记录指针定位到指定记录号的记录处。

【说明】

 A、<数值表达式>选项代表所要定位记录的记录号,该记录号不能小于1也不能大于记录总数加1。

B、TOP选项代表将当前表文件的记录指针定位到第一个记录(首记录)

C、BOTTOM选项将当前表文件的记录指针定位到最后一个记录(尾记录)

注:相关函数

说明:(1)RECNO():显示当前记录号

(2)BOF() :begin of file:文件开始,第一条记录的前面,记录号为1

    (3)

EOF():end of file:文件结束,最后一条记录的后面,记录号为最后一条记录的记录号+1

例如:use 学生登记表

?recno()             &&测试当前记录号,显示为1

GO  4            &&将记录指针指向第4条记录

?Recno()              &&测试当前记录号,显示为1

Go  bottom

?Recno()              &&显示最后一条记录的记录号

Go  top

?recno()                 &&显示首记录的记录号

2、记录指针的相对移动

【格式】SKIP [<数值表达式>]

【功能】以当前表文件的当前记录位置为基准,记录指针向前或向后移动<数值表达式>值到相应的记录位置。

【说明】

(1)<数值表达式>选项代表相对移动的记录数。若<数值表达式>值为正数则向文件尾的

(2)方向移动记录指针;若<数值表达式>值为负数则向文件头的方向移动记录指针。若缺省,相当于执行SKIP 1,则指针向表尾移动一个记录。

⑶ 若执行此命令前执行了SET DELETED ON命令,则SKIP命令将不把具有删除标记的记录计算在内。(了解)

例如:use 学生登记表

?recno() ,bof(),eof()            &&显示为1    .f.     .f.

Skip  -1   

? recno() ,bof(),eof()            &&显示为1    .t.     .f.

Skip  3

? recno() ,bof(),eof()           &&显示为4    .f.      .f.

Skip

? recno() ,bof(),eof()           &&显示为4    .f.      .f.

Skip 2

? recno() ,bof(),eof()           &&显示为6    .f.      .t.

4.3 表的修改与编辑

一、修改表结构

(1)显示菜单->表设计器

(2)在命令窗口中输入命令

        Modify structure

二、修改记录

1、全屏编辑

CHANGE/EDIT  [<范围>] [FIELDS<字段名表>][FOR<条件>]/[WHILE<条件>]

功能:对指定范围内,符合条件的那些记录的指定字段进行编辑修改。

说明:①若命令写声EDIT<记录号>,则是对记录号指定的记录进行修改。

②可连续修改多个记录,修改完成后,按CTRL+W存盘并结束修改。

2、自动替换(重点)

(1)命令方式

命令:REPLACE [<范围>][FOR<条件>]/[WHILE<条件>]

〈字段名1〉 WITH  〈表达式1〉[ADDITIVE][,<字段名2> WITH  <表达式2>[ADDITIVE]]

功能:在当前表的指定记录中,直接将字段值用指定的表达式值来替换。

说明:①该命令对<范围>内符合<条件>的记录用<表达式I>的值来替换<字段I>的值.

②若范围和条件等选项都缺省,只对当前记录的有关字段进行替换.

③ADDITIVE用于备注型字段,表示将表达式值添加到字段的原有内容后,而不是取代原有内容.

例1:给表学生.dbf增加一个字段年龄并且自动替换:

先modi comm , 插入年龄字段 N(3)

   

replace all 年龄 with year(date())-year(出生年月)

例2: 如果一张表有语文、数学、外语和总分四个字段,而前三个字段数据已经填写

现在请自动填写总分字段,并且把男同学的总分增加10%

   

repl all 总分with  语文+数学+外语

   

repl all 总分 with 总分*1.1 for 性别=’男’

例3:将入校总分字段全部清空

   

repl all 入校总分 with 0

例4: 将第5条记录的姓名字段改为 李四

   

repl reco 5 姓名 with “李四”

或者:

   

go 5

      

repl  姓名 with “李四”

三、增加记录

1、追加记录

(1)菜单方式

方法:“显示”菜单->“追加方式”选项

(2)命令方式

APPEND  [BLANK]

功能:在当前表的表尾追加新记录。

说明:①使用BLANK是在表尾追加一条空白记录

       ②如要要追加多条记录,则需选择“显示”菜单中的“追加方式”命令。其他命令方式的和“追加新记录”只能追加一条记录

2、插入新记录

INSERT   [BLANK][BEFORE]

功能:在当前打开表文件中的当前记录指针位置处插入新记录。

说明:⑴使用BEFORE子句能在当前记录之前插入新记录,缺省该子句则在当前记录之后插入新记录。

(2)使用BLANK子句立即插入一条空白记录,缺省该子句则出现记录编辑窗口,等待用户输入记录。

例如:

insert:在当前记录后插入新记录

insert before:在当前记录前插入新记录

insert blank:在当前记录后插入空白记录

insert blank before :在当前记录前插入空白记录

3、INSERT-SQL命令

INSERT  INTO   表名[(字段名1[,字段名2,……]) VALUES  (表达式1[,表达式2,……])

功能:在表尾追加一条新记录,并将数据存入该记录中。

说明:①表不必事先打开,字段与表达式的类型必须相同。

②若字段名全部缺省,就须按表结构字段顺序填写VALUES子句的所有表达式。

例如:INSERT INTO 学生登记表(学号,姓名,性别,入学成绩)  VALUE(“00204”,”张三”,“男“,582.00)

4、数据表内容的批量增加

APPEND FROM命令

命令:APPEND  FROM  <文件名>[FIELDS<字段名表>][FOR <条件>]

[[TYPE][DELIMITED[WITH<定界符>|WITH BALNK|WITH TAB]| XLS|SDF]]

功能:在当前表尾追加一批记录,这些记录来自于另一个文件。

说明:①源文件的类型可以是表,也可以是系统数据格式、定界格式等文本文件,或EXCEL文件。

②源文件默认类型是表,如是其他类型文件,需用TYPE子句。

③执行此命令时源文件不需要打开。

例如:APPEND FROM   WENJIAN.TXT  TYPE  DELIMITED  WITH  “,”

&&将文件名为WENJIAN,用“,”作为定界符的文本文件中的所有记录追加到当前表中。

四、删除记录

1、记录逻辑删除命令

命令:DELETE[<范围>][FOR <条件>][WHILE<条件>]

功能:对当前表在指定范围内满足条件的记录打上删除标记。

说明:⑴若可选项都缺省,只删除当前记录

       ⑵DELETE命令只是将指定的记录打上标记,并不是彻底的从表中删除记录。打上标记的记录可以恢复

2、记录物理删除命令

命令:PACK

功能:从物理上彻底删除打上了删除标记的记录。

说明:删除的记录不可以恢复

3、记录恢复命令

命令:RECALL [<范围>][FOR<条件>][WHILE<条件>]

功能:对当前表在指定范围内满足条件的记录去掉删除标记。若可选项都缺省则只恢复当前记录。

4、记录清除命令

命令:ZAP

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

注:ZAP只是将表中的记录全部删除了,但是表结构仍然存在。

dele:逻辑删除

recall:恢复删除

pack:在dele的基础上物理删除

zap:与上面三条命令无关,直接清除表中所有数据,保留表结构。

delete [范围] [for/while <条件>]  删除指定的记录(加删除标记)

recall [范围] [for/while <条件>]  恢复删除指定的记录(去掉删除标记)

pack和zap没有参数!!!

例如:Use 学生

   

Go 2

   

Insert blank

   

Dele next 3

   

List

   

Recall all

   

List

补充:

SET DELETED ON | OFF
指定是否处理标有删除标记的记录,以及其他命令是否可以操作它们。

SET DELETED  On:

使用范围子句处理记录(包括在相关表中的记录)的命令忽略标有删除标记的记录。

SET DELETED  OFF: (默认值)

使用范围子句处理记录(包括在相关表中的记录)的命令可以访问标有删除标记的记录。

例如:

use xsda

set dele on

    

list

    

set dele off

    

list

4.4表的过滤

表的过滤(了解)

(1)记录的过滤

命令:SET  FILTER  TO  [<条件>]

功能:从当前表中过滤出符合指定条件的记录,随后的操作仅限于这些记录。

说明:缺省条件时表示取消所设置的过滤器。

例如:SET   FILTER  TO   性别=“女”

             

LIST 

      SET  FILTER  TO  &&取消过滤

         LIST

(2)字段过滤

命令:SET   FIELDS  TO  [<字段名表>|ALL]

功能:为当前表设置字段过滤器          

说明:①其中<字段名表>是需要访问的字段名称列表,个字段之间用“,”隔开。ALL选项表示所有字段都在字段名表中。

②命令SET   FIELDS  ON|OFF决定字段名表是否有效。当设置字段过滤器时,SET  FIELDS  自动置ON表示只能访问字段名表指定的字段。SET  FIELDS  OFF表示取消字段过滤器,恢复原来状态。

例如:SET  FIELDS  TO   学号,姓名,性别

              LIST

              SET  FIELDS  ON

              LIST

        SET FIELDS OFF  &&取消字段过滤

      LIST

4.5数据的复制

一、表的复制

1、复制任何类型的文件

命令:COPY  FILE  <文件名1>  TO  <文件名2>

功能:把文件1做个副本得到文件2

注:⑴若对表文件进行复制,该表必须处于关闭状态。

       (2)文件名1和文件名2中可使用通配符“*”和“?”。但文件1和文件2中的通配符位置必须相同。

       (3)文件1如果不写明路径则在当前目录下找,复制后的文件2如果标明路径则也保存在当前目录下。

例如:copy   FILE    学生.*     TO   A:\学生.*

       &&将当前目录里的所有以学生为主文件名的文件拷贝到A盘的根目录下

copy file xsda.dbf to xixi.dbf

      

copy file xsda.fpt to xixi.fpt

2、复制表文件

COPY   TO  <文件名>[<范围>][FIELDS  <字段名表>][FOR<条件>]/[WHILE<条件>][[TYPE][XLS|SDF|DELIMITED[WITH<定界符>|WITH BALNK|WITH TAB]]]

功能:将当前表中选定的部分记录和部分字段复制成一个新表或其他类型的文件。

注:⑴若表中含有备注型字段,则在复制扩展名为.DBF文件的同时自动复制扩展名为.FPT的备注文件。

       (2)若不含TYPE子句,默认文件的类型是表;若要得到EXCEL文件,TYPE子句中必须取XLS;若要得到文本文件(.TXT),则TYPE子句中必须取SDF(无定界符)或DELIMEITED。

例如:use 学生

copy to 学生 for 性别=”男” fields 学号,姓名,入学成绩

COPY  TO  学生表  NEXT  5  FIELDS  学号,姓名,入校总分  FOR 性别=“男” ;

 AND ! 三好生  TYPE  DELIMITED  WITH  “,”

3、复制表结构

COPY  STRUCTURE TO  <文件名>[FIELDS]<字段名表>]

功能:把当前表的结构复制到<文件名>指定的新文件中。

注:⑴只复制当前表的结构,不复制其中的数据。

       (2)若使用FIELDS选项,则新表的结构只包含其指明的字段,同时也决定了这些字段在新表中的排列次序。

       (3)如有备注型和通用型字段则同时生成一个同名备注文件。

use 学生

copy stru to heng

copy stru to hi fields 学号,性别,姓名,简历

二、数组和表之间的数据交换

1、将表中记录传送到数组或内存变量

命令:SCATTER [FIELDS<字段名表>][MEMO]TO <数组名>      [BLANK]|MEMVAR [BLANK]

功能:将当前记录的字段值按<字段名表>顺序依次送如数组元素中,或依次送如一组内存变量。

说明:①若选择FIELDS子句,则只传送字段名表中的字段值,否则将传送所有字段值(备注型和通用型字段除外)。若要传送备注型字段值,还需要使用MEMO项。

scatter 用法一:将当前记录的值赋给内存变量

格式:scatter [fields 字段名表] MEMVER

例如:use 学生

go 3

disp

scatter fields 学号,姓名,入学成绩 memvar

?m.学号,m.姓名,m.入学成绩

scatter 用法二:将当前记录的值赋给数组变量

格式:重点掌握 scatter [fields 字段名表] to 数组变量名

例如:

use xsda

go 3

scatter fields 学号,姓名,入学成绩,简历 to kk memo

list memo like kk

例如:use xsda

     

go 3

     

dime ks(3)

      

scatter to ks

     

list memo like ks

思考:KS的单元有几个?备注型字段的值传到了数组ks中吗?通用型字段呢?

   

6                       NO                  NO

结论:1、scatter to 数组变量名时,数组可以不先定义。数组的下标大小由字段个数确定

2、如果定义了数组,如果字段个数超过了数组下标,则会下标会自动扩展

下标说明:dime arr(4)  4就是下标

3、通用型不能赋给数组,备注型可以,但是必须要加参数memo

例如:scatter to yuio memo  (yuio的单元就变成7个了)

2、将数组或内存变量的数据传送到记录

命令:GATHER  FROM  <数组名>|MEMVAR[FIELDS<字段名表>][MEMO]

功能:将数组或内存变量的数据依次传送到当前记录,以替换相应字段值。

说明:①修改记录前应确定记录指针位置

              ②若使用FIELDS子句,仅<字段名表>中的字段才会被数组元素替代.缺省MEMO子句时将忽略备注型字段.

              ③内存变量值将传送给与它同名的字段,若某字段无通明的内存变量,则不对该字段进行数据替换。

              ④若数组元素多于字段数,则多余的数组元素不传送,而数组元素少于字段数,则多余的字段其值不会改变。

gatherfrom 数组  :将数组的值传给给表。

例如:use xsda

    

        go 3

  

      disp

   

      dime ks(3)

      scatter to ks

   

      ks(3)=”张三”

    

 gather from ks

   

disp

例:

use 学生

   

dime  hh(3)

   

list

   

go 3

   

scatter to hh

   

?hh(2)

   

hh(2)=”李四”

   

gather from hh

   

List

GO  5

SCATTER  MEMVAR

DISP   MEMO

学号=“A0201105”

   

GATHER  MEMVAR

DISP

2、多记录和数组之间的数据交换

(1)将表的一批记录复制到数组

命令:COPY  TO  ARRAY  <数组名>[FIELDS<字段名表>][<范围>][FOR<条件>][WHILE<条件>]

功能:将当前表选定的数据复制到<数组名>表示的数组中,但不复制备注型字段.

说明:①若命令中指定的数组不存在,VF会自动建立

              ②可以将单个记录的数据复制到一维数组中。

              ③该命令能将当前表的多个记录复制到二维数组中。

注:若数组事先定义,则该命令不会调整数组的大小。

例如:use xsda

copy to array ABC

ABC(2,6)=700

append from array ABC

list

观察数组变量ABC的下标。

如果数组先定义就不同了:

use xsda

dime hen(3,4)

copy to array hen

list memo like hen

最后,数组hen的下标还是3,4

(2)从数组向表追加记录

命令:APPEND  FROM  ARRAY  <数组名>[FOR<条件>][FIELDS<字段名表>]

功能:将满足条件的数组行数据按记录依次追加到当前表中,但忽略备注型字段。

说明:①数组名可以是一维或二维数组。数组的行数就是所追加新记录的个数,即一维数组追加一个记录,而二维数组的每一行追加一个新记录。

       ②若数组列数多于字段数,多于列的数组元素将被忽略;反之,若字段数多于数组列书,则多出来的字段为空值。

例2:

use 学生

dime  tt(3,4)

list

copy to array tt for 性别=’男’ all

list memo like tt

tt(2)=”萧萧”

copy structure to xx

use xx

appe from array tt

list

相关推荐