如何在應用程序中修改FOXPRO數(shù)據(jù)表

字號:

修改FOXPRO數(shù)據(jù)表結(jié)構(gòu),常用MODIFY STRUCTURE命令。這種方法雖然方便,但必須在人機對話中實現(xiàn)。若您的程序已交付許多用戶使用,要求用戶采用MODIFY STRUCTURE命令修改數(shù)據(jù)表結(jié)構(gòu)勢必會帶來許多麻煩。是否可通過執(zhí)行預先編制好的程序來完成擴大字段寬度工作?筆者最近做了一個嘗試,其程序思路是:
     1、利用AFIELDS()函數(shù)獲取要修改的數(shù)據(jù)表結(jié)構(gòu)信息,并將信息存放在STR_FIL數(shù)組內(nèi)。AFIELDS()函數(shù)的語法:AFIELDS(ArrayName),ArrayName是放置表結(jié)構(gòu)信息的數(shù)組名(可由自己命名,本例中命名為STR_FIL),數(shù)組為每一個字段創(chuàng)建一行數(shù)據(jù),其每一列里存儲的信息如下:
    列號 字段信息 數(shù)據(jù)類型
    1 字段名 字符型
    2 字段類型 字符型
    3 字段寬度 數(shù)值型
    4 小數(shù)點位置 數(shù)值型
    5 容許的空值 邏輯型
    6 字段有效準則 字符型
    7 字段有效文本 字符型
    8 字段缺省值 字符型
    9 表有效準則 字符型
    10 表有效文本 字符型
     2、根據(jù)要求修改STR_FIL數(shù)組內(nèi)容(本例,修改字段寬度)。
     3、利用CREATE CURSOR 命令,按STR_FIL數(shù)組內(nèi)容創(chuàng)建一臨時表結(jié)構(gòu)。
     4、將原表數(shù)據(jù)添加到臨時表中。
     5、利用COPY TO 命令,將臨時表覆蓋原表。
     下面是修改字段寬度的原代碼:
    *參數(shù):SOU_FILE(修改的數(shù)據(jù)表文件名),字符型
    *參數(shù):FIE_NAME(要修改的字段名),字符型
    *參數(shù):FIE_ (修改后的字段寬度),數(shù)字型
    PARA SOU_FILE,FIE_NAME,FIE_WID
    PRIV STR_FIL,FIEL_SUM,N, STR_TMP
    IF USED(“&SOU_FILE”)
    &&打開要修改的數(shù)據(jù)表
     SELE &SOU_FILE
    ELSE
     SELE 0
     USE &SOU_FILE
    ENDIF
    =AFIELDS(STR_FIL)
     &&獲取表結(jié)構(gòu),并存儲在STR_FIL數(shù)組內(nèi)
    FIEL_SUM=FCOUNT() &&計算表字段數(shù)
    N=1
    DO WHILE N$#@60;=FIEL_SUM
     &&查找要修改的字段名
     IF ALLT(STR_FIL(N,1))=FIE_NAME
    &&如果是要修改的字段名
     IF STR_FIL(N,3)=FIE_WID
    &&判別字段寬度是否相同
     RETURN
     &&相同返回
     ELSE
     &&否則修改表結(jié)構(gòu)
     wait "正在修改數(shù)據(jù)結(jié)構(gòu),
    請稍侯..." WIND NOWAIT
     STR_FIL(N,3)=FIE_WID
     &&確定字段長度
     EXIT &&退出循環(huán)
     IF N= FIEL_SUM &&如果循環(huán)結(jié)束
     wait "無修改的字段,按任意鍵返回….
    " WIND &&提示用戶
     RETURN
     ENDIF
     ENDIF
     ENDIF
     N=N+1
    ENDDO
    *按STR_FIL數(shù)組內(nèi)容,創(chuàng)建臨時表結(jié)構(gòu)
    SELE 0
    *根據(jù)STR_FIL數(shù)組規(guī)定的字段名字、
    類型、寬度創(chuàng)建臨時表STR_TMP
    CREATE CURSOR STR_TMP
    FROM ARRAY STR_FIL
    SELE &SOU_FILE
    USE &&關(guān)閉原數(shù)據(jù)表
    *將原數(shù)據(jù)表數(shù)據(jù)添加到臨時表STR_TMP中
    SELE 0
    APPE FROM &SOU_FILE
    COPY TO &SOU_FILE &&復制新的數(shù)據(jù)原表
    RETURN