有关VFP表的问题

表的别名有什么用途?

例:当你使用 use 表名 IN 0 语句打开表后又不知其确定的工作区时,用sele 别名 语句可方便准确的找到(或指定)你需要的表

别名就是表的另一个名字,它起到快速引用表的作用。

比如:有一张表为:ASDDFFGGGJJJ,你使用如下命令。

USE ASDDFFGGGJJJ IN 0 ALIAS DB

那么,下次你用这张表的时候就可以直接用DB了,

比如THISFORM.TEXT1.VALUE=DB.NAME

如果表被打开表必有名的,临时表也一样,一般地临时表在内存中存在,没有文件形式上的。可由VFP的命令生成,如SQL语句!其实也不必理会工作区的概念,因为很少同时打开200多个表的,要操作到某表时一般是这样:

if used("mydbf")

&&如果已打开表mydbf

select

mydbf &&那么选择表mydbf作为当前工作区

else

use mydbf in 0

&&否则选择空闲的工作区打开表mydbf

select

mydbf &&确保当前的工作区是打开表mydbf的而不是其它表的工作区

endif

这里主要是select

和表名(或者说表的别名)对工作区不作详细的区分,只有空闲的和当前的,当前的也就是活动的,工作区是不能两个同时是活动的,要操作哪个就用select

去选择!

临时表生成请参考SQL的select 语句,VFP可自动分清是SQL语句和上面选择工作区的命令的!

使用 SELECT-SQL 语句的各个子句,可以指定多种不同的输出目标来保存查询结果。

若要将查询结果输出到 使用此子句

独立的表 INTO TABLE mytable

数组 INTO ARRAY aMyArray

临时表 INTO CURSOR

mytmp &&(mytmp就是临时表)

活动窗口 TO SCREEN

浏览窗口 如果没有指定其他目标,则用它作默认值。

如临时表名为:xhtmp用代码可这样:

select xhtmp &&选择xhtmp

goto

top &&使指针指到第一条记录,如果希望到最后即用goto

bottom

ThisForm.Grid1.RecordSourceType=1

ThisForm.Grid1.RecordSource="xhtmp"

ThisForm.Grid1.refresh

用gird当然好点,也可用其它如文本框,但要移动指针;查找后生成数组也可,临时表也可,临时表比较好操作且直观!最好是用SQL语句,因为不管什么语言的SQL语句基本上差别不大,为你以后学另一种语言打基础,大型数据库语言大多数操作都用SQL语句。

怎样从表中选择重复的记录?

select * from table a where exists (select * from table b where

b.key = a.key group by key ;

having count(*) > 1 ) order by fieldlist

select * from table where key in ( select key from table group

by key having count(*) > 1) ;

order by fieldlist

vfp的表的最大容量是多少?

2 gb,且在将来版本中该限制可能被取消。

显示符合条件的记录数

在进行查询或记录筛选时,要返回符合条件的记录数,可用下面代码:

Public aa0 &&.定义变量

Count to aa0

&&.符合条件的记录数赋给变量

Thisform.Text1.Value=aao

&&.在文本框中显示出记录数

在第N条记录之前插入一条新的记录应该怎么输入?

go

n &&先将指针指向该记录

insert before

blank &&在该记录之前插入空白记录

日期字段中如何显示(XXXX/XX/XX)这种形式?

在主程序中加入以下语句:

SET CENTURY

ON &&

打开日期中的世纪 set date

YMD &&

设置日期格式为年/月/日

set mark to

'/' &&设置分格符

从表A向表B中增加记录,使用 APPD FROM

A.DBF

表A、表B哪个是打开的?哪个是关闭的?

完整的写法:

uae b &&打开B表

append from

a.dbf  &&从A表添加数据到B表内.

B表必须打开,而A表可开可闭

现有一xsxm.dbf,其中有'姓名'、'性别'两个字段。我想用命令将其分别改为'xm'、'xb'。应该怎样做?

select 字段1,字段2..,姓名 as xm,性别 as xb from xsxm into cursor curtemp

&&按要生成你的新表,字段2..,是指你另有几个就加几个

select * from curtemp into table xsxm

&&按新表结构和数据覆盖,但要注意xsxm应该是自由表才可以,不能加入数据库。

浏览表的按钮的代码:

brow title '登记一览表' noedit nodelet noappen font '宋体',9

&&这里的“9”是字号

如何调整表中记录的记录号,使记录号与记录的“序号”字段相同?

假设你的序号为字符型

repl all 序号 with allt(str(recn()))

假设你的序号为数值型

repl all 序号 with recn()

在Visual

foxpro中判断一个数据库或数据表文件是否存在,系统自带的有这种功能的 File()函数,示例:

IF  FILE('foxuser.dbf')  WAIT  WINDOW

'Visual  FoxPro

resource  file

present'  ELSE  WAIT  WINDOW

'Visual  FoxPro

resource  file

not  present'

ENDIF

我有一个学生成绩表里面有:姓名、考号、班级、数学分数、语文分数字段。我想求每个班的语文平均分和数学平均分,并将班级及各科的平均分放在一个表中,如何实现?

select 班级,avg(数学分数) as 数学平均分,avg(语文分数) as 语文平均分 from 表 group by

班级 into table dbfresult

直接打印表的命令时什么? 可用

use 你的表

list fields 字段名 TO PRINTER

NOCONSOLE

筛选一个表中某几列到一个新表中的命令是什么?

select

字段1名,字段2名... from 你的表 into table dbftemp

自动删除表中所有的空记录?

delete from 你的表 where empty(你的字段)

插入记录

insert before

blank 在当前记录的前面插入记录

insert

blank 在当前记录的后面插入记录

在vfp的主窗口的状态栏中显示“record

unlocked”,这正常吗?说明什么问题?

当一个表用共享方式打开时, 就会在状态栏显示这一信息。

表用共享方式打开时,不能执行PACK等需要独占打开的命令。表用独占方式打开后(未关闭前),不允许再次打开,网络上的其他人也无法打开该表。

用共享方式打开表的方法, 举例如下:

USE d:\tmp\sysinfo.dbf SHARED

SET EXCLUSIVE OFF

USE d:\tmp\sysinfo.dbf

用独立方式打开表的方法, 举例如下:

USE d:\tmp\sysinfo.dbf EXCLUSIVE

SET EXCLUSIVE ON

USE d:\tmp\sysinfo.dbf

如何有条件的把一个表中的某些记录拷贝到另一个表中?

请参考:

select * from mytable where ... into mycursor

select mydesttable

append from dbf("mycursor")

use in mycursor

方法很多:

首选:select ... from ... where ...

还有:appe from ... for ... 和 copy to ... for ..

检测数据表是否已被其他用户使用

① 网络用户:

m.hqopen=fopen('c:\temp\hqclgl.dbf',12)

=fclose(m.hqopen)

If m.hqopen=-1

?”文件已被打开”

Endif

② 单机用户:

if used("表名")

?”表正在使用中”

Endif

为一个表做备份的命令(在名窗口中输入):

USE 〈表1〉〈回车〉

COPY TO 〈表2〉