想象一下表(tblEmployee)设置如下:
在表单上,我希望能够从Combobox(EmpName)中选择Employee的名称,以便其他控件更新并显示所选员工的编号和照片。
我制作了一个表单(frmEmployee)并选择了Record Source:
SELECT tblEmployee.* FROM tblEmployee;
并通过“添加现有字段”标签将所有字段添加到表单中。然后我将文本框(EmpName)更改为具有两列的组合框,其中第一列的宽度为零,并将行源更改为:
SELECT tblEmployee.ID, tblEmployee.EmpName
FROM tblEmployee;
因此,用户无需处理主键(EmpID)即可查看和选择任何员工的姓名。 此外,组合框(EmpName)的afterUpdate事件是这样的:
Private Sub EmpName_AfterUpdate()
' Find the record that matches the control.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[ID] = " & Str(Nz(Me![EmpName], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
这为我提供了我想要的功能但同时每当我从组合框中选择另一个员工姓名时,当前员工的姓名都会更新为新选择的员工的ID(EmpID)。
如何解决这个问题?还有其他更快更好的方法吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
由于您通过添加现有字段构建表单,然后将EmpName
更改为ComboBox,因此ComboBox 仍绑定到数据库中的员工姓名 !!
我的意思是,如果您显示了John Smith的记录并且在组合框中选择了“Peter Griffin”,那么您只需将John的名字改为“Peter Griffin”。您所拥有的功能已经很好地构建到 Access 中。这是“标准”的做法......
1)创建一个表单(这将是一个表单中的子表单)。称之为frmEmployeeDetail
。将Record Source
指定为tblEmployee
并将所有员工字段添加到其中,就像之前一样。
2)现在创建一个未绑定的表单(Record Source
的 nothing 的表单)。添加您的ComboBox。将Row Source
设置为像以前一样显示名称,但保留Control Source
空白!您不希望此ComboBox更改任何基础数据。你只是想让它坐在那里看起来很漂亮。确保将Bound Column
设置为1.这样,ComboBox的“值”就是您选择的任何名称的EmpID
。将ComboBox命名为cmbEmpID
。
3)在刚刚创建的未绑定表单上,添加一个子表单(这将是您在步骤1中创建的表单)。对于Source Object
put frmEmployeeDetail
。对于Link Master Fields
put cmbEmpID
。对于Link Child Fields
put EmpID
。
现在,无论何时在ComboBox上选择名称,它都会将cmbEmpID
的值设置为您刚刚选择的员工ID。由于您将其链接到子表单,子表单将显示与ComboBox匹配的任何数据(因为这是子表单所做的...)
就格式化而言,您可以从子窗体中删除边框等,并轻松地将其直接混合到“主”窗体中,以便它看起来像一个漂亮的窗体。最佳部分:全部内置。没有代码。