Challenge: One table associated with several fields - but avoidin

T

Thanks, Buddy

I'm using the newest version of ACCESS. I have a (table) list of employees.
I have a form with 4 positions (clerk, door, clean-up, charge) that I want to
schedule using the same list of employees. How do I use this same list so
that if I choose an employee for clerk, that when I fill in the employee for
door - that employee can not be chosen again (i.e. I want to avoid the error
of scheduling the same employee for two or more positions).

Thanks! hope that made sense.
 
S

Steve

You need to use a form for choosing employees and their positions. On your
form use a combobox to select an employee and setup the combobox so that
when an employee us selected and assigned a position, that employee is
removed from the rowsource of the combobox.

Steve
(e-mail address removed)
 
T

Thanks, Buddy

Thanks, Steve. Let me clarify to make sure. I have one field for clerk,
door, clean-up, and charge ( a total of 4 fields) that I want to share the
same list (my list of employees). So if I choose an employee for field one
(clerk), when I go to field two - door, that employee's name won't appear on
the list any longer? Wow? I looked up combobox in my access book and it
doesn't tell me how to remove that employee from the row source...this is
great news if I can really do this, but can you explain a little bit more?
Is there an option on combobox that I choose to make this happen?

Thanks, Buddy
 
S

Steve

It sounds like your tables are not correct. They should be something like:
TblEmployee
EmployeeID
FirstName
LastName
etc

TblPosition
PositionID
Position

TblSchedule
ScheduleID
ScheduleDate

TblScheduleEmployeePosition
ScheduleEmployeePositionID
ScheduleID
EmployeeID
PositionID

There is no built-in way in a combobox to remove that employee from the row
source. You need to make the row source a query and then design the query to
remove all employees previously selected from the row source.

Steve
 
G

Gina Whipp

B

BruceM via AccessMonster.com

You can prevent the same employee from being chosen twice by applying a
unique index to each of the fields Clerk, Door, Clean-up, and Charge. The
employee's name would still appear in the combo box, but you wouldn't be
allowed to select the name. You don't say (that I can see) if you are
storing an EmployeeID number rather than the name, but you should be storing
an unchanging number in Clerk, Door, etc., using something like the table
structure for tblEmployee that Steve suggested. The following assumes you
are storing an employeeID number in the four fields.

One possibility for a new record is to enable only one combo box (e.g. Clerk)
so that it must be selected first. To do this, in the form's Current event:

Me.cboDoor.Enabled = Not Me.NewRecord
Me.cboCleanUp.Enabled = Not Me.NewRecord
Me.cboCharge.Enabled = Not Me.NewRecord

If it is a new record, NewRecord is True, so Not Me.NewRecord is the same as
False.

The combo box cboClerk is always enabled. Its Row Source is whatever you are
using now. In its After Update event:

Dim strSQL as String
Dim lngClerk as Long

lngClerk = Me.cboClerk
strSQL = "SELECT [EmployeeID], [FirstName],[LastName] " & _
"FROM tblEmployee " & _
"WHERE [EmployeeID] <> " & lngClerk & _
" ORDER BY [LastName], [FirstName]"
Me.cboDoor.RowSource = strSQL
Me.cboDoor.Enabled = True

In the After Update for cboDoor you need to add another variable:

Dim strSQL as String
Dim lngClerk as Long, lngDoor as Long

lngClerk = Me.cboClerk
lngDoor = Me.cboDoor

strSQL = "SELECT [EmployeeID], [FirstName],[LastName] " & _
"FROM tblEmployee " & _
"WHERE [EmployeeID] <> " & lngClerk & _
" AND [EmployeeID] <> " & lngDoor & _
" ORDER BY [LastName], [FirstName]"
Me.cboCleanUp.RowSource = strSQL
Me.cboCleanUp.Enabled = True

This would not change the Row Source for an existing record, so if you want
to go back to a record and change a name it would be different coding. It
seems to me it would be more difficult then, in that if you want to swap
names (Clerk and Door, for instance) you would first need to clear cboClerk,
then change the name in cboDoor, then update cboClerk.

Also, if you change the RowSource you need to change it to something else
when you go to another record, or the list will remain as you set it. It
depends on what you want to see in the list when you go to an existing record.
If you want the list exclude the selected people in that record you would
need to set the Row Source in the form's Current event. However, then you
would not be able to swap two of the names as described above unless you make
allowance for that in the coding. It is manageable enough for a new record,
but for an existing record you need to make a number of choices about how to
proceed.

There may be a cleaner approach than this, but this is what I came up with.

Thanks, Steve. Let me clarify to make sure. I have one field for clerk,
door, clean-up, and charge ( a total of 4 fields) that I want to share the
same list (my list of employees). So if I choose an employee for field one
(clerk), when I go to field two - door, that employee's name won't appear on
the list any longer? Wow? I looked up combobox in my access book and it
doesn't tell me how to remove that employee from the row source...this is
great news if I can really do this, but can you explain a little bit more?
Is there an option on combobox that I choose to make this happen?

Thanks, Buddy
You need to use a form for choosing employees and their positions. On your
form use a combobox to select an employee and setup the combobox so that
[quoted text clipped - 18 lines]
 
T

Thanks, Buddy

Thanks Steve. I'm beginning to think this project is above my ability, but
I'm willing to challenge myself. I just don't get how to 'make the row
source a query and then design the query to remove all employees previously
selected from the row source'. I'll play around with it. I'm also looking
for a template out there for someone else who may have run into the same
problem.

