ACCESS 2010 - 基于两个组合框自动填充文本字段

时间:2014-03-10 15:45:19

标签: database vba ms-access combobox

我现在有两张桌子。一个称为工作站[ID,工作站名称,图像,操作系统],另一个称为机器[ID,资产标签,序列号,MAC,注释]。我现在有两个组合框。一个用于工作站表,其中显示所有工作站名称(cboWorkstationName)的列表,另一个用于显示所有AssetTag(cboAssetTags)列表的Machines表

制作此表单的目的是当我在cboWorkstationName中选择一个值时,我希望它根据工作站表自动填充所有文本字段,组合框cboAssetTags自动填充与Machines表相关的字段。第二个组合框。最后,我希望能够通过使用下拉列表轻松地将不同的资产标签数据保存到任何工作站。

现在,cboWorkstationName根据工作站表和cboAssetTags自动填充文本字段,但不会填充基于Machines表的文本字段。但是,当我单击资产标签(来自第二个组合框)时,它会自动填充相关字段。它只是没有填补每一个领域。

关于我如何自动填充,对于第一个组合框,我将表单绑定到第一个表,并将Inherit Value List设置为yes。对于第二个组合框,我只是将控制源设置为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

1 个答案:

答案 0 :(得分:0)

如果您使用查询填充文本框会更好。我要做的是编写一个函数,并在两个组合的OnChange事件中执行该函数。类似的东西:

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.cboWorkstationName.Column(0) & "")
set rec2 = db.OpenRecordset("SELECT * FROM Machines WHERE ID = " & Me.cboAssetTags.Column(0) & "")

Me.txtWorkstationName.Value = rec1("WorkstationName")
Me.txtSerialNumber.Value = rec2("Serial Number")
Me.txtMAC.Value = rec2("MAC")
etc...

Set rec1 = Nothing
Set rec2 = Nothing
Set db = Nothing

您可以相应地填写其余字段。只需确保您的组合具有默认值,或者您有某种类型的错误捕获/编码默认值,以便它在您第一次更改组合时正常运行。