【发布时间】:2014-04-13 19:51:24
【问题描述】:
我现在有两张桌子。一种称为 Workstations[ID, WorkstationName, Image, Operating System],另一种称为 Machines[ID,Asset Tag, Serial Number, MAC, Comments]。我现在有两个组合框。一个用于显示所有工作站名称(cboWorkstationName)列表的工作站表,另一个用于显示所有资产标签(cboAssetTags)列表的机器表
制作此表单的目的是,当我在 cboWorkstationName 中选择一个值时,我希望它根据 Workstations 表自动填充所有文本字段,组合框 cboAssetTags 自动填充与 Machines 表相关的字段第二个组合框。最后,我希望能够通过使用下拉列表轻松地将不同的资产标签数据保存到任何工作站。
现在,cboWorkstationName 会根据 Workstations 表和 cboAssetTags 自动填充文本字段,但不会填充基于 Machines 表的文本字段。但是,当我单击资产标签(从第二个组合框)时,它会自动填充相关字段。它只是没有填满每个领域。
关于我如何自动填充,对于第一个组合框,我将表单绑定到第一个表,并将继承值列表设置为是。对于第二个组合框,我只是将 Control Source 设置为 ID。对于第二个组合框下方的文本字段,我为 OnChange 事件编写了以下代码。
Me.txtSerialNumber.Value = Me.cboAssetTag.Column(2)
Me.txtMAC.Value = Me.cboAssetTag.Column(3)
Me.txtComments2.Value = Me.cboAssetTag.Column(4)
我想我必须在某处添加一行代码,以便在我更改第一个组合框时刷新/运行第二个组合框。
如果您需要任何澄清,请告诉我。
提前致谢!
编辑:
Private Sub cboWorkstationID_Change()
Dim db As Database
Dim rec1 As Recordset
Dim rec2 As Recordset
Set db = CurrentDb
Set rec1 = db.OpenRecordset("SELECT * FROM Workstations WHERE ID = " & Me.cboWorkstationID.Column(0) & "")
Set rec2 = db.OpenRecordset("SELECT * FROM Machines WHERE ID = " & Me.cboAssetTag.Column(0) & "")
Me.txtComments.Value = rec1("Comments")
Me.txtImage.Value = rec1("Image")
Me.txtOperatingSystem.Value = rec1("Operating System")
Me.txtLocation.Value = rec1("Location")
Me.txtSerialNumber.Value = rec2("Serial Number")
Me.txtMAC.Value = rec2("MAC")
Me.txtComments2.Value = rec2("Comments")
Set rec1 = Nothing
Set rec2 = Nothing
Set db = Nothing
End Sub
【问题讨论】:
-
你有 Me.cboAssetTag.Requery 吗?
-
是的,我尝试为 cboAssetTag 组合框的 OnChange 事件添加它,但它不起作用。我在想我可能需要将它添加到 cboWorkstationName 吗?编辑:刚试过,也没有用。我在想我可能必须写一些东西来更新第二个框,就好像对那个组合框做了一个实际的操作。
标签: database vba ms-access combobox