问题说明:
adoquery多表查询,select a.c1, a.c2, a.c3, b.c4, b.c5 from table1 a, table2 b where a.t1=b.t2
adoquery.open;
修改了数据集中c1, c2, c3, c4, c5字段数据后保存我想只将table1表的c1, c2字段更新到数据, c3, c4, c5修改忽略。不知道如何实现,查过以前的一些帖子,设置properties['unique table'].value='table1' 也没用,只对删除操作有用。这问题困扰一个星期了,查来找去,一直没解决,希望CSDN高手们帮帮忙,非常感谢。

解决方案 »

  1.   

    用CLIENTDATASET可以。不过要操作好的话也挺繁琐的。
      

  2.   

    另不知道Lz有没用过SDAC(SQL Server Data Access Components),功能强大的控件,其中也有UPDATETABLE属性,可以完成。
      

  3.   

    clientdataset是可以,以前就是用clientdataset,因为clientdataset读取数据比adoquery还是慢很多,且我们都不需三层模式,所以改adoquery就碰到这个问题
    SDAC(SQL Server Data Access Components),没用过,它可以指定更新表与更新的字段吗?
      

  4.   

    联合查询最好只作显示用
    要操作的话可以用update语句更新
      

  5.   

    你这个可以在ADOQuery1的OnBeforePost事件进行处理.
      

  6.   

    SDAC可以指定更新的表与更新的SQL 语句,你可以装上用一下。是EXE安装包,功能绝对比ADO的强大!!!有个ODAC是专门访问ORACLE的。
      

  7.   

    SDAC可以指定更新的表与更新的SQL 语句,你可以装上用一下。是EXE安装包,功能绝对比ADO的强大!!!有个ODAC是专门访问ORACLE的。
      

  8.   

    这种更新,有些是有歧义的
    还是自己update最保险
      

  9.   

    Oraclers兄:你这个可以在ADOQuery1的OnBeforePost事件进行处理.能大概说一下怎么处理吗,谢谢。
      

  10.   

    procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
    begin
      ADOQuery2.Close;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Add('update Table1 set c1=:c1,c2=:c2 where t1=:t1'); //关键是如何确定这条记录的关键字,
      //建议在ADOQuery1中加入关键值字段
      ADOQuery2.Parameters.ParamValues['c1'] := DataSet.FieldValues['c1'];
      ADOQuery2.Parameters.ParamValues['c2'] := DataSet.FieldValues['c2'];
      //...
      ADOQuery2.ExecSQL;
      Abort;
    end;
      

  11.   


    谢谢,您这是个方法,但通用性不强,我们项目中到处都需要用到它修改删除数据这类操作,需要通用性更强一些,还是得想想别的好办法才性,谢谢Oraclers兄,有时间一起研究吧。
      

  12.   

    将 b.c4, b.c5 , 字段设为只读...用ado就可以了。
      

  13.   

    不知道你的项目处于什么阶段,SDAC是可以实现的,我以前所处的公司一个ERP系统,90%的表查询是有Join连接的。
      

  14.   


    谢谢 case5166,上午体验了SDAC一下,问题解决了,感觉很不错,读数据速度比ADOQUERY更快。还有个问题想问一下就是,SDAC只能兼容SQL SERVER数据库,有没有能兼容SQL SERVER ,ORACLE的版本?
      

  15.   

    zhibaiwei--这是我的另外一个ID,呵呵
     
      

  16.   


    我的意思是一个版本能 兼容多数据库比如SQL SERVER,ORACLE刚查到uniDAC说可以,不知道跟SDAC有什么区别,请指教,非常感谢。
      

  17.   

    http://blog.csdn.net/rznice/article/details/6556115
    没用过uniDAC。
    帮你搜了下,你可以看看下面的链接:
    其实delphi优秀的数据集组件真不少,除了上诉的数据集组件,还有ZEOSDB、SQL Direct、UniDAC等,要是专业的数据集组件,更是百花盛开,如FIBPLUS、SDAC、ODAC、DOA等等。从那文章来看要通用的话就用uniDAC吧,不知道像uniDAC的FILTER是否支持To_Char,To_Date,及SQL SERVER的CAST等函数。
    而如果分开使用的话FILTER是支持相对应的数据库函数的。你可以试试