CIS 338: Using Data Access Objects
Download
Report
Transcript CIS 338: Using Data Access Objects
CIS 338: Using DAO
(Data Access Objects)
Dr. Ralph D. Westfall
February, 2003
Data Access Objects
VB objects that can be used in program
code to work with databases
can set properties in code
can use methods "
"
can do more than with Data control
e.g., input validation based on business
rules
handling data from automated sources
Starting a DAO Project
start a new VB standard EXE project
select Project>References
click Microsoft DAO 3.6 Object Library
use 2.5/3.5 if will work with older
databases
Starting a DAO Project - 2
add code that will set up the database
above Form_Load code (General):
Dim db[Name] As Database
in Form_Load code:
Dim s[dbloc] As String
s[dbloc] = App.Path & "\[file].mdb"
'or use actual physical path
Set db[Name] = _
OpenDatabase(s[dbloc])
Recordset Type - Table
gives direct access to table/all records
can change sort order
can see changes by other users
above Form_Load code:
Dim rs[name] As Recordset
in Form_Load code:
Set rs[name] = _
db[name].OpenRecordset("[table]", _
dbOpenTable)
'sample database
Recordset Type - Dynaset
fields/records from one table
Set rs[name] = db[name].OpenRecordset_
("[table]", dbOpenDynaset)
can use SQL to get data from multiple
tables
Dim sSQL as String
sSQl = "SELECT … FROM … WHERE …"
Set rs[name] = db[name].OpenRecordset_
(sSQL, dbOpenDynaset)
Recordset Type - Snapshot
gets "read only" copies from one or
more tables
faster processing
uses more memory
can't change sort order
Set rs[name] = db[name].OpenRecordset_
("[table]", dbOpenSnapshot)
'table
Set rs[name] = db[name].OpenRecordset_
(sSQL, dbOpenSnapshot)
'SQL string
Recordset Syntax
Set rs[name] = [object].OpenRecordset _
(source, type, options, lockedits)
object: usually a database
source (required): table, query in database,
SQL string
optional parameters:
type: must be dbOpenTable for table source, can
be dbOpenDynaset, etc. if from query or SQL
options: dbReadOnly, dbForwardOnly, etc.
Putting DAO Data in Form
add controls (textboxes) to form
write code to set property of control to
field in database
textboxes: set Text property
txt[name].Text = _
rs[name].Fields("[name]") 'space prob
txt[name].Text = rs[name]![name]
could set label Caption similarly 'Notes
Using Record Pointer
record pointer identifies specific record
positioning
Move methods – moves pointer
Find and Seek methods – goes to specific
record
Bookmark property – saves location
AbsolutePosition – go to record #
PercentPosition – go % to of total items
Using Record Pointer - 2
Move
MoveFirst, MoveNext, MovePrevious,
MoveLast
Move n
e.g. Move 2, Move –35
(negative)
rs[name].MoveFirst
rs[name].Move 14
'Notes
Using Record Pointer - 3
Find
FindFirst, FindNext, FindPrevious, FindLast
rs[name].FindFirst [criteria]
criteria = string like in a SQL WHERE clause
sCriteria = "State='CA'"
rsCustomers.FindFirst sCriteria
rs[name].NoMatch indicates if not found
If rsCustomers.NoMatch = True
'not found
Using Record Pointer - 4
Bookmark identifies a location (like a
record number, but stored as string)
sVariable = rs[name].Bookmark
stores location of current record
rs[name].Bookmark = sVariable
moves to bookmarked record
rs[name].PercentPosition = 10
Conditions in Strings
need to get single quotes around
strings in an SQL query or Find criteria
sCriteria = "[field] = ' " & [string] & " ' "
note ' " before string, " ' after
sCriteria = "Title = '" & sTitle & "'"
If sTitle = "Jaws" this evaluates to
sCriteria = "Title like 'Jaws'"
'see p. 580
Conditions in Strings - 2
can store a single quote as a string
variable to set up SQL strings as criteria
SQ = "'"
'single quote in double quotes
sCriteria = "Title = " & SQ & sTitle & SQ
'also mentioned on p. 580
Using Indexes
indexes control sort order
different indexes for different sorts
indexes must be created before recordset
can only use indexes with table recordsets,
not dynasets or snapshots
rs[name].Index = "[name of index]"
'existing index
'creating a new index (MSDN site)
Filters
work with dynasets, snapshots, not
tables
rs[name].Filter = [criterion]
criterion = string like condition in a SQL
WHERE clause, but without the word
WHERE
sCriterion = "Zip='90806'"
rsStudents.Filter = sCriterion
Sorting
works with dynasets and snapshots, but
not with tables
rs[name].Sort = [field(s)]
sorts according to "collating sequence"
in ASCII: spaces first, followed by some
quotation marks, numbers, capital letters,
more quotation marks, then lower case
rsCustomer.Sort = "City, Zip"
Updating Database: AddNew
adding a record
rs[name].AddNew
rs[name]![field1] = [value]
rs[name]![field2] = [value]
rs[name].Update
Updating Database: Edit
editing a record
values replace data in current record
rs[name].Edit
rs[name]![field1] = [value]
rs[name]![field2] = [value]
rs[name].Update
'very similar to .Add in DAO
Updating Database: Delete
deleting a record
current record is deleted
can use record pointer positioning
commands (like Find) to identify record to
delete
rs[name].Delete
before other actions, need to be sure
record is not on EOF or will not be on BOF
Transaction Processing
used when transaction (group of actions) all
need to happen to database at same time
all or none basis
BeginTrans – starts transaction
ws[name].BeginTrans
'ws = workspace object
RollBack – removes all changes since
BeginTrans
CommitTrans – permanently saves (can't be
rolled back afterwards)