Table Design View - University of St Andrews

advertisement
University of St Andrews
Library and Information Services
Getting started with
Microsoft Access
An introduction to
Relational Database
Management Systems
2
Index
Section 1: Introduction to Relational Database Design .......................................................................... 5
1.1
1.2
1.3
1.4
1.5
1.6
What is a database? ................................................................................................................... 5
The relational model ................................................................................................................... 5
Designing the database .............................................................................................................. 6
Data Normalisation ..................................................................................................................... 6
The Student/Module database ................................................................................................... 7
The Student/Module database Logical Design .......................................................................... 8
Section 2: Introduction to Microsoft Access ........................................................................................... 9
2.1
2.2
2.3
2.4
What is Microsoft Access? ......................................................................................................... 9
A note on versions ...................................................................................................................... 9
Using Microsoft Access at the University of St Andrews............................................................ 9
Starting up and creating a blank database ............................................................................... 10
Section 3: Table Creation ..................................................................................................................... 11
3.1
3.2
3.3
3.4
3.5
tblStudent Table in Design View .............................................................................................. 11
tblStudent Table Design Details ............................................................................................... 12
tblModule Table in Design View ............................................................................................... 13
tblModule Table Design Details ................................................................................................ 14
tblStudMod and tblSchoolDept Tables ..................................................................................... 15
Section 4: Form Creation...................................................................................................................... 16
4.1
4.2
4.3
4.3
4.4
Designing the Student Form ..................................................................................................... 16
Designing the Module Form ..................................................................................................... 19
frmModule Form Design View Properties................................................................................. 19
frmModule Form Design View Properties................................................................................. 20
The Dropdown Combo Box ...................................................................................................... 21
Section 5: Entering and Deleting Data ................................................................................................. 25
5.1
5.2
5.3
5.4
Adding and Editing Records ..................................................................................................... 25
Deleting records ....................................................................................................................... 25
tblStudent Table Data ............................................................................................................... 26
tblModule Table Data ............................................................................................................... 27
Section 6: Report Creation ................................................................................................................... 28
6.1
6.2
6.3
6.4
rptStudent Report in Design View ............................................................................................ 29
rptStudent Report Design View Properties............................................................................... 30
rptModule Report in Design View ............................................................................................. 31
rptModule Report Design View Properties ............................................................................... 32
Section 7: Querying the Database ....................................................................................................... 33
7.1 Opening the database .............................................................................................................. 33
7.2 Querying the database ............................................................................................................. 33
7.2.1
Querying the tblModule table ........................................................................................... 33
7.2.2
Saving your query ............................................................................................................ 35
7.3 More Criteria ............................................................................................................................. 35
7.4 Comparison operators .............................................................................................................. 36
7.5 More on the Modules report ..................................................................................................... 37
3
Section 8: Linking Tables and Setting Relationships ........................................................................... 38
8.1
8.2
Relating Tables ......................................................................................................................... 38
Referential Integrity .................................................................................................................. 39
Section 9: Manipulating Data Using Linked Tables .............................................................................. 41
9.1
9.2
9.3
9.4
9.5
9.7
8.9
The Finished Students & Modules Form .................................................................................. 41
The Main Student/Module Form ............................................................................................... 42
Properties for frmStudMod ....................................................................................................... 43
The Modules Subform .............................................................................................................. 44
frmSubStudMod ........................................................................................................................ 45
Linking the form and subform ................................................................................................... 46
Deleting records ....................................................................................................................... 50
Appendix 1: Data Types ....................................................................................................................... 51
Appendix 2: The Data Dictionary .......................................................................................................... 53
4
Section 1: Introduction to Relational Database Design
Many scholars, software engineers and mathematicians have spent their lives devising the theories
behind the relational model, and database design continues to evolve to suit the increasing complexity
of data storage requirements. With limited time available it would be impossible to explain in any
detail how a relational database is designed so, in this course, we can only hope to gain an insight into
the basics of relational database design. But, by its conclusion, we hope you will have gained enough
knowledge to design and construct simple databases which will adhere to the rules of the relational
database model.
1.1
What is a database?
Any information held on a computer can be described as a database, but the term is usually reserved
for information that is structured in a way that makes it easy to store, retrieve and search. There are
many database models, from the network data and hierarchical models to the relational model. Each
of these models has been described in many learned treatises and would take too long to summarise.
Microsoft Access is the most commonly used desktop relational database management system
(RDBMS), and it is used widely in the University, so we will use Access to construct our database.
1.2
The relational model
The aim of a relational database design (schema) is to remove data redundancy by storing repeating
data in related tables. In this way we organise the data in a way that removes the duplication of data.
If the schema is correctly designed we can combine data in related tables or queries when we need to
use it, rather than having to store it repeatedly. This will greatly reduce the workload when entering
data and, in turn, will reduce the human error which inevitably occurs when someone is required to
enter or edit large amounts of data. Every spelling mistake or mistyped number is, potentially, a lost
record when examining the statistical information available to the database user.
Consider the case that you are required to store the progress of a group of students through one
semester at the University of St Andrews. During that time they will study five modules and will take
three examinations. For each module undertaken, there will be two separate marks awarded for
coursework, and one mark will be recorded for each exam. This means that the student must have at
least thirteen marks recorded to define his or her progress through the semester. In addition there is
personal information about the student to record, such as name, age, sex, date of birth, home
address, term-time address, telephone numbers, financial details, etc. In addition everything about the
modules must be recorded - module number, title, level, etc. All of this data could easily amount to
thousands of entries in a database. In a flat-file database each individual record must have ALL of the
data pertinent to the record stored within it. In a relational database each individual record is
composed of unique data and contains only references to repeating data.
Imagine now that every time you add a new module to a student’s record, all the personal and module
data must also be re-entered. This would be the case if the data were not structured in some way to
remove the need to record everything each time a student’s progress was updated with new module
or exam details. And what if the student changes his or her term-time address? Every record
pertaining to that student would have to be retrospectively updated with the new information.
If we use a database which conforms to the relational module we remove the need to re-enter
everything in every record in the database. Some data is unique and some data repeats, some data
changes regularly and some remains static. A student’s personal data is unique to him or her and a
module’s data is unique to it, but a student will study a number of modules and each module will be
studied by several students.
In our case we must create a table to store the student data, another to store the module data and a
third table to somehow match a particular student with all of the modules he or she studies. This third
table could also store the marks for each exam and coursework undertaken. A fourth table will hold
data about the school running each course. At this point in our sample database we will stop. At a
5
later time you may wish to consider adding tables to hold examination data, etc. but for now our
database is complex enough.
So, you can see that database design is of paramount importance. If you don’t get it right at the
design stage you will find it impossible to store and retrieve the data at a later date.
1.3
Designing the database
The easiest way of picturing the structure of a relational database is to see it as a number of related
tables, each comprised of rows and columns. In database terminology the rows are known as records
and the columns as fields. Each row will have a field, or combination of fields which will hold values
that will be unique to that record. This field, or combination of fields, is called the primary key. By
referring to the value(s) in the primary key we uniquely identify the data in the record to which it refers.
By holding rows of similar data in tables we complete the database design.
In a relational database management system such as Microsoft Access, data should not need to be
repeated anywhere. Data are stored in tables and are related to other data by means of linking fields
in corresponding tables. The goal of the database designer is to design a logical model (the schema)
to represent this data. This process is called data normalisation.
1.4
Data Normalisation
There are seven levels of normalisation:
1. un-normalised data
All of the defined fields in an unorganised state
2.
zeroth normal form
The same fields placed in a single table
3.
first normal form
Remove repeating groups to new tables
4.
second normal form
Remove partial dependencies to new tables
5. third normal form
Remove transitive dependencies to new tables
6.
This is as far as most database design requires
Boyce-Codd normal form
7.
fourth normal form
8.
fifth normal form
As said previously it is not possible in this course to explain the technique behind the normalisation of
data; it would take too long, but using common sense and asking the question: ‘Which data belongs
together?’ should suffice to get a reasonable approximation of data normalised to third normal form.
After some practice it becomes natural to ‘see’ which data is unique and which repeats. An obvious
example in our database is that of student data and module data. Let us look first at the student data.
In themselves, the student’s name, age, sex, address, etc. have no relevance to a module so they
obviously ‘belong’ with the student table. Similarly, the module title, level, etc. have no relevance to
the student data and therefore ‘belong’ with the module table.
If ten student records are entered in the database each record will be unique, but each of the ten
students will study the same modules so the module data will repeat ten times for each module
entered. The opposite also occurs. If the students each study five modules there must be five
repeated records for each student as well. So now we have fifty records in an un-normalised table
containing both student and module data. In this case the student data and the module data need to
be held in separate tables.
6
A simple rule of thumb is to ask the question: Can a record in one table be related to more than one
record in another table? If the answer is yes, this is a called a one-to-many relationship (1:M). In this
case a relationship can be established between the two tables. If the answer to the question is no,
then we have a one-to-one relationship (1:1) and if this is the case the data belongs in the same
table.
There is, however, a third possible answer. For example; a student can study MANY modules and a
module will be studied by MANY students. Here we have a many-to-many relationship (M:N)
between students and modules. Relational databases do not like many-to-many relationships so we
must resolve this problem by creating a third table. This table will have two fields; the primary keys
from the two tables in question. By selecting both the fields and designating them as a shared
(concatenated) primary key we can allow repeated entries for a module and repeated entries for a
student but we prohibit the same combination of student and module appearing in the same row
(record) more than once.
The standard way of allowing relationships to be set is to place a copy of the primary key from the
ONE side into the MANY side table at the database design stage. This field becomes the foreign key
when inserted into the many-side table. Every time a repeating value is entered into the ‘many’ table
the primary key value from the ‘one’ side is also recorded in the record. Thus the two tables can be
directly related on this field. We will see this theory put into practice when we design the
Student/Module database which we will create and use in this course.
As stated earlier there are seven levels of normalisation, but most database designers stop at third
normal form. The rules of normalisation are defined using set algebra and to explain them in any
detail would take far too long. This may be the subject of a more advanced database design course in
the future However a less experienced user can approximate organising their data to third normal
form by answering a number of predefined questions of the data … and, of course, lots of practice!
1.5
The Student/Module database
The database we will create will store minimal data about students, modules, and schools. Of course,
if the database were to be used in ‘real life’ situation, we would be required to hold more data and
create more tables but, for the purposes of the course, the tables we define will suffice.
It seems logical that we would store student data in one table and module data in another, but we
must test this assumption. If we ask the question ‘Can a record in a table holding student data be
related to more than one module?’ the answer is yes, a student studies many modules. In this case
we must split the module data out to another table. So, at this time we need to create two tables, one
to hold student data and one to hold module data.
The student table should be on the ONE side of the relationship and the module table on the MANY
side. So, according to the rules of the relational model, when we construct the module table there
must be a field in the module table to hold the student ID. However, this would break the rules as well.
The relationship between students and modules is a many-to-many relationship, which is not allowed
in relational database design. A student studies MANY modules and a module is studied by MANY
students. To overcome this problem we must create a third table to hold the primary keys from the
student and module tables. This removes the M:N relationship and replaces it with two 1:M
relationships, a state which the relational model requires. You will see this graphically if you study the
diagram on page 34 of this workbook.
Let us now consider the school data. Once more we ask the question ‘‘can a record in the module
table be related to more than one record in the school/dept table?’ In our database a module is only
taught by one school, but a school teaches many modules, so school data has a 1:M relationship with
the module table. In this case we must create a fourth table to hold the school data.
7
So the final database will consist of four tables:

