如何在MS Access连续表单中引用单个表单元素

时间:2010-10-22 20:10:44

标签: ms-access access-vba continuous-forms

MS Access场景:

我正在使用表单(我们称之为select_contract form)和子表单(我们将其称为employee_allocations_by_contract subform)。

select_contract表格:

  1. 没有约束力。
  2. 包含允许用户选择合同ID的组合框。
  3. employee_allocations_by_contract子表单:

    1. 是一种连续的形式。
    2. 绑定到一个表(我称之为hours_allocation表),其中包含每个员工分配给每个合同的小时数。
    3. 仅将employee_id字段中的一个字段绑定到hours_allocation表。此字段的行源是一个查询,该查询返回员工的ID,这些员工的小时数已分配给用户在select_contract表单中选择的合同。
    4. 包含12个其他未绑定字段,每年一个月。这些字段用于显示一年中每个月分配给employee_id字段中列出的员工的小时数。
    5. 问题:为了显示分配给employee_allocations_by_contract子表单中列出的每个员工的月份小时数,每个月的查询字段需要访问employee_id字段的employee_allocations_by_contract字段。它们出现的行。我无法弄清楚如何引用这个字段。由于employee_id子表单是连续表单,因此对{{1}}字段名称的引用似乎引用表单上的每一行。

      我搜索了几个论坛并找到了相关的连续表单问题,但没有任何明确解决此问题的内容。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

好吧,你可以为你需要的每个月的每一列构建一个子查询。

类似的东西:

Select id, employee_ID, bla, bla, bla, 
     (select sum(hours) where month = 1 and year = 2010 and 
       employee_id = ehours.Employee_id from tblProjectHours)
 as month1,
     (select sum(hours) where month = 2 and year = 2010 and 
      employee_id = ehours.Employee_id from tblProjectHours) 
 as month2,
      (select sum(hours) where month = 3 and year = 2010 and 
       employee_id = ehours.Employee_id from tblProjectHours)
  as month3 
  etc. for each column needed
来自ehours的

注意我使用月份和年份作为列,您可能必须使用月份([SomeDate])= 2和年份([SomeDate])= 2010,但您明白了。

此外,虽然您无法处理每一行并将值填充到该未绑定的文本框中,但实际上您可以将文本框绑定到返回所需值/表达式的函数。

txtBoxMonth1                               txtboxMonth2              etc.
=MyMonth(1,[employee_id])                  =MyMonth(2,[Employee_id])

然后,在表单中,您有一个名为

的公共函数
Public Function MyMonth(intMonth as interger, lngEMPID as long) as long

      ' code here to get total based on employee id and month

End Funciton

因此,您可以将函数绑定到这些文本框,因此当前行emp ID可以驱动每个文本框显示的内容。请记住,此函数应该预先处理所有数据,并且您不希望为每个函数调用重新运行和重新加载数据,因为FAR太慢。但是,我使用这种方法取得了很大的成功。因此,表单的每一行只有一个真实列(empID),其余列是从上面绑定到公共函数的文本框派生的,月份与emp id一起传递以返回该值的值列。

所以,上面是我成功使用的两种可能的方法。

答案 1 :(得分:1)

连续表单上的未绑定控件只能引用具有焦点的记录。因此,如果将数据输入到未绑定的控件中,您将看到连续表单中每条记录的相同数据。

答案 2 :(得分:0)

您无法在MS Access连续表单中“单独”引用控件(“在行级别”)。

这里唯一的解决方案是将这些控件绑定到基础记录集\ recordsource,其中相应的字段包含要显示的值。

例如,如果要将时间段显示为“date in”和“date out”之间的差异,则recordset \ recorsource可能类似于:

select id_person,dateIn,dateOut,dateDiff(xx,dateOut, dateIn) as timeIn from ...

然后你的时间计算控件必须绑定到记录集的'timeIn'字段。

(*)请检查dateDiff参数。我在这里没有任何帮助..