MS Access场景:
我正在使用表单(我们称之为select_contract form
)和子表单(我们将其称为employee_allocations_by_contract subform
)。
select_contract
表格:
employee_allocations_by_contract
子表单:
hours_allocation
表),其中包含每个员工分配给每个合同的小时数。 employee_id
字段中的一个字段绑定到hours_allocation
表。此字段的行源是一个查询,该查询返回员工的ID,这些员工的小时数已分配给用户在select_contract
表单中选择的合同。 employee_id
字段中列出的员工的小时数。 问题:为了显示分配给employee_allocations_by_contract
子表单中列出的每个员工的月份小时数,每个月的查询字段需要访问employee_id
字段的employee_allocations_by_contract
字段。它们出现的行。我无法弄清楚如何引用这个字段。由于employee_id
子表单是连续表单,因此对{{1}}字段名称的引用似乎引用表单上的每一行。
我搜索了几个论坛并找到了相关的连续表单问题,但没有任何明确解决此问题的内容。有什么想法吗?
答案 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参数。我在这里没有任何帮助..