qryRoomGrid:
SELECT tblRoom.roomID, tblRoomType.description, qryRoom1.state AS [21-10-02],
qryRoom2.state AS [22-10-02], qryRoom3.state AS [23-10-02]
FROM tblRoomType INNER JOIN (((tblRoom
LEFT JOIN qryRoom1 ON tblRoom.roomID = qryRoom1.roomID)
LEFT JOIN qryRoom2 ON tblRoom.roomID = qryRoom2.roomID)
LEFT JOIN qryRoom3 ON tblRoom.roomID = qryRoom3.roomID)
ON tblRoomType.roomType = tblRoom.roomType;
qryRoom1:
SELECT roomID, state FROM tblRoomState
WHERE tblRoomState.date=#10/21/2002#;
Fig 
7.4
Multiple join and matrix presentation
7. Access and SQL 
141
Pdf form change font size - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
add fillable fields to pdf online; add print button to pdf form
Pdf form change font size - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
add signature field to pdf; add image to pdf form
7.5 Dynamic matrix presentation 
In this section we show how to make a dynamic matrix 
as a Form in datasheet view. Compared to showing the 
matrix as a query table, the Form approach allows us to 
control the presentation better and let the program 
"see" what the user selects.  
Figure 7.5 shows the details of the solution. The form 
at the top left is an outline of the hotel system's rooms 
window. The user can enter the first date of the period, 
click Find, and the system updates the subform (the 
datasheet) to show room occupation from that date and 
on. Initially, we assume that the period is always three 
days. 
QryRoomGrid is exactly as the version in the previous 
section, except for the AS parts of the SELECT clause. 
The room states are now renamed to C1, C2, C3 rather 
than the dates in the period. This ensures that the states 
always end up in the proper form fields, no matter 
which dates we work with.  
The datasheet is based on the subform shown to the 
right. This subform was generated with the Form 
Wizard using qryRoomGrid as the record source. It 
uses a columnar layout (see section 3.2.1). The date 
fields are bound to C1, C2, and C3 in the query. (The 
names of the controls will be cbo1, cbo2, etc., but this 
is not important.) We have manually given the labels 
the names L1, L2, L3. 
The program doesn't have to compute the SQL-
statement in qryRoomGrid. This query is based on the 
named queries qryRoom1, 2, and 3, and the program 
has to compute these when the user clicks Find. The 
figure shows the Click procedure for cmdFindRoom
First the procedure stores the main part of the query in 
the string variable s. This is only to save a lot of 
writing since the string is used in three queries. 
Next the procedure computes the SQL-statement in 
qryRoom1. The procedure computes qryRoom2 and 
qryRoom3 in the same way. Note how we address the 
named query from VBA, using 
CurrentDB.QueryDefs
Notice how we compute the date comparison, for 
instance 
SELECT . . . WHERE date = 37550; 
We explicitly convert the contents of txtDate (the user's 
search criterion) to Double. The &-operation will then 
translate it to the string "37550". (See more on date 
comparison in section 5.2.3.) 
Changing the headings 
The next part of the procedure sets the dynamic 
headings. It sets the captions of the three labels to the 
proper date. Notice how we first address the subform 
control, then the Form connected to the control, and 
finally the label in the form. 
We use the automatic date conversion when setting the 
caption. It uses the regional date format - exactly what 
we want when showing the date to the user. 
Updating the subform 
Finally the procedure has to update the subform 
according to the new queries. This is done by setting 
the record source once more to qryRoomGrid. This 
causes Access to compute the query from scratch. 
Updating the various parts of a form is a mystery - at 
least to me. Through experiments I have found the 
solution above. It seemed more natural to use the built-
in requery method for a form, for instance in this way: 
Me.subRoomGrid.Form.Requery 
However, Access (or the Jet engine) doesn't figure out 
that something has changed in the named queries, and 
as a result doesn't update anything. 
Handling varying number of columns 
The techniques above can be generalized to a period of 
N days, where N is defined by the user. First the Click 
procedure needs to compute also qryRoomGrid with 
C1, C2 . . . CN and N nested parentheses. This is not 
too hard. 
We might create a variable number of named queries in 
a loop where i runs from 1 to N. The inner part of the 
loop would use this statement to create a named query: 
Call currentdb.CreateQueryDef ("qryRoom" & i, "select . . . ") 
However, making a variable number of fields on the 
form cannot be made dynamically. Adding fields can 
only be made in design mode. 
In practice we have to plan for a maximum number of 
date columns, for instance 20. We construct 
fsubRoomGrid with 20 date fields, cbo1, cbo2 . . . 
cbo20, and bind them to C1, C2 . . . C20. We also 
make 20 named queries, qryRoom1 . . . qryRoom20. 
With a proper Click procedure this works fine except 
for a little detail: The datasheet always shows 20 
columns even if the user only asked for 3. The last 
columns will be blank if the query didn't generate 
something.  
This is easy to correct. The procedure can hide the last 
columns. It can for instance hide the 4th date column in 
this way: 
Me.subRoomGrid.Form!cbo4.ColumnHidden=True
In the procedure, the number 4 is given by a variable, 
for instance j. The statement would then be: 
142 
7. Access and SQL 
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Flatten form fields. outputFilePath = Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing TargetResolution = 150F; // to change image compression
change font in pdf fillable form; pdf save form data
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Flatten form fields. outputFilePath = Program.RootPath + "\\" 3_optimized.pdf"; 'create optimizing TargetResolution = 150.0F 'to change image compression
add text field pdf; pdf form save in reader
Me.subRoomGrid.Form("cbo" & j).ColumnHidden=True
qryRoomGrid:
SELECT tblRoom.roomID, tblRoomType.description, 
qryRoom1.state AS C1, qryRoom2.state AS C2, qryRoom3.state AS C3
FROM tblRoomType INNER JOIN (((tblRoom LEFT JOIN qryRoom1 . . .
frmRooms:
Private Sub cmdFindRoom_Click()
Dim s As String
s = "SELECT roomID, state From tblRoomState WHERE date = "
CurrentDb.QueryDefs!qryRoom1.SQL = s & CDbl(Me.txtDate) & ";"
CurrentDb.QueryDefs!qryRoom2.SQL = s & CDbl(Me.txtDate+1) & ";"
CurrentDb.QueryDefs!qryRoom3.SQL = s & CDbl(Me.txtDate+2) & ";"
Me.subRoomGrid.Form!L1.Caption = Me.txtDate
Me.subRoomGrid.Form!L2.Caption = Me.txtDate + 1
Me.subRoomGrid.Form!L3.Caption = Me.txtDate + 2
Me.subRoomGrid.Form.RecordSource = "qryRoomGrid"
End Sub
Fig 7.5  Dynamic matrix presentation 
Column headings are the label captions. 
Label names: L1, L2, L3
Set RecordSourceagain. 
(Requerydoesn’t notice that the 
named queries changed.)
txtDate
subRoomGrid
. . . WHERE date = 37550;
. . . WHERE date = 37551;
See section 5.5.7 for more on hiding columns, 
adjusting their width, etc. 
The real rooms window 
In the real hotel system, the user sees the days around 
the first day he asks for and the days around the last 
day. When the period is long, all the days in the middle 
are lumped together with a heading saying ". . . ". 
The queries are also more complex because the user 
can ask for rooms that are free in a certain period, 
rooms of a certain type, etc. However, the solution 
follows the ideas above. 
Another issue is to let the user select rooms and period 
from the matrix. This is discussed in section 5.5.8.
7. Access and SQL 
143
C# PDF insert text Library: insert text into PDF content in C#.net
Powerful .NET PDF edit control allows modify existing scanned PDF text. Ability to change text font, color, size and location and output a new PDF document.
create a fillable pdf form in word; create a pdf form that can be filled out
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
Able to edit and change PDF annotation properties such as font size or color. Abilities to draw markups on PDF document or stamp on PDF file.
create a pdf form; adding text to pdf form
7.6 Crosstab and matrix presentation 
The previous sections show how hard it is to make a 
data matrix. So there is a good reason that Access 
provides a non-standard SQL feature for making data 
matrices: the Crosstab query. 
A simple example - room number versus date 
Figure 7.6A shows a simple example. We want a 
matrix with dates running horizontally and rooms 
running vertically. In the matrix we show the room 
state for each date (as a numeric code for simplicity).   
This matrix is made with the query shown to the right. 
It is based on tblRoomState. We have used the menu 
Query -> Crosstab Query 
to add the Crosstab gridline to the grid. We have 
marked roomId as a row heading and date as a column 
heading. Note how we group data by roomId and date. 
Each group is a bundle of room state records to be 
shown somehow in the matrix cell. In the hotel system, 
each bundle will contain at most one record since a 
room cannot have more than one state for a given date. 
This is just how it happens to be in the hotel case, 
however. 
Finally, we have marked state as the value to be shown 
inside the matrix. Since a crosstab is a kind of 
aggregate query, we can only show data as aggregate 
functions. In this case we have used the aggregate 
function First. Since the bundle has at most one room 
state, we could as well have used Max or Min. 
The figure also shows the SQL version of the query. 
The inner part of the query is an ordinary SELECT - 
GROUP BY query. The group-by attribute becomes 
the row heading. There may be several group-by 
attributes, and then there will be several row headings. 
The first part of the query is a non-standard thing, the 
TRANSFORM part. It defines the value to be shown in 
a cell. The last part is another non-standard thing, the 
PIVOT part. It defines the attribute to be used as the 
column heading. 
Note the query name: qxtbRoomGrid. The prefix qxtb 
tells the programmer that it is a crosstab query. 
Fig 7.6A Crosstab query
qxtbRoomGrid:
TRANSFORM First(tblRoomState.state) AS FirstOfstate
SELECT tblRoomState.roomID
FROM tblRoomState
GROUP BY tblRoomState.roomID
PIVOT tblRoomState.date;
Column heading
Row heading
Column heading
Value in cell –
aggregate data
Row heading
Query -> 
Crosstab
Ordinary SELECT
. . . GROUP BY
144 
7. Access and SQL 
C# PDF Sticky Note Library: add, delete, update PDF note in C#.net
Allow users to add comments online in ASPX webpage. Able to change font size in PDF comment box. Able to save and print sticky notes in PDF file.
add form fields to pdf online; add forms to pdf
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
PDF document, keeps the elements (like images, tables and chats) of original PDF file and maintains the original text style (including font, size, color, links
changing font size in a pdf form; convert word to editable pdf form
Outer join and several row headings 
Figure 7.6B shows a more complex crosstab. We want 
to show also the room description. Furthermore we 
want to show all rooms, whether they are used or not. 
(In the top of the figure, room 22 wasn't shown because 
it wasn't used.) 
The new crosstab is based on three tables: tblRoom-
State, tblRoom, and tblRoomType. We use an outer 
join for tblRoomStates and tblRoom in order to include 
all rooms. We mark roomID  and description as row 
headings. 
The result is as shown. We have now got room 22 in 
the matrix. Unfortunately, we have also got a strange 
column with the heading <>. It is caused by the outer 
join producing a row with a Null date since no room 
state matched room 22. 
Figure 7.6C shows how to get rid of the Null column 
(<>). Instead of grouping by date, we group by a 
computed date: 
d: IIf( IsNull(date), #24-10-02#, date) 
The effect of this is that Null dates are replaced by a 
specific date in the range of dates we consider. Records 
with a Null date also have a Null state, so they don't 
show up as being used. 
Unused room 
now included
Null date for the 
unused room
Fig 7.6B   Outer join and two row headings
Fig 7.6C Avoiding the Null date
Avoiding the Null date
Dates with no used 
rooms are excluded
7. Access and SQL 
145
Generate Barcodes in Web Image Viewer| Online Tutorials
Change Barcode Properties. RasterEdge OCR Engine; PDF Reading; Encode & Decode JBIG 2 Files; Compress & Twain Scanning; DICOM Reading; Form Recognition & Processing
change text size pdf form; change tab order in pdf form
VB.NET Image: Visual Basic .NET Guide to Draw Text on Image in .
for example, a VB.NET Windows Form application. Please note that you can change some of the provide powerful & profession imaging controls, PDF document, image
create a fillable pdf form; can reader edit pdf forms
Fig 7.6D Restricting the date range
Avoiding the Null date
Restricting the date range 
to 24/10 -27/10
Dates with no used 
rooms are excluded
Restricting the date range 
In practice we cannot show a matrix with all the dates. 
It would require hundreds of columns. We want to 
restrict the query to a specific range of dates.  
In Figure 7.6D we restrict the range of computed dates 
to those between 24-10-02 and 27-10-02 (European 
date format). 
The result is as shown. We got rid of the <> column 
and see only the dates in the restricted range. The only 
problem is that we don't get a column for every date in 
the range. For instance 26-10-02 is missing because no 
room is used this date. 
Including all dates in the range 
We might include all dates in the range by means of an 
additional outer join. To do this we need a table of all 
dates in the range, but this is not an existing part of the 
data model. The program might generate such a table, 
but let as utilize another feature in the crosstab. 
In Figure 7.6E we have added an IN-clause to the 
PIVOT part of the SQL statement. The PIVOT part 
specifies the column headings, and now we have 
explicitly asked for all the dates in the range. Notice 
that we have to use US date formats in SQL. 
The IN-clause also causes the computer to discard all 
dates that are not in the IN-list. Thus we don't need the 
WHERE-clause anymore. 
If you try to look for the IN-clause in design view (the 
query grid), you won't find it. It has become a property 
of the query grid. To see it, right click inside the 
diagram area and select Properties  
Unfortunately, the result looks ugly. The column 
headings have the programmer format, and I have not 
been able to find a way to change it. For other fields of 
the query, we can set field properties, for instance the 
display format. But not for the column headings. (I 
would call this a bug in Access.) 
The IN-trick works okay if we use something else than 
dates for the headings. We will see an example now.  
Using the query in a subform 
In a good user interface, we wouldn't present the query 
directly to the user, but embed it in a subform. To make 
the column headings change dynamically, we make the 
same trick as in section 7.5.  
We let the query generate column headings that are the 
texts C0, C1, C2 etc. They will bind to the controls C0, 
C1, etc. in the subform. The program will dynamically 
set the labels of these controls to the real dates.  
146 
7. Access and SQL 
Generate Image in .NET Winforms Imaging Viewer| Online Tutorials
Change Barcode Properties. Multi-page Tiff Processing; RasterEdge OCR Engine; PDF Reading; Encode & JPEG 2000 Files; Twain Scanning; DICOM Reading; Form Recognition
allow users to save pdf form; pdf form save with reader
Fig 7.6E Including all dates
qxtbRoomGrid4:
TRANSFORM First(tblRoomState.state) AS FirstOfstate
SELECT tblRoom.roomID, tblRoomType.description
FROM tblRoomType INNER JOIN (tblRoom LEFT JOIN tblRoomState ON  . . . )
GROUP BY tblRoom.roomID, tblRoomType.description
PIVOT IIf(IsNull(date), #10/24/2002#, date) 
IN(#10/24/2002#, #10/25/2002#, #10/26/2002#, #10/27/2002#);
In design view, this list appears as the 
Column Heading property of the query
Required column headings
Headings cannot be formatted
(Looks like an error in Access)
qxtbRoomGrid5:
TRANSFORM First(tblRoomState.state) AS FirstOfstate
SELECT . . .
PIVOT IIf(IsNull(date), "C0", "C" & (date-#10/24/2002#)) 
IN ("C0", "C1", "C2", "C3");
Column headings are used as 
control names in the subform
26-10-2002 is 
now included
The bottom of Figure 7.6E shows the query to be used. 
We compute the column heading with this expression: 
IIf( IsNull(date), "C0", "C" & (date - #10/24/2002#)) 
Null dates are replaced by the text C0. Other dates are 
replaced by a C followed by the date index: 0 for the 
first day in the period, 1 for the next day, and so on. 
Notice that although the IN-clause has the texts in 
quotes, the result shows the text in user format without 
quotes. 
Crosstab restrictions 
Crosstab is great for quick and dirty solutions where 
you want to show the relationship between two 
attributes in a query. This is for instance the case for 
experimental data mining where the user defines 
queries on his own. 
However, when designing a production system such as 
a hotel system, Crosstab provides too little flexibility. 
Crosstab can for instance not handle subqueries or 
Having, even if they occur in named queries. 
7. Access and SQL 
147
8. References 
Jennings, Roger (1999): Using Microsoft Access 2000 
- special edition. ISBN 0-7897-1606-2. QUE, Indi-
anapolis (1300 pages). An advanced textbook for 
learning how to make Access applications. Only 
200 of the pages use Visual Basic. Comprehensive 
lists of all icons and shortcut keys, all functions 
used in expressions, all date formats, etc. Also cov-
ers using Access for Web applications and com-
bining Access with other MS-Office applications 
("automation"). The index in this version is fine. 
(The 1997 version had a useless index.) 
Litwin, Paul; Getz, Ken & Gilbert, Mike (1997): 
Access 97 - Developer's Handbook. Sybex, San 
Francisco. ISBN 0-7821-1941-7 (1500 pages). The 
professional developer's handbook for making 
Access applications with Visual Basic. Has a 
comprehensive chapter on SQL and the differences 
between Access SQL and standard SQL. Also cov-
ers how to combine Access with other MS-Office 
applications in a programmed fashion ("automa-
tion"), multi-user aspects, and configuration man-
agement. It is a book for looking up advanced top-
ics, not a book to study from the beginning. 
148 
8. References 
Index 
! (bang operator), 41, 69 
! versus dot, 71 
" (quotes inside quotes), 74 
" (strings), 122 
#Error, 40 
#Name?, 41 
& (concatenation, VBA), 124 
& (label control), 22 
* (all fields), 52 
[ ] (name parenthesis), 40, 54, 91 
+ - * / (VBA), 124 
< <= . . . (VBA), 124 
= (assignment, VBA), 116 
= (computed control), 40 
A 
Abs function (VBA), 130 
AbsolutePosition (recordset), 108 
Access file formats, 8 
Access versions, 6 
action queries, 134 
Activate (form event), 86 
ActiveForm, 110 
AddNew (recordset), 108 
addressing forms and objects, 69 
addressing variables (VBA), 122 
AfterUpdate (form event), 86 
AfterUpdate (text box event), 72, 
78 
aggregate query, 58 
- editing the data, 67, 134 
- in subform, 66 
alias (query, AS), 58 
align 
- controls, 20 
- controls (grid), 18 
- text in text box, 28 
ALL (SQL), 138 
AllowAdditions (form), 87 
AllowDeletions (form), 87 
AllowEdits (form), 87 
And, Or . . . (composite search), 
76 
And, Or, Not . . . (VBA), 124 
application title (startup settings), 
48 
area selection (datasheet, VBA), 
94 
arrays (data type, VBA), 120 
AS (query, alias), 58 
Asc (VBA), 128 
assignment (VBA), 116 
autoformat (on form), 21 
AutoNumber field, 11 
- setting the value, 134 
average (AVG, query), 60 
B 
bang operator ( ! ), 41, 69 
- versus dot, 71, 122 
BeforeUpdate (form event), 86 
BeforeUpdate (text box event), 78 
BETWEEN (operator), 124 
BETWEEN (SQL), 138 
BOF (begin-of-file, recordset), 
108 
BookMark (recordset), 108 
Boolean field, 11 
Border Style (on form), 21 
bound column (in combo box), 26 
bound controls, 40 
bound forms, 32 
bound forms (main and subform), 
66 
bound recordset, 106 
break program, 98 
breakpoints (Visual Basic code), 
82 
button. See command button 
C 
calendar control, 22 
calendar control (DT Picker), 22 
Cancel (button property), 84 
capital letters 
- query, 54 
- Visual Basic, 41, 81 
Caption (on form), 21 
Caption (on text box label), 28 
Cartesian product (query), 54 
Case Select (VBA), 116 
Change (event), 73 
Change (text box event), 78 
checkbox 
- drawing, 22 
Choose function (VBA), 128 
Chr (VBA), 128 
CInt, CDate . . . (VBA), 125 
class module. See module 
Click (command button), 84 
clone (recordset), 104, 106, 108 
Close (form event), 87 
Close (recordset), 108 
color 
- datasheet, 34, 42 
- on controls, 22 
- value dependent, 42 
column format, 136 
column hidden (VBA), 94 
column sequence (subform), 34 
column sequence (VBA), 94 
column width 
- combo box, 34 
- datasheet view, 34 
- datasheet, VBA, 94 
combo box 
- column width, 34 
- enumeration type, 14, 24 
- hiding the code (Column 
Width), 34 
- table lookup, 26 
- with a New choice, 136 
command (in menus), 48 
command button, 84 
- Cancel (property), 84 
- Click (event), 84 
- Default (property), 84 
- drawing and Wizard, 18 
comment (VBA), 116 
compact database, 15 
Compare Option (VBA), 128 
comparison of dates, 76 
comparison of texts (Like), 64, 
124 
composite search, 76 
computed controls, 40 
computed fields (query), 58 
computed SQL, 74, 76, 102 
conditional color and format, 42 
conditional statements (VBA), 
116 
constant list (Visual Basic help), 
82 
constants (VBA), 122 
- Null, Empty, Nothing, 122 
continuous form, 30 
Control Box (on form), 21 
Control Source (text box), 28 
control tips (pop-up help), 50 
controls, 70 
- adding a field, 34 
- align, 20 
- align (grid), 18 
- bound and unbound, 40 
- calendar, 22 
- checkbox, 22 
- combo box 
 enumeration type, 24 
 hiding the code (Column 
Width), 34 
 table look up, 26 
- command button, 18 
 properties, 84 
- computed, 40 
- DateTime picker, 22 
- front/back, 22 
- label, 18, 28 
- label (delete/add), 20 
- line, 22 
- moving and sizing, 20 
- name (programmer's), 28 
- option group/radio button, 44 
Index 
149
- rectangle, 22 
- subform, 32 
- tab order, 28 
- tab sheet, 44 
- text box, 18 
 events, 72, 78 
 properties, 28, 72 
ControlTip (text box), 28 
conversion functions (type, 
VBA), 125 
correlated query (SQL), 138 
COUNT (query), 60 
create 
- controls, 18 
- database, 6 
- event procedure, 80 
- forms, 18 
- menu, 46 
- module (class), 110, 112 
- relationships, 12 
- single record (VBA), 88 
- table and fields, 7 
criteria (composite), 76 
criteria (live search), 74 
criteria (user-defined), 64 
Crosstab (SQL), 144 
CRUD (Create, Read . . . ) 
- form, 87, 90 
- recordset, 102 
- SQL, 134 
currency (data type), 120 
Current (form event), 78, 86 
current record (in a form), 38, 93 
current record (in recordset), 68, 
104 
CurrentDb, 102, 134 
D 
DAO 3.6 (recordset), 102 
data entry 
- into table, 8 
- shortcut keys, 8 
data type, 10, 120 
- array, 120 
- AutoNumber, 11 
- AutoNumber (setting the 
value), 134 
- Boolean, 11, 120 
- Byte, 120 
- currency, 120 
- date/time, 11, 120 
- double, 11, 120 
- enumeration (lookup), 14 
- foreign key (type match), 11, 
12 
- form, 120 
- integer, 11, 120 
- long integer, 11, 120 
- memo, 10, 120 
- number, 10 
- object, 120 
- single, 120 
- static, 122 
- string, 120 
- text, 10, 120 
- type, 120 
- variant, 120 
- yes/no, 11 
database 
- compaction, 15 
- creation, 6 
- multiple connectors, 16 
- network structure, 16 
- objects, 68 
- self-reference, 16 
- SQL-engines, 55, 68 
- tree structure, 16 
- versus files, 6 
DataEntry (form property), 88 
datasheet 
- area selection (VBA), 94 
- as subform, 31, 36 
- column hidden (VBA), 94 
- column sequence, 34 
- column sequence (VBA), 94 
- column width, 34 
- column width (VBA), 94 
- font and color, 34, 42 
- mockup, 36 
- sorting, 34 
- versus form view, 38 
date comparison, 76 
date format 
- Format function, 126 
- in controls, 126 
- regional settings, 132 
date/time field, 11 
date/time functions (VBA), 130 
DateCreated (recordset), 108 
DateTime Picker, 22 
dbFailOnError, 134 
Deactivate (form event), 87 
debug (Visual Basic code), 81 
debug window (immediate), 50, 
69 
declarations (variables, VBA), 
120 
Default (button property), 84 
DELETE (record, SQL), 134 
Delete (recordset), 108 
delete event procedures, 81 
designer role, 6 
detail area (connected to a list), 
42 
developer role, 6, 132 
Dialog box (form), 92 
Dim (declaration, VBA), 120 
Dirty (form event), 86 
display formats (regional 
settings), 132 
DISTINCT (SQL), 138 
DLookup, DMin . . . (VBA), 128 
Docking windows, 80 
double field (in table), 11 
dynaset, 52 
- editing the data, 53 
- group by, 61 
E 
Edit (recordset), 108 
Empty (VBA), 122 
Enabled (text box property), 28 
engine (database), 55, 68 
Enter (text box event), 78 
enumeration type 
- combo box, 24 
- table field, 10 
- VBA, 121 
EOF (end-of-file, recordset), 108 
Err (error object), 117 
Error (in computed value), 40 
error handling 
- before update, 78 
- Error preview, 97 
- MsgBox, 50 
- On Error GoTo, 110, 117 
error messages (MsgBox), 50 
events, 72–79 
- Activate (form), 86 
- AfterUpdate (form), 86 
- AfterUpdate (text box), 72, 78 
- BeforeUpdate (form), 86 
- BeforeUpdate (text box), 78 
- Change (text box), 73, 78 
- Click (text box), 84 
- Close (form), 87 
- command button, 84 
- creating event procedures, 80 
- Current (form), 78, 86 
- Deactivate (form), 87 
- deleting event procedures, 81 
- Dirty (form), 86 
- Enter (text box), 78 
- Error (form), 97 
- form, 86 
- form (sequence), 86 
- GotFocus (form), 86 
- GotFocus (text box), 78 
- KeyDown (text box), 78 
- KeyPress (text box), 78 
- KeyUp (text box), 78 
- Load (form), 86 
- logging, 81 
- MouseDown, Click, etc., 78 
- Open (form), 86 
- Resize (form), 86, 100 
- text box, 72 
- text box (sequence), 78 
- Timer, 98 
- Unload (form), 86 
- wait for, 98 
Execute (CurrentDb), 134 
150 
Index 
Documents you may be interested
Documents you may be interested