访问表单 - 如何使文本字段具有SQL查询的控件源?

时间:2014-02-17 19:43:29

标签: sql sql-server vba ms-access ms-access-2010

背景

我有两张桌子:

  • 项目
    • 雇员
  • 员工
    • 雇员
    • 名称

我有一个查询我基于包含的表单,以及其他项目:

SELECT e.Name FROM Projects p JOIN Employee e ON e.EmployeeID=p.EmployeeID

当我在Access中根据此查询创建表单时,我可以非常轻松地在表单上显示e.Name,因为它是从查询中加入的。

我的真实例子当然比这个简单的例子复杂得多。以上工作适用于只读查询并且可以很好地扩展。但是,我想使用Splitform视图,即使是少量的记录集,这也会变得很慢。考虑到我的联接的很大一部分很简单,我希望能够尽可能多地删除。

在表单上,​​e.Name将是只读的,无法更新。

类似的问题

this question中,我能够成功将组合框更改为查找。接受的答案允许组合框通过在组合框中显示Projects.EmployeeID字段来控制Employee.Name

可能的解决方法

我知道我可以这样做的一种方法是使用组合框但禁用它。这看起来有点奇怪,因为它有下拉选择器但不能选择。

或者,我可以使它成为一个完全未绑定的字段,并通过运行快速查询,获取我正在搜索的文本值以及相应地更新标签来编写VBA代码以在每次记录集更改时更新表单。

然而,这些都不过于吸引人。

问题

  • 如何在Access拆分表单上显示单个文本字段,这是基于主表字段中的ID进行非常简单的查询查找的结果?

1 个答案:

答案 0 :(得分:1)

您可以使用Dlookup非常简单地返回此引用

构建一个Dlookup公式,如:

=DLookUp("Name", "Employee", "EmployeeID =" & "[EmployeeID]"

并将其用作文本框的ControlSource。

一些注意事项:

  • &很重要,因为它将公式绑定到表单上显示的单个记录
  • [EmployeeID]是指表单上显示的当前记录。这假定“EmployeeID”包含在表单的查询中,无论是绑定到Projects表还是包含在查询中