在看實(shí)例學(xué)VFP:用sql語(yǔ)句修改數據表記錄一文中介紹過(guò)用sql語(yǔ)句修改表記錄的值,實(shí)際vfp中也可以用sql語(yǔ)言中的Alter語(yǔ)句動(dòng)態(tài)的修改表結構。雖然可以實(shí)現這樣的操作,但是我覺(jué)得盡可能還是不要在程序中動(dòng)態(tài)修改表結構,因為這樣有可能會(huì )造成程序的不穩定以及其它的意外情況。
vfp中對表結構的操作主要是增加字段、修改字段、重命名字段和刪除字段這四項,sql中修改表結構的語(yǔ)句是Alter語(yǔ)句,那么和這四項操作相對應的Alter語(yǔ)句格式可以總結如下:
增加字段:alter talbe 表名 add 字段名 類(lèi)型(寬度[,小數位] )
修改字段:alter table 表名 alter column 字段名 類(lèi)型(寬度[,小數位] )
重命名字段:alter table 表名 rename column 字段名 TO 新字段名
刪除字段:alter table 表名 drop column 字段名
這個(gè)Alter語(yǔ)句看起來(lái)比較麻煩,因此本文設計了這樣的一個(gè)例子來(lái)演示上述的這些對表結構的操作,運行時(shí)如下圖:

本例在表單init時(shí)首先從“人員信息表”中查詢(xún)出“編號”、“姓名”、“性別”及“基本工資”四個(gè)字段的值并將查詢(xún)結果輸出為“人員信息表2.dbf”,然后把它設為表格的數據源,接下來(lái)我們修改表結構的操作就在這個(gè)表上進(jìn)行。表單上的四個(gè)命令按鈕的click事件代碼中分別對應了alter語(yǔ)句的四個(gè)格式的應用,其中:
1.“增加字段”按鈕的click事件:在“人員信息表2”中增加一個(gè)字段名為“行號”、數據類(lèi)型為數值型且小數位為0的字段,然后用循環(huán)語(yǔ)句把各條記錄的行號添加上去;
2.“修改字段”按鈕的click事件:“人員信息表2”中“基本工資”這個(gè)字段的類(lèi)型原來(lái)是貨幣型,在此事件中將它更改為數值型且小數位為零;
3.“重命名字段”按鈕的click事件:將“人員信息表2”中的“姓名”這個(gè)字段的字段名更改為“尊姓大名”;
4.“刪除字段”按鈕的click事件:將“編號”字段刪除。
制作過(guò)程很簡(jiǎn)單:
一.新建表單,將其caption屬性值設置為“編程入門(mén)網(wǎng)-用sql命令修改表結構”,AutoCenter屬性值設置為.t.,保存為“用sql命令修改表結構.scx”。向表單上添加四個(gè)命令按鈕,caption屬性依次設置為“增加字段”、“修改字段”、“重命名字段”及“刪除字段”;在命令按鈕下方添加一個(gè)表格控件,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 s go i replace 行號 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環(huán)境下調試通過(guò)。
聯(lián)系客服