Database 版 (精华区)

发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: Database
标  题: 千年虫问题解决一例
发信站: 哈工大紫丁香 (2000年12月30日19:35:54 星期六), 转信

千年虫问题解决一例

    在我单位里用FoxPro2.5开发的管理系统中,其日期字段大多是以宽度为8位,
类型为Character(字符型)、格式为“月/日/年”的方式来表示的,其中年份的
长度为2位,如1997年8月20日的格式为“08/20/97”,由于字段是字符型,且年份
只有2位数,所以在作跨世纪的日期运算时会因软件不能区分“00”究竟是代表
1900年还是2000年而产生混乱(这一点已经在模拟实验中得到证实)。解决办法便
是必须找出这些字段将其宽度修改为10位并将年份的前二位数字加上才行。我所编
译的程序的工作原理是首先查找类型为Character型,长度为8位的字段,再测试记
录内容中是否含有2个或2个以上的“/”号。如果条件全满足,则可肯定这是个有
“2000问题”的日期字段。以下是2000.PRG程序源代码。
    SET TALK OFF
    CLOSE ALL
    SET COLO TO W+/B
    CLEA
    SELE 2
    USE 2000 &&打开存放有2000问题数据库资料的库
    DELE ALL
    PACK &&删除其中的内容
    SELE 1
    ML=SPACE(50)
    @ 6, 8 SAY '请输入目录(全名): ' GET ML;
    MESSAGE “如A:\DBF,直接回车退出”
    READ
    IF ML=“” &&目录路径为空则退出
    CLEA
    RETU
    ENDI
    ML=ALLTRIM(ML) &&删除路径的左右空格
    KZM=“DBF” &&默认数据库的扩展名为DBF
    @ 8,4 SAY “请输入数据库的扩展名: ”GET KZM;
    MESSAGE “默认值为DBF”
    READ
    @ 24,0
    KZM=ALLTRIM(KZM) &&删除扩展名的左右空格
    @ 12,24 SAY“正在查找,请稍候……”= ADIR(MYARRAY, ALLTRIM(ML)+'\*
.'+KZM) &&将该目录下的DBF文件组成数组
    FOR I = 1 to ALEN(MYARRAY)/5
    FILENAME = ALLTRIM(ML)+'\'+MYARRAY(I, 1) &&读取第一列的数据库名

    USE &FILENAME &&打开第一列的数据库
    =AFIELDS(ABC) &&将数据库的字段放入数组ABC中
    A=ALEN(ABC,1) &&求数组ABC中字段的列数
    FOR II=1 to A
    IF ABC(II,3)=8.and.ABC(II,2)='C' &&如果字段长度为8且类型为字符型
C
    ZD=ABC(II,1) &&读取字段名称内容
    SELE 1
    GO TOP
    NR=&ZD
    IF OCCURS('/',NR)>=2 &&如果记录内容中有2个以上的/号
    SELE 2 &&进入资料库
    APPEND BLANK
    REPL FILE WITH FILENAME &&替代DBF文件名称
    REPL FIELD WITH ABC(II,1) &&替代字段名称
    REPL TYPE WITH ABC(II,2) &&替代字段类型
    REPL LEN WITH ABC(II,3) &&替代字段长度
    ENDI
    ENDI
    ENDF 
    SELE 1
    ENDF
    CLOSE ALL
    @ 2,70
    WAIT WINDOWS “查找完成,请打开2000.DBF数据库查看结果,按任意键退出”

    CLEA
    RETU
    TEXT
   
    2000.DBF是存放有2000年问题数据库,结构如下:
    Structure for database: C:\2000\2000.DBF
    Number of data records: 4
    Date of last update : 02/09/99
    Code Page : 0
    Field Field Name Type Width Dec Index Collate
    1 FILE Character 50 &&有2000年问题的数据库名称(含路径)
    2 FIELD Character 10 &&有2000年问题的数据库字段
    3 TYPE Character 1 &&该字段的类型
    4 LEN Numeric 3 &&该字段的长度** Total ** 65
    (上海市松江区人乐二村22号401室 沈军 201600)
 
返回首页
 

 

--

       大海无边天做岸
               山登绝顶我为风

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.938毫秒