VBFC8 - University of Wolverhampton

Download Report

Transcript VBFC8 - University of Wolverhampton

CP2030
Visual Basic For C++ Programmers

Week 8 - Databases continued:
Example using Further Features
 Find Method
 Reposition and Validate Event
 Multiple Data Controls
 Queries
 Other Topics to Consider
 Last Words on Databases

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 1
Example of Other Features

Below is an example (dental3.mak) which is used to
demonstrate further data control functionality
–
–
–
–
–
–

Modifying properties
Refresh method
Referencing fields
Unbound controls
EOF property
IsNull
The example shows the addition of a list box
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 2
Example - Code












Sub Form_Load ()
Data1.DatabaseName = "c:\files\uow\vb_sc_da\dental.mdb"
Data1.RecordSource = "Patients"
Data1.Refresh 'Open database & recordset
Do While Not Data1.Recordset.EOF
If Not IsNull(Data1.Recordset(“Surname”).Value) Then 'If not empty, then
List1.AddItem Data1.Recordset(“Surname”).Value 'add to the list
End If
Data1.Recordset.MoveNext
'Move to next record
Loop
Data1.Refresh
'Rebuild the recordset
End Sub
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 3
Property Setting
The DatabaseName, RecordSource and Datafield (the
field within a database to which a data aware control
links) properties can all be set at design and run time
 The DataSource property (the data control to which a
data aware control links e.g. Data1) can only be set at
design time
 e.g. in above code

Data1.DatabaseName = "c:\files\uow\vb_sc_da\dental.mdb"
Data1.RecordSource = "Patients"
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 4
Refresh Method
Used to open the database and build or reconstruct the
dynaset in the controls recordset property at runtime
 Has side affect of making the first record current in
the recordset e.g.

Data1.Refresh 'Open database & recordset

In the code example above it is used twice
i. To initially open the database and recordset
ii. To refresh the recordset, making the first record
current, after the Do ... Loop has completed
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 5
Referencing Fields
Can move through records using MoveNext etc
 To select individual fields within a record, need to
reference it within the recordsets current record, can
use any of the following e.g.
 Data1.Recordset(“First Name”).Value

Data1.Recordset.Fields(“First Name”)
Data1.Recordset.Fields(0).Value
Data1.Recordset.Fields(0)
Data1.Recordset(“First Name”)

All equivalent since ‘Fields’ is a default collection the
recordset and ‘Value’ is default property for a ‘Field’
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 6
Unbound Controls
To display data in controls other than the 5 data aware
controls requires coding to manipulate the data in and
out of the control
 In the above code the required field is referenced and
then added to a list boxes list e.g.

List1.AddItem Data1.Recordset(“Surname”).Value
'add to the list

Here we’re adding the second field (Surname) of each
record into the list box
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 7
EOF / BOF / IsNull

EOF is used to check if the end of the recordset has
been reached, when EOF becomes true
–
Do While Not Data1.Recordset.EOF
In the example the code loops while the end of the file
has not been reached
 BOF is True when at beginning of recordset

IsNull is a Visual Basic command which checks if a
variable is a null, here it is used to check the value of
the referenced field of the current record
 If Not IsNull(Data1.Recordset(1)) Then
‘If not
empty, then

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 8
Example - Code Revisited












Sub Form_Load ()
Data1.DatabaseName = "c:\files\uow\vb_sc_da\dental.mdb"
Data1.RecordSource = "Patients"
Data1.Refresh 'Open database & recordset
Do While Not Data1.Recordset.EOF
If Not IsNull(Data1.Recordset(1)) Then 'If not empty, then
List1.AddItem Data1.Recordset(1) 'add to the list
End If
Data1.Recordset.MoveNext
'Move to next record
Loop
Data1.Refresh
'Rebuild the recordset
End Sub
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 9
Alternative version (using For loop
and RecordCount property)
Data1.Recordset.MoveLast
‘sets value of RecordCount
Data1.Recordset.MoveFirst
For I = 1 to Data1.Recordset.RecordCount
If Not IsNull(Data1.Recordset(1)) Then 'If not empty, then
List1.AddItem Data1.Recordset(1)
'add to the list
End If
Data1.Recordset.MoveNext
'Move to next record
Next I
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 10
Find Instructions

