请教:我使用adoquery执行:select a.*, b.name from a Left outer JOIN b on a.sid = b.id使用数据库绑定控件进行数据更新,但是提交的时候出现‘缺少更新或刷新的键列信息’提示。a表有主键。我记得原来哪个地方说过,可以对多个表的查询语句中指定一个基表,就可解决这种问题。但是现在忘记怎么操作的了,请各位大侠指点一二,怎么能解决此问题呢?谢谢!

解决方案 »

  1.   

    TADOQuery 不行TBetterADO   可以
      

  2.   

    联合表更新,一般需要使用update,edit..post不行
      

  3.   


    1.  用BDE 有这个功能
    2.  做成伪三层用 ClientDataset   来实现
    3.  将sql 写在内联的SQL
    4.  TBetterADO   (不支持批理缓存)
      

  4.   

    樓主 你要更新時把 b.name 取掉試試,改為
    select a.* from a Left outer JOIN b on a.sid = b.id 
      

  5.   

    b.name 取掉是可以的,但是因为我使用绑定控件,这个地方需要进行提值显示,但是又难免会进行改变,虽然这个字段我不进行更新。
      

  6.   

    如果你不取掉b.name,系統就會認為select a.*, b.name from a Left outer JOIN b on a.sid = b.id 這樣的算一個新表,你的新表沒有主鍵,那更新時就會報 缺少更新或刷新的键列信息  的錯誤.
      

  7.   

    要不这把语句写到存储过程里,建个临时表,存储过程返回数据集吧.你的ADOQUERY就执行一个存储过程就可以了
      

  8.   

    大侠们,都不知道ado多表联合时,如何指定一个基表进行更新啊??:(不是用clientdataset方式哈
      

  9.   

    你用ADODataSet试试.还有,加上连接表的主键!
      

  10.   

    SELECT a.*,b.name
    FROM tablea a LEFT OUTER JOIN  tableb b
    ON a.id = b.id
    这样应该可以实现,前提是想关联的2个表。