View Single Post
  #91  
Old July 15th, 2008, 09:10 PM posted to microsoft.public.access.gettingstarted
BruceM[_2_]
external usenet poster
 
Posts: 1,763
Default Still Struggling...

I don't have much time to reply today, but I have noted a few things inline.

"Aria" wrote in message
...
I found the compile button. It was under commands so I added it to the
toolbar. Thanks.

I will take a look at your questions, but you will need to sort of start
over with your descriptions, as I have not been following very closely of
late. When you do so, list only the essential fields.


Not quite ready to list the table structures for this part yet...still
stinging from the last time when they were all wrong. I just basically
want
to think on post. Ask a few questions and have you weigh in on where I'm
going wrong. Are you Ok with that? I completely understand what you mean
as
far as having lost track. I have all my notes and posts and I still have
to
read up on what's going on and what transpired.

Questions unrelated to 2nd half of db:
1. When I input the programmng code for the AfterUpdate event, I input
cboStaff_Lookup. The line highlighted in yellow said, "Private Sub
cboStaff_Lookup_ AfterUpdate () Was I supposed to input that final
underscore
after Lookup?


If you select the combo box, open the Property Sheet (with the tabs for
Format, Data, etc.), select an event, click the three dots, click Code
Builder, and click OK the name of the control will be filled in for you in
the code window. If you type it yourself you need the underscore. I think
that is so there are no spaces in the procedure name.

2.Ever since this started taking off in earnest, I have often thought that
this db seems to be complicated; maybe that's just beginner's woe. I
don't
know because I don't have a point of reference. Both you and Beetle stated
in
your posts to each other in the beginning that it wasn't simple for a
first
app. My question is how did you know? We hadn't even really gotten into it
past the original 6 tables. How does one determine complexity?


There's no definitive answer for that, but anything that involves junction
tables is a lot to get your mind around if you are just starting. Before
long, if it hasn't already happened, the need for junction tables, and how
to use them, will be clear in your mind. In your case there were a number
of junction tables, and a situation that involved keys, locks, people to
whom the keys were issued, locations of the locks, campuses, and a number of
other entities, with a variety of relationships between the entities.

Hoping this is not too much for you in one post...

We know:
1. This is a staff database for a school setting.
2. We encompass 2 campuses.
3.Db emphasis is on keys because they have been problematic.
4. We have already suffered through a re-key of an entire campus,
including
the stadium, gyms and gates.
5. Many locations w/o a room #. (Ex. Auditorium, Stadium, Storage Rms.,
etc.)
6. Master keys allow general access for a single campus.
7. Master keys are unique, employee specific and their allocation is
severely restricted.
8. Storage, Stadium, Food Service and Gate Masters are location specific
*and* follow rule #7.
9. Wing masters will only open all rooms for a specific section of the
site.
10. Key assignments are based on job title, room assignment and
extracurricular duties.

Where we left off:
1. We had 4 tables relating to keys or location: tblRooms,
tblKeysEmployees
(junction), tblKeys and tblKeysRequests.


What became of tblLocks? If one lock may have several keys, locks are the
top level.

2. There was a lot of discussion involving home, personal cell, district
cell and room phone #s. The last decision was that home/personal cell is
part
of tblEmployees; district cell and room phone #s are part of tblphones.

Suggestions still on the table:
1. Create tblLocations to replace tblRooms.
2. Create tblLocks to define the relationsip between keys and locks. There
should be a 2 field PK involving Key ID and LocationID.
3. Create Master Key table to account for the special attributes of Master
Keys.
4. Create additional look-up tables: tblCampuses, tblWings and
tblLocationTypes.

If your eyes haven't glazed over... You don't have to answer today; I know
it's a lot.

Questions/Comments:
1.Decision--Unbeknowst to you and Beetle, I was going to use a natural key
for KeyID in tblKeys. Your statement about a possible re-key and our
history
of such finally made me realize that this was a *lousy* idea from the
beginning. I'm switching to autonumber.


There's nothing wrong with a natural key, depending on what it is. With a
surrogate key such as autonumber the main thing is that the record needs to
be unique for reasons apart from the autonumber field. If two records are
identical except for an artificial identifier then they are not really
unique. The autonumber is a convenience, but cannot by itself enforce what
is known as a unique constraint.


