一个sql 的 update 问题

pa1es 2007-02-27 04:52:10
cn.Execute "update 结算表 set 全年支出=(select sum(支出金额) from 支出表 group by 医保卡号) where 医保卡号=支出表.医保卡号"

各位高手看看这个有不有问题.VB总是报错"至少一个参数没有被指定值"
...全文
386 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2007-02-28
  • 打赏
  • 举报
回复
Access不支持楼上的这种写法,需要用域函数:

--在Access中需要用域函数
update 结算表 as A
set 全年支出=Dsum("支出金额","支出表", "医保卡号='" & A.医保卡号 & "'")
饮水需思源 2007-02-28
  • 打赏
  • 举报
回复
update 结算表 set 结算表.全年支出=a.支出金额 from 结算表,(select sum(支出金额) as 支出金额 from 支出表) as a where a.医保卡号=结算表.医保卡号
wwwwb 2007-02-28
  • 打赏
  • 举报
回复
1、如在ACCESS中,用DSUM;
2、在ADO中,可以生成临时表,再替换。
OracleRoob 2007-02-27
  • 打赏
  • 举报
回复
Access不支持楼上的这种写法,需要用域函数:

--在Access中需要用域函数
update 结算表 as A
set 全年支出=Dsum("支出金额","支出表", "医保卡号='" & A.医保卡号 & "'")


Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=
liuyann 2007-02-27
  • 打赏
  • 举报
回复
update 结算表 set 全年支出=(select sum(支出金额) from 支出表 where 医保卡号=结算表.医保卡号)
OracleRoob 2007-02-27
  • 打赏
  • 举报
回复

DSum 函数


DSum 函数用于计算指定记录集(一个域)中的一组值的总和。可以在 Visual Basic、宏、查询表达式或计算控件中使用 DSum 函数。

例如,可以在查询的计算字段表达式中使用 DSum 函数来计算一段时期某个特定雇员的总销售量。也可以在计算控件中使用 DSum 函数来显示特定产品的动态销售总和。

语法

DSum(expr, domain[, criteria])

The 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 函数指定准则。

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

如果需要显示窗体或报表记录源以外的字段值的总和,可能需要使用 DSum 函数。例如,如果有一个窗体显示有关一种特定产品的信息。可以在计算控件中使用 DSum 函数来计算这种产品销售额的运行总和。

提示 如果要保持报表控件中的运行总和,当控件所基于的字段位于报表的记录源中时,可以使用控件的 RunningSum 属性, DSum 函数还可用来保持窗体上的运行总和。

注意 使用该函数时,对 domain 中记录未保存的更改将不包括在内。如果要让 DSum 函数基于更改后的数据,必须先保存更改。方法是单击“记录”菜单上的“保存记录”命令,或者将焦点移动到另一个控件,或使用 Update 方法。



DSum 函数示例

以下示例计算运往英国的订单的“运货费”字段的总计值。域为“订单”表。criteria 参数将记录集的结果限制为“货主国家”等于 UK 的记录。

Dim curX As Currency
curX = DSum("[Freight]", "Orders", "[ShipCountry] = 'UK'")
下一个示例通过使用两个不同的准则来计算总计。注意单引号(')和数字符号(#)需要包括在字符串表达式中,使得字符串连接时,将原义字符串包含在单引号中,将日期包含在数字符号中。

Dim curX As Currency
curX = DSum("[Freight]", "Orders", _
"[ShipCountry] = 'UK' AND [ShippedDate] > #1-1-95#")
可以在更新查询的“更新到”行中使用域函数。例如,要跟踪“产品”表中产品的当前销售情况,可以将一个名为 SalesSoFar 的新字段添加到“产品”表,并执行一个更新查询来计算正确的值并更新记录。首先基于“产品”表创建一个新查询,单击“查询”菜单上的"更新查询"命令。将 SalesSoFar 字段添加到查询网格,并将以下内容输入到“更新到”行中:

DSum("[Quantity]*[UnitPrice]", "Order Details", "[ProductID] = " _
& [ProductID])
在执行查询时,Microsoft Access 将根据“订单明细”表中的信息计算每种产品的销售总量。每种产品的销售总和添加到“产品”表中。
OracleRoob 2007-02-27
  • 打赏
  • 举报
回复
--在Access中需要用域函数
update 结算表 as A
set 全年支出=Dsum("支出金额","支出表", "医保卡号='" & A.医保卡号 & "'")


Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