在看实例学VFP:用sql语句修改数据表记录一文中介绍过用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 integer s=reccount() c=thisform.grid1.columncount+1 ALTER TABLE 人员信息表2 ADD 行号 N(2,0) for i=1 to s go i replace 行号 with recno() endfor go top thisform.grid1.columncount=c thisform.grid1.Columns(thisform.grid1.columncount).Header1.caption="行号" thisform.grid1.recordsource="人员信息表2" thisform.grid1.refresh this.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 all delete file 人员信息表2.dbf if file("人员信息表2.BAK") delete file 人员信息表2.BAK endif
三.运行“用sql命令修改表结构.scx”。
本例代码在Win2003+VFP6.0环境下调试通过。
查看全套“菜鸟也学VFP”教程
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!