荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: 在Foxpro中恢复已删除数据
发信站: BBS 荔园晨风站 (Thu Jan 21 23:13:15 1999), 转信


   对Foxpro数据库中的数据进行删除大约有以下三种方法:
    ·在DOS下用Del命令或在Foxpro中用DELETE FILE命令直接删除
数据库文件。
    ·在Foxpro中打开数据库,用PACK命令清除已作删除标记的记录

    ·在Foxpro中打开数据库,用ZAP命令删除数据库中的所有记录。
    对于第一种方法,可用DOS提供的UNDELETE命令直接恢复。对于第
二种方法,由于Foxpr删除数据的过程是先将未作删除标记的记录及库
头拷贝成一个新文件,然后再删除原数据库文件,所以,对用PACK命令
误删除的数据仍然可用DOS提供的UNDELETE命令直接恢复。对于第三
种方法,有些报刊报导过用PCTools等工具软件恢复,但方法繁琐,不适
合普通读者理解和使用,而且若操作不当有可能破坏其他数据。笔者
在充分研究了Foxpro数据库结构的基础上,利用Foxpro的低级格式文
件编制了以下通用恢复程序。
    该程序的关键在于恢复数据库文件的大小和数据库中的记录数。
文件的大小可由函数C HSIZE()直接恢复;记录数可根据数据库的大小
和记录的长度求得,它存放在数据库头部的第5~8个字节,且低位字节
在前,高位字节在后,用二进制数表示(一般Foxpro数据库的书籍中均
有介绍,在此不再赘述)。程序清单如下:
    clear
    clear all
    set talk off
    name=space(12)
    size=0
    @10,20 say‘请输入预恢复数据库的全名:'get name
    @12,20 say‘请输入预恢复数据库的大小:'get sizepict‘9999
999999'
    read
    use &name
    head=header ()    &&求数据库的头部所占的字节数
    reclen=recsize()  &&求数据库中记录的长度
    jls=int((size-head1)/reclen)   &&根据数据库大小和记录长
度求得记录数
    zjs1=chr(mod(jls,256))  &&数据库头第5个字节的内容
    jls=int((jls/256)
    zjs2=chr(mod(jls,256))  &&数据库头第6个字节的内容
    jls=int(jls/256)
    zjs3=chr(mod(jls,256))  &&数据库头第7个字节的内容
    jls=int(jls/256)
    zis4=chr(mod(jls,256))  &&数据库头第8个字节的内容
    jls=int(jls/256)
    use
    handle=fopen(name,2)
    =fchsize(handle,size)   &&改变文件的大小
    =fclose(handle)
    handle=fopen(name,2)
    =fseek(handle,4,0)
    =fwrite(handle,zjs1)    &&改变文件的记录数
    =fwrite(handle,zjs2)
    =fwrite(handle,zjs3)
    =fwrite(handle,zjs4)
    =fclose(handle)
    delete file &name
    filename=‘?'+alltrim(substr(name,2,10))
    run undelete &filename/all
    run ren &filename &name
    retu
    使用该程序时,首先输入误删数据库的全名,然后输入删除以前数
据库文件的大小(若知道文件大小直接输入即可恢复全部数据;或不知
道文件大小可先输入一估计值,用该估计值恢复后,打开数据库查看数
据,若数据恢复不全,说明估计值过小,用ZAP重新删除数据,增大估计
值重新恢复直至数据全部恢复为止)。
    该程序在LX-P5/75PCI机上、DOS6.22下、Foxpro2.6 for DOS环
境下运行通过,有兴趣的读者不妨一试。

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店