回 帖 发 新 帖 刷新版面

主题:VFP数据丢失问题

前几天我写了个程序,运行都好,就是程序运行过程中如果突然断电,数据表中的数据会丢失,即使程序停留在主界面也是这样,后来我把程序修改了一下,程序返回主界面时我把所有表都关闭了,结果人为断电时数据还是照样丢失,各位师傅,有没有办法可以避免这一问题发生呢。

回复列表 (共28个回复)

11 楼

c:完整性数据较验

  6 DO WHILE .t.
    7    DO 检测 abc 
    8    IF abc文件损坏
  9     DO 修复文件头
          1如尾部有无效记录(乱码)就调整文件长度和库记录参数
          2如文件头损坏就重构文件头
 10   ELSE
  11          DO 根据参数库或变量文件补齐记录
 12    ENDIF
 13     DO 根据参数库或变量文件做完整性数据较验
  14      IF 数据较验完整
  15          EXIT
  16      ENDIF  
  17  ENDDO  

抱歉!因时间关系没能给楼主详细代码,但你可根据我的思路和“我过去的相关回帖”去完善。

12 楼

7楼 8楼 太天真了,知道电脑是死的人是活的吗?你以为楼主只是解决简单的“断电”问题吗?

可笑,我想是7楼 8楼 太善良了吧,也许是没有见过“黑心天使”吧!知道“黑心天使”怎样偷钱吗?告诉你们吧,利用电脑“故障”盗取“营业款”其手段就很简单:就是在操作“业务模块”时用脚踩电源线和网线。。。。一个月就两三万收入,她是90后人MM长得眉清目秀,我怎样也不相信。我的感觉是“程序员的程序漏洞”就是引导和促使犯罪,因为你们为她们提供了机会和环境以及滋生的土壤。罪人啊。。。。。。。。。

13 楼

[quote]7楼 8楼 太天真了,知道电脑是死的人是活的吗?你以为楼主只是解决简单的“断电”问题吗?

可笑,我想是7楼 8楼 太善良了吧,也许是没有见过“黑心天使”吧!知道“黑心天使”怎样偷钱吗?告诉你们吧,利用电脑“故障”盗取“营业款”其手段就很简单:就是在操作“业务模块”时用脚踩电源线和网线。。。。一个月就两三万收入,她是90后人MM长得眉清目秀,我怎样也不相信。我的感觉是“程序员的程序漏洞”就是引导和促使犯罪,因为你们为她们提供了机会和环境以及滋生的土壤。罪人啊。。。。。。。。。[/quote]
你难道不知道数据库中有事务这个概念吗?这种漏洞完全是系统设计中的缺陷,是数据库选择错误造成的!VFP很强大,但是很多场合确实不适合使用它,外面很多应用不使用它,连MS也放弃它,难道是偶然的吗?

另外,就算是SQL SERVER、ORACLE这样的大型数据库照样要断电损坏,你以为那些UPS、双机热备份、硬盘双工、完事备份、增量备份、备份异地存放这些东西都是摆设吗?单靠你的几行代码就能解决问题吗?

14 楼

很简单,电脑是死的,人是活的。
只要是因为断电引起的损失,让引起断电的人负责赔偿。不要说取证难,我相信监控总会抓住的。
为什么总要让电源线被踩到呢?

15 楼

我搞企管,有考勤机,有监控,不过我基本上不看记录,甚至都不打开。为什么?没必要!
但是:我要说你有违规时,肯定你是违规的。
只要发现一次,那就可以办你的事。
只要发现你有一次故意断电导致损失,那就直接追究刑事责任,没商量的。

16 楼

