Welcome

首页 / 软件开发 / VFP / 看实例学VFP:用sql命令修改表结构

看实例学VFP:用sql命令修改表结构2009-03-12 www.bianceng.cn 老马在一文中介绍过用sql语句修改表记录的值,实际vfp中也可以用sql语言中的Alter语句动态的修改表结构。虽然可以实现这样的操作,但是我觉得尽可能还是不要在程序中动态修改表结构,因为这样有可能会造成程序的不稳定以及其它的意外情况。

vfp中对表结构的操作主要是增加字段、修改字段、重命名字段和删除字段这四项,sql中修改表结构的语句是Alter语句,那么和这四项操作相对应的Alter语句格式可以总结如下:

增加字段:alter talbe 表名 add 字段名 类型(宽度[,小数位] )

修改字段:alter table 表名 alter column 字段名 类型(宽度[,小数位] )

重命名字段:alter table 表名 rename column 字段名 TO 新字段名

删除字段:alter table 表名 drop column 字段名

这个Alter语句看起来比较麻烦,因此本文设计了这样的一个例子来演示上述的这些对表结构的操作,运行时如下图:

本例在表单init时首先从“人员信息表”中查询出“编号”、“姓名”、“性别”及“基本工资”四个字段的值并将查询结果输出为“人员信息表2.dbf”,然后把它设为表格的数据源,接下来我们修改表结构的操作就在这个表上进行。表单上的四个命令按钮的click事件代码中分别对应了alter语句的四个格式的应用,其中:

1.“增加字段”按钮的click事件:在“人员信息表2”中增加一个字段名为“行号”、数据类型为数值型且小数位为0的字段,然后用循环语句把各条记录的行号添加上去;

2.“修改字段”按钮的click事件:“人员信息表2”中“基本工资”这个字段的类型原来是货币型,在此事件中将它更改为数值型且小数位为零;

3.“重命名字段”按钮的click事件:将“人员信息表2”中的“姓名”这个字段的字段名更改为“尊姓大名”;

4.“删除字段”按钮的click事件:将“编号”字段删除。

制作过程很简单:

一.新建表单,将其caption属性值设置为“编程入门网-用sql命令修改表结构”,AutoCenter属性值设置为.t.,保存为“用sql命令修改表结构.scx”。向表单上添加四个命令按钮,caption属性依次设置为“增加字段”、“修改字段”、“重命名字段”及“删除字段”;在命令按钮下方添加一个表格控件,name属性值使用默认的grid1,recordsourcetype属性值也使用默认的“1-别名”。

二.添加事件代码:

1.表单的init事件代码:

select 编号,姓名,性别,基本工资 from 人员信息表 into table 人员信息表2
go top
this.grid1.recordsource="人员信息表2"

2.“增加字段”按钮的click事件代码:

thisform.grid1.recordsource=""local s,c as integers=reccount()c=thisform.grid1.columncount+1ALTER TABLE 人员信息表2 ADD 行号 N(2,0)for i=1 to sgo ireplace 行号 with recno()endforgo topthisform.grid1.columncount=cthisform.grid1.Columns(thisform.grid1.columncount).Header1.caption="行号"thisform.grid1.recordsource="人员信息表2"thisform.grid1.refreshthis.enabled=.f.
3.“修改字段”按钮的click事件代码:

thisform.grid1.recordsource=""
alter table 人员信息表2 alter column 基本工资 N(4,0)
thisform.grid1.recordsource="人员信息表2"
thisform.grid1.refresh
this.enabled=.f.

4.“重命名字段”按钮的click事件代码:

thisform.grid1.recordsource=""
thisform.grid1.ColumnCount=-1
alter table 人员信息表2 rename column 姓名 TO 尊姓大名
thisform.grid1.recordsource="人员信息表2"
thisform.grid1.refresh
this.enabled=.f.

5.“删除字段”按钮的click事件代码:

thisform.grid1.recordsource=""
thisform.grid1.ColumnCount=-1
alter table 人员信息表2 drop column 编号
thisform.grid1.recordsource="人员信息表2"
thisform.grid1.refresh
this.enabled=.f.

6.表单的unload事件代码:

close alldelete file 人员信息表2.dbfif file("人员信息表2.BAK") delete file 人员信息表2.BAKendif
三.运行“用sql命令修改表结构.scx”。

本例代码在Win2003+VFP6.0环境下调试通过。