The FindFirst, FindLast, FindNext and FindPrevious
instructions are used to locate records in the recordset
e.g.
Data1.Recordset.FindLast “[First Name] = ‘Jeremy’ ”
Location
method
Field to
search
Criteria
to find
A record which matches the criteria is made the
current record,
 Criteria can be variables, strings with wildcards

Data1.Recordset.FindLast “[Surname] = ‘ “ & NameVar & “ ’ ”
Data1.Recordset.FindLast “[First Name] = ‘J*’ ”
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 11
Reposition Event
A Reposition event occurs after a new record becomes
current.
 First happens when the Data control loads and makes
the first record in the recordset current
 Is triggered by ‘Move’ or ‘Find’ method

Data Control load
Code (Move / Find)
New
Record
Current
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Reposition
Event
Component 8, Slide 12
Validate Event
Allows validation of changes before database updates
 A Validate event occurs before a new record becomes
current.
 It also occurs before an Update, Delete, Unload or
Close operation

Update/Delete
Unload/Close
Data Control load
Code (Move / Find)
Validate
Event
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
New
Record
Current
Component 8, Slide 13
Data Control - Validate event

Private Sub Data1_Validate ( Action as Integer,
Save as Integer )

Action parameter identifies current operation
–
–
–
–
–
–
–
–

1 MoveFirst
2 MovePrevious
3 MoveNext
4 MoveLast
5 AddNew
6 Update
7 Delete
etc…
(includes navigation arrow)
( “
“
“ )
( “
“
“ )
( “
“
“ )
Save parameter =True (-1) if any data attached to
data control has changed
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 14
Data Control - Validate event

Validate event can prevent the action from happening

E.g.
Private Sub Data1_Validate ( Action as Integer,
Save as Integer )
If val(txtAge) < 18 then
MsgBox “Too young!”
Action = 0
End If
End Sub
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 15
Validate Event

Save - normally True(-1), set False(0) to stop new data
being saved

Note. Don’t use methods under the Validate event e.g.
MoveNext, as this creates an infinite loop
MoveNext
Validate Event
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 16
Multiple Data Controls
Can use two data controls to bring in data from two
separate tables
 The tables can either be in the same database or in
separate databases
 Databases could even be different types
 But the data under each data control is totally
independent of the other data control
 The sets of data aware controls update separately; they
are dependent on the data control they are attached to

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 17
Queries
If want to relate the data from two tables together:
Tables must be in same database,
and have a common field to relate
 Use a query to create the relationship
 Queries are written using SQL, structured query
language
 Complex language, but some databases e.g. MSAccess
allow you to build queries using blocks, it will then
generate the SQL code which can be used by VB to
link in a query

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 18
Query Example
If you had two tables having a common field of
Patient category, one table gives patient demographics
and the second costing rates and descriptors for each
category.
 The SQL to use as the RecordSource to relate the
patient name to the cost rate would look like

Data1.RecordSource = "SELECT Patients.*, [Cost Rate] FROM
Patients, Costing, Patients INNER JOIN Costing ON
Patients.[Category] = Costing.[Category] Order by [Surname]"

It isn’t simple !!
CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 19
Other Topics To Consider
Transaction Statements - Used to control a series of
updates to a database, can be used to allow the ability
to undo updates
 Error Event - Happens when an error occurs such as an
invalid database name being specified
 UpdateRecord as for Update except doesn’t trigger a
validate event
 UpdateControl - reads back values of current record
from the recordset into bound controls, means changes
to their values can be undone

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 20
Other Topics To Consider
FieldSize - gives the size of a memo field
 GetChunk - gets a 64k chunk of data from a memo
field, it has an offset parameter for where to get the
chunk
 AppendChunk - appends data in 64k chunks to a
memo field

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 21
Last Words on Database
Visual Basic Professional allows greater control over
database development with
 Ability to create dynaset in code without using a data
control
 Tools to create new databases and modify existing
database structures
 Visual Basic uses the MSAccess engine
 Visual Basic 3.0 won’t link to MSAccess 2.0 developed
database, need to install a fix file COMLAYER.EXE.
This gives full compatibility and link ability.

CP2030 Visual basic for C++ Programmers, ‘The VB Team’ Copyright © University of Wolverhampton
Component 8, Slide 22