The student table (tblStudent)
This table will hold data unique to the student, e.g. student ID, name, address, year of birth, etc.

The module table (tblModule)
This table will hold data unique to the module, e.g. module number, name, year, etc.

The school/dept table (tblSchoolDept)
This table will hold data unique to the school running the module, e.g. school number and name

The student/module matching table (tblStudMod)
This table will hold two pieces of data: the module number and the student ID, and will be used
to match students and the modules they study.
1.6
The Student/Module database Logical Design
Student table (tblStudent)
student_id
030003759
030005909
surname
Willson
Friedrik
forenames
Malcolm
Hermann
year_of_birth
1983
1980
The link between tblStudent and
tblStudMod is set on the student_id
Student/Module table (tblStudMod)
student_id
module_id
030003759
030005909
BL3003
BL3003
module_id
BL3003
The link between tblStudMod and
tblModule is set on the module_id
title
Membranes & Cell Communication
school_dept_id
1
year
2004-05
Module table (tblModule)
The link between tblModule and
tblSchoolDept is set on the school_dept_id
School/Dept table (tblSchoolDept)
school_dept_id
school_dept
1
2
Biology
Physics & Astronomy
8
Section 2: Introduction to Microsoft Access
2.1
What is Microsoft Access?
Microsoft Access is a Relational Database Management System (RDBMS) which enables us to
2.2

