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_id1 つのフィールド (フィールド) のみをテーブルにバインドしhours_allocationます。このフィールドの行ソースは、ユーザーがselect_contractフォームで選択した契約に割り当てられた時間を持つ従業員の ID を返すクエリです。
  4. 年の各月に 1 つずつ、12 の他のバインドされていないフィールドが含まれています。これらのフィールドは、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から

列として月と年を使用したことに注意してください。おそらく、month([SomeDate])= 2およびyear([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)が1つだけあり、残りの列は上記のようにpublic関数にバインドされたテキストボックスから派生し、月はemp idとともに渡され、その値を返します。桁。

したがって、上記は私が成功して使用した2つの可能なアプローチです。

于 2010-10-22T21:18:20.990 に答える
1

連続フォームのバインドされていないコントロールは、フォーカスのあるレコードのみを参照できます。したがって、データがバインドされていないコントロールに入力された場合、連続形式のすべてのレコードに同じデータが表示されます。

于 2010-10-22T21:15:52.447 に答える
0

MS Accessの連続形式で、コントロールを「個別に」(「行レベルで」)参照することはできません。

ここでの唯一の解決策は、これらのコントロールを、対応するフィールドが表示される値を保持する基になるrecordset\recordsourceにバインドすることです。

たとえば、「datein」と「dateout」の差として期間を表示する場合、recordset\recorsourceは次のようになります。

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

次に、時間計算コントロールをレコードセットの「timeIn」フィールドにバインドする必要があります。

(*)dateDiff引数を確認してください。ここで利用できるヘルプはありません..

于 2010-10-23T11:02:08.280 に答える