第2章 数据表的基本操作

2.1 判断题

1.打开表文件,使用LIST命令显示后,若再用DISPLAY命令将显示第一条记录内容。

【答案】×

【分析】使用LIST命令显示后,记录指针已经移到文件尾,即EOF( )=.T.,这时再用DISPLAY命令将没有任何输出信息。

2.执行DISPLAY ALL命令后,记录指针在最后一条记录。

【答案】×

【分析】执行DISPLAY ALL命令后,记录指针已经移到文件尾,即EOF( )=.T.,而不是最后一条记录。

3.当EOF( )为.T.时,RECNO( )永远为RECCOUNT( )+1。

【答案】√

【分析】是的,当记录指针在文件尾时,当前记录号一定是当前表的总记录数加1。

4.当BOF( )为真时,RECNO( )永远是1。

【答案】×

【分析】当BOF( )为真时,表示记录指针已经移到文件头,当前记录号一定是当前表的第1条记录的记录号。如果表是按自然(物理)顺序排序的,则当前记录号是1,如果是按逻辑顺序排序的,则当前记录号不一定是1。

5.TOTAL命令只能对表文件中的数值字段分类求和。

【答案】√

【分析】TOTAL命令的功能是对当前表按指定字段分类并计算指定数值型字段的分类和,结果存放在新建的表文件中。

6.REPLACE命令可以修改内存变量和字段变量的值。

【答案】×

【分析】REPLACE命令只能以替换方式修改字段变量的值,不能修改内存变量的值,内存变量的值可以通过赋值语句等命令进行修改。

7.索引文件可以独立打开并使用。

【答案】×

【分析】索引文件不能脱离所依赖的表文件而单独使用,可以在用USE命令打开表文件的同时打开相关的索引文件,也可以在表文件打开后再用命令打开相关的索引文件。

8.一个表文件可以建立多个索引。

【答案】√

【分析】一个表文件可以建立多个索引,但某一时刻只有某个索引或索引组合作为主控起作用。

9.当记录指针指向第一条记录时,其文件头函数BOF( )值为假。

【答案】√

【分析】第一条记录并不是文件头,当然此时BOF( )=.F.。

10.记录的逻辑删除只是对记录加了一个删除标记,记录仍可以正常操作。

【答案】√

【分析】是的,但可以通过SET DELETED ON/OFF命令设置使逻辑删除的记录不参与或参与其他命令的处理。

11.Visual FoxPro可以通过.txt文件与其他高级语言进行数据交换。

【答案】√

【分析】是的,一般高级语言都支持对文本格式文件的读取操作。

12.在将表文件更改文件名后,其同名的备注文件也必须改名。

【答案】√

【分析】如果该表有备注型字段或通用型字段,则其与表同名的备注文件也必须改名,否则表在打开时会出错。

13.SKIP 2与GO 2的效果一样,都使指针指向第2条记录。

【答案】×

【分析】SKIP 2与GO 2的效果是不同的,SKIP 2是相对当前记录向下移两条记录;GO 2是绝对移位,将记录指针移到物理记录号为2的记录上。

14.在索引文件被删除时,其相应的表文件必须打开。

【答案】×

【分析】在索引文件被删除时,其相应的表文件必须关闭,否则是不能删除成功的。另外还需要注意,删除索引文件一般是针对单项索引文件,复合索引文件一般是不直接删除的。

15.LOCATE命令只能查找未索引文件的记录。

【答案】×

【分析】无论是否建立索引,LOCATE命令都是按表的排列顺序依次搜索满足条件的第一条记录。

16.ZAP命令物理删除整个表文件。

【答案】×

【分析】ZAP命令是物理删除当前表的所有记录,只留下表的结构,并没有删除表文件。

17.在修改文件名时,文件必须关闭。

【答案】√

【分析】是的,在修改某一文件的文件名时,必须先关闭该文件。

18.建立表文件时,一定也产生同名的备注文件。

【答案】×

【分析】建立表文件时,不一定会产生同名的备注文件,只有当表中含有备注型或通用型字段时才会生成同名的备注文件。

19.表文件记录的物理顺序和其索引文件记录的逻辑顺序总是不一致的。

【答案】×

【分析】表文件记录的物理顺序和其索引文件记录的逻辑顺序有可能是一致的。例如,如果有一个职工表在建立时就是按照职工号的顺序录入记录的,以职工号建立索引,则这时的逻辑顺序与物理顺序是一致的。

20.对一个表建立索引,就是将原表中的记录重新排列其物理顺序。

【答案】×

【分析】对一个表建立索引,就是将原表中的记录按照索引关键字进行逻辑排序,不会改变原表的物理顺序。

21.使用LIST ALL命令可以把备注型字段的内容显示出来。

