有三张表,A、B、C,查询是使用SELECT A.A1,A.A2,A.A3,B.B1,B.B2,B.B3,C.C2 FROM A INNER JOIN B ON A.A1=B.B1 
INNER JOIN B.B2=C.C1 WHERE A.A1='条件',但我更新时只要更新A表,并不要更新,B表,C表。请教大家使用ADOQUERY,如何解决。万分感谢。

解决方案 »

  1.   

    在一个Query控件中,联合查询的结果数据集是只读的,你不能使用Query.Edit进行更新。
    想要更新,只能再写一个SQL语句。
      

  2.   

    更新只能担保更新,自己执行update语句
      

  3.   

    SELECT A.A1,A.A2,A.A3,(select B.B1 from B where B.B1=A.A1) as B1,(select B.B2 from B where B.B1=A.A1) as B2 FROM A 
    这样就可以使用Query更新A的字段了
    如果觉得这样写不简洁 可以考虑用函数实现 具体写法根据数据库不一样略有不同
    形式如下
    SELECT A.A1,A.A2,A.A3,getB1(A1) as B1,getB2(A1) as B2 FROM A 
      

  4.   

    如果是BDE,用UpdateSQL轻松搞定。
    但是ADO就没有这么简单。
    ADO的联合查询的(指定表)更新方法:
    1:用独立的SQL语句更新(其他方法归根结底还是使用的这个方法)。
    2:在ADO组件和DataSource组件之间扩展。
       方法1(用自带组件,发布时要加入Midaslib单元):TADOQuery+ TDataSetProvider+ TClientDataSet+ TDataSource  ;
       关键: 1 TDataSetProvider的onGetTableName事件设置要更新的表名称,TableName='xxx';
              2 双击TADOQuery设置每个字段的ProviderFlags属性。   方法2(用EHlib组件,功能强大,但是速度慢):TADOQuery+ TADODataDriverEh+ TMemTableEh+ TDataSource  ;
       这个更类似BDE的UpdateSql功能,双击TADODataDriverEh进行设置就可以了。
      

  5.   

    可以通过clientdataset和datasetprovider配置更新方式和查询下来的字段类型是否关键字段,是否是要更新表的字段
      

  6.   

    系统会自动更新,不需要写sql代码。
      

  7.   

    一个表一个query就可以了吧,当然之后的datasource也得跟不同的query配套使用
      

  8.   

    在需要更新时加这个就可以了,
    adoquery1.Requery()
      

  9.   


    再使用一个ADOQuery对指定数据进行更新
      

  10.   

    这个问题我之前也问过了,还是写SQL语句更新吧