数据库为Oracle,采用BDE连接方式,在一个表内有字段stand---VARCHAR2型, Stand_After_Start,Stand_After_End,为Date类型,用一Query,其语句为select *  from  r1001  ,其中设置Query属性为CacheUpdate为true,requestLive为False,UpdateObject为一UpdateSql,其中已经设置了更改表名为r1001,更改字段名中包括Stand,stand_after_start,stand_after_end,
在数据库中stand_after_start,stand_after_end可以为空。
现在我用更改stand数据时想让stand_after_start,stand_after_end值不变。语句如下
with  query1  do 
begin
   edit ; 
   fieldbyname('Stand').AsString:='101'; 
   Post; 
   commitupdate(Query1); 
end;
 其中 commitupdate的内容如下
result := True;
  try
    Database1.StartTransaction;
    try
      Dataset.ApplyUpdates;
      Database1.Commit;
    except
      Database1.Rollback;
      result := false;
      raise;
    end;
    Dataset.commitupdates;
  except
  end;
然而我更改数据时stand_after_start,stand_after_end中的数据变成了'0000-0-0'类型的。原来为空.如果其中有数据时没事。

解决方案 »

  1.   

    蜗牛,哪是不行的,早试过了,再说设为true根本不对
      

  2.   

    自打认识了ado,就再也不用bde了。
    这阵维护个以前写的软件,怎么改怎么不顺,后来干脆把paradox改成access的了,感觉气才顺。。
    哈哈
      

  3.   

    BDE中设置UpdateMode=upWhereKeyOnly,同时Oracle表中要有主键,看UpdateQuery中的更新语句是否正确,如果再不行的话,在AfterPost事件中判断Post之后的值,如果为'0000-0-0'则清掉,之前最好设置字段的DataType
      

  4.   

    晕~~~csdn怎么回事啊,这个问题我已经结贴了,问题也解决了,我原来发的回复也不见了,郁闷。谢谢forgot2000,你老大n年不见了。呵呵~~~~,我在进行不同操作时动态的更改了UpdateSql中的语句。把哪个0000-0-0的哪一项如果不想更改的操作时干脆把它在updatesql中给干掉了,已经OK。我的UpdateMode也设成哪种方式都一样,谢谢大家关注我的贴子