Access update语句 提示 "操作必须使用一个可更新的查询"

转载 2007年09月24日 19:56:00
当在access中使用update语句时
如果遇到"操作必须使用一个可更新的查询"提示信息,通常时权限设置问题
但是有一种情况非常特殊,举例如下:


表A(col1, col2)
表B(col1, col2)

如何实现下述SQL的功能?
update A, (select col1, sum(col2) as sum_col2 from B group by col1) B1
set A.col2 = B1.sum_col2
where A.col1 = B1.col1;

每次执行这个SQL都报错:“Operation must use an updateable query”。
---------------------------------------------------------------

http://access911.net/index.asp?u1=a&u2=77FAB61E14DC

---------------------------------------------------------------

Access使用的Jet-SQL中,不能在Update语句中用不可更新的子查询,可以变通处理,用dsum()。

UPDATE A SET col2 = dsum("col2","B","col1=" & A.col1);

关于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 值。

说明

如果没有记录满足 criteria 参数或者域中不包含记录,那么 DSum 函数会返回 Null 值。

不论是否在宏、模块、查询表达式或计算控件中使用 DSum 函数,都必须仔细构造 criteria 参数,以确保它将被正确计算。

可以使用 DSum 函数来指定这些情况下的条件:在查询的条件行中,在查询表达式内的计算字段中,或者在更新查询的“更新到”行中。

注释  可以将 DSumSum 函数用于总计查询中的计算字段表达式。如果使用 DSum 函数,将在数据分组之前计算值。如果使用 Sum 函数,则先进行数据分组,然后再计算字段表达式中的值。

需要显示不在窗体或报表的记录源中的字段的一组值的总和时,可以使用 DSum 函数。例如,假定有一个显示特定产品信息的窗体。可以在计算控件中使用 DSum 函数来随时统计产品的流水销售总额。

Access数据库“操作必须使用一个可更新的查询”

今天又遇到这样一个错误“操作必须使用一个可更新的查询”这里我整理下原因及解决办法,大家以后再遇到相同的问题可以先试下类似的解决办法. 网上百度了很多,都没有什么作用,大多都是说权限问题,改的也都很麻...
  • catoop
  • catoop
  • 2012年09月05日 17:26
  • 6614

错误"操作必须使用一个可更新的查询"原因及解决办法

错误信息:Microsoft OLE DB Provider for ODBC Drivers error 80004005 [Microsoft][ODBC Microsoft Access 97 ...
  • memeng2003
  • memeng2003
  • 2005年08月31日 16:31
  • 589

操作必须使用一个可更新的查询

操作必须使用一个可更新的查询
  • cnso2
  • cnso2
  • 2014年09月29日 16:59
  • 1855

access 报 "操作必须使用一个可更新的查询" 错误

    最近解决一个小问题需要用到Access数据库,很简单的数据库操作,就是插入操作,表字段就两个,name和value,但是奇怪的是总是报insert 语法错误。经过一番试验,估计value是Ac...
  • jx1228
  • jx1228
  • 2007年04月12日 10:20
  • 1244

操作必须使用一个可更新的查询

操作必须使用一个可更新的查询 错误“操作必须使用一个可更新的查询”原因及解决办法 翻译得比较匆忙,呵呵。错误信息:Microsoft OLE DB Provider for ODBC Drivers ...
  • cexosoft
  • cexosoft
  • 2007年09月27日 10:04
  • 774

access "update语句的语法错误"解决

最近做了一个用C#编写的"学籍管理系统"的单机软件,主要工作就是连接数据库,数据库就很自然的选择了MS Access。    前期工作很顺利,无非就是注意一下sql server和Access的sq...
  • hutao1101175783
  • hutao1101175783
  • 2014年03月22日 19:47
  • 3526

SQL Server 与 Access Update 语句

在SQLServer 中update更新int字段不能加单引号,而Access中update可加单引号或不加。例:SQLServer :UPDATE [scan].[dbo].[cardinfo] S...
  • a19860903
  • a19860903
  • 2011年03月07日 12:03
  • 1443

sql语句操作ACCESS,添加,更新,删除

private void button2_Click(object sender, EventArgs e) //删除 { string ConStr = st...
  • wzk456
  • wzk456
  • 2015年10月08日 15:04
  • 795

C#使用oledb连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决办法

我发生错误时的环境:Windows 7,Framework 4、0,Microsoft Office 2007,VS2010,c# WinForm;部分代码: s...
  • testcs_dn
  • testcs_dn
  • 2014年05月10日 18:37
  • 14684

Microsoft JET Database Engine (0x80004005)操作必须使用一个可更新的查询

技术信息(用于支持人员)   错误类型:Microsoft JET Database Engine (0x80004005)                    操作必须使用一个可更新的查询。 ...
  • ldl22847
  • ldl22847
  • 2009年12月24日 23:40
  • 6836
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Access update语句 提示 "操作必须使用一个可更新的查询"
举报原因:
原因补充:

(最多只允许输入30个字)