本来点击提交铵钮,SQL的事务已经提交了,断电了就不会出现丢失数据的问题,但今天我们公司断电了,今天的数据全部不见了,但奇怪的是,昨天有部分数据也丢失了。我的程序如下:
begin
  adoquery1.Close ;
  adoquery1.SQL.Clear ;
  adoquery1.SQL.Add('select * from out_mas_table where out_id='''+ dbedit1.Text + '''');
  adoquery1.Open ;
  if adoquery1.RecordCount > 0  then
  begin
    application.MessageBox('数据有重复,请确认领料单号','信息',mb_ok) ;
    exit ;
  end ;
  data.M_out_dataset.Post ;
end ;其中data.M_out_dataset的CommandText的属性是:select out_id, out_date, take_id, depart, operation, re from out_mas_table where out_id='000930'
我不会用dataset控件,大家指导一下

解决方案 »

  1.   

    1.你这里好象没有用事务COMMIT
    2.SQL是可以设置当连接断开时是提交还是回滚,你可以看看你的设置
      

  2.   

    这是领料时的语句。我觉得奇怪,是把领料单号,领料日期,领料部门等信息提交到数据库,SQL语句是Insert才对啊?为什么是Select呢?我还不懂,为什么后面有 where out_id='000930'这个条件呢?这个系统是别人写的,我看不懂。如果我来做,我是按常规的,提交数据就用Insert,更改数据就用Update,删除数据就用Delete.
      

  3.   

    不用INSERT是不是因为那个领料单数据已经存在,只是把数据添加进去;
    最好不要用DELETE删除
      

  4.   

    提交数据不一定非insert,  
    用数据感知控件碍  直接select 然后append 填写数据 最后post就直接提交数据了
    如果locktype=ltBatchOptimistic 还要updatebatch一下
      

  5.   

    建议使用存储过程,并且使用事务提交。再有,如果当前纪录丢失,可能是断电造成的提交失败,
    如果很久前的数据丢失,应该是断电造成的数据损坏库。
    数据服务器应该有UPS做保护的。
      

  6.   

    如果我是用户
    肯定是你程序的问题,你为什么不在做程序的时候考虑这些呢,为什么不能在断电前将数据存储到硬盘呢,为什么你的程序不能判断什么时候断电呢,为什么你的程序断电后不能自动发电呢......成天就知道要钱,数据丢失了怎么就找不到你了呢......如果我是程序员
    肯定不是程序的问题,你们知道断电为什么不在断电前完成操作而退出程序呢,如果你不知道什么时候断电那为什么不买个UPS呢,如果你不知道停多长时间电,那为什么不自己建个发电厂呢,......断电了数据丢失了才想起找我,给钱的时候怎么想不起来我呢......