【答案】×

【分析】LIST ALL是显示所有记录,但不会显示备注型字段的内容。如果要显示备注型字段的内容,则要加入FIELDS 备注字段名。

22.OLE的链接和嵌入的区别在于数据的存储地点不同。

【答案】√

【分析】在表的通用型字段中引用OLE对象,可以采用链接和嵌入两种方法。链接方法是按照文件的路径与指定文件保持链接;而嵌入方法则是将指定文件的副本放到Visual FoxPro中。链接与嵌入的区别在于数据的存储地点不同。

23.关闭表文件时,对应的索引文件将自动关闭。

【答案】√

24.某一字段的数据类型是数值型,如果整数部分最多5位,小数部分2位,则该字段宽度应定义为7位。

【答案】×

【分析】应该定义为8位,其中小数点占1位。因为,对数值型字段来说,如果小数位不为零,则总的宽度应该包含小数点本身。

25.在同一表文件中,所有记录的长度均相等。

【答案】√

【分析】在同一表中,各记录的长度等于各字段宽度之和加1,加的1个字节用来存放删除标记。如果支持空值,则还要增加1个字节,用来记录支持空值的状态。所以,在同一表中各记录是等长的。

2.2 选择题

1.设职工.dbf表文件中共有10条记录,执行如下命令序列:

USE职工
GOTO 5
LIST
? RECNO ( )

执行最后一条命令后,屏幕显示的值是( )。

A.5 B.1 C.10 D.11

【答案】D

【分析】LIST命令默认的范围是所有记录,当该命令执行后记录指针移到文件尾,即EOF=.T.,这时的记录号是总的记录数加1,已知职工表共有10条记录,所以答案是11。

2.在命令窗口中,已打开职工表,要将记录指针定位在第一个基本工资大于2100元的记录上,用( )命令。

A.LOCATE FOR基本工资>2100 B.DISPLAY FOR基本工资>2100 C.BROWSE FOR基本工资>2100 D.LIST FOR基本工资>2100

【答案】A

【分析】BROWSE,LIST和DISPLAY命令都是显示满足条件的所有记录,而只有LOCATE命令是查找定位在满足条件的记录上。

3.执行LIST NEXT 1命令后,记录指针的位置指向( )

A.下一条记录 B.原来记录 C.尾记录 D.首记录

【答案】B

【分析】由于范围NEXT N是指包含当前记录的向下N条记录,因此NEXT 1仍然是原来记录。

4.在已打开的表文件的第5条记录前插入一条空记录,可使用( )命令。

A.GO 5 INSERT B.GO 4 INSERT BEFORE C.GO 5 INSERT BLANK D.GO 5 INSERT BEFORE BLANK

【答案】D

【分析】INSERT或INSERT BEFORE命令在当前记录的后面或前面插入记录,并进入插入方式;INSERT BLANK命令在当前记录的后面插入一条空记录;而INSERT BEFORE BLANK命令在当前记录的前面插入一条空记录。

5.打开一张空表(无任何记录的表),未进行记录指针移动操作时,RECNO ( )、BOF ( )和EOF ( ) 函数的值分别为( )。

A.0,.T.和.T.B.0,.T.和.F.C.1,.T.和.T.D.1,.T.和.F.

【答案】C

【分析】当打开一张空表时,指针所在的位置既是文件头,也是文件尾,且当前记录号为1。

6.命令DELETE ALL和ZAP的区别是( )。

A.DELETE ALL只删除当前工作区的所用记录,而ZAP删除所用工作区的记录

B.DELETE ALL删除当前工作区的所用记录,而ZAP只删除当前的记录

C.DELETE ALL只删除记录,而ZAP连同表文件一起删除

D.DELETE ALL删除记录后可以用RECALL命令恢复,而ZAP删除后不能恢复

【答案】D

7.执行不带索引文件名的SET INDEX TO命令的作用是( )。

A.重新建立索引文件 B.关闭索引文件 C.删除索引文件 D.打开所有索引文件

【答案】B

8.可以随着表的打开而自动打开的索引是( )。

A.单项索引文件(dix) B.结构复合索引文件(cdx) C.SORT文件(dbf) D.非结构复合索引文件(cdx)

【答案】B

9.若要对职工表建立以基本工资和出生日期为关键字的多字段索引,其正确的索引关键字表达式为( )。

A.基本工资+出生日期

B.STR (基本工资,8,2)+出生日期

C.基本工资+DTOC(出生日期)

D.STR(基本工资,8,2)+DTOC(出生日期)

【答案】D

【分析】A,B,C三个答案中两个相加数据项的数据类型都不一致,不能连接起来作为多字段索引,而D中两数据项均转换成字符型后进行连接,可作为索引关键字。

