【发布时间】:2014-09-08 19:40:06
【问题描述】:
我认为我的第一次提交可能有点混乱,所以我决定重写它以更好地解释我正在尝试做的事情。
我有一个 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 时在代码中按名称专门调用每个变量。换句话说,无论我在组合框的主列表中添加了多少其他选项,我都希望它能够正常工作,而无需返回添加更多项目来选择查询。
如果我不清楚我的预期方向或方法,请告诉我。我真的可以使用帮助找出问题所在。
【问题讨论】:
-
这是一个访问数据库吗?您上面的代码使用的 VBA 比 SQL 多。您可能需要调整标签以吸引合适的专家。
-
对不起,因为我是这种东西的新手,所以我几乎没有使用任何标签的声誉。我一直在尝试相关的事情,但大多数都是不允许的。