0

MS访问场景:

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

select_contract表格:

  1. 是未绑定的。
  2. 包含一个允许用户选择合同 ID 的组合框。

employee_allocations_by_contract子窗体:

  1. 是连续形式。
  2. 绑定到一个表(我称之为hours_allocation表),其中包含每个员工分配给每个合同的小时数。
  3. 仅将一个字段(字段)绑定employee_idhours_allocation表。此字段的行源是一个查询,该查询返回已将工时分配给用户在select_contract表单中选择的合同的员工 ID。
  4. 包含其他十二个未绑定的字段,一年中的每个月一个。这些字段旨在显示employee_id一年中每个月分配给字段中列出的员工的小时数。

问题:为了按月显示分配给employee_allocations_by_contract子表单上列出的每个员工的小时数,每个月字段的查询需要访问employee_id它们所在行的字段。我一直无法弄清楚如何引用这个字段。因为employee_allocations_by_contract子表单是一个连续的表单,所以对employee_id字段名称的引用似乎会引用表单上的每一行。

我搜索了几个论坛并发现了相关的连续表单问题,但没有一个明确解决这个问题的。有什么想法吗?

4

3 回答 3

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 可以驱动每个文本框显示的内容。请记住,此函数应该对所有数据进行预处理,并且您不希望为每个函数调用重新运行和重新加载数据,因为这太慢了。但是,我已经使用这种方法取得了很大的成功。因此,表单的每一行只有一个真实列 (empID),其余列源自绑定到上述公共函数的文本框,月份与 emp id 一起传递以返回该值柱子。

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

于 2010-10-22T21:18:20.990 回答
1

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

于 2010-10-22T21:15:52.447 回答
0

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

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

例如,如果您想将时间段显示为“日期输入”和“日期输出”之间的差异,您的记录集\recorsource 可能类似于:

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

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

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

于 2010-10-23T11:02:08.280 回答