create tables and enter data into them

specify relationships between the tables

interrogate the data

create forms providing easy views of the data

create report layouts to print out selected parts of the data in understandable and
presentable formats

create free-standing applications with their own customised interface so that the “end-users”
do not need to learn how to use Access
A note on versions
These notes refer to MS Access 2003. Many users at the University still have MS Access 97 but
versions of Access prior to version 2000 are not compatible with the networking system in the PC
classrooms. However the differences between the versions are slight, and Access 2000/2003 can
open and use databases created with earlier versions, and can usually save a database in a format
which the earlier version can handle.
2.3
Using Microsoft Access at the University of St Andrews.
For those users wishing to use existing data, e.g. from the University’s Data Warehouse, you can use
Microsoft Access to build a database application using the data available to you. Tables need not be
held within the database itself, but can be ‘attached’ from an external source. You can also use
properly formatted Microsoft Excel spreadsheets or text files as your data sources. For those of you
wishing to create databases with new data there is a section on table creation and data entry
Whatever your needs we hope that you will gain a basic knowledge of how to create, maintain and
customise simple MS Access databases.
9
2.4
Starting up and creating a blank database

Choose Programs from the Start menu and then choose Microsoft Office, and then
Microsoft Access

In the initial dialog-box select the Blank Database option and click OK

The first thing you are asked to do
is file the new database – that is,
save it on disk: complete the
dialog-box as usual, saving the
database as studmod.mdb

in the Save In: box select your
floppy disk (the A: drive) or your
“home directory” (the H drive)

in the File Name: box type a
name: studmod