10.对表文件按关键字建立索引并设为主控后,命令GO BOTTOM把文件指针移到( )。

A.记录号不能确定 B.逻辑的最后一条记录 C.最大记录号的记录 D.RECCOUNT( )+1号记录

【答案】B

11.假设数据表文件已经打开,并设定了主控索引,为了确保指针定位在物理记录号为1的记录上,应该使用的命令是( )。

A.GO TOP B.GO BOF( ) C.SKIP 1 D.GO 1

【答案】D

【分析】在索引文件打开的情况下,第1条记录并不一定是物理的第1条,所以A不正确;GO BOF( )命令不存在;SKIP 1是向下移动1条记录指针;而GO 1是将记录指针移到物理的第1条记录上,符合题目要求。

12.使用USE命令打开表文件时,其对应的结构复合索引文件也自动打开,这时表记录的顺序将按( )显示。

A.第一个索引标识 B.最后一个索引标识 C.主控索引标识 D.物理顺序

【答案】D

【分析】只有设置了主控索引,才能按索引后的逻辑顺序排列。

13.某数据表文件有5个字段,不支持空格,其中3个字符型字段的宽度分别为6,12和10,另有一个逻辑型字段和一个日期型字段,该数据库表文件中每条记录的总字节数是( )。

A.37 B.38 C.39 D.40

【答案】B

【分析】通常表中每条记录的总字节数是各字段宽度之和再加1个字节,多加的字节用来存放删除标记“*”。如果支持空值,则总计的字节数还要增加1个字节,用来记录支持空值的状态。本题目说不支持空值,所以是各字段宽度之和37+1。

14.假设已打开职工表并设姓名字段为主控索引,现有一个内存变量W,其值为“张军”,可用命令( )来查找姓名为“张军”的职工。

A.LOCATE W B.SEEK 张军 C.SEEK W D.LOCATE 张军

【答案】C

【分析】A和D不正确,后面LOCATE应该跟查询条件,不能是简单表达式;B也不正确,这里出现的张军是变量,张军作为变量没有赋初值;而C是正确的,因为W已赋初值“张军”,且姓名字段是主控索引。

15.假设已打开职工表和相应的索引文件,要查找第2个基本工资为2300元的职工,应使用命令( )。

A.SEEK 2300 B.SEEK NEXT 2 C.SEEK 2300 CONTINUE D.SEEK 2300 SKIP

【答案】D

【分析】因为索引文件已打开并起作用,则基本工资相同的记录会连续排列在一起,通过SEEK命令可先查找定位在第1个满足条件的记录上,再由SKIP移到下一条记录。

16.ABC.dbf是一个具有两个备注型字段的数据表文件,打开该表后,使用COPY TO ABC1命令进行复制操作,其结果将( )。

A.得到一个数据表文件

B.得到一个新的数据表文件和一个新的表备注文件

C.得到一个新的数据表文件和两个新的表备注文件

D.显示出错信息,表明不能复制具有备注型字段的数据表文件

【答案】B

【分析】在数据表中无论有一个还是多个备注型字段或通用型字段,均存放在一个与表文件同名的备注文件中。

17.假设当前数据表文件有20条记录,当前记录号是10。执行命令LIST REST以后,当前记录号是( )。

A.10 B.20 C.21 D.1

【答案】C

【分析】因为执行命令LIST REST后,记录指针已经移到文件尾,即EOF( )=.T.,这时的记录号为总的记录数加1。

18.要将当前表中的记录保存到一个扩展名为.txt的文本文件中,应当使用的命令是( )。

A.MODIFY COMMAND B.COPY FILE TO C.APPEND FROM D.COPY TO

【答案】D

【分析】选项A是程序文件的修改命令;选项B是文件复制命令,要求当前表必须先关闭才能复制;选项C是在当前表中批量追加记录命令;只有选项D是正确的,但需要在COPY TO后面加上文件名及TYPE SDF选项。

19.在命令中默认范围和FOR短语时,默认ALL的命令是( )。

A.DISPLAY B.COUNT C.RECALL D.REPLACE

【答案】B

【分析】DISPLAY、RECALL和REPLACE默认都是当前记录,而COUNT默认是所有记录。

20.设表中有一个字符型字段“姓名”,打开表文件后,要把内存变量“姓名”的字符串内容输入到当前记录的“姓名”字段,应当使用命令( )。

A.姓名=姓名 B.REPLACE姓名WITHM.姓名 C.REPLACE姓名WITH姓名 D.REPLACE ALL姓名WITH M->姓名

【答案】B

【分析】表内容不能通过赋值语句修改,所以选项A不正确;选项C是“姓名”字段被自己替换,也不正确;选项D是表的所有记录的“姓名”字段被内存变量替换,不正确;只有选项B符合题目要求。