先代码:
  with AdoQuery do
  try
   connection := xxx;
   sql.text := 'select * from a where 1=2';
   preperd;
   open;
   
  append;
   fieldbyname('sd').asstring := 'qeqe';
   ...
   ...
   post;
  except
    保存错误消息
  end;
  
 表a中的记录可能有几万条,并在不断增加。
 执行频率每秒可能有5条记录或者一条都没。
 现在的问题是,有时候数据会保存不成功。我采用的是MSDE2000 sp3版本。
 关键是exept中没捕获到任何异常消息。程序会一直执行,到最后才发现MSDE中会时不时少几条记录,并且是无规律的。 有没有那位遇到过此类问题,MSDE有问题,还是Ado出现了问题。
  我用的是delphi6 sp2.欢迎大家发表下意见。谢谢 

解决方案 »

  1.   

    一般涉及的Append时,都用ADOTable的
    为什么要用ADOQuery来进行Append呢?
    用ADOQuery是试试直接在SQL语句里写插入数据代码,大不了多用几个变量,一般插入数据还是很可靠的,没有出现楼主说的情况
      

  2.   

    谁告诉你"一般涉及的Append时,都用ADOTable的 "
      

  3.   

    改用insert的SQL语句看看
    外加事务
      

  4.   


    为了防止出现数据重复而没有保存,表中没设置主键等任何东西。关键是在执行这个保存操作的前后我还有其它操作都是成功了的。在同一function中.
      

  5.   

    使用adocommand执行insert语句看看,应该没有什么问题吧,也可以考虑编写一个数据插入线程池
      

  6.   

    "为了防止出现数据重复而没有保存",这个很可能就是数据丢失的原因呀,猜测的,看看是不是有判断ID或编码重复的代码,导致多条数据中,某些数据被过滤掉了,按说单用户操作,也没有线程操作,知识append...post是不该丢失数据的
      

  7.   

    "为了防止出现数据重复而没有保存",这个很可能就是数据丢失的原因呀,猜测的,看看是不是有判断ID或编码重复的代码,导致多条数据中,某些数据被过滤掉了,按说单用户操作,也没有线程操作,知识append...post是不该丢失数据的
    [/Quote]我就是怕出现ID重复而丢失数据。所以没设置任何主键之类的,纯字段累积的一经表而已。无任何约束。
      

  8.   

    我之前也准备换insert 试试。
    但我看了TDataSet的Insert和Append,基本都是一样的,仅仅是保存位置上不同。
      

  9.   

    以前用sql server2000 做三层的时候,也遇见过这样的问题,客户总是反映数据丢失。
    怎么做都没解决掉,有时候更怪,同时更新两个字段,但却只有一个字段被更新了,而用来标示的字段却未更新。
    改在服务端用存储过程且加上事务控制也发生同样的事情,反正这个问题成了顽疾了,怎么都搞不定。前后有公司几代程序员研究过这个问题,但都没搞定。最早是用两层写的也没发生过数据丢失的现象。
    现在用oracle做的,也没再发生过这样的事情,到现在也没弄懂是哪里出的问题……
      

  10.   


    你那个问题更严重哈,连更新都不正确。但是你用两层没出现该类问题,说明不是sql问题了
      

  11.   

    基本不用append/post
    每次生成insert sql语句提交
    或每n次生成n行的insert sql语句提交
    会不会好了呢?
      

  12.   

    纯数据插入操作还是用insert比较好吧
      

  13.   

    在insert之前先把表锁上,然后insert成功后再解锁试试
      

  14.   

    将msde换成sql server,再测试 
    再不行,不用数据集的post,改用insert语句.