Question about Updateable Table Layout

D-Fresh

Registered User.
Local time
Today, 04:27
Joined
Jun 6, 2000
Messages
225
Hey all.. Been out of the Access loop for quite some time now.. Last project I did was in Acc97, about 5 years ago! Been working on SQL Server and web programming lately...

Anyway, I have a project that needs to be done in Access XP. It is a basic resource allocation DB. Listing of employees, projects, and time associated with those projects per Employee. I want to keep this normalized, and so I have this basic table layout..

tblEmployee -- Has EmployeeID, name, etc
tblProject -- Has ProjectID, name, etc
tblEmployeeProject -- Has EmployeeID, ProjectID, year, month, hours
tblWorkingHours -- Has an autoNumber ID, Year, Month, Working Hours, Holidays, business days

Basically, the tblWorkingHours has 12 entries per year, Jan-Dec.
The tblEmployeeProject is where I have the meat of my data.. If an employee(1) is assigned to a project(123) for 20 hours a month for 3 months(Jan-Mar 2008), then there will be 3 rows in there.
EmployeeID - ProjectID - Year - Month - Hours
1 - 123 - 2008 - 1 - 20
1 - 123 - 2008 - 2 - 20
1 - 123 - 2008 - 3 - 20

This seems to make sense to me, and seems to be normalized. However, I cannot seem to create an updatable query on this layout... I would like to pick a project, and then a few employees assigned to that project, and then enter in the hours for each employee, for any of the 12 months I need. The problem I'm having is that I cannot seem to get an updatable query out of this layout. The only way for me to get a listing of all employees attached to a project, and then all months for the year, regardless of an entry in tblEmployeeProject, is to use a Cartesian Product type join on tblEmployee and tblWorkingHours. And then do an outside join on tblEmployeeProject. However this is obviously not updatable.

The only other option I can think of, is to prefill the tblWorkingHours table with 12 entries per year, however this seems to add unnecessary data in the database. At that point, I might as well create a table that has 12 columns, one for each month.

Sorry for the long-winded post, but wanted to try to get all my points across. Any help would be greatly appreciated! Thanks all.
 
Don't use a Cartesian Product type join but use a subquery instead.
Code:
update tblEmployeeProject set year=2008, month=2, hours=20 where employee=1 and projectID in (select projectid in tblProject )
This example shows how you can use a subquery in your where clause. I know this (nonsense) sql statement is not what you wanted but i hope it points you in the right direction for using a subquery.

HTH:D
 

Users who are viewing this thread

Back
Top Bottom