现有两个表:1科目表2凭证表[科目表]
----------------------------------------------
科目代码  科目名称       借方金额     贷方金额
----------------------------------------------
1001      现金 
1002      银行存款
... ...
---------------------------------------------[凭证表]
--------------------------------------------
凭证号  科目代码       借方金额     贷方金额
-------------------------------------------
001        1001         1000
002        1001         2000
003        1001                       1000
004        1001                       100
005        1002         9999
006        1002          888       
... ...
-------------------------------------------请问如何快速有效的将凭证表中的借方金额和贷方金额按照科目代码分类汇总到科目表中以下我的方法:ssql = "update 科目表 a, (select 科目代码, sum(借方金额) as 借方合计,sum(贷方金额) as 贷方合计 from 凭证条目表 group by 科目代码) b  set a.本期借方= b.借方合计 ,a.本期贷方= b.贷方合计 where a.科目代码=b.科目代码"
cn.Execute ssql'实时错误:-2147467259:操作必须使用一个可更新的查询
说明:vb6+sp6+jet4.0+access中

解决方案 »

  1.   

    操作必须使用一个可更新的查询
    这个是文件访问的权限问题,你看看有没有设置access数据库文件,要求允许完全控制。
      

  2.   

    update 科目表 a  set 
    a.本期借方= (select sum(b.借方金额) from 凭证条目表 b  where a.科目代码=b.科目代码) 
    ,a.本期贷方= (select sum(c.贷方金额) from 凭证条目表 c  where a.科目代码=c.科目代码)
      

  3.   

    ssql = "update a set a.本期借方= b.借方合计 ,a.本期贷方= b.贷方合计 from 科目表 a, (select 科目代码, sum(借方金额) as 借方合计,sum(贷方金额) as 贷方合计 from 凭证条目表 group by 科目代码) b   where a.科目代码=b.科目代码"
    cn.Execute ssql
      

  4.   

    to:  Tiger_Zhao(VB老鸟) 
    -------------------------------------------------------------------------
    update 科目表 a  set 
    a.本期借方= (select sum(b.借方金额) from 凭证条目表 b  where a.科目代码=b.科目代码) 
    ,a.本期贷方= (select sum(c.贷方金额) from 凭证条目表 c  where a.科目代码=c.科目代码)
    运行发生同样的错误
    -------------------------------------------------------------------------
    '实时错误:-2147467259:操作必须使用一个可更新的查询
    -------------------------------------------------------------------------
    to:  Leftie(左手,为人民币服务) 
    -------------------------------------------------------------------------
    ssql = "update a set a.本期借方= b.借方合计 ,a.本期贷方= b.贷方合计 from 科目表 a, (select 科目代码, sum(借方金额) as 借方合计,sum(贷方金额) as 贷方合计 from 凭证条目表 group by 科目代码) b   where a.科目代码=b.科目代码"
    cn.Execute ssql
    -------------------------------------------------------------------------
    vb6+sp6+jet4.0+access下面运行:
    '操作符丢失在“b.贷方合计 from 科目表 a”中我知道上面的SQL在SQL SERVER中可以正常运行
    求vb6+sp6+jet4.0+access环境下面的可以正常运行的SQL语句。
    -------------------------------------------------------------------------
      

  5.   

    SELECT  科目代码,借方金额 ,贷方金额 into TempTable from 
      

  6.   

    sql1="SELECT  TempTable,借方金额 ,贷方金额 into TempTable from  凭证表 group by  科目代码
    "
    sql2=" update  科目表,TempTable set 科目表.借方金额=temptable. 借方金额, 科目表.贷方金额
    =temptable.贷方金额 where 科目表.科目代码=TempTable.TempTable"
    cnn.execute sql1
    cnn.execute sql2
    cnn.execute "drop table temptable"
    ...
    .
      

  7.   

    更正:
    sql1="SELECT  科目代码,借方金额 ,贷方金额 into TempTable from  凭证表 group by  科目代码
    "
    sql2=" update  科目表,TempTable set 科目表.借方金额=temptable. 借方金额, 科目表.贷方金额
    =temptable.贷方金额 where 科目表.科目代码=TempTable.TempTable"
    cnn.execute sql1
    cnn.execute sql2
    cnn.execute "drop table temptable"
    ...
      

  8.   

    to  sirious(大器晚成) ( ) 信誉:100 为什么不把sql1直接替换到sql2中呢?
    ssql = "update 科目表 a, (select 科目代码, sum(借方金额) as 借方合计,sum(贷方金额) as 贷方合计 from 凭证条目表 group by 科目代码) b  set a.本期借方= b.借方合计 ,a.本期贷方= b.贷方合计 where a.科目代码=b.科目代码"
    cn.Execute ssql上面的应该来说和你的三句话是一样的,为什么不可以?
      

  9.   

    下面的例子也许会给搂住一些帮助。
    Access与SQLSERVER的一些兼容性问题:
    SQLSERVER中更新多表的UPDATE语句: 
    UPDATE Tab1 SET a.Name = b.Name  FROM Tab1 a,Tab2 b  WHERE a.ID = b.ID; 
    同样功能的SQL语句在ACCESS中应该是 
    UPDATE Tab1 a,Tab2 b  SET a.Name = b.Name  WHERE a.ID = b.ID; 
    即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后. 
    上例中如果Tab2可以不是一个表,而是一个查询,例: 
    UPDATE Tab1 a,(Select ID,Name From Tab2) b  SET a.Name = b.Name  WHERE a.ID = b.ID;
      

  10.   

    to: changweishao() 
    ===============================================================
    同样功能的SQL语句在ACCESS中应该是 
    UPDATE Tab1 a,Tab2 b  SET a.Name = b.Name  WHERE a.ID = b.ID; 
    即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后. 
    上例中如果Tab2可以不是一个表,而是一个查询,例: 
    UPDATE Tab1 a,(Select ID,Name From Tab2) b  SET a.Name = b.Name  WHERE a.ID = b.ID;
    =================================================================我的问题正是参考这个来的
    为什么不行啊?
    请仔细看我的问题,完全按照上面做的,为什么不行啊?