如adodataset的commandtext为select ano,adate,bname from a,b where a.ano=b.bno,adodateset的locktype=ltBatchOptimistic,需批修改数据,数据显示在GRID中,编辑(包括新增,删除,修改)数据时,通过ano=bno要调出B表bname的值,提交修改时,只想修改A原表的数据,提交(updatebatch)时总是因同时触发A。B两个表而出错。实际上,如果新增时,录入ANO,提交以前,不调出BNAME,因为B表没有栏位修改而不会报错,但那是用户不可能接受的,该怎么处理呢?
因为需要批修改数据,另外写SQL来提交数据也不好写啊。
不要告诉我用LOOKUP字栏,如果B表上数据量大,速度慢得离谱,我自己都不能接受!

解决方案 »

  1.   

    可能是因为你对数据库新增,删除,修改数据的流程没搞懂吧 
    //****************************
    //增加记录1
    ADOQuery1.Append();
    //字段赋值
    ADOQuery.UpdateBatch();
    //****************************
    //增加记录2
    ADOQuery.Insert();
    //字段赋值
    ADOQuery.Post();
    //****************************
    //删除记录
    ADOQuery.Delete();
    //****************************
    //修改记录1
    ADOQuery.Edit();
    //修改的值
    ADOQuery.Post();
    //****************************
    //修改记录2
    //如果用的是DBEdit之类的控件,那么直接修改就行 修改完毕后 加上UpdateBatch();
    ADOQuery.UpdateBatch();
    //****************************
    检查一下 你是否按照这个流程来做的呢
      

  2.   

    你可以同时对两个表进行操作啊 A.新增一条记录 B.也新增一条
    或者把你的SQL语句改一下 直接给A增加一条记录 然后在改回去 重新查一下
      

  3.   

    can you say the A B 's relation?if B reference A or A reference B may havppen error.
      

  4.   

    实际上,我就相当而需要BDE中的UPDATESQL组件的功能,即一个查询,可以控制修改其中的一个表,只引用另外一个表,而不修改另外一个表,
      

  5.   

    your main is just 主从表
    A 物料
    name     property 
    plane     size     
    plane      type
    plane     speed
    tank     weight
    tank     loadcount
    ......
    明细表
    plane table
    id   size  type speed
    tank table
    id  weitht loadcount
    your table like up?
      

  6.   

    可以在AdoQuery的BeforeUpdate(具体方法名有些记不清了,好像是)中编写自己的更改指令。