create pdf thumbnail image c# : Edit pdf form application software tool html windows azure online AccessTutorial8-part967

Fig 
5.
3A  VBA window and debugger
Project Explorer
Object Browser
List of controls
Events in
the control
Project explorer:
One class per form
Code module
if you have created the event procedure while looking 
at the code in debug mode (see page 82). 
The cure may be to select the event procedure from the 
property box and compile the module (Debug -> 
Compile), then close and open the form. 
9.  Create the missing event procedures for txtName as 
shown on the Figure. Use the combo boxes to 
create them. If you have followed the previous steps 
closely, only the Enter procedure should be miss-
ing. 
10. Type the debug statements shown in the proce-
dures, for instance: 
Debug.Print "After", Me.txtName,
Me.txtName.Text
When executed, this statement prints something in 
the Immediate window. We will explain more on 
the Debug statement below.  
Note that VBA automatically capitalizes the words that 
it recognizes. If it doesn't, it may be because you have 
spelled the word incorrectly, but it may also be because 
the word comes after the bang operator (!). VBA can-
not recognize things after the bang at edit time, but it 
will check all the words at execution time. At that time 
it will give you an error message if it cannot recognize 
the word. 
Deleting an event procedure. If you want to delete an 
event procedure, simply delete all the lines of the pro-
cedure. Don't try to delete it on the Event tab. 
Closing the VBA window. You can close the VBA 
window at any time. It only hides the window. Saving 
the code doesn't happen until you close the form it be-
longs to. Sometimes you may want to save the code 
explicitly. Use File -> Save (or Ctrl+S). 
Debug command and event logging 
The statement Debug.Print prints its parameters in the 
Immediate window (also called the debug window). As 
an example, when the AfterUpdate event occurs, the 
event procedure will print the text "After" followed by 
the current Value and Text. The event procedure for 
Change behaves similarly, and as a result, the Immedi-
ate window will show a log of what happened. Try it: 
11. Open the Immediate window with Ctrl+G. Adjust 
the sizes so that you can see the Immediate window 
as well as frmFindStay. 
12. Type something in txtName. The Immediate win-
dow should log what happens. 
This is the hard way to find out exactly which events 
occur and what the situation is at these points. During 
such experiments, you may want to temporarily disable 
some statements. For instance, we might want to dis-
able one of the debug statements to avoid too many 
lines in the Immediate window. 
13. Comment-away statements that you don't want for 
the moment. Set an apostrophe (a "ping") at the be-
ginning of the line. When you move the cursor, the 
line turns green to show that this is a comment for 
humans only. 
5. Access through Visual Basic 
81
Edit pdf form - 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
best pdf form creator; add date to pdf form
Edit pdf form - 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
pdf form creator; convert word to editable pdf form
Breakpoints and debug 
We are able to stop the program in the middle of an 
event procedure. To do this, we set a breakpoint at the 
code line where we want the program to stop. Figure 
5.3A shows a breakpoint in the last event procedure - 
marked with a big dot in the left margin. Try it: 
14. Click at the left margin of the Debug.Print line. The 
dot should appear and the line be high-lighted as on 
the figure. You have set a breakpoint. (Clicking 
again will remove the breakpoint. Don't worry 
about the line Msgbox. We will add it later.) 
15. Click in some other field on FindStay, then click in 
txtName. This generates an Enter event in txtName. 
As a result, the program stops just before executing 
Debug.Print. 
16. Current value. Try moving the cursor to an ex-
pression, for instance the Debug parameter 
Me.txtName. After a moment, VBA shows the cur-
rent value of this expression. You can see the value 
of expressions in the procedure where the execution 
stopped, but not values in other procedures because 
they are not active at present. 
17. You can use the Immediate window to try out vari-
ous statements. The statements are executed as if 
they were written where the breakpoint is. Try for 
instance 
Me.txtName.Text = "abc"
(should change the text in 
the form) 
? Me.subStayList.Form!name
(should print the 
name of the first guest in the list) 
In section 5.1 we used the Immediate window with 
statements such as 
Forms!frmFindStay!txtName = . . .
Now you can use Me. The reason is that now the Im-
mediate window runs in the context of the event proce-
dure. It can address the form object in the same way as 
the program. 
Correcting bugs at breakpoints. Using the Immediate 
window in connection with a breakpoint is an impor-
tant way to find out what the program does. If you find 
an error in the program, you may usually correct it 
while at the breakpoint. However, sometimes VBA 
cannot do the correction, for instance if you delete an 
event procedure. It asks whether you want to "reset the 
project". This question sounds threatening, but simply 
means "stop the program execution and restart it from 
the beginning". Nothing to worry about - nothing is 
lost. 
Continue after breakpoint. When you have made 
your experiments at the breakpoint, you can resume 
ordinary program execution. There are several ways to 
resume execution (Figure 5.3A): 
Run (F5). The program continues in the normal 
fashion. 
Step Into (F8). The program executes the next 
statement, then stops again in breakpoint mode. 
With repeated use of F8, you can execute the pro-
gram step by step. If the program calls another 
procedure, you will step into it statement by state-
ment. 
Step Over (Shift+F8). As F8, but if the program 
calls another procedure, it executes all of the pro-
cedure without stopping, then stops at the return 
from the procedure. 
Stop an endless loop. If the program gets into an end-
less loop, you can stop it with Ctrl+Break. 
Pop-up help 
You have probably noticed that as you type a state-
ment, Access often shows a list of what you can type at 
this point. You may bring up several kinds of lists: 
Ctrl+J brings up the property list. It shows you 
the possible properties, procedures, and controls at 
this point of typing. You may choose one with the 
Tab-key. 
Ctrl+Shift+J brings up the Constant list. It shows 
you the possible named constants at this point of 
typing. (Ctrl+J may be used too, but it brings up 
the full list of named constants.) 
Ctrl+I brings up the Quick Info list. It shows the 
data type you are dealing with, or the list of pa-
rameters to the procedure you call, or the value of 
a named constant. 
Try the pop-up help 
18. Start entering this statement in the Change proce-
dure (Figure 5.3B): 
MsgBox "test", vbYesNo
When you have typed MsgBox, use Ctrl+I to bring 
up the list of parameters. Notice that most of the pa-
rameters are optional (enclosed in brackets). When 
you have typed the comma, bring up the list of pos-
sible constants with Ctrl+Shift+J. Select the right 
constant with the Tab-key. 
When executed, the MsgBox statement will show a 
message to the user and ask for a Yes or No. (In section 
3.6, we used MsgBox to print messages for a tool-
based mockup.)  
19. Put the cursor on RecordSource and use Ctrl+J to 
bring up a list of possible properties and procedures 
at this point. 
20. Put the cursor on txtName and use Ctrl+J to bring 
up a list of possible controls at this point. 
82 
5. Access through Visual Basic 
C# PDF Form Data Read Library: extract form data from PDF in C#.
as well as field. RasterEdge .NET PDF SDK is such one provide various of form field edit functions. This page is mainly designed
change font size pdf fillable form; add text field to pdf
VB.NET PDF Form Data Read library: extract form data from PDF in
as well as field. RasterEdge .NET PDF SDK is such one provide various of form field edit functions. This page is mainly designed
can save pdf form data; adding form fields to pdf files
Quick Info
Ctrl+I
Constant list
Ctrl+Shift+J
Fig 5.3B  Breakpoint, pop-up help and object browser
Object Browser
F2
Classes
(objects)
Properties and
procedures for 
the class
Sometimes a
good explanation.
Else use F1.
Debug actions:
Run
F5
Step Into
F8
Step Over
Shift F8
Break
Ctrl+Break
Open Immediate window
Ctrl+G
Breakpoint
Property list
Ctrl+J
Object Browser (F2) and Help (F1) 
The Object Browser gives an overview of the classes in 
Access, Visual Basic, and your own database. Open the 
browser with F2 (Figure 5.3B). To the left you see a 
list of the classes, to the right all properties and proce-
dures of the selected class (called "members" in the 
window). In the figure we have selected the SubForm 
class. The right-hand side shows the properties and 
event procedures.  
For some properties and procedures, VBA shows a 
good explanation at the bottom of the window, for oth-
ers you get a good explanation with F1 (Help). The 
Object Browser doesn't show all the classes available. 
For instance you will look in vain for the Debug class, 
which we have used several times already. 
Another way to get help about classes, properties, and 
language structures such as if-then, is to position the 
cursor on the word in the VBA code, then use F1. Usu-
ally you get good help. Try it: 
21. Put the cursor on the word MsgBox and use F1. 
You get an excellent explanation of the procedure 
and its parameters. 
22. Put the cursor on the word RecordSource in the 
code and use F1. You get a reasonable explanation. 
23. The quality of the help information varies. Put the 
cursor on the word Debug in the code and use F1. 
You may get the message Can't find project or li-
brary. Or you get an explanation, but not an excit-
ing one. You may try F1 with the cursor on the 
word Print. You get a lot of information, although it 
is hard to find out what it means.
5. Access through Visual Basic 
83
C# PDF bookmark Library: add, remove, update PDF bookmarks in C#.
|. Home ›› XDoc.PDF ›› C# PDF: Edit PDF Bookmark. C#.NET PDF SDK - Edit PDF Bookmark and Outline in C#.NET. Empower Your C#
create a form in pdf from word; change font size in pdf fillable form
C# PDF Sticky Note Library: add, delete, update PDF note in C#.net
Note. |. Home ›› XDoc.PDF ›› C# PDF: Add Sticky Note. C#.NET PDF SDK - Add Sticky Note to PDF Page in C#.NET. Able to change font size in PDF comment box.
change font size pdf form; change text size pdf form
5.4 Command buttons 
When the user clicks a command button, it receives a 
Click event. The event procedure must perform what 
the button is planned to do. We will look at a few typi-
cal examples.  
Make a button open another form 
We will first let the New guest button open a stay form 
in the simplest way (Figure 5.4). 
1.  On frmFindStay give the NewGuest button the 
name cmdNewGuest. (The usual prefix for a com-
mand button is cmd.) 
2.  Define the event procedure for the OnClick event. 
The procedure body should be: 
DoCmd.OpenForm "frmStay"
The object DoCmd can do various things. Here we use 
it to open a form. You can use PgDown to step through 
all the stays, and even add a new stay at the end. 
Open a form to show only one record 
You may use OpenForm to open a specific stay: 
3. Try to change the procedure body to 
DoCmd.OpenForm "frmStay", , , "stayid=2"
If you try it in user mode, you see that stay 2 is visible 
and the user may edit it. Parameter 4 did the trick. It is 
filter - a text that automatically enters an SQL-
WHERE clause and restricts the visible stays. In prac-
tice, the program must compute the filter text so that 2 
in the example becomes the stayID the user has chosen.  
Section 5.5.2 explains more about opening a form for 
various purposes. Section 5.5.3 explains the many 
parameters for OpenForm
Make a button reset the search criteria 
The real FindGuest window has a button for resetting 
the search criteria. Try to add it: 
4. In design mode, add a button to frmFindStay. Give 
it the label Reset criteria and the name cmdReset
5. Define the event procedure for the OnClick event. 
The procedure body should be: 
Me.subStayList.Form.RecordSource = _ 
"select * from qryStayList; " 
Me.txtName = ""
This procedure sets the record source to the full list of 
stays, and it sets the search criterion to an empty text. If 
there are more search criteria, for instance also the 
phone number, they should be set too, of course. 
Other button events 
The click event happens if the user clicks the button. 
What happens if the user tabs to the button and then 
presses Enter? Or if the user uses a shortcut key? The 
button doesn't notice. It receives a click event in all 
these cases. 
A command button also receives the same events as a 
text box, for instance Enter, GotFocus, MouseDown, 
KeyPress. There is rarely a need to do something for 
these events. A button doesn't receive Change, Before-
Update and AfterUpdate. These events deal with stor-
ing some data, and a command button doesn't store 
anything. 
Default button and Cancel button 
A form may have a default button. If the focus is 
somewhere on the form or its subforms, and the user 
presses Enter, the default button gets a click event. 
(The exception is when the focus is on another button. 
Then this button gets the click, of course.) 
You may define any button as the default. In the prop-
erty box for the button, select the Other tab and set 
Default = Yes 
Access will automatically set Default = No for the 
previous default button on the form.  
A form may also have a cancel button. If the focus is 
somewhere on the form or its subforms, and the user 
presses Escape, the cancel button gets a click event. 
You may select any button as the cancel button. In the 
property box, select the Other tab and set 
Cancel = Yes
You will typically let the cancel button close the form 
without saving anything. This can be done with these 
statements in the event procedure: 
Me.Undo
DoCmd.Close 
The Undo procedure sets all fields on the form to their 
OldValue. As a result, Access will not save them at 
close. 
84 
5. Access through Visual Basic 
C# PDF metadata Library: add, remove, update PDF metadata in C#.
|. Home ›› XDoc.PDF ›› C# PDF: Edit PDF Metadata. C#.NET PDF SDK - Edit PDF Document Metadata in C#.NET. Allow C# Developers
changing font size in pdf form; adding text fields to pdf
C# PDF Digital Signature Library: add, remove, update PDF digital
Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process
allow users to save pdf form; pdf forms save
Fig 5.4 Command buttons, default and cancel buttons
Private SubcmdNewGuest_Click()
DoCmd.OpenForm"frmStay"
End Sub
Or open only one stay:
DoCmd.OpenForm"frmStay", , , "stayid=2"
Default button -responds at Enter:
Other tab -> Default = Yes
Private Sub cmdReset_Click()
Me.subStayList.Form.RecordSource= "select * from qryStayList; "
Me.txtName= ""
End Sub
Cancel button -responds at Esc:
Other tab -> Cancel = Yes
5. Access through Visual Basic 
85
C# PDF Library SDK to view, edit, convert, process PDF file for C#
perform quick file navigation. You may easily generate thumbnail image from PDF. C#.NET: PDF Form Field Edit. Please refer to this
create pdf forms; chrome save pdf form
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process
create a pdf form in word; add form fields to pdf online
5.5 Forms 
Forms are very complex. They handle many events and 
have many properties. Below we explain the more 
important ones. 
5.5.1 Open, close, and events 
In Visual Basic you can open a form in this way: 
DoCmd.OpenForm  "name of the form" 
OpenForm can have many parameters, as explained in 
section 5.5.3. You can close the form that is in focus 
with 
DoCmd.Close 
As an example, a button on the form could close the 
form in this way. When the user clicks the button, the 
form is in focus. 
If you want to close another form than the one cur-
rently in focus, you can specify the form through two 
parameters, for instance: 
DoCmd.Close  acForm, "frmStay" 
The parameter acForm says it is a form. The last pa-
rameter is the form name.  
An alternative is to set the form in focus, and then 
close it, for instance like this: 
Forms!frmStay.SetFocus 
DoCmd.Close
Event sequence 
During open and close, the form receives many events. 
Figure 5.5A gives an overview. 
Open(Cancel). This is the first event that the form re-
ceives. At this point in time, the various data struc-
tures in the form have been created, including all 
controls. The subforms have been opened and have 
received their first Current event. Most controls 
also have the right value, but some have not. The 
form is invisible to the user at this point. The event 
procedure may set the parameter Cancel=True, 
thereby refusing to open the form. 
Load event( ). Next the form receives a Load event. 
The form is still invisible, but all unbound controls 
have a value. Controls bound to a database record 
may still not have the right value. Accessing data in 
the database proceeds in parallel with opening the 
form, and bound controls gradually get the right 
value. 
Resize( ). This event occurs during opening of the 
form, and when the user resizes the form by drag-
ging its borders. The event procedure may adjust 
the controls on the form to better utilize the avail-
able space. As an example, a subform area may ex-
pand and contract in step with the main form. See 
section 5.5.13. 
Activate( ). This event signals that the form, or one of 
its controls, will get the focus (the title bar becomes 
blue). The event doesn't occur when the user clicks 
from another application. Subforms never receive 
an Activate event. They are active when their main 
form is active. 
GotFocus( ).  This event occurs only when the form 
has no controls that can get the focus. 
Current().This event occurs at open no matter whether 
the form is bound to the database or not. For bound 
forms, it also occurs when the user moves to 
another record, for instance with PageDown. This 
event is the place to update controls that depend on 
the current record, for instance detail windows. 
When Current is called during open, the form is 
still invisible, but the controls have the right value. 
When Current returns, the form becomes visible.  
Dirty(Cancel). This event occurs the first time the user 
edits some bound data in the current record. The 
event occurs right before the Change event of the 
control changed by the user. At return the Form 
property Dirty becomes True. 
BeforeUpdate(Cancel). This event occurs when the 
form has data that is about to be saved in the data-
base. The event is an opportunity to check consis-
tency between pieces of data before they are saved.  
The event procedure may set Cancel=True to stop 
saving and let the user change the data. It may also 
use Me.Undo to restore the old values and in that 
way skip the saving. 
BeforeUpdate will occur when the form is to be closed 
or when focus moves to another record on the form. 
Canceling the update means that the form will not be 
closed or focus not moved.  
BeforeUpdate will not occur when focus moves to an-
other Access form. However, it will occur when focus 
moves to a subform on the same form, or when the user 
switches to a different tab sheet on the same form. This 
makes it difficult to maintain consistency between data 
in the main form and data in its subforms. 
AfterUpdate( ). This event occurs when values have 
been saved in the database. Also the OldValue 
properties have been set to the saved values. The 
event is an opportunity to act on the new data. 
Unload(Cancel). This is the first event when a form is 
closed. The event procedure may check that every-
thing is okay. If it returns Cancel=True, the form 
will remain open. 
86 
5. Access through Visual Basic 
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
Embed zoom setting (fit page, fit width). Turn PDF form data to HTML form. Export PDF images to HTML images. Embed PDF hyperlinks to HTML links.
change tab order in pdf form; change font on pdf form
.NET PDF Document Viewing, Annotation, Conversion & Processing
Edit, delete text from PDF. Insert images into PDF. Edit, remove images from PDF. Add, edit, delete links. Form Process. Fill in form data programmatically.
pdf save form data; pdf form save
Fig 5.5A  Event sequence, Form open and close
User action Events
Property changes before call
Open
Open(Cancel)
The Form and its controls are created, but not 
visible. Some controls are not initialized. Subforms 
are open. The procedure may refuse to open the 
form (Cancel=True).
Load
All controls are initialized, except bound ones.
The Form is still invisible.
Resize
(Opportunity to reposition controls)
Activate
(Signals that the form will get focus)
(GotFocus)
(Only for Forms where no control can get the 
focus)
Current
A current record has been selected. Bound controls 
have a value. At return, the form becomes visible.
Edit
Dirty
First time the user edits some data in the record.
PageDown,  BeforeUpdate(Cancel) Some bound fields to be saved.
etc.
The procedure may refuse to save.
AfterUpdate
Bound fields saved. All values = OldValue.
Current
Form is invisible. A new record is current.
At return, the Form becomes visible.
Click in 
BeforeUpdate(Cancel) As for PageDown.
subform
AfterUpdate
As for PageDown.
Close
Unload(Cancel)
Form to be closed. The procedure may refuse and 
the form stays open.
Deactivate
(Signals that the form will lose focus)
Close
At return, the form becomes invisible and the 
subforms are closed.Memory is released.
Deactivate( ). This event signals that the form will lose 
focus. It occurs during close and when the user 
clicks in another main form. It doesn't occur when 
the user clicks in another application. Subforms 
never receive a Deactivate event. 
Close( ). This is the last event the form receives. The 
form is still visible and all subforms are still open. 
When Close returns, the form becomes invisible, all 
subforms are closed, and data structures are deleted. 
5.5.2 CRUD control in Forms 
When you create a form in the default way and open it 
with DoCmd.OpenForm, the user is allowed to step 
through all records, and add several new records. De-
pending on circumstances, we may want a more re-
stricted behavior. We may for instance want the user to 
see and edit only one single stay. Or we may want the 
user to create only one new record.  
CRUD and filter properties 
The way to control this is through the following prop-
erties, called CRUD properties because they specify 
Create, Read, Update, and Delete of records (Figure 
5.5B gives an overview). You can see their initial val-
ues on the form's data tab. You can change them at run 
time through Visual Basic: 
AllowEdits. If True, the user can edit fields in existing 
records. Default=True. 
AllowDeletions. If True, the user can delete a record 
with the Del key. (Requires that the record selector 
is displayed in the form.) Default=True. 
AllowAdditions. If True, there will be an empty record 
at the end of the list for adding new records. 
Default = True. 
Filter. A text that works as a WHERE clause in the 
query behind the form. For instance, you may set 
filter to "stayID=740". The result will be that the 
user only sees the stay with ID=740. (Don't write 
the word WHERE itself.) 
FilterOn. If True, the Filter property works and selects 
records. If False, the filter has no effect. FilterOn is 
a property that you cannot see in the form's prop-
erty box, but you can set it through the program or 
5. Access through Visual Basic 
87
the Immediate window. The user can toggle Filter-
On with the filter icon on the toolbar. 
AllowFilters. If True, the user is allowed to set filters 
on and off through icons on the toolbar. The pro-
gram can always set filters independently of Al-
lowFilters. 
DataEntry. If True, the user will not be able to see old 
records. If AllowAdditions is also True, the user is 
allowed to add new records. If the program sets 
AllowAdditions to False while the user is editing a 
new record, the user is allowed to finish editing the 
record, but cannot add further records. Default = 
False. 
Setting DataEntry to False has an undocumented 
side effect: It also sets FilterOn to False, in that 
way blocking filters set up by the program. In this 
case, let your program set FilterOn after setting 
DataEntry. 
All of these properties are dialog variables that don't 
survive closing of the form. What you have specified in 
the form's property box are simply the default value for 
these variables. You may try out the properties in this 
way: 
1. Open frmStay in Datasheet mode. You should see 
all records from the stay query. At the end of the 
datasheet you should see an empty line for entering 
a new record. 
2.  Open the Immediate window with Ctrl+G. Adjust 
the sizes so that you see the datasheet and the Im-
mediate window at the same time. Try to change 
the settings with statements such as: 
Forms!frmStay.AllowAdditions = False 
Forms!frmStay.Filter = "stayid=740" 
Forms!frmStay.FilterOn = True
The datasheet should change accordingly, removing 
the empty line, showing only one record, etc. 
See and edit a single record 
In order to see and edit a single record, set these prop-
erties in the form's property box (see overview in Fig-
ure 5.5B): 
AllowEdits = True 
AllowDeletions, AllowAdditions, DataEntry = False
Then open the form with a filter, for instance: 
DoCmd.OpenForm "frmStay", , , "StayID=2" 
In practice, the program must compute the filter text so 
that 2 in the example becomes the stayID the user has 
chosen. 
Update the record. When the user enters something, it 
is not stored in the database until he closes the form (or 
enters a subform). Sometimes storing is needed earlier. 
The program can do it with this statement: 
Me.Recordset.Move(0)
This trick assumes that Access is configured for DAO 
3.6 (see section 5.6). The statement works on the open 
recordset bound to the form. It moves current record 
back or forth a number of records, and as part of this it 
saves the current record. In our case we move zero 
records away - to the same record. But we get the 
update anyway. (See more in section 5.6.3.) 
Create a single record 
In order to create a single record without seeing exist-
ing records, set these properties in the form's property 
box (see overview in Figure 5.5B): 
AllowAdditions = True 
DataEntry = True
This will still allow the user to enter a record and then 
move on to enter a new record. To avoid this, block 
further record creation when the first record is updated: 
Private Sub Form_AfterUpdate() 
Me.AllowAdditions = False 
End Sub 
Open the form with 
DoCmd.OpenForm "frmStay" 
Prevent two blank lines in datasheet 
The method above for creating a single record works 
okay when the Form is shown in normal mode. In 
Datasheet mode, however, the user may be confused at 
what happens. The user sees the blank record at the end 
of the datasheet, but as soon as he starts typing in it, 
another blank line appears. 
Access creates the second blank line right after calling 
the Dirty-event procedure. However, it is impossible to 
adjust things at this point because the user's character 
hasn't yet ended where it should be. 
The solution is to store something in the new blank 
record before the user types anything. This initiates a 
temporary record for further editing. Then AllowAddi-
tions is set to False to prevent further new records. This 
can be done at the Current event: 
Private Sub Form_Current() 
If Not IsNull(Me.someField) Then Exit Sub 
Me.someField = " " 
Me.AllowAdditions = False 
Me.someField = Null 
End Sub 
The first statement checks whether something has been 
stored in the field to be initialized. In this case the user 
has selected an existing record and nothing should be 
done now. The next statement stores a space in the 
field. This creates the temporary record. Next Allow-
Additions is set to False. This prevents further records 
being created. Finally the field is set back to the initial 
empty state. 
The solution must be extended with means to add an-
other record, for instance a button or a response to 
Enter. Care must also be taken not to leave empty 
88 
5. Access through Visual Basic 
DoCmd.OpenForm“frmStay”, view,   , “StayID=5”, CRUDproperties, windowMode, openArgs 
acDesign
acFormDS
acNormal
acPreview
acDialog
acHidden
acIcon
acWindowNormal
Datasheet
view
Print
preview
Available to the
Form procedures
Form properties: CRUD and Filter
AllowEdits: See and edit data
AllowDeletions: Del-key works
AllowAdditions: Empty record at end
DataEntry: Old data invisible
Filter:
e.g. StayID=740
FilterOn:
Use filter
AllowFilters:User-controlled filter
A
l
l
o
w
E
d
i
t
s
A
l
l
o
w
-
D
e
l
e
t
i
o
n
s
A
l
l
o
w
-
A
d
d
i
t
i
o
n
s
D
a
t
a
E
n
t
r
y
To see and edit a single record:
(Also set the filter)
True
False
False
False
To create a single record:
Initially
x
False
True
True
At 
Form_AfterUpdate
x
False
False
True
acFormEdit
True
True
True
False
acFormAdd
True
True
True
True
acFormReadOnly
False
False
False
False
acFormPropertySettings (default)
x
x
x
x
Fig 5.5B  Controlling Open, CRUD, and filter 
Filter
Filter name
?
records in the database in case the user doesn't enter 
something. 
5.5.3 The OpenForm parameters 
From VBA you normally open a form with 
DoCmd.OpenForm. A lot of parameters determine 
what goes on (see the details on Figure 5.5B). 
Form name. The first parameter is the name of the 
form, for instance "frmStay". 
View. The second parameter specifies whether the 
form is to be shown in design view, as a datasheet, 
as a normal form (default), or as a preview of a 
print. 
Filter name. The name of a query, for instance 
"qryStay". (I have not been able to figure out what 
this parameter does.) 
Filter. A WHERE condition for the records to show, 
for instance "StayID=5". 
CRUDproperties. A choice of CRUD combinations 
that determine whether records can be edited, 
added, etc. Figure 5.5B shows that acFormEdit sets 
AllowEdits, AllowDeletions, AllowAdditions to 
True and DataEntry to False. In other words, the 
user can do anything to the records. At run time 
these settings overrule the initial settings from the 
Form's property box. 
As another example, acFormPropertySettings (the 
default), doesn't set any of the CRUD properties but 
lets the initial settings rule. 
WindowMode. Specifies whether the form is to be 
shown as a dialog box, a hidden window, an icon, 
or a normal window. A dialog box keeps the focus 
until the user closes it. It has borders that cannot be 
resized. A hidden window is like a normal window 
except that it is invisible. The event procedures can 
make it visible with me.Visible=True. The window 
mode acIcon seems to have no effect. 
OpenArgs. This parameter is stored in the property 
OpenArgs in the Form. It can tell the event proce-
dures in the Form what to do. The parameter might 
for instance specify whether the form is to be used 
for creating a new record or viewing an existing 
one, in this way allowing the Form to do it in its 
own way. Below we show how this is used in the 
hotel system to let the same form handle a new 
guest, a new stay, or an existing stay. 
5. Access through Visual Basic 
89
5.5.4 Multi-purpose forms (hotel system) 
In the hotel system we use frmStay for creating guest 
and stay records, as well as editing existing records. 
Using the same Form is an advantage to the user (for 
recognition) and for the developer (he needs to main-
tain only one Form). 
Now, how does the Form know what it should do? 
OpenArgs is intended for such things. In the hotel sys-
tem, we use OpenArgs in this way: 
OpenArgs < 0: Open an existing stay. The 
WhereCondition parameter in the OpenForm 
statement selects the right one. 
OpenArgs = 0: Create a new guest and a new 
stay. 
OpenArgs > 0: Create a new stay for an existing 
guest. OpenArgs is the guestID for the existing 
guest. 
Figure 5.5C shows the full solution. It deals also with 
error cases where the user for instance clicks the 
ShowStay button, but hasn't selected a stay. The Find 
Guest screen has three buttons for opening a stay. The 
figure shows the three click-event procedures. 
cmdNewGuest 
This is the simplest of the buttons. Independent of what 
the user has chosen, the button should create a new 
guest and a stay for him. What is needed is to open the 
form with OpenArgs=0. 
cmdNewStay 
Here we have two situations. (1) The user has selected 
a line, and thus a guest. (2) The list is empty so the user 
has not chosen anything. The property CurrentRecord 
allows the program to distinguish the two situations. 
CurrentRecord gives the sequential number of the se-
lected record. It is zero if nothing is selected. If the list 
is empty, we might claim it is an error to make a new 
stay for a non-existing guest, but it turns out that users 
find it natural to create a new guest in this case. So this 
is what the program does; it opens the form with Open-
Args = 0.  If a line is selected, it opens the form with 
OpenArgs = guestID. 
Notice the If-Then-Else-EndIf construct that makes the 
program choose alternative paths, either executing the 
Then-statements or the Else-statements. The line-
breaks must be as shown, with Else and EndIf on lines 
of their own. 
Notice also the comment we have put after Then to 
explain to the reader what situation the program deals 
with after Then
cmdShowStay 
Here we have three situations. (1) A stay is selected. 
(2) A guest without stay is selected. (3) The list is 
empty. In the last two cases, the program cannot open a 
stay. The current value of stayID allows the program to 
distinguish. StayID is >0 in the first case, and Null in 
the last two cases. Notice that stayID  exists even if the 
list is empty and CurrentRecord is zero. The value of 
stayID is just Null. 
When stayID>0, we open the form with OpenArgs=-1. 
We also have to set the filter so that only this stay is 
visible. The WhereCondition-parameter to OpenForm 
allows us to do this in a simple manner. If the user for 
instance has selected a line with stayID=740, the 
WhereCondition has to be the text 
stayID=740 
In the program we compute this text by concatenating 
the text "stayID=" with the current stayID  using the &-
operator. StayID is a number, but Visual Basic converts 
it to a text before the concatenation. 
When stayID is Null (or a number <=0) we have an 
error situation. The program may show a message 
using MsgBox, but in our case we just make the pro-
gram beep. The DoCmd-object can do this too. (Us-
ability tests show that users understand what is wrong 
without any message explaining about it.) 
FrmStay, Load event 
Inside frmStay an event procedure must take care of 
setting the right CRUD properties. Access calls the 
Load-event procedure during open, and this is the place 
we set the CRUD properties. Figure 5.5C shows the 
procedure. Let us follow the path through the code for 
each of the three cases. 
OpenArgs is < 0: We open an existing stay. The 
WhereCondition parameter has set the filter, so we 
don't have to do much. The procedure just executes the 
last line, which sets AllowAdditions to False. 
OpenArgs = 0: We must create a new guest record and 
a new stay record. First we allow additions and data 
entry. Data entry means that existing records are not 
visible, so the current record is a new "blank line". 
FrmStay is bound to a join of tblGuest and tblStay, so 
the current record will now consist of Null data for the 
guest as well as the stay. In order to create the records, 
we have to store something in them.  
First we set the guest name to a single space character. 
This creates a new guest record, and Access gives it an 
AutoNumber. Notice how we address name with a 
bang ( ! ) to distinguish it from the built-in Name prop-
erty.  
Next we set the foreign key of the stay record to this 
guest. This creates the stay record and also links it 
properly to the guest. Then we set the name back to a 
Null so that the user doesn't see a name starting with a 
space when he enters the guest name. Notice the 
strange use of square parentheses. We explain more 
about them below. 
90 
5. Access through Visual Basic 
Documents you may be interested
Documents you may be interested