click Create
The Database Window
10
Section 3: Table Creation
When you select a Data Type you will notice that the properties for the field may change. This is
because some field types have settings which cannot be defined by the database designer, e.g. a
Memo field will always by 64KB in size, so the Field Size property of a Memo field is not present,
However a Text field can be any size between 1 byte and 255 bytes so, when you define a field as a
Text field, you are able to define its size.
For the purposes of creating this sample database defining the field sizes, etc. is not so important but,
if you were designing a database to hold many hundreds of thousands of records, you would create a
much more efficient data structure if field sizes were constrained so that disk space and memory
requirements were not wasted when storing or remembering empty space.
3.1
tblStudent Table in Design View
Data type
Data Properties
First we will create the Student table. Make sure you are able to see the database window then click
the Tables option, select New and then Design View. The table design dialog box will open, similar
to the illustration above.
On the next page is a list of the fields and their attributes. Create the fields then save the table as
tblStudent. The prefix tbl denotes that this particular object in the database is a table.
To define the primary key, select the student_Id row by placing your mouse pointer in the grey box
immediately to the left of the Field Name and left-click. This will highlight the student_id row.
Now go up to the toolbar and click the
key.
key. This will mark student_id as the table’s primary
11
3.2
tblStudent Table Design Details
Complete the tblStudent table by creating the following fields in the design window. Set the properties of the fields as follows:
Field Name
Properties
Data Type
Field Size
Caption
Indexed?
student_id
Text
50
Student ID
surname
Text
30
forenames
Text
Number
year_of_birth
Required
Primary Key
Yes (No Duplicates)*
Yes
Yes
Surname
No
Yes
No
30
Forename(s)
No
No
No
Integer
Year of Birth
Yes
No
No
* This will be set automatically when you define the field as the primary key
For a brief description of data types see Appendix 1
12
Default Value
3.3
tblModule Table in Design View
Now we will create the Module table. Make sure you are able to see the database window then click
the Tables option, select New and then Design View. The table design dialog box will open similar to
the illustration below.
tblModule Table Design View
On the next page is a list of the fields and their attributes. Create the fields then save the table as
tblModule.
13
3.4
tblModule Table Design Details
Complete the tblModule table by creating the following fields in the design window. Set the properties of the fields as follows:
Field Name
Properties
Data Type
Field Size
Caption
Indexed?
module_id
Text
30
Module No.
module_name
Text
100
school_dept_id
Number
acad_year
under_post
Required
Primary Key
Yes (No Duplicates) *
Yes
Yes
Module Name
No
Yes
No
Long Integer
School/Dept.
Yes
No
No
Text
30
Academic Year
No
2004-05
No
No
Number
Byte
Undergrad/Postgrad
Yes
1
No
No
* This will be set automatically when you define the field as the primary key
For a brief description of data types see Appendix 1
14
Default Value
3.5
tblStudMod and tblSchoolDept Tables
To complete the database structure we will now create the other two tables in the database. One of
the tables, tblStudMod, is required to remove a many to many relationship between tblStudent and
tblModule (relationship types are explained later in the workbook). The other table, tblSchoolDept
will hold details about the school a module is associated with.
The first thing to do is create our third table. Create the following table and save it as tblStudMod
Field Name
Data Type
student_id
Text
module_id
Text
Field Size
Caption
Indexed
50
Student
ID
50
Module
No.
Default Value
Required
Primary Key
Yes (Duplicates OK)
Yes
Yes
Yes (Duplicates OK)
Yes
Yes
Now that we have created this third table you will see that students can be matched with modules by
entering the corresponding ID numbers. Student IDs can repeat, as can Module numbers, but the
same combination of student_id /module_id is prohibited in a record by the combined primary key. In
a later section we will use this table to match students with modules on a form and report.
There is no need to create a data entry form for this table as the data will be added automatically
when a student is matched with the modules he or she is studying.
Finally, create the School/Department table and save it as tblSchoolDept
Field Name
Data
Type
Field Size
Caption
Indexed
Default
Value
Required
Primary Key
school_dept_id
Auto
number
Long
Integer
School/Dept ID
Yes (No Duplicates)
Yes
Yes
school_dept
Text
50
School/Dept
No
Yes
No
This table will be used later to display the numeric data held in the school_dept field in the table,
tblModule as a text value.
If you feel like doing some extra work create a form to allow a user to enter data into this table. If you
don’t wish to do this at the moment you can enter the following data straight into the table.
Make sure the Database Window is visible and that Tables is selected. Double-click tblSchoolDept
to open the table for data entry and enter the following data. You do not need to enter the ID number
as this field will automatically generate a sequential number.
school_dept_id
school_dept
1
Biology
2
Physics & Astronomy
3
Modern Languages
4
International Relations
5
Psychology
15
Section 4: Form Creation
Forms allow you to create a simple user interface for the inputting and editing of data in the database.
In this exercise we will create two forms, one each for inputting data to the tblStudent and tblModule
tables.
4.1
Designing the Student Form
Make sure you are able to see the database window then click the Forms option, select New. A new
dialog box will open. Select Design View and in the section marked - Choose the table or query
where the object’s data comes from: - use the drop-down list to select the tblStudent table. Click OK
to complete this part of the process. A blank form will now appear in design mode.
If the form Properties and Field List windows are not visible select the View menu and click on these
two options to make them visible.
Move your cursor to the edge of the form background (the bit with the grid). Your cursor should
change to a cross-shape. Click, hold the mouse button, and drag the form background to make it a
little larger.
Now highlight the first field in the Field List dialog box, hold the left shift key down and click on the last
field in the list. All fields should now be highlighted. Drag the block of fields and drop them
somewhere in the middle of the form background. You will see that the fields now appear as controls
on the form, each with its caption denoting its function. Drag each control into its correct position by
clicking and holding the left mouse button (the cursor will change to a small hand shape).
16
Now it’s time to set the form’s Properties. Every object on the form has properties so; to ensure that
you are setting the form’s properties, check that it says ‘form’ in the Drop-down list. If this is not the
case select ‘form’ from the drop-down list at the top of the Properties window. Amend the properties
as in the illustration below:
Drop-down list box
Ensure the tblStudent table is selected
This will display as the form’s title.
Set to Single Form to show only one
complete record at a time.
When the form is a Single Form there is
no need to display vertical and horizontal
scroll bars
When the form is a Single Form there is
rarely a need to display Record
Selectors (the strip down the left side of
the form when showing multiple records
Set this to No to prevent the form from
maximising to fill the screen
Set this to Yes to make the form appear
in the centre of the screen
When you have completed these property settings resize the form’s background neatly round the
controls and view the form by selecting Form View from the View Menu. You will probably need to
resize the form again in this new view.
17
When you have resized the form save it as frmStudent. The prefix frm denotes that this particular
object in the database is a form.
Because you have set the form’s Auto Resize property to No and Auto Centre to Yes the form will
retain its size and will open up in the centre of the screen.
The Student form in Design view
The Student form in Form view
18
4.2
Designing the Module Form
Repeating the previous processes we will now create the modules form. Remember to name it
frmModule in keeping with our naming convention.
You will note that there are a couple of new controls on this form: a drop down combo box and an
option group. Please read on for an explanation of how to create these controls.
The Module form in Form view
Create this control using the
Combo box wizard (see page 20)
This is an Option Group.
Create this object group by clicking
on the
button on the Toolbox
and then follow the steps in the
Option Group Wizard.
The Module form in Design view
19
4.3
frmModule Form Design View Properties
Ensure the module table is selected
This will display as the form’s title.
Set to Single Form to show only one
complete record at a time.
When the form is a Single Form there is
no need to display vertical and horizontal
scroll bars
When the form is a Single Form there is
no need to display Record Selectors
(the strip down the left side of the form
when showing multiple records)
Set this to No to prevent the form from
maximising to fill the screen
Set this to Yes to make the form appear
in the centre of the screen
20
4.4
The Dropdown Combo Box
We will select the school_dept_id to be stored within a module’s details by selecting the school or
department from a dropdown list. We will use a wizard to create this control: If the Toolbox menu is
not visible make it so by selecting Toolbox from the View menu. Select the dropdown combo box tool
and click on the form in the general area you wish to place this control. A wizard will start which will
lead you through the steps in building the dropdown list.
Dropdown combo box tool
Select this option
Click Next > to continue
21
We will take the values from
the tblSchoolDept table
Click Next > to continue
Highlight the required
field in the left-side list
and move them to the
right by clicking here.
Click Next > to continue
22
Select the school_dept field to
sort the data alphabetically in
ascending order
N.B. This wizard screen is not available in MS Access 2000. It only appears when using Access 2003
Click Next > to continue
Select this option to hide
the ID field
Click Next > to continue
23
Select module_id as the
field to store the value in
Click Next > to continue
Enter anything here as we will
delete the label in the final form
later, and then click Finish.
When you have successfully completed the dropdown list delete its caption and position it correctly on
the form. Now set the form’s properties:
24
Section 5: Entering and Deleting Data
5.1
Adding and Editing Records
The navigation buttons appear at the bottom of every form and subform. Use the buttons to select or
add a record.
FIRST record
PREVIOUS record
NEXT record
LAST record
NEW record
The next step is to enter data into the two forms you have just created. To select a form make sure
you are able to see the Database Window then click the Forms option and double-click the required
form. The form will open as in the illustration on page 12. Use the mouse, tab key or enter key to
move from field to field. You will not be able to enter data in the ID field as it is an automatically
generated number which will increment when a new record is entered.
5.2
Deleting records
Place the cursor in a field of the record you wish to delete then click the delete button as illustrated
below or go to the Edit menu and select Delete Record.
Click this button to delete a record
On the following pages are some sample data. Enter this data into the database using the appropriate
forms.
25
5.3
tblStudent Table Data
student_id
surname
forenames
year_of_birth
030003759
Willson
Malcolm
1983
030005276
Petrovic
Vaclav
1980
030005909
Friedrik
Hermann
1980
030005923
Petrie
Gordon
1969
040002559
Jones
Robert
1985
040003572
Phillips
Peter
1978
040004409
Green
Gilbert
1975
040005059
Morrison
James
1986
040008649
Simpson
Maggie
1982
040011192
Wallace
Walter
1980
26
5.4
tblModule Table Data
module_id
module_name
school_dept
acad_year
under_post
AS1001
Astronomy and Astrophysics 1
2
2004-05
1
BL1001
Cell Biology & Genetics
1
2004-05
1
BL3003
Membranes & Cell Communication
1
2004-05
1
ID5001
Enterprise, Creativity & Innovation
1
2004-05
2
IR1005
Themes in Twentieth-century International Relations
4
2004-05
1
IR3022
International Relations and International Law
4
2004-05
1
IT1001
Introduction to Italian Language
3
2004-05
1
IT1003
Italian Language Intermediate I
3
2004-05
1
IT1005
Contemporary Italian Short Story
3
2004-05
1
PH1011
Physics 1A
2
2004-05
1
PS1001
Psychology I
5
2004-05
1
PS1002
Psychology II
5
2004-05
1
PS1901
Psychology in Everyday Life 1
5
2004-05
1
SP1011
Spanish for Science Students I
3
2004-05
1
SP1012
Spanish for Science Students II
3
2004-05
1
27
Section 6: Report Creation
Creating reports is similar to creating forms. Make sure you are able to see the Database Window
then click the Reports option, select New. A new dialog box will open. Select Design View and in
the section marked - Choose the table or query where the object’s data comes from: - use the dropdown list to select the tblStudent table. Click OK to complete this part of the process. A blank report
will now appear in design mode.
If the report Properties and Field List windows are not visible select the View menu and click on
these two options to make them visible.
Move your cursor to the edge of the report background (the bit with the grid). Your cursor should
change to a cross-shape. Click, hold and drag the edge of the report background to make it a little
larger.
Now highlight the first field in the Field List dialog box, hold the left shift key down and click on the last
field in the list. All fields should now be highlighted. Drag the block of fields and drop them on the
report background. You will see that the fields now appear as controls on the report, each with its
caption denoting its function. Drag each control into its correct position by clicking and holding the left
mouse button (the cursor will change to a small hand shape). The control’s caption will move with the
control.
For the student report we wish the captions to be ‘decoupled’ from their controls as we do not want the
captions to be repeated in every row of the data. If a control is highlighted (it has adjustment handles
around it) click on the report background to deselect it then click the control’s caption only. Use
Ctrl+X to cut the caption, click on the page header section and use Ctrl+V to paste it. Now move it
into position as a column heading. Experiment with various layouts until you are happy.
28
6.1
rptStudent Report in Design View
Place the text box captions in the Page
Header section by using Ctrl+X to cut
the captions, clicking on the page
header section and using Ctrl+V to
paste them. Then move them into
position as column headings.
Place and size the text boxes in the detail section to
allow all the data to be displayed. Periodically view the
report in Report view to check the spacing/sizing
29
6.2
rptStudent Report Design View Properties
Ensure the tblStudent table is selected
All other properties can be left at
their default settings
The students report in Report view
When you have completed the design of the report save it as rptStudent. The prefix rpt denotes that
this particular object in the database is a report.
The next step is to preview the report you have just created. To select the report make sure you are
able to see the database window then click the Reports option and double-click the rptStudent
report. The report will open displaying all records in the tblStudent table.
Now repeat the process for the Modules report, saving it as rptModule
30
6.3
rptModule Report in Design View
The only significant difference between the student and the module reports is that the student report
has a table as its data source. Ultimately the module report will be populated using a query. We will
use a query to populate it as we need to add a calculated field – status. The status field will display
whether a module is taught at undergraduate or postgraduate level.
The status field does not exist in the database. The values displayed will be created ‘on the fly’ when
the report is viewed or printed. The values displayed in this text box are derived from the data held in
the under_post field in the tblModule table.
The under_post field has a value of 1 or 2, with 1 representing Undergraduate, and 2 representing
Postgraduate. These values are meaningless to the uninformed observer so we will force the report
to display the words Undergraduate or Postgraduate, depending on the value in the underlying record.
We will learn about queries next so, for the time being, use the tblModule table as the data source for
this report.
31
6.4
rptModule Report Design View Properties
Ensure the tblModule table is selected
All other properties can be left at
their default settings
5
The modules report in Report view
The final step is to preview the report you have just created. To select the report make sure you are
able to see the database window then click the Reports option and double-click the rptModule
report. The report will open displaying all records in the tblModule table.
At the moment the Under/Post Graduate column will display numbers. When you have gained some
more experience using queries you can return to this report to replace its table data source with a
query using a function to display textual data instead (see Page 28).
32
Section 7: Querying the Database
In this section we shall work with the database that has the two tables that have already been created
and populated with data.
7.1
Opening the database

If Access is not already running, start it up as usual. If it is running, close all the open
windows

Choose Open Database from the File menu and use the dialog-box to locate and open the
database studmod.mdb

In the database window click on the Tables tab: you will see you have tables called
tblModule and tblStudent. Look at the tblModule and tblStudent tables

In the Tables tab, double-click on tblModule

This will launch the tblModule table: scroll up and down to look through the records in the
tblModule table

Open the tblStudent table and scroll through to see the list of students
7.2
Querying the database
We shall start with a simple single-table query, then see how the tables can be linked to create more
complex queries.
7.2.1
Querying the tblModule table

Click the Queries tab in the database window

Click New

Choose Design View and click OK

Two windows will be displayed, the query-design window called Query1 and Show Table
windows: in the Show Table window click the Tables tab

Select tblModule from the list of tables and click Add

We are only using one table for this query, so click Close to close the Show Table window
The query design window consists of two parts: the upper part shows which tables are involved in the
query (the tables window); in the lower part you can select which fields from the table(s) are to be
used (the query grid). You can use the fields in several different ways in constructing your query:
 you must choose at least one field to be displayed in the answer
 you can specify values to search for in particular fields: these are known as the query criteria
 you can use fields as the basis for sorting the answer
33
We shall run a query to list the module names and numbers for all the modules, listed in number
order, starting with first year modules.

Complete the first column in the lower part of the window as shown below

Your first column should now look like this
1 Click on the down arrow in the
Field box and choose
module_name from the list of
fields
2 Access will automatically fill in
the name of the table
3 Leave the Sort box blank as we
shall not sort on the title
4 Access will put a tick in the
Show box: leave it there as we
want to display the module titles
5 Leave the Criteria box blank: we want to
display all the records. You fill in the Criteria
box if you want to select certain records and
leave out others

Now select options for the second column

click in the top row of the second column of the query grid

click on the down arrow and choose module_id from the list of fields

in the third row choose Ascending to sort the records in alphabetical order starting with A

your second column should now look like this

To run the query choose Run from the Query menu
The results of the query will be displayed in datasheet format, as shown next.
34
The first column is too narrow
and the second is too wide for
the data they contain. You can
correct the widths by pointing
and double-clicking
Point here at the line between
the column labels. When the
pointer becomes a doubleheaded arrow, double-click

Go back to Query Design view by choosing Design View from the View menu or clicking
the
button

Add a query criterion in the module_id
column of the query design window

Click the
button to run the query
The result of your query should look similar to this:
7.2.2
7.3
Saving your query

Choose Save from the File menu

In the dialog-box type a name that describes the query, for instance qryModules_P and click
OK (the prefix qry denotes a query).

Close the query
More Criteria
We will now try another select query, using a different criterion. Create a new query, just like the one
you have just finished, but this time use the tblStudent table. This time use the student_id, surname
and year_of_birth fields in the query. Enter them into the query grid as usual then run the query.
35
Now enter >1968 AND <1982 in the Criteria grid of the year_of_birth field. This will limit the records
returned to those students whose year of birth is between 1969 and 1981. Note the use of the
Boolean operator AND. This ensures that both parts of the criterion are true. Try substituting AND
with OR. See what records are returned now. Can you explain why this happens?
7.4
Comparison operators
The greater than and less than signs (> and <) are known as comparison operators and it’s important
to be clear what they mean. Which of the following years are included by the criterion used here,
>1980 AND <1985:
1980?
1981?
1984?
1985?
The other comparison operators are
>=
greater than or
equal to
<=
less than or
equal
=
equal to
<>
not equal to
Like
similar to
To save your query:

Choose Save from the File menu

In the dialog-box type a name that describes the query, for instance qryStudent_DOB and
click OK

Close the query
The query will now be listed in the database window. You might wonder why the Save As dialog-box
is not like other Save As dialog-boxes in Windows applications. The reason is that you are not saving
the query as a file. Your queries, as well as tables, forms and everything, are all stored within the one
database file.
36
What you have saved is the query not the answer. If you add new records for films from the 1950s,
and then run the query again, you will get a different answer, including the newly added (or changed)
records.
7.5
More on the Modules report
Now that you know your way around the query grid we will update the Modules report to replace the
numerical data displayed in the Under/Post Graduate column with textual data.
Make sure the database window is visible and that Queries is selected. Create a new query and
create the following query:
Add the two tables tblModule and tblSchoolDept. You will notice that the relationship between
school_dept_id in tblModule and school_dept_id in tblSchoolDept is established automatically. This
is because the field names are the same. At this time it is not necessary to set referential integrity.
In the query grid enter the module_id, module_name and acad_year fields from tblModule and the
school_dept field from tblSchoolDept. This will display the selected data from the Modules table but
will show the school rather than is numerical equivalent.
To complete the query we will create a ‘virtual’ field called status to display the module level. Select
the first blank column in the grid and in the Field: row type the following:
status:IIF([under_post]=1,”Undergraduate”,”Postgraduate”)
This will replace the value displayed in the under_post field with the word Undergraduate or
Postgraduate, depending on its underlying value
Make sure there is a tick in the Show: check-box and run the query. If all looks correct save the query
as qryRptModules.
Finally return to the report, rptModule, and open it in design view. In the report properties change the
record source from tblModule to qryRptModules. Run the report. You will see that the Under/Post
Graduate column will now show more understandable data.
37
Section 8: Linking Tables and Setting Relationships
At the moment we have four tables, two forms and two reports. We can input, edit and view data
about students and modules. However we have no means of linking specific students with specific
modules, or for viewing reports with all of this data shown. What we need to do now is to link the
tables together by setting relationships between them.
8.1
Relating Tables
To set relationships for the tables in the database go to the Tools menu and select Relationships...
Add the four tables by clicking the
button.
toolbar button. Highlight the tables and click the Add
If the relationships are not added automatically create them as follows:

Locate the student_id field in the tblStudent table. Click on this field and drag it over the
student_id field in the tblStudMod table. A dialog box will open which allows you to set join
parameters. We will accept the default settings for now so click OK.

Locate the module_id field in the tblModule table. Click on this field and drag it over the
module_id field in the tblStudMod table. A dialog box will open which allows you to set join
parameters. We will accept the default settings for now so click OK.

Locate the school_dept_id field in the tblSchoolDept table. Click on this field and drag it
over the school_dept field in the tblModule table. A dialog box will open which allows you to
set join parameters. We will accept the default settings for now so click OK.
It is not strictly necessary to create relationships here as relationships can be set in individual queries.
However, if you set relationships in the Relationships window these will be created for you
automatically when you build a query using linked tables.
The Relationships window with the completed database is shown on the next page.
38
The Relationships window with all relationships set
8.2
Referential Integrity
Key fields
There are several reasons for defining fields as key-fields, one of which is that it enables Access to
establish “referential integrity” between linked tables. This means, roughly speaking, that Access can
ensure that you don’t enter inconsistent data in your linked tables. For example, it will prevent you
from referring to a student in the tblStudMod table if a related student record does not occur already
in the tblStudent table.

Close the Relationships window by clicking on the cross in its top right corner

In the Database window click the Tables tab

Click on the tblStudent table

Click Design to go to Table Design View

Notice the little key icon beside the student_id field, indicating that it is the primary key
The way to make a field a primary key is to select the field by clicking, and then click the Key
button on the toolbar. Clicking this button again will cancel the key. Don’t do this now, as we
want to leave the student_id field as the primary key.

Close the tblStudent table

Open the tblModule table in Table Design View

Note that the module_id is marked as a primary key and then close the table

Open the tblStudMod table in Table Design View

Note that both fields in this table are marked with the key symbol, meaning that both fields
together constitute the primary key. The student_id and module_id fields together constitute
the primary key, which means that:
39

a student ID can appear more than once in the table

a module number can appear more than once in the table

any particular pairing of a student ID with a module number can only appear once
Enforcing referential integrity in the Relationships window
Having seen what is meant by a key field, we’ll go back to the Relationships window to learn more
about the relationships between our three tables

Choose Relationships from the Tools menu

Point at the line running from tblStudMod to tblStudent and click.
If you have clicked in the right place the line will become thicker, indicating that you have
selected the relationship. It is quite hard to click in exactly the right place, so you may have to
try several times before successfully selecting the relationship.

Choose Edit Relationship from the Relationships menu
This command will not be available unless you have succeeded in selecting a relationship.
The dialog-box shows you which fields are involved in the
relationship, and that the relationship is “one-to-many” (both
of which we knew already), and also what sort of referential
integrity is in force.
The significant point for our database is that the Cascade
Delete Related Records option is turned ON. Now, if you
delete a student from the tblStudent table, all records in the
related table (tblStudMod) which refer to the deleted
student will also be deleted. This maintains referential
integrity by ensuring that there are no students referred to in
tblStudMod who are not already in the tblStudent table

We don’t want to make any changes at present, so click Cancel

Now click on the link between tblStudMod and tblModule and choose Edit Relationship
from the Relationships menu

Check that the relationship is defined in just the same way as for the tblStudent / tblStudMod
relationship and then click Cancel

Close the Relationships window
40
Section 9: Manipulating Data Using Linked Tables
In this section we will create a form to allow the data entry of students and the modules which they
study. This form will consist of a main form to show details about a single student and a linked
subform to show details about the modules the student is studying.
9.1
The Finished Students & Modules Form
Head section: Student details
Detail section: Module details
The modules subform will be superimposed on the student form and both will be linked on the
student_id. In this way, when a student is selected on the main form the subform will automatically
move to the corresponding record(s) in the tblStudMod table.
Note that the upper section of the form contains data about the student and the lower sections shows
repeating data about the modules the student is studying.
In order to create this view of the data we need to create two forms; the main student form and the
modules subform. The student form will be populated by the tblStudent table but the subform needs
to use a query based on three tables – tblModule, tblStudMod and tblSchoolDept.
41
9.2
The Main Student/Module Form
The Students/Modules form is created in a similar way to the frmStudent form you created earlier in
the course. The main difference is that all the student controls on the form are placed in the Form
Header section, not the Detail section. The details section will be the section where we place the
modules subform, so extend the details section in preparation for this. When you have completed the
form save it as frmStudMod.
Drag the controls onto the form and arrange them to suit. When you are happy enter the properties
for the form as instructed below.
frmStudMod in design view
42
9.3
Properties for frmStudMod
Ensure the tblStudent table is selected
This will display as the form’s title.
Set to Single Form to show only one
complete record at a time.
When the form is a Single Form there is
no need to display vertical and horizontal
scroll bars
When the form is a Single Form there is
no need to display Record Selectors
(the strip down the left side of the form
when showing multiple records)
Set this to No to prevent the form from
maximising to fill the screen
Set this to Yes to make the form appear
in the centre of the screen
43
9.4
The Modules Subform
As stated earlier this form differs slightly, in that it uses a query to populate the form. This query uses
three linked tables, the tblModule, tblStudMod and tblSchoolDept.
The Query
Start a new query and add the three tables, tblModule, tblStudMod and tblSchoolDept.

Drag the student_id and module_id fields from the tblStudMod table into the design grid

Drag acad_year from the tblModule table into the grid (We don’t need the module_id as it is
already represented from the tblStudMod table)

The link between the two tables on module_id should be set automatically but if not, click and
hold the module_id in the tblModule table and drop it on the module_id in the tblStudMod
table.

Drag the school_dept field from the tblSchoolDept table into the design grid.

Save the query as qryFrmStudMod. The prefix qry denotes that this object in the database is
a query and the name suggests that the query is used in the frmStudMod form.
qryFrmStudMod in design view
44
9.5
frmSubStudMod
This form is created in a similar way to the frmStudent form you created earlier in the course. There
are a number of differences however:

The Record Source for the form is our newly-created query qryFrmStudMod

The labels are placed in the Form Header section, not the Detail section. The details section
is the section where we place the controls which display the module data. This way the data
can repeat but the labels become column headings.

The form will be set to display continuous data, i.e. it will display multiple records
simultaneously if they exist.

The module_id text box will be replaced by a dropdown combo box to select the module_id
45
Ensure qryFrmSubStudMod is selected
Set to Continuous Forms to show
multiple records
Show vertical scrollbars only
Shows record selectors
Accept the default settings for all
other properties
When you are happy that you have completed the form save it as frmSubStudMod. The name
suggests that this is a subform on the form frmStudMod.
9.7
Linking the form and subform
Open frmStudMod in Design View, ensure that it is displayed in a window and move the window on
the screen so that you can also see the Database Window.
46
47
Select the form frmSubMovAct and drag it onto the Detail Section of the form frmStudMod and drop
it into position. Don’t worry if it is not positioned correctly at the moment, you can reposition it later.
Delete the caption on the subform. You will find this caption positioned on the top-left corner of the
subform.
Now you can place the subform in its final position.
48
If the values have not been set
automatically enter student_id in
these two fields
By entering student_id in the Link Child Fields and Link Master Fields you set the reference
between the source tables and query behind these two forms.
When a student is chosen on the main form the subform will update automatically to show only those
records in the tblStudMod table with matching student_id.
When a student is entered into the database using frmStudMod and a module is added to his or her
record the values in the student_id and module_id fields will be automatically entered in a new record
in the tblStudMod table.
The last thing to do is to size the forms as you did when you created the frmStudent and frmModule
forms. Now try adding some modules to students’ records.
49
8.9
Deleting records
Click this button to delete a record
If you delete a record in the main form, you are deleting a record from the tblStudent table.
Access will delete the corresponding records in the tblStudMod table, but will not delete the modules
from the tblModule table.
If you delete a record in the subform, you are only deleting a record from tblStudMod. Although
the module’s details will no longer be displayed in the subform, nothing will be deleted from the
tblModule table.
Even if you delete all the records in the subform, you will not delete a module – you will simply
have a module without any links to students.

Go back to Forms tab and open the form

Delete some of the records that you have just entered
The picture below reminds you that it is important to notice where the cursor is before you click the
Delete Record button.
Q.
The cursor is positioned in the Module field. If you delete this record what do you think will be
removed from the table(s)?
Q.
In order to delete Malcolm Wilson from the database where should you position the cursor prior
to clicking the delete button? Will you also delete the modules he is studying, or only the
references pertaining to Malcolm?
50
Appendix 1: Data Types
You can use the DataType property to specify the type of data stored in a table field. Each field can
store data consisting of only a single data type.
The DataType property uses the following settings.
Setting
Type of data
Size
Text
(Default) Text or combinations of text
and numbers, as well as numbers that
don't require calculations, such as
phone numbers.
Up to 255 characters or the
length set by the FieldSize
property, whichever is less.
Microsoft Access does not
reserve
space
for
unused
portions of a text field.
Memo
Lengthy text or combinations of text
and numbers.
Up to 65,535 characters. (If the
Memo field is manipulated
through DAO and only text and
numbers [not binary data] will be
stored in it, then the size of the
Memo field is limited by the size
of the database.)
Number
Numeric data used in mathematical
calculations. For more information on
how to set the specific Number type,
see the FieldSize property topic.
1, 2, 4, or 8 bytes (16 bytes if the
FieldSize property is set to
Replication ID).
Date/Time
Date and time values for the years 100
through 9999.
8 bytes.
Currency
Currency values and numeric data
used in mathematical calculations
involving data with one to four decimal
places. Accurate to 15 digits on the left
side of the decimal separator and to 4
digits on the right side.
8 bytes.
AutoNumber
A unique sequential (incremented by 1)
number or random number assigned by
Microsoft Access whenever a new
record is added to a table. AutoNumber
fields can't be updated. For more
information, see the NewValues
property topic.
4 bytes (16 bytes if the FieldSize
property is set to Replication ID).
Yes/No
Yes and No values and fields that
contain only one of two values (Yes/No,
True/False, or On/Off).
1 bit.
51
Setting
Type of data
Size
OLE Object
An object (such as a Microsoft Excel
spreadsheet,
a
Microsoft
Word
document, graphics, sounds, or other
binary data) linked to or embedded in a
Microsoft Access table.
Up to 1 gigabyte (limited by
available disk space)
Hyperlink
Text or combinations of text and
numbers stored as text and used as a
hyperlink address. A hyperlink address
can have up to three parts:
Each part of the three parts of a
Hyperlink data type can contain
up to 2048 characters.
text to display — the text that appears
in a field or control.
address — the path to a file (UNC path)
or page (URL).
subaddress — a location within the file
or page.
screentip — the text displayed as a
tooltip.
The easiest way to insert a hyperlink
address in a field or control is to click
Hyperlink on the Insert menu.
Lookup Wizard
Creates a field that allows you to
choose a value from another table or
from a list of values by using a list box
or combo box. Clicking this option
starts the Lookup Wizard, which
creates a Lookup field. After you
complete the wizard, Microsoft Access
sets the data type based on the values
selected in the wizard.
The same size as the primary key
field used to perform the lookup,
typically 4 bytes.
Remarks
Memo, Hyperlink, and OLE Object fields can't be indexed.
Tip: Use the Currency data type for a field requiring many calculations involving data with one to
four decimal places. Single and Double data type fields require floating-point calculation. The
Currency data type uses a faster fixed-point calculation.
Caution: Changing a field's data type after you enter data in a table causes a potentially lengthy
process of data conversion when you save the table. If the data type in a field conflicts with a changed
DataType property setting, you may lose some data.
Set the Format property to specify a predefined display format for Number, Date/Time, Currency, and
Yes/No data types.
52
Appendix 2: The Data Dictionary
Every item you include within your database is an individual object, each with its own attributes. For
example, when you create a form you place various objects on the form; labels, text boxes, buttons,
etc. Each of these individual items, and the form itself, is defined by its attributes (length, height,
position, data type, etc.). Some objects have different attributes depending on its function. This is
similar to the properties of the data types we defined in when we created the tables for our sample
database. A data dictionary is used to define and constrain every object in a database application.
In order to properly document the database all parts of it should be defined and constrained before
any construction is undertaken. A well documented application is easy to pass on to someone else to
maintain or further develop. The new owner needs only to read the data dictionary and they should be
able to understand the construction and constraints set at the time of initial design. It follows therefore
that any additions or changes made by the new owner should also be documented in the data
dictionary.
The prime need in the data dictionary is to define the data types, tables, etc., including the field sizes,
constraints and default values. We did this at the beginning of the course when we designed the data
tables.
Another fundamental need within a data dictionary is to clearly set out the rules for naming objects.
Microsoft Access will give a default name to every object used in a database, but these are rarely
useful for later referral. It is good practice to rename each object when you create it to conform to the
rules you have defined in the data dictionary.
Suggestions for a Naming Convention
Controls are graphical user interface objects, such as text boxes, check boxes, scroll bars, or
command buttons that let users control the program. You use controls to display data or choices,
perform an action, or make the user interface easier to read. In Microsoft Access names of fields,
objects and controls:
Can be up to 64 characters long.
Can include any combination of letters, numbers, spaces, and special characters except a period (.),
an exclamation point (!), an accent grave (`), and brackets ([ ]).
Cannot begin with leading spaces.
Cannot include control characters (ASCII values 0 through 31).
Cannot include a double quotation mark (") in table, view, or stored procedure names in a Microsoft
Access project.
When you name a field, control, or object, it's a good idea to make sure the name doesn't duplicate
the name of a property or other element used by Microsoft Access; otherwise, your database can
produce unexpected behaviour in some circumstances. For example, if you refer to the value of a field
called Name in a table NameInfo using the syntax NameInfo.Name, Microsoft Access displays the
value of the table's Name property rather than the value of the Name field.
In order to correctly identify an object in a database it is desirable to prefix its name with a three letter
identifier. Set out below are some suggestions for a standard method for doing this. Note that spaces
have been removed in the examples shown, with each individual part of the name being delineated
with an uppercase letter. Although you can include spaces in field, control, and object names, most
examples in the Microsoft Access documentation show field and control names without spaces
because spaces in names can produce naming conflicts in Microsoft Visual Basic for Applications in
some circumstances.
53
Prefix
Object Type
Example
tbl
Table object
tblStudent
qry
Query object
qrySelectStudent
frm
Form object
frmModule
rpt
Report object
rptStudentRecord
txt
Textbox on a form or report
txtStudentID
lbl
Label on a form or report
lblStudentName
cbo
Drop-down combo box on a form
cboModule
lst
List box on a form
lstModule
cmd
Command button on a form
cmdCloseForm
chk
Check box on a form
chkShowRecord
opt
Options group on a form
opt Level
lin
Graphical line on a form or report
linDiv1
box
Graphical rectangular box on a form or report
boxBackMain
54
Download