我有一张相当小的table tblFunding
有20张唱片。我想更新它的字段 Payment
使用不可更新查询的结果,即: "SELECT UserName, Sum([Payment]) As Payment FROM tblFundingMain WHERE (((DateDiff('m',[PaymentDate],DateSerial(Year(Date()),1,1))) Between -7 And 4)) GROUP BY UserName")
我知道存储这种类型的数据是不好的做法,但是用户希望不时地浏览一下数据,因为为了方便起见,表被绑定到一个窗体上。我们想出了一个方法 DAO
它可以工作,但它会为不存在的记录保留空值 UserName
更新表中的字段,即 tblFunding
. 我们希望价值 0
以防字段不匹配。代码在窗体打开之前运行,这意味着在启动窗体之前更新表。有没有办法礼貌地完成这项任务?请查看下面的代码,并尽可能提供建议。谢谢您!
Private Sub btnGlance_Click()
Dim rs1 As DAO.Recordset
Dim rs 2 As DAO.Recordset
Set rs1 = CurrentDb.OpenRecordset("SELECT UserName, Sum([Payment]) As Payment FROM tblFundingMain WHERE (((DateDiff('m',[PaymentDate],DateSerial(Year(Date()),1,1))) Between -7 And 4)) GROUP BY UserName")
Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM tblFunding")
rs1.MoveFirst
Do Until rs1.EOF
rs2.MoveFirst
Do Until rs2.EOF
If rs1.Fields("UserName") = rs2.Fields("UserName") Then
rs2.Edit
rs2.Fields("Payment").Value = rs1.Fields("Payment").Value
rs2.Update
End If
rs2.MoveNext
Loop
rs1.MoveNext
Loop
rs1.Close
rs2.Close
Set rs1 = Nothing
Set rs2 = Nothing
Docmd.OpenForm "frmUserGlance"
End Sub
1条答案
按热度按时间6uxekuva1#
无法运行更新操作将所有null更改为0。
CurrentDb.Execute "UPDATE tblFunding SET Payment = 0 WHERE Payment Is Null"
或考虑替代代码:若要在窗体上显示此摘要数据,可以使用域聚合函数。构建一个执行求和的查询对象,然后使用dlookup提取特定的值。或者直接对源表使用dsum()。
如果只是执行一个将筛选求和查询加入到所有用户名的数据集的查询,就可以避免所有这些代码。