如何使用dao.recordset使用不可更新的查询更新表

xfyts7mz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(392)

我有一张相当小的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
6uxekuva

6uxekuva1#

无法运行更新操作将所有null更改为0。 CurrentDb.Execute "UPDATE tblFunding SET Payment = 0 WHERE Payment Is Null" 或考虑替代代码:

rs2.MoveFirst
Do Until rs2.EOF
  rs1.MoveFirst
  rs1.FindFirst "UserName = '" & rs2!UserName & "'"
  rs2.Edit
  If Not rs1.NoMatch Then
     rs2!Payment =  rs1!Payment
  Else
     rs2!Payment = 0
  End If
  rs2.Update
  rs2.MoveNext
Loop

若要在窗体上显示此摘要数据,可以使用域聚合函数。构建一个执行求和的查询对象,然后使用dlookup提取特定的值。或者直接对源表使用dsum()。
如果只是执行一个将筛选求和查询加入到所有用户名的数据集的查询,就可以避免所有这些代码。

相关问题