【问题标题】:Microsoft Access combo box overwriting first recordMicrosoft Access 组合框覆盖第一条记录
【发布时间】:2014-07-16 23:26:22
【问题描述】:

我有一个包含 4 名员工的组合框

ID       EmployeeNumber        FirstName        LastName
1        010101                Joshua           Dalley
2        020202                Jessica          Daze
3        030303                Jason            Bruyere
4        040404                Jeremy           Bob

当我显示组合框时,一切似乎都很正常。我有一个更新 firstName / lastName 文本框的 onChange() 代码

Private Sub cboEmployeeNo_Change()
    Me.txtFirstName.Value = Me.cboEmployeeNo.Column(2)
    Me.txtLastName.Value = Me.cboEmployeeNo.Column(3)
End Sub

我的问题是,当我关闭表单 frm_login 时,虽然我选择了任何 ID,但它似乎总是用组合框中选择的最后一个员工覆盖第一个 ID=1。我不知道如何解决这个问题。它只更改 FirstName 和 LastName,而 EmployeeNumber 保持不变。

例子

ID       EmployeeNumber        FirstName        LastName
1        010101                Jason            Bruyeye
2        020202                Jessica          Daze
3        030303                Jason            Bruyere
4        040404                Jeremy           Bob

如果我在查看 ID=3 时关闭它,这将是我的表

Default View: Single Form
Allow Form View: Yes
Allow Datasheet View: No
Allow PivotTable View: No
Allow PivotChart View: No
Scroll Bars: Neither
Record Selectors: No
Navigation Buttons: No
Border Style: Thin

Record Source: tbl_employee

Allow Filters: No
Allow Edits: Yes
Allow Deletions: No
Allow Additions: No
Data Entry: No

【问题讨论】:

  • 当然它只改变了名字和姓氏,这就是你在代码中改变的全部。您的表单是如何设置的?
  • 你是在暗示我的 cboEmployeeNo_change() 是什么导致了我所有这些问题?
  • OnChange()方法注释掉,看看有没有出现你的问题。
  • 因此,当您的记录源是 tbl_employee 时,您通过更改 FirstNameLastName 的值来编辑记录。虽然表单可能位于第一条记录上,但您选择 Jason 将更改第一条记录的数据的值。
  • 它不再更改数据,但是从组合框中选择员工编号后,我的文本框不显示名称。我应该如何解决这个问题,因为我的代码显然破坏了它

标签: sql ms-access combobox ms-access-2010


【解决方案1】:

您的第一个困惑可能是将表单的Recordsource 设置为tbl_employee。您可以使用来自tbl_employee 的值加载组合框。我在您的问题中没有看到任何内容让我相信表单应该有一个 Recordsource

您可以将文本框的控制源设置为组合框的值。

  1. 右键单击 txtFirstName -> 属性 -> 数据 -> 控制源: cboEmployeeNo.Column(2)
  2. 右键单击 txtLastName -> 属性 -> 数据 -> 控制源: cboEmployeeNo.Column(3)

来自Microsoft Support Article

To display the *YourField* column of the current combo box selection, create a text box control. Make the text box a calculated control by defining the following expression as the ControlSource for the text box
=[cboControlName].Column(1)
where cboControlName is the name of the combo box. The Column property makes the text box (calculated control) read-only.

【讨论】:

  • 我一直认为表单应该始终基于查询。不会没有表单的控制源,使其无用?
  • @JoshuaDalley 取决于你用它来做什么,真的。
  • @JoshuaDalley 这就是为什么您要更改您不想更改的记录的原因……您的第二条评论是的。创建 2 个依赖于组合框的未绑定 txtbox。
  • @JoshuaDalley Duh,对此感到抱歉。我从你的问题中复制了你的文字。删除控制源的Me. 部分。
  • @JoshuaDalley 我不是 100% 确定。引用控件时出现某种错误。我也试过Me!,它给出了同样的错误。 Here 是关于它们的好读物。不过我还是不太确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
相关资源
最近更新 更多