千年虫问题解决一例
来源:稻田电脑编程书库 作者:沈军 出处:综艺读书 2005-11-30 谖业ノ焕镉肍oxPro2.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)$#@62;=2 &&如果记录内容中有2个以上的/号
SELE 2 &&进入资料库
APPEND BL
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进入讨论组讨论。
|
|
|||
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)$#@62;=2 &&如果记录内容中有2个以上的/号
SELE 2 &&进入资料库
APPEND BL
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进入讨论组讨论。
相关图文阅读
频道图文推荐
相关专题
最新技术文档
·用FoxWeb在网上快速发布你的FOXPRO数据库 11-03
·用Foxpro制作Windows输入法码表 11-03
·用FoxPro生成HTML文件 11-03
·下载和上载远程视图数据 10-30
·为Visual FoxPro应用程序增加文件压缩功能 10-30
·为VFP添加循环微调控件类 10-30
·为FoxPro中的弹出式菜单增加自学习功能 10-30
·通过编程运行拨号网络连接 10-29
·谈谈在基于Foxpro的MIS中实现提示、帮助与询问 10-29
·谈谈VFP和SQL SERVER搭配做C/S系统 10-29
·用Foxpro制作Windows输入法码表 11-03
·用FoxPro生成HTML文件 11-03
·下载和上载远程视图数据 10-30
·为Visual FoxPro应用程序增加文件压缩功能 10-30
·为VFP添加循环微调控件类 10-30
·为FoxPro中的弹出式菜单增加自学习功能 10-30
·通过编程运行拨号网络连接 10-29
·谈谈在基于Foxpro的MIS中实现提示、帮助与询问 10-29
·谈谈VFP和SQL SERVER搭配做C/S系统 10-29
站内各频道最新更新文档
站内最新制作专题
|
|||||
| ·Windows Vista ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·服务器存储专栏 ·Wlan组网----家庭专题 |
·综合布线工程案例 ·Linux服务器的安全性能 ·iSCSI应用与发展 ·电脑死机原因及解决办法 ·SOA 面向服务架构 ·Zope应用开发指南 ·XML详解 ·J2SE开发应用 |
||||
热门关键字导读
站内频道文章精选
| · AMD董事长年薪1610万美元 · 胡润富豪榜4位女老总遭勒索 · 爱立信中国区副总屠敏离职 |
· 绝对好使的电脑超级技巧 · 想不到浏览器还有这个功能 · 小技巧:宿舍里自娱自乐 |
| · DIY系统:打造移动Win XP · 杂牌摄像头也玩Vista · 在WinXP上运行Vista边栏 |
· 克隆软件Ghost初级使用教程 · [图解]Norton Partition · PowerPoint技巧大集合 |
| · 在VC++应用程序中读取文本 · 使用JBuilder2007开发Web.. · 熊猫烧香核心源码(Delphi) |
· 经验:ASP与存储过程解析 · 节选:快速进入AJAX开发 · Javascript+ASP作无刷新.. |
| · 在Linux 环境下安装 Mysql · Oracle在基于Window操作.. · 每天备份mysql数据的脚本 |
· Photoshop抠图:飘逸秀发.. · 告别雀斑!一个接近自然的 · 用Photoshop美化美女摄像头 |
搜索您感兴趣的内容