Thanks,
Buddy
 
S

Steve

You would use a combobox to enter EmployeeID in the form based on
TblScheduleEmployeePosition. The rowsource of the combobox would be a query.
To create the query, go to the list of queries and select new. One of the
options would be the Unmatched Query Wizard. Use the wizard and select
TblEmployee then in the next step select TblScheduleEmployeePosition. You
want the query to return all EmployeeIDs in TblEmployee not found in
TblScheduleEmployeePosition. In your query, make the first column EmployeeID
and the second column the following expression:
Employee = [LastName] & ", " & [FirstName]
Set the following properties in the combobox:
RowSource NameOfTheQuery
Bound Column 1
Column Count 2
Column Width 0,2

If this project is above your ability, I can help you. I provide fee-based
help with Access, Excel and Word applications. My fee to help you would be
very reasonable. If you want my help, contact me.

Steve
(e-mail address removed)
 
B

BruceM via AccessMonster.com

The OP is not clear about what type of record he is creating in which the
four positions are filled. I see now that I made an assumption that it was
some sort of scheduling thing, and that a new record would be created
periodically. That assumption may not be warranted, but neither is your
assumption about the structure, as the database purpose is not clearly
defined.

What is most definitely not warranted is your continually mistaken belief
that these newsgroups are for anything other than free peer-to-peer support.
When you told the employee the design was wrong, then posted a sketchy table
structure, I wondered if you were heading in the direction of a solicitiation.


I will repeat: these newsgroups are not your personal advertising forum.
Commercial solicitations are inappropriate. If you haven't learned that by
now there is no reason to think you can handle Access.
You would use a combobox to enter EmployeeID in the form based on
TblScheduleEmployeePosition. The rowsource of the combobox would be a query.
To create the query, go to the list of queries and select new. One of the
options would be the Unmatched Query Wizard. Use the wizard and select
TblEmployee then in the next step select TblScheduleEmployeePosition. You
want the query to return all EmployeeIDs in TblEmployee not found in
TblScheduleEmployeePosition. In your query, make the first column EmployeeID
and the second column the following expression:
Employee = [LastName] & ", " & [FirstName]
Set the following properties in the combobox:
RowSource NameOfTheQuery
Bound Column 1
Column Count 2
Column Width 0,2

If this project is above your ability, I can help you. I provide fee-based
help with Access, Excel and Word applications. My fee to help you would be
very reasonable. If you want my help, contact me.

Steve
(e-mail address removed)
Thanks Steve. I'm beginning to think this project is above my ability, but
I'm willing to challenge myself. I just don't get how to 'make the row
[quoted text clipped - 89 lines]
 
J

John... Visio MVP

Steve said:
If this project is above your ability, I can help you. I provide fee-based
help with Access, Excel and Word applications. My fee to help you would be
very reasonable. If you want my help, contact me.

Steve
(e-mail address removed)


This project is definitely beyond stevie's abilities.


These newsgroups are provided by Microsoft for FREE peer to peer support.
There are many highly qualified individuals who gladly help for free. Stevie
is not one of them, but he is the only one who just does not get the idea of
"FREE" support. He offers questionable results at unreasonable prices. If he
was any good, the "thousands" of people he claims to have helped would be
flooding him with work, but there appears to be a continuous drought and he
needs to constantly grovel for work.

A few gems gleaned from the Word New User newsgroup over the past Christmas
period and a few gems from the Access newsgroups to show Stevie's
"expertise".


Dec 17, 2008 7:47 pm

Word 2007 ..........
In older versions of Word you could highlght some text then go to Format -
Change Case and change the case of the hoghloghted text. Is this still
available in Word 2007? Where?
Thanks! Steve


Dec 22, 2008 8:22 pm

I am designing a series of paystubs for a client. I start in landscape and
draw a table then add columns and rows to setup labels and their
corresponding value. This all works fine. After a landscape version is
completed, I next need to design a portrait version. Rather than strating
from scratch, I'd like to be able to cut and paste from the landscape
version and design the portrait version.
Steve


Dec 24, 2008, 1:12 PM

How do you protect the document for filling in forms?
Steve


One of my favourites:
Dec 30, 2008 8:07 PM - a reply to stevie
(The original poster asked how to sort a list and stevie offered to create
the OP an Access database)
Yes, you are right but a database is the correct tool to use not a
spreadsheet.


Not at all. If it's just a simple list then a spreadsheet is perfectly
adequate...


Sept 10, 2009
(In respose to a perfectly adequate GENERIC solution stevie wrote)

This function is specific to the example but not generic for any amount paid
out.

Steve



Sept 9, 2009
Steve said:
you can then return all the characters in front of it with the Left()
fumction. Would look like:
Left("YourString",Instr("YourString","VbCr" Or "VbLf") - 1)

Steve

No, it would not look like

Left("YourString",Instr("YourString","VbCr" Or "VbLf") - 1)

First of all, the constants are vbCr and vbLf: no quotes around them. With
the quotes, you're looking for the literal strings.

Second, you can't Or together character constants like that. Even if you
could, Or'ing them together in the InStr function like that makes no sense
at all.



Sept 22,2009
Sorry Steve, even I can see that this is a useless answer. I made it pretty
clear that "CW259" is just ONE possible value for the control.

Steve said:
Hello David,

Open your report in design view and select txtOrderID. Open properties and
go to the Data tab. Put the following expression in the Control Source
property:

=IIF([chkActive],"CW259","(CW259)")

Steve


John... Visio MVP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top