永发信息网

Access里使用SQL时遇到“必须使用一个可更新的查询?”

答案:3  悬赏:70  手机版
解决时间 2021-11-16 17:14
  • 提问者网友:别再叽里呱啦
  • 2021-11-16 08:47
Access里使用SQL时遇到“必须使用一个可更新的查询?”
最佳答案
  • 五星知识达人网友:行路难
  • 2021-11-16 09:22
想法很好,可惜ACCESS数据库Jet引擎比较弱,它支持用实际存在的字段来更新某个字段值,但是不支持用计算出来的字段来更新数据表。楼主的更新语句报错就是因此而产生的。


如果不做实际更新,运行选择查询将会很方便,例如下列语句
select a.* ,a.金额 + 32*a.金额/b.hj as 调整后 from 表1,
(select sum(金额) as hj from 表1)b;或者运行生成表查询,生成一个含[调整后]字段的新表也很方便
select a.* ,a.金额 + 32*a.金额/b.hj as 调整后 into 新表1 
from 表1,(select sum(金额) as hj from 表1)b;如果一定要更新表1,那就比较麻烦了,要分三步不走
1)为表1添加一个货币型字段[调整后]
alter table 表1 add column 调整后 money;2)算出总金额保存到到一个新中间过渡表[hjb] ,实在没辙啊!
select sum(金额) as hj into hjb from 表1;3)用hjb的hj字段取更新表1的[调整后]字段
update 表1 a,hjb b  set a.[调整后]=a.金额 + 32*a.金额/b.hj;

没办法,受ACCESS的局限,更新的话只能这么麻烦了


注意,因为要用总金额做除数,表一最少得有一笔金额数,否则会发生除以0的错误。
全部回答
  • 1楼网友:梦中风几里
  • 2021-11-16 10:25
把求和直接写成固定值呢?追问改成固定值是没问题的
  • 2楼网友:往事隔山水
  • 2021-11-16 09:33
你这种写法在ACCESS里面是有问题的,在SQL就不会有问题,主要是ACCESS 不支持标准SQL的这种写法,并且很多在SQL里面的复杂语句,access都不支持,包含一些函数也是,你需要把SELECt Sum(金额) AS 求和 FROM 表1这个值弄出来,然后再进行更新追问但是百度和教程里都说access里面可以嵌套的,不会有错吧追答是可以嵌套,但是你发现大多数嵌套功能是很差的,在SQL上可以执行,但是放到ACCESS则无法执行了!如果你想这样做的话,可以在ACCESS写一个存储过程,把上面的一条语句分成2个步骤来执行!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