访问表基于变量字段更新另一个访问表

时间:2014-09-08 19:40:07

标签: access-vba dao

我认为我的第一次提交可能有点令人困惑所以我决定重写它以更好地解释我试图做的事情。

我有一个Access数据库。其中有两个组合框,一个包含所有可能的年金形式(我正在处理),另一个组合框是用户填充的适用于该特定客户端的组合框。该主列表由表(tblPickAnnuityForms)提供。此表有3个字段,Name,VarName(这些值与另一个表匹配)和Deleted(取决于用户是否选择它)为1或0。我还有一个名为tblPlanSpecs的第二个表。除其他字段外,此表的字段与第一个表中的VarName字段匹配。

我需要做什么,因为tblPickAnnuityForms基本上是一个临时表,当你在记录(客户端)之间移动时它会改变,当你根据tblPlanSpecs中的值转到该记录时,它会重新填充它。一旦根据此记录(客户端)的先前选举填充tblPickAnnuityForms,将重新查询两个组合框以显示正确的值(即左侧框显示剩余的未使用的年金表单,右侧框显示适用的表单对这个客户。

以下是我尝试这样做的方法。

Dim db As DAO.Database
Dim rsList As DAO.Recordset
Dim rsData As DAO.Recordset
Dim CurrForm As String
Dim FormVal As Integer
Dim Plan As String

Set db = CurrentDb
Set rsList = db.OpenRecordset("tblPickAnnuityForms", dbOpenSnapshot)    

Plan = [Forms]![FrmHome]![PlanNameCalc].Value

Set rsData = db.OpenRecordset("SELECT tblPlanSpecs.LifeAnnuity, tblPlanSpecs.FiveCC, tblPlanSpecs.TenCC, " _
    & "tblPlanSpecs.FifteenCC, tblPlanSpecs.TwentyCC, tblPlanSpecs.FiveCertain, tblPlanSpecs.TenCertain, " _
    & "tblPlanSpecs.FifteenCertain, tblPlanSpecs.TwentyCertain, tblPlanSpecs.FiftyJS, tblPlanSpecs.SixtySixJS, " _
    & "tblPlanSpecs.SeventyFiveJS, tblPlanSpecs.HundredJS, tblPlanSpecs.MCR FROM tblPlanSpecs " _
    & "WHERE tblPlanSpecs.PlanName='" & Plan & "'")

Do

    CurrForm = rsList.Fields("VarName")
    FormVal = rsData.Fields(CurrForm)

    DoCmd.RunSQL ("UPDATE tblPickAnnuityForms " _
        & "SET tblPickAnnuityForms.Deleted=" & rsData! & FormVal & " " _
        & "WHERE (((tblPickAnnuityForms.VarName)='" & CurrForm & "'))")

    MsgBox (CurrForm & "changed to " & FormVal)

    rsList.MoveNext

Loop Until rsList.EOF

If Not rsList Is Nothing Then
    rsList.CLOSE
    Set rsList = Nothing
End If

如果有更好的解决方案,也许我可以走另一个方向。目前这是在循环中轰炸,它说rsData! &安培; FormVal它不喜欢使用变量来调用字段。理想情况下,我希望在填充rsData时避免在代码中按名称专门调用每个变量。换句话说,无论我在组合框的主列表中添加了多少其他选项,我都希望它能够正常工作,而无需重新添加更多项来选择查询。

如果我不清楚我的预期方向或方法,请告诉我。我真的可以帮助找出问题所在。

1 个答案:

答案 0 :(得分:0)

好吧,我似乎解决了自己的问题。我有很多想法贯穿始终,我实施了一个并忘记了。变量FormVal已经从rsData中提取了我需要的值。然后我尝试使用FormVal作为字段变量再次拉取值。无论如何,下面是简单的解决方案,现在一切正常。

DoCmd.RunSQL ("UPDATE tblPickAnnuityForms " _
    & "SET tblPickAnnuityForms.Deleted=" & FormVal & " " _
    & "WHERE (((tblPickAnnuityForms.VarName)='" & CurrForm & "'))")

换句话说,我不需要做rsData![& FormVal& ](我肯定是不正确的语法)我只需要自己使用FormVal。