Как ссылаться на отдельные элементы формы в непрерывной форме MS Access - PullRequest
0 голосов
/ 23 октября 2010

MS Access Сценарий:

Я использую форму (назовем ее select_contract form) и подчиненную форму (назовем ее employee_allocations_by_contract subform).

Форма select_contract:

  1. Не привязана.
  2. Содержит поле со списком, позволяющее пользователю выбрать идентификатор контракта.

Подформа employee_allocations_by_contract:

  1. Является непрерывной формой.
  2. Связан с таблицей (которую я назову таблицей hours_allocation), которая содержит количество часов, которые каждый сотрудник выделяет для каждого контракта.
  3. Связывает только одно поле, поле employee_id, с таблицей hours_allocation.Источником строки для этого поля является запрос, который возвращает идентификаторы сотрудников, у которых есть часы, выделенные для договора, выбранного пользователем в форме select_contract.
  4. Содержит двенадцать других, несвязанных полей, по одному на каждый месяц года.Эти поля предназначены для отображения количества часов, выделенных сотруднику, указанному в поле employee_id для каждого месяца года.

Проблема: Чтобы отобразить количество часов по месяцам, выделенных каждому сотруднику, указанному в подчиненной форме employee_allocations_by_contract, запросам для каждого поля месяца требуется доступ к полю employee_idстроки, в которой они появляются.Я не смог понять, как ссылаться на это поле.Поскольку подчиненная форма employee_allocations_by_contract является непрерывной формой, появляется ссылка на имя поля employee_id для ссылки на каждую строку в форме.

Я искал несколько форумов и обнаружил связанные с этим проблемы с непрерывной формой, ноничего, что четко решает эту проблему.Есть мысли?

Ответы [ 3 ]

2 голосов
/ 23 октября 2010

Ну, вы могли бы создать подзапрос для каждого из столбцов месяца, для которого вам нужна эта сумма.

Что-то вроде:

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 строки может, таким образом, управлять тем, что отображает каждое текстовое поле.Просто помните, что эта функция должна предварительно обрабатывать все данные, и вам не нужно повторно запускать и перезагружать данные для каждого вызова функции, поскольку это будет слишком медленным FAR.Тем не менее, я использовал этот подход для большого успеха.Таким образом, каждая строка формы имеет только один реальный столбец (empID), остальные столбцы получены из текстовых полей, привязанных к публичной функции, как указано выше, с месяцем, переданным вместе с emp id, чтобы вернуть значение для этогоколонка.

Итак, выше приведены два возможных подхода, которые я использовал с успехом.

1 голос
/ 23 октября 2010

Несвязанный элемент управления в непрерывной форме может ссылаться только на запись, которая имеет фокус. Поэтому, если данные введены в несвязанный элемент управления, вы увидите те же данные для каждой записи в непрерывной форме.

0 голосов
/ 23 октября 2010

Нельзя ссылаться на элементы управления «по отдельности» («на уровне линии») в непрерывной форме MS Access.

Ваше единственное решение здесь состоит в том, чтобы привязать эти элементы управления к базовому набору записей \ recordsource, где соответствующие поля содержат значения для отображения.

Например, если вы хотите отобразить период времени как разницу между «датой входа» и «датой окончания», ваш набор записей \ recorsource может выглядеть примерно так:

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

Тогда ваше управление вычислением времени должно быть привязано к полю timeIn набора записей.

(*), пожалуйста, проверьте аргументы dateDiff. У меня нет никакой помощи здесь ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...