2. Master keys--This is a sub-type of key, correct? You can have one key
and
many masters or is it many sub-types (Gate, Stadium, etc.) But you can
also
have one specific master that has many keys assigned. While the master is
employee specific, it *is* essentially the same key that is assigned to
every
employee who has clearnace. It's just coded so we know in advance who we
gave
it to. This is a 1:M relationship? You can't have a M:M relationship with
sub-types can you? Either way it will have its own PK. This is where I'm
confusing myself and going around in circles.


I'll have to ponder this one later.


I'll stop here for now. Thanks!

--
Aria W.


"BruceM" wrote:

I think that Macros may be considered to be something other than code,
but
I'm not sure. If you use the wizard the code is added automatically.
You
can view it, but you may not know it was added. In any case, unless you
use
macros, which are rather limited, you pretty much need VBA code for
anything
other than a very simple database.
To find the Customize option I mentioned, open your database. In the
database window, click the Forms tab. Click View Code, or click the
Code
icon on the toolbar. What you see is the VBA editor. Right click a
blank
spot on the toolbar or menu bar. You should see Customize, probably as
the
last item on the list. There are of course other ways to open the VBA
editor, so choose another method if you prefer. The way you open it is
not
important (although I wouldn't try to customize while debugging).

I will take a look at your questions, but you will need to sort of start
over with your descriptions, as I have not been following very closely of
late. When you do so, list only the essential fields. For instance, for
tblEmployees:

EmployeeID (PK - Number)
LastName
FirstName
etc.

may be enough. For tblSiteEmps, list the PK/FK field, the relationship
type, and a few fields that will give the idea of how the table is used:

tblSiteEmps (1:1 tblEmployees)
EmpID (PK/FK)
Home Phone-txt
Address-txt
etc.

This is enough for our purposes. Give yourself a break from typing all
of
the details, unless for instance the fact there is a cell phone number is
relevant to the problem at hand, and make it easier for me or another
responder to read. Limit your description to a few typical fields, or to
fields that are part of your code or that are involved in relationships.


"Aria" wrote in message
...
You know I had never been to this section of my database before.
Originally,
I had no intention of putting in any programming code. I tried doing as
you
suggested but when I go to Customize...Options...I don't see what you
are
describing. What I see in the Options tab is Personalized Toolbar and
Menu
but it's greyed. The only button you can push is Reset my Usage Data
(?).
Maybe I'm in the wrong place.

I wanted to return to the 2nd half of the db. I still need to work on
tables
but I have questions (naturally!) Do you mind?
--
Aria W.


"BruceM" wrote:

I should have said 'Still in the VBA editor, click Debug Compile."
This
is in the menu bar, not in the Tools Options dialog. I like to
have
that
command readily available, so I added it to the toolbar. To do that,
right
click on the toolbar, click Customize, click the Options tab, click
Debug
on
the left, and drag Compile from the right side to the toolbar.

BTW, you could sort the row source for the Employee combo box by the
concatenated (LastFirst) field. If you sort on LastName you should
sort
on
FirstName next, in case two people have the same last name. You don't
need
to show the LastName and FirstName fields.

"Aria" wrote in message
...
Guess what? It works...it works! I'm trying real hard to hold it
together,
but I am so happy. sniff Thank you *so* much! OK, so let me tell
you
what
happened. I'm going to combine parts of both your posts.

Bruce M wrote:
If you view the SQL in datasheet view you will see that the first
column
is
EmpID. Column 1 should be the bound (hidden) column in
cboStaffLookup.
This statement:
rs.FindFirst "[EmpID] = " & Me.cboStaffLookup
means "Find the first record in the RecordsetClone in which EmpID is
the
same as EmpID in the combo box."

Beetle wrote:
A combo box will only display the first visible column in its
unexpanded
state, so in that case you would need to concantenate the names in
your
query as Bruce suggested. His example query might look like this in
design view;

Field: EmpID
Table:tblEmployees
Show: Yes (The box is checked).

Field:LastFirst:[LastName] & ", " & [FirstName]
Table:
Sort:
Show: Yes

Field: LastName
Table:tblEmployees
Sort: Ascending
Show: No

Aria writes:
It was the combination of both your posts that allowed me to follow
along
closely. You explained what was happening and then said this is what
it
will
look like.

Bruce M wrote:
Private Sub cboStaffLookup_AfterUpdate()

End Sub

The cursor should be blinking between those lines. Add the code.
After
you
enter:
Dim rs As Object
press the Enter key to go to a new line (or press it twice to create
some
space and make the code easier to read). Add:
Set rs = Me.RecordsetClone
Press the Enter key again, and add the next lines of code, pressing
the
Enter key after each one.

Scroll to the top of the code window and be sure the words Option
Explicit
are under Option Compare Database. Add them if they are not. If they
are
not, in the VBA editor click Tools Options. Click the Editor tab,
and
check the box Require Variable Declaration.
Still in the editor, click Debug Compile. This will highlight any
typos
and other such errors in the code.

Aria writes:
Step by step instructions...how could I ask for anything better than
that.
The Require Variable Declaration box wasn't checked. I didn't find
the
Debug
Compile box but it did have Auto Syntax Check box. When I ran it I
got
a
Compile error (Error 461). I used Help for this part. When I was
finished,
I
noticed that Private Sub cboStaff_Lookup_AfterUpdate () was
highlighted
in
yellow; highlighted in blue was cbo StaffLookup. I didn't notice the
underscore with cboStaff_Lookup before. That did it.

Bruce M wrote:
I don't know what is happening with the sort order, but let's not
get
too
many things cooking on a Friday afternoon.

lol Well, on my end it may be a little late for that. One more
thing...the
sort order is working as it should. I can't believe my book said it
could
be
done w/o code. I can't thank you both enough. Still trying to hold
it
together. Have a great weekend!
--

Aria W.


"Aria" wrote:

Something's not right here. tblEmployees should not have a field
for
TitleDescription. The only place the TitleDescription field
should
exist
is in tblTitles. Can you post your current structure for the
following
tables (hopefully I have the table names right)?

Yes, you have the names right. I appreciate your thoroughness in
making
sure
everything is OK. Every time you have reservations, there's usually
something
amiss. I just want to say, before I post the table structure, that
some
facts
concerning our situation may have been forgotten since our original
discussions. Please allow me to refresh our memories about
employees,
classifications and titles.
1. Our school employs both site staff (permanent) and substitutes
(temporary).

2. Each employee can only have 1 classification (Admin.,
Certificated
(teacher et. al), Classified and Substitutes). There are many
employees
who
have the same classification. tblClassifications 1:M tblEmployees,
correct?
For our purposes Admin. are strictly Admin.

3. Each employee can have one or many titles. Each title can be
assigned
to
many employees. tblTitles M:M tblTitlesEmps

The structure is as follows:

tblEmployees
Inactive Yes/No
EmpID PK Autonumber, long integer
ClassDescription FK to tblClassifications (number, long integer)
(This is what it *should* be. It's kind of messed up right now
because
of
tblEmpsClass which should be deleted.)
TitleDescription
(gasp!Illumination... I see what you're saying. This shouldn't be
here.)
LN
FN
MI

Let's go back to TitleDescription. We made that a subform within
tblEmployees. Do we keep it (now that I finally have it where I
want
it)
or
do we need to do something else?


tblSiteEmps 1:1 tblEmployees
EmpID (PK/FK)
Home Phone-txt
Cell Phone-txt
Address-txt
City-txt
State-txt
ZipCode-txt
EmerContactLN -txt
EmerContactFN- txt
EmerContactPhone - txt
PlaceofEmployment - txt
FamilyDr - txt
MedInsurance - txt
HospitalPref - txt
HealthIssues - txt
Medications- txt
Allergies - txt
DateCreated Date/Time
DateModified Date/Time

tblTitles
TitleID PK
TitleDescription

tblTitlesEmps
EmpID PK
TitleID number, l.i.(FK to tblTitles)


tblClassifications
ClassID PK
ClassDescriptions - txt (FK to tblClassifications)



Hopefully, the rest of it is OK. Good looking out...thank you so
much!
--
Aria W.


"Beetle" wrote:

I accidentally hit post before I was done with my last response.
Here
is the
complete response.

Just ignore my last post...
So this line should be Set rs = Me.tblEmployeesClone?

No. It should be Set rs = Me.RecordsetClone

What you're doing here is telling Access to create a copy of
whatever
the recordset is. You don't need to tell it the table or query
name.

Ok, I looked in tblEmployees. I didn't see anything. I do want
both
first