|
6#
楼主 |
发表于 2011-8-31 11:52:56
|
只看该作者
从其它地方摘抄的原因说明,希望对别人会有帮助,也请roych老师指正:
=====================================
Access SQL update提示:操作必须使用一个可更新的查询
例如修改语句:
update 表A set 表A的字段 = (select sum(表B的某字段) from 表B where 表B某字段 = '表B某字段值') where 表A的字段 = '表A的字段值'
当执行这条语句时Microsoft Office Access 操作必须使用一个可更新的查询。原因是Access不支持这种修改的语法,所以微软就提供一个这么一个函数来实现这个功能,那就是Dsum函数,在帮助里面可以查看具体的使用方法。
DSum 函数
DSum 函数可用于计算一组指定记录(域)中的一组值的总和。可以在 Visual Basic、宏、查询表达式或计算控件 中使用 DSum 函数。
例如,可以在查询的计算字段表达式中通过 DSum 函数来计算某一段时间内特定雇员的总销售量。或者在计算控件中使用 DSum 函数来显示特定产品的流水销售总额。
DSum(expr, domain, [criteria])
DSum 函数包含以下参数:
参数 说明
expr 表达式,用于标识被计算值的总和的数字字段。它可以是标识表或查询中的字段的字符串表达式,或者是对该字段中的数据进行计算的 表达式。在 expr 中,可以包含表中的字段、窗体上的控件、常量或者函数的名称。如果 expr 包含函数,那么该函数可以是内置的或用户定义的,但不能是其他域聚合函数或 SQL 聚合函数。
domain 字符串表达式,用于标识组成域的一组记录。它可以是不需要参数的查询的表名或查询名。
criteria 可选的字符串表达式,用于约束对其执行 DSum 函数的数据的范围。例如,criteria 常常等价于 SQL 表达式中除去 WHERE 关键字的 WHERE 子句。如果 criteria 被忽略,DSum 函数将对整个域计算 expr。任何包含在 criteria 中的字段必须也是 domain 中的字段;否则 DSum 函数将返回 Null 值。
从中可以看出Access中根本不支持这种 set (a,b) = (x,y) 方式, 另外ACCESS中也不支持直接从本表进行 set x = (select SUM(x) from 同一个表)。 因此必须使用Dsum函数
语法为:
update 表A set 表A的字段 = Dsum ("表B的某字段", "表B" ," 表B某字段 = '表B某字段值'") where 表A的字段 = '表A的字段值'
或
update 表A set 表A的字段 = Dsum (‘表B的某字段', '表B' ,' 表B某字段 = "表B某字段值"') where 表A的字段 = '表A的字段值'
这两条语法都能达到修改的效果,只是在符号上面有所修改而已。 |
|