断电损坏库实际上没有完美解决方案,断电可能使文件本身损坏,也可能使整个磁盘分区丢失,所以纯软件方法都不是绝对可靠的!
一般方法:
1、使用UPS、RAID陈列、硬盘双工、双机热备份等,这些可以对付一般的断电或磁盘损坏;
2、数据备份,特别是异地备份,这样数据完全损失后可以使用备份数据及备份后录入的那部分数据的原始依据重新录入,可以保证恢复原状;
3、使用支持事务的数据库,在多用户环境下是必须的,只要想一下银行为什么从未出现转帐时转入和扣除的不平衡就明白了,事务就是保证一组操作必须要么全部完成,要么退回(就象全部没有发生一样)
   象10楼说的远程操作尤其是网络不好的情况下,除了事务以外,还应该注意减少不必要的网络传输数据量,或者说不能使用FS(文件服务器)方式来操作数据,而应该使用CS方式,网络主要跑的是SQL等少量的命令及必要的数据,不能象传统VFP一样远程使用USE命令来打开一个表,获取数据时也只能取必要的记录及字段,千万不能使用select * from 表名 这样的命令。

17 楼

最后谈点感想
    很多搞VFP的人喜欢证明或谈论VFP如何好,不比某某差之类的。实际上呢,虽然VFP很不错,我也基本上天天用,可是一个应用应该使用什么样的解决方案,使用何种软硬件,还是应该客观一点,VFP无疑更适合单机应用,可就算是单机应用,断电等原因易损坏表文件是客观事实。那么:
1、首先就应该使用UPS等让断电很少发生,同时通过安装杀毒软件、杜绝安装使用无关及未经验证的其他程序来减少死机等故障;
2、楼上几位的代码也许可以让系统恢复工作,但是却解决不了丢失数据的问题,实际上不可取,更加可怕的是谁也不清楚是否丢失了数据,也不知道丢失了多少数据、丢失了哪些数据,这有时比系统不能运行更加坏;
3、备份和事务这两个利器是非常重要的,也许初学者不知道,但是实际应用中是必须的;
4、14、15楼的朋友说得好,程序不是万能的,管理制度等也是很重要的,再严密的软件系统如果系统管理员和程序员要在其中做点手脚,别人是很难发现的,不能单靠程序来解决问题!思想教育和管理制度要跟上,还有待遇也要跟上,工资太低很可能会产生心怀不满的员工,如果有人成心使坏总是有很多机会的!

18 楼

我也最后说两句!
14、15楼的回帖确实中肯(也是老板或老总想要的方法),也明白了我的意思。不过防范于未然,好过亡羊补牢。
17楼的想法本人不感苟同。想当年ATM机刚进中国,改几行代码也得几万块也不出奇。说到VFP一般人都认为是小企业才用,所编的软件也就几千块一套。但也有用VFP编的软件能卖到几万、十几万的也不是没有,也许17楼没见过(那毕竟是少数)。我也不想多说。。。如有兴趣就看看如下资料,也许会增加一点你的“感想”。。。。
[url=http://www.ce.cn/xwzx/shgj/gdxw/200803/14/t20080314_14838977.shtml]ATM机 你知罪吗?[/url]
[url=http://bbs.xinmin.cn/frame.php?frameon=yes&referer=http%3A//bbs.xinmin.cn/viewthread.php%3Ftid%3D79528]中国银行ATM机出错[/url]
[url=http://www.ce.cn/xwzx/shgj/gdxw/200803/14/t20080314_14839080.shtml]浙江一银行ATM机出错[/url]
[url=http://i.cn.yahoo.com/andyshine2004/blog/p_21/]因银行ATM出错提款被判无期徒刑 [/url]
[url=http://business.sohu.com/20080117/n254715552.shtml]ATM出错银行可获赔 技术人员职业责任险起步[/url]

19 楼

主程序的前部加一条命令试试:
SET AUTOSAVE ON

20 楼

回18楼:
1、我从来没说过VFP不好,实际上它是相当优秀的,只是它适合干什么的问题;
2、用VFP编的软件能卖到几万、十几万,这也不奇怪,可是这和VFP是否适合某些应用是两回事;
3、ATM确实不可靠,但是这与数据库无关。

foxdb老兄:
         我真诚地给你说几句,看得出来:1、你是真的不知道数据库中的事务等东东,完全不明白我在说什么;2、你也不太清楚备份应该如何进行;3、好象不是科班出身,没有系统学习过数据库等东东,多半只接触过VFP。
       所以,你会得出上面这样的结论那是一点也不奇怪的,闭门造车就是这样的。还是好好学习点基础的东东吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册