![]() |
Characteristics of a Record Set in the MAOL and DAO |
Setting a Default Value for a Field
You can specify a default value for a field so the user can skip that field during data entry. To support this, the DAO.Field class is equipped with a property named DefaultValue. To specify a default value for a new field you are creating, assign that value to it. Here is an example:
Private Sub cmdCreateTable_Click()
Dim dbExercise As DAO.Database
Dim tblEmployees As DAO.TableDef
Dim fldEmployeeName As DAO.Field
Dim fldEmployeeNumber As DAO.Field
Dim fldEmploymentStatus As DAO.Field
' Specify the database to use
Set dbExercise = CurrentDb
' Create a new TableDef object.
Set tblEmployees = dbExercise.CreateTableDef("Employees")
Set fldEmployeeNumber = tblEmployees.CreateField("EmployeeNumber", DB_TEXT, 10)
fldEmployeeNumber.Required = True
tblEmployees.Fields.Append fldEmployeeNumber
Set fldEmployeeName = tblEmployees.CreateField("EmployeeName", DB_TEXT, 100)
tblEmployees.Fields.Append fldEmployeeName
Set fldEmploymentStatus = _
tblEmployees.CreateField("EmploymentStatus", DB_TEXT, 20)
fldEmploymentStatus.DefaultValue = "Full Time"
tblEmployees.Fields.Append fldEmploymentStatus
' Add the new table to the database.
dbExercise.TableDefs.Append tblEmployees
dbExercise.Close
Set dbExercise = Nothing
Application.RefreshDatabaseWindow
End Sub
Once a field has a default value, it can be skipped during data entry, in which case the default value would be used for its value.
Learning: Introducing Characteristics of a Record Set in DAO
Field Nullity
In the DAO library, the Field class provides the Required property. You can use this property to allow the user to skip a field during data entry. You can also use this property to make sure a value is entered for the field before the record is considered complete. The default value of this property is False. If you set it to True, a value must always be entered for the field. Here is an example:
Private Sub cmdCreateTable_Click()
Dim dbExercise As DAO.Database
Dim tblEmployees As DAO.TableDef
Dim fldEmployeeName As DAO.Field
Dim fldEmailAddress As DAO.Field
Dim fldEmployeeNumber As DAO.Field
' Specify the database to use
Set dbExercise = CurrentDb
' Create a new TableDef object.
Set tblEmployees = dbExercise.CreateTableDef("Employees")
Set fldEmployeeNumber = tblEmployees.CreateField("EmployeeNumber", DB_TEXT)
fldEmployeeNumber.Required = True
tblEmployees.Fields.Append fldEmployeeNumber
Set fldEmployeeName = tblEmployees.CreateField("EmployeeName", DB_TEXT)
tblEmployees.Fields.Append fldEmployeeName
Set fldEmailAddress = tblEmployees.CreateField("EmailAddress", DB_TEXT)
tblEmployees.Fields.Append fldEmailAddress
' Add the new table to the database.
dbExercise.TableDefs.Append tblEmployees
dbExercise.Close
Application.RefreshDatabaseWindow
End Sub
If you try or the user tries skipping a field whose Required property is set to True, the database would produce an error.
The Characteristics of a Record Set
We saw that, to create a record set, you could call the OpenRecordset() method of a DAO.Database variable. Its syntax is:
expression.OpenRecordset(Name, Type, Options, LockEdit)
A record set follows some rules in the way it is created or the way it is used. The rules concern the name or source of data and the type of record set, etc. So far, we provided the source of data as a name of a table.
A record set must specify the way its records would be accessed and used. This information is provided by the second argument of the OpenRecordset() method. The value of this argument is (must represent) a member of the RecordsetTypeEnum enumeration. If the first argument is the name of a table, the second argument nust be set as 1 or dbOpenTable.
Further options are used to control the actions that can be performed on the Recordset object. These options are specified through the third argument of the OpenRecordset() method. The options are members of the RecordsetOptionEnum enumeration and they can be provided as an OR combination. The available values are:
| RecordsetOptionEnum Member | Constant Value | Description |
| dbDenyWrite | 1 | The user cannot change a record in the record set |
| dbDenyRead | 2 | While a person is using the record set, other people cannot access the records in that set |
| dbReadOnly | 4 | The record set is open to only see the values in the records |
| dbAppendOnly | 8 | The record set must be opened as a dynaset. Then, a user can add a new record to the record set but cannot see the existing records |
| dbInconsistent | 16 | The record set must be opened as a dynaset or a snapshot. The record(s) can be updated and an update in one record can affect other records of the same dynaset |
| dbConsistent | 32 | The record set must be opened as a dynaset or a snapshot. The record(s) can be updated but only if an update will not change other records of the same dynaset. Although you can combine some values of the the RecordsetOptionEnum enumeration, you can use either dbInconsistent or dbConsistent but not both |
| dbSQLPassThrough | 64 | The record set must be opened as a snapshot using a SQL statement |
| dbFailOnError | 128 | If an error occurs, the record set is dismissed |
| dbForwardOnly | 256 | The record set must be created as a forward-only snapshot |
| dbSeeChanges | 512 | The record set must be created as a dynaset. If a problem occurs, the database engine generates a run-time error |
| dbRunAsync | 1024 | The record set is created as an asynchronous SQL statement |
| dbExecDirect | 2048 | The record set executes withoug first calling the SQLPrepare() function |
Remember that the value you specify for this argument depends on the second and may depend on the fourth arguments.
Locking a Record Set
The last argument controls how to deal with simultaneous connections to the same database. The value of this argument is a member of the LockTypeEnum enumeration. The available values are:
| LockTypeEnum Member | Constant Value |
| dbOptimisticValue | 1 |
| dbOptimistic | 3 |
| dbOptimisticBatch | 5 |
Practical
Learning: Adding Records
Private Sub cmdApproveSubmitPayroll_Click()
Dim rsPayrolls As Recordset
Dim dbWattsALoan As Database
If IsNull(txtStartDate) Then
MsgBox "You must enter a valid time sheet start date.", _
vbOKOnly Or vbInformation, "Watts A Loan"
Exit Sub
End If
If IsNull(txtEmployeeNumber) Then
MsgBox "Please enter a valid employee number to identity " & _
"the employee whose payroll is being prepared.", _
vbOKOnly Or vbInformation, "Watts A Loan"
Exit Sub
End If
Set dbWattsALoan = CurrentDb
Set rsPayrolls = dbWattsALoan.OpenRecordset("Payrolls", _
RecordsetTypeEnum.dbOpenTable, _
RecordsetOptionEnum.dbAppendOnly, _
LockTypeEnum.dbPessimistic)
rsPayrolls.AddNew
rsPayrolls("StartDate").Value = CDate(txtStartDate)
rsPayrolls("PayDate").Value = txtPayDate
rsPayrolls("EmployeeNumber").Value = txtEmployeeNumber
rsPayrolls("EmployeeName").Value = txtEmployeeName
rsPayrolls("HourlySalary").Value = CDbl(Nz(txtHourlySalary))
rsPayrolls("RegularTime").Value = CDbl(Nz(txtRegularTime))
rsPayrolls("RegularPay").Value = CDbl(Nz(txtRegularPay))
rsPayrolls("Overtime").Value = CDbl(Nz(txtOvertime))
rsPayrolls("OvertimePay").Value = CDbl(Nz(txtOvertimePay))
rsPayrolls("GrossPay").Value = CDbl(Nz(txtOvertimePay))
rsPayrolls("FederalTax").Value = CDbl(Nz(txtFederalWithholdingTax))
rsPayrolls("SocialSecurityTax").Value = CDbl(Nz(txtSocialSecurityTax))
rsPayrolls("MedicareTax").Value = CDbl(Nz(txtMedicareTax))
rsPayrolls("StateTax").Value = CDbl(Nz(txtStateTax))
rsPayrolls.Update
' Let the customer know that the deposit was made.
MsgBox "The payroll has been prepared and approved.", _
vbOKOnly Or vbInformation, "Watts A Loan"
DoCmd.Close
End SubPrivate Sub HireSomeEmployees()
Dim dbKoloBank As Database
Dim rsEmployees As Recordset
Set dbKoloBank = CurrentDb
Set rsEmployees = dbKoloBank.OpenRecordset("Employees", _
RecordsetTypeEnum.dbOpenTable, _
RecordsetOptionEnum.dbDenyWrite, _
LockTypeEnum.dbOptimistic)
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-101"
rsEmployees!FirstName = "Automatic"
rsEmployees!MiddleName = "Teller"
rsEmployees!LastName = "Machine"
rsEmployees!LocationCode = "0ALXML"
rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-102": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0CLGPK": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-103": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0GRNML": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-104": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0LNFPL": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-105": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0MNGML": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-106": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0SSCTPL": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-107": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0SSMTR": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-108": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0UNSDC": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-109": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0WPLZM": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-110": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0WTFML": rsEmployees!Title = "ATM"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "000-111": rsEmployees!FirstName = "Automatic": rsEmployees!MiddleName = "Teller": rsEmployees!LastName = "Machine": rsEmployees!LocationCode = "0SLS7LCK": rsEmployees!Title = "ATM": rsEmployees!Address = "3925 Euler Ave": rsEmployees!City = "Silver Spring": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20904"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "100-200": rsEmployees!FirstName = "Automatic": rsEmployees!LastName = "Transaction": rsEmployees!LocationCode = "1ONLIN": rsEmployees!Title = "Automatic Computer Transaction"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "111-111": rsEmployees!FirstName = "Online": rsEmployees!LastName = "Web": rsEmployees!LocationCode = "1ONLIN": rsEmployees!Title = "Online Transaction"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "209-400": rsEmployees!FirstName = "Krista": rsEmployees!MiddleName = "Daniela": rsEmployees!LastName = "Cole": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Branch Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "1026 Jacktown St": rsEmployees!City = "Baltimore": rsEmployees!State = "MD": rsEmployees!ZIPCode = "21205"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "248-552": rsEmployees!FirstName = "Michael": rsEmployees!MiddleName = "William": rsEmployees!LastName = "Olney": rsEmployees!LocationCode = "CPKUMD": rsEmployees!Title = "Cashier": rsEmployees!Address = "3832 Great River Rd": rsEmployees!City = "Silver Spring": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20906"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "279-377": rsEmployees!FirstName = "Michael": rsEmployees!LastName = "Dobmeyer": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Shift Programmer": rsEmployees!Address = "12 16th St. S. W.": rsEmployees!City = "Washington": rsEmployees!State = "DC": rsEmployees!ZIPCode = "20008"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "280-082": rsEmployees!FirstName = "Geoffrey": rsEmployees!MiddleName = "Robert": rsEmployees!LastName = "Coleman": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Head Cashier": rsEmployees!CanCreateNewAccount = 1: rsEmployees!Address = "828 John Booker St": rsEmployees!City = "Chevy Chase": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20851"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "284-005": rsEmployees!FirstName = "Anne": rsEmployees!MiddleName = "Laura": rsEmployees!LastName = "Wine": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Cashier": rsEmployees!Address = "4137 Chivas Crt": rsEmployees!City = "Silver Spring": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20910"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "284-725": rsEmployees!FirstName = "Wanda": rsEmployees!MiddleName = "Mary": rsEmployees!LastName = "Dundon": rsEmployees!LocationCode = "ALXJPZ": rsEmployees!Title = "Cashier": rsEmployees!Address = "614 Simpson Ave": rsEmployees!City = "Takoma Park": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20912"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "294-075": rsEmployees!FirstName = "Luis": rsEmployees!LastName = "Velker": rsEmployees!LocationCode = "ALXJPZ": rsEmployees!Title = "Branch Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "9502 Copher Ave": rsEmployees!City = "Alexandria": rsEmployees!State = "VA": rsEmployees!ZIPCode = "22312"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "461-842": rsEmployees!FirstName = "Dorrin": rsEmployees!MiddleName = "Annette": rsEmployees!LastName = "Vive": rsEmployees!LocationCode = "CPKUMD": rsEmployees!Title = "Branch Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "273 S. Independence Ave.": rsEmployees!City = "College Park": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20747"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "462-777": rsEmployees!FirstName = "Ada": rsEmployees!LastName = "Zeran": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Administrative Assistant": rsEmployees!Address = "992 White Horse Rd": rsEmployees!City = "Hyattsville": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20782"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "481-114": rsEmployees!FirstName = "Samuel": rsEmployees!MiddleName = "Arthur": rsEmployees!LastName = "Lansing": rsEmployees!LocationCode = "CPKUMD": rsEmployees!Title = "Cashier": rsEmployees!Address = "9337 Cachet St": rsEmployees!City = "Beltsville": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20705"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "482-799": rsEmployees!FirstName = "Annette": rsEmployees!MiddleName = "Joan": rsEmployees!LastName = "Roberts": rsEmployees!LocationCode = "GTWMST": rsEmployees!Title = "Cashier": rsEmployees!Address = "1277 Cecil Maurice Av. NW": rsEmployees!City = "Washington": rsEmployees!State = "DC": rsEmployees!ZIPCode = "20004"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "484-050": rsEmployees!FirstName = "Marianne": rsEmployees!MiddleName = "Becky": rsEmployees!LastName = "Oslin": rsEmployees!LocationCode = "WHTFLT": rsEmployees!Title = "Assistant Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "104 G St. S. E.": rsEmployees!City = "Washington": rsEmployees!State = "DC": rsEmployees!ZIPCode = "20012"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "492-081": rsEmployees!FirstName = "Jeffrey": rsEmployees!MiddleName = "Aaron": rsEmployees!LastName = "Kilborne": rsEmployees!LocationCode = "GTWMST": rsEmployees!Title = "Accounts Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "308 Capitol Blvd": rsEmployees!City = "McLean": rsEmployees!State = "VA": rsEmployees!ZIPCode = "22101"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "503-938": rsEmployees!FirstName = "Michelle": rsEmployees!MiddleName = "Deborah": rsEmployees!LastName = "Stephenson": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Head Teller": rsEmployees!Address = "2888 Gwett Richards Ave": rsEmployees!City = "Glen Burnie": rsEmployees!State = "MD": rsEmployees!ZIPCode = "21060"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "507-728": rsEmployees!FirstName = "Timothy": rsEmployees!LastName = "Wray": rsEmployees!LocationCode = "GTWMST": rsEmployees!Title = "Branch Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "720 Oak Tree Rd": rsEmployees!City = "Columbia": rsEmployees!State = "MD": rsEmployees!ZIPCode = "21044"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "533-825": rsEmployees!FirstName = "Aaron": rsEmployees!MiddleName = "Robert": rsEmployees!LastName = "Kast": rsEmployees!LocationCode = "WHTFLT": rsEmployees!Title = "Accounts Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "2991 Justine Ave": rsEmployees!City = "Rockville": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20854"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "552-884": rsEmployees!FirstName = "Joy": rsEmployees!MiddleName = "Maureen": rsEmployees!LastName = "Donovan": rsEmployees!LocationCode = "ALXJPZ": rsEmployees!Title = "Customer Accounts Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "845 Arcadia Ave. #1512": rsEmployees!City = "Alexandria": rsEmployees!State = "VA": rsEmployees!ZIPCode = "22314"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "624-825": rsEmployees!FirstName = "Luke": rsEmployees!MiddleName = "Andrew": rsEmployees!LastName = "Parkinson": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Intern": rsEmployees!Address = "4445 Blue Oak St. #6A": rsEmployees!City = "Silver Spring": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20906"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "660-026": rsEmployees!FirstName = "Lucas": rsEmployees!LastName = "Frieddle": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Cashier": rsEmployees!Address = "8252 Eleven Sons Rd": rsEmployees!City = "College Park": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20740"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "712-083": rsEmployees!FirstName = "Wendy": rsEmployees!MiddleName = "Noella": rsEmployees!LastName = "Huntsmann": rsEmployees!LocationCode = "WHTFLT": rsEmployees!Title = "Cashier": rsEmployees!Address = "13622 Washington Blvd": rsEmployees!City = "Laurel": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20707"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "722-286": rsEmployees!FirstName = "Donald": rsEmployees!MiddleName = "Anthony": rsEmployees!LastName = "Fisher": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Public Relations Manager": rsEmployees!Address = "58 North Assault St.": rsEmployees!City = "Takoma Park": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20910"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "736-626": rsEmployees!FirstName = "Annabelle": rsEmployees!MiddleName = "Jeannette": rsEmployees!LastName = "Coen": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Cashier": rsEmployees!Address = "15328 Crystal St.": rsEmployees!City = "Frederick": rsEmployees!State = "MD": rsEmployees!ZIPCode = "21701"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "829-313": rsEmployees!FirstName = "Simon": rsEmployees!MiddleName = "Eddy": rsEmployees!LastName = "Michaels": rsEmployees!LocationCode = "CPKUMD": rsEmployees!Title = "Cashier": rsEmployees!Address = "1336 Philadelphia St.": rsEmployees!City = "Baltimore": rsEmployees!State = "MD": rsEmployees!ZIPCode = "21206"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "927-395": rsEmployees!FirstName = "Luisa": rsEmployees!MiddleName = "Judie": rsEmployees!LastName = "Vanecek": rsEmployees!LocationCode = "GTWMST": rsEmployees!Title = "Cashier": rsEmployees!Address = "8082 16th St N.W.": rsEmployees!City = "Washington": rsEmployees!State = "DC": rsEmployees!ZIPCode = "20002"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "928-495": rsEmployees!FirstName = "Ryan": rsEmployees!LastName = "Duck": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "General Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "10244 Webster Rd": rsEmployees!City = "Rockville": rsEmployees!State = "MD": rsEmployees!ZIPCode = "20854"
rsEmployees.Update
rsEmployees.AddNew
rsEmployees!EmployeeNumber = "952-846": rsEmployees!FirstName = "John": rsEmployees!LastName = "Possemato": rsEmployees!LocationCode = "SLVSSL": rsEmployees!Title = "Assistant Manager": rsEmployees!CanCreateNewAccount = True: rsEmployees!Address = "8254 12th St. N.E.": rsEmployees!City = "Washington": rsEmployees!State = "DC": rsEmployees!ZIPCode = "20004"
rsEmployees.Update
rsEmployees.Close
dbKoloBank.Close
End Sub
Private Sub DefineSomePrimaryAccountHolders()
Dim dbKoloBank As Database
Dim rsCustomers As Recordset
Set dbKoloBank = CurrentDb
Set rsCustomers = dbKoloBank.OpenRecordset("Customers", _
RecordsetTypeEnum.dbOpenTable, _
RecordsetOptionEnum.dbDenyRead, _
LockTypeEnum.dbOptimistic)
rsCustomers.AddNew
rsCustomers!AccountNumber = "94-477085-03"
rsCustomers!EmployeeNumber = "507-728"
rsCustomers!DateCreated = #1/6/2017#
rsCustomers!AccountType = "Saving"
rsCustomers!FirstName = "Ismail"
rsCustomers!LastName = "Zorbah"
rsCustomers!Address = "8252 Eleven Sons Rd"
rsCustomers!City = "Arlington"
rsCustomers!State = "VA"
rsCustomers!ZIPCode = "20150"
rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "20-304042-49": rsCustomers!EmployeeNumber = "952-846": rsCustomers!DateCreated = #1/6/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "Ophellie": rsCustomers!LastName = "Wyman": rsCustomers!Address = "104 G St. S. E.": rsCustomers!City = "Washington": rsCustomers!State = "DC": rsCustomers!ZIPCode = "20005": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "68-304605-84": rsCustomers!EmployeeNumber = "294-075": rsCustomers!DateCreated = #1/8/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "Howie": rsCustomers!MiddleName = "Horace": rsCustomers!LastName = "Fallace": rsCustomers!Address = "9337 Cachet St": rsCustomers!City = "Arlington": rsCustomers!State = "VA": rsCustomers!ZIPCode = "20170": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "27-314257-84": rsCustomers!EmployeeNumber = "484-050": rsCustomers!DateCreated = #1/12/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "Robert": rsCustomers!MiddleName = "Daniel": rsCustomers!LastName = "Luner": rsCustomers!Address = "802 Lilas Ave": rsCustomers!City = "Baltimore": rsCustomers!State = "MD": rsCustomers!ZIPCode = "21208": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "28-370082-80": rsCustomers!EmployeeNumber = "461-842": rsCustomers!DateCreated = #1/12/2017#: rsCustomers!AccountType = "Saving": rsCustomers!FirstName = "James": rsCustomers!MiddleName = "Carlton": rsCustomers!LastName = "Brokeridge": rsCustomers!Address = "1022 Arlington Rd": rsCustomers!City = "Arlington": rsCustomers!State = "VA": rsCustomers!ZIPCode = "20164": rsCustomers!AccountStatus = "Suspended"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "38-402217-59": rsCustomers!EmployeeNumber = "507-728": rsCustomers!DateCreated = #1/12/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "James": rsCustomers!LastName = "Norris": rsCustomers!Address = "1277 Cecil Maurice Ave": rsCustomers!City = "Chevy Chase": rsCustomers!State = "MD": rsCustomers!ZIPCode = "20870": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "68-640304-15": rsCustomers!EmployeeNumber = "492-081": rsCustomers!DateCreated = #1/16/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "Eldridge": rsCustomers!LastName = "Powers": rsCustomers!Address = "273 S. Independence Ave": rsCustomers!City = "Alexandria": rsCustomers!State = "VA": rsCustomers!ZIPCode = "20185": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "30-514090-26": rsCustomers!EmployeeNumber = "461-842": rsCustomers!DateCreated = #1/18/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "Cherrine": rsCustomers!MiddleName = "Leonie": rsCustomers!LastName = "Horvath": rsCustomers!Address = "720 Oak Tree Rd": rsCustomers!City = "Laurel": rsCustomers!State = "MD": rsCustomers!ZIPCode = "20707": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "40-460582-63": rsCustomers!EmployeeNumber = "484-050": rsCustomers!DateCreated = #1/25/2017#: rsCustomers!AccountType = "CD ": rsCustomers!FirstName = "Mellinda": rsCustomers!LastName = "Bridges": rsCustomers!Address = "1336 Philadelphia St": rsCustomers!City = "Takoma Park ": rsCustomers!State = "MD": rsCustomers!ZIPCode = "20908": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.AddNew
rsCustomers!AccountNumber = "29-425806-46": rsCustomers!EmployeeNumber = "461-842": rsCustomers!DateCreated = #1/25/2017#: rsCustomers!AccountType = "Checking": rsCustomers!FirstName = "Albert": rsCustomers!MiddleName = "Sonny": rsCustomers!LastName = "Odonnell": rsCustomers!Address = "12 16th St. S. W.": rsCustomers!City = "Washington": rsCustomers!ZIPCode = "20008": rsCustomers!AccountStatus = "Active"
rsCustomers.Update
rsCustomers.Close
dbKoloBank.Close
End Sub
Private Sub Command0_Click()
HireSomeEmployees
MsgBox "Many employees have been hired and sent to their right locations.", _
vbOKOnly Or vbInformation, "Kolo Bank"
DefineSomePrimaryAccountHolders
MsgBox "A few records for new account holders have been created.", _
vbOKOnly Or vbInformation, "Kolo Bank"
End Sub

| Control | Caption | Name | Other Properties | |
| Label |
|
Kolo Bank | Font Color: Yellow | |
| Line |
|
Border Color: #FFC20E | ||
| Label |
|
Charge Against Account | Font Color: White | |
| Label |
|
Charge Performed By | Back Color: #727272 | |
| Text Box |
|
Employee #: | txtEmployeeNumber | |
| Line |
|
Border Width: 2 pt | ||
| Text Box |
|
Charge Date: | txtChargeDate | Format: Short Date |
| Text Box |
|
Charge Time: | txtChargeTime | Format: Long Time |
| Text Box |
|
Location Code: | txtLocationCode | |
| Label |
|
Performed For | Back Color: #727272 | |
| Text Box |
|
Account #: | txtAccountNumber | |
| Text Box |
|
Charge Reason: | cbxChargesReasons | |
| Text Box |
|
Currency Type: | cbxCurrenciesTypes | |
| Text Box |
|
Previous Balance: | txtPreviousBalance | |
| Text Box |
|
Amount Charged: | txtAmountCharged | |
| Text Box |
|
New Balance: | txtNewBalance | |
| Text Box |
|
Notes: | txtNotes | Special Effect: Shadowed Scroll Bars: Vertical |
| Button |
|
Submit Deposit | btnSubmitDeposit | |
| Button |
|
Close | cmdClose | |

| Control | Caption | Name | |
| Label |
|
Money Withdrawal | |
| Label |
|
Withdrawal Performed By | |
| Text Box |
|
Withdrawal Date: | txtWithdrawalDate |
| Text Box |
|
Withdrawal Time: | txtWithdrawalTime |
| Text Box |
|
Amount Withdrawn: | txtAmountWithdrawn |
| Button |
|
Submit Withdrawal | btnSubmitWithdrawal |

| Control | Caption | Name | |
| Label |
|
Account Deposit | |
| Label |
|
Deposit Performed By | |
| Text Box |
|
Deposit Date: | txDepositDate |
| Text Box |
|
Deposit Time: | txtDepositTime |
| Text Box |
|
Charge Reason | cbxChargesReasons |
| Text Box |
|
Amount Deposited: | txtAmountDeposit |
| Button |
|
Submit Deposit | cmdSubmitDeposit |
Private Sub txtAmountDeposited_LostFocus()
Dim amountDeposited As Double
Dim previousBalance As Double, currentBalance As Double
amountDeposited = CDbl(Nz(txtAmountDeposited))
previousBalance = CDbl(Nz(txtPreviousBalance))
currentBalance = amountDeposited + previousBalance
txtCurrentBalance = FormatNumber(currentBalance)
End SubPrivate Sub txtAmountWithdrawn_LostFocus()
Dim amountWithdrawn As Double
Dim previousBalance As Double, currentBalance As Double
amountWithdrawn = CDbl(Nz(txtAmountWithdrawn))
previousBalance = CDbl(Nz(txtPreviousBalance))
currentBalance = previousBalance - amountWithdrawn
txtNewBalance = FormatNumber(currentBalance)
End SubPrivate Sub txtAmountCharged_LostFocus()
Dim amountCharged As Double
Dim previousBalance As Double, currentBalance As Double
amountCharged = CDbl(Nz(txtAmountCharged))
previousBalance = CDbl(Nz(txtPreviousBalance))
currentBalance = previousBalance - amountCharged
txtNewBalance = FormatNumber(currentBalance)
End Sub
The Number of Records of a Record Set
After creating a record set, you may want to know the actual number of records it contains. This information is stored in a property named RecordCount. On a form, to get the number of records it contains, you can access the RecordCount property of its RecordsetClone object. This can be done as follows:
RecordsetClone.RecordCount
Record Navigation in a Record Set
Besides creating a record set, probably the most common operation you perform on a record set is to navigate among records. The DAO.Recordset class supports the operations throught various method:
Private Sub cmdMovePosition_Click()
Dim dbVideoCollection As DAO.Database
Dim rstVideos As DAO.Recordset
Set dbVideoCollection = CurrentDb
Set rstVideos = dbVideoCollection.OpenRecordset("Videos")
rstVideos.Move 6
End SubWhen navigating among records, you must avoid moving below the first record or above the last record. To assist you with this, the DAO.Recordset class is equipped with the BOF() and the EOF() methods. The BOF() method is used to check whether navigation is trying to reach below the first record. The EOF() method is used to check whether navigation is getting higher than the last record. Both methods return a Boolean value.
Locating a Value
There are various ways you can find a record in a record set. You can use a loop. This can be done as follows:
Private Sub cmdUpdate_Click()
Dim fldEmployee As DAO.Field
Dim curDatabase As DAO.Database
Dim rstEmployees As DAO.Recordset
Set curDatabase = CurrentDb
Set rstEmployees = curDatabase.OpenRecordset("Employees", _
RecordsetTypeEnum.dbOpenTable, _
RecordsetOptionEnum.dbReadOnly, _
LockTypeEnum.dbPessimistic)
With rstEmployees
Do Until .EOF
For Each fldEmployee In .Fields
If fldEmployee.Name = "EmployeeID" Then
If fldEmployee.Value = CInt(txtEmployeeID) Then
' The record to be edited has been located
Exit For
End If
End If
Next
.MoveNext
Loop
End With
End Sub
Practical
Learning: Locating a Record

| Control | Name | Caption | |
| Button |
|
cmdFindCustomer | Find Customer |
Private Sub cmdFindCustomer_Click()
Dim fldCustomer As Field
Dim foundCustomer As Boolean
Dim rsCustomers As Recordset
Dim dbCommunication As Database
If IsNull(txtAccountNumber) Then
MsgBox "You must provide an account number to locate a customer.", _
vbOKCancel Or vbInformation, "Eastern Shore Communications Company"
Exit Sub
End If
foundCustomer = False
Set dbCommunication = Application.CurrentDb
Set rsCustomers = dbCommunication.OpenRecordset("Customers")
rsCustomers.MoveFirst
Do
For Each fldCustomer In rsCustomers.Fields
If (fldCustomer.Name = "AccountNumber") And (fldCustomer.Value = txtAccountNumber) Then
txtCustomerName = rsCustomers("FirstName").Value & " " & rsCustomers("LastName").Value
txtAddress = rsCustomers("Address").Value
txtCity = rsCustomers("City").Value
txtCounty = rsCustomers("County").Value
txtState = rsCustomers("State").Value
txtZIPCode = rsCustomers("ZIPCode").Value
txtCableTVBasicFee = rsCustomers("CableTVBasicFee").Value
chkIncludesDVRService = rsCustomers("UsesDVRService").Value
chkIncludesSportsPackage = rsCustomers("UsesSportsPackage").Value
txtInternetBasicFee = rsCustomers("InternetBasicFee").Value
chkIncludesModemLease = rsCustomers("ProvidesOwnModem").Value
txtInternetSpeedApplied = IIf(CInt(rsCustomers("InternetSpeedApplied").Value) = 1, "Starter", IIf(CInt(rsCustomers("InternetSpeedApplied").Value) = 2, "Blast", "Extreme"))
txtInternetSpeedFee = IIf(CInt(rsCustomers("InternetSpeedApplied").Value) = 1, "55.95", IIf(CInt(rsCustomers("InternetSpeedApplied").Value) = 2, "74.65", "115.25"))
chkIncludesSportsPackage_Click
chkIncludesDVRService_Click
chkIncludesModemLease_Click
foundCustomer = True
Exit For
End If
Next
rsCustomers.MoveNext
Loop While Not rsCustomers.EOF
If foundCustomer = True Then
cmdEvaluateCustomerBill_Click
Else
MsgBox "There is no customer with the account number you provided.", _
vbOKCancel Or vbInformation, "Eastern Shore Communications Company"
ResetForm
End If
End SubPrivate Sub cmdClose_Click()
DoCmd.Close
End SubEditing a Value in a Recordset
To let you edit a record, the Recordset class includes a method named Edit. First call it, then access each desired field and assign a value to it. After doing this, call the Update() method of the record set. This can be done as follows:
Private Sub cmdUpdate_Click()
Dim fldEmployee As DAO.Field
Dim curDatabase As DAO.Database
Dim rstEmployees As DAO.Recordset
Set curDatabase = CurrentDb
Set rstEmployees = curDatabase.OpenRecordset("Employees",
RecordsetTypeEnum.dbOpenTable)
With rstEmployees
Do Until .EOF
For Each fldEmployee In .Fields
If fldEmployee.Name = "EmployeeID" Then
If fldEmployee.Value = CInt(txtEmployeeID) Then
' The record to be edited has been located
.Edit
.Fields("DateHired").Value = txtDateHired
.Fields("FirstName").Value = txtFirstName
.Fields("LastName").Value = txtLastName
.Fields("HourlySalary").Value = txtHourlySalary
.Update
Exit For
End If
End If
Next
.MoveNext
Loop
End With
End Sub
Practical
Learning: Locating and Editing a Record
Private Sub cmdSubmitTimeSheet_Click()
Dim fldTimeSheet As Field
Dim dbWattsALoan As Database
Dim rsTimeSheets As Recordset
Dim timeSheetFound As Boolean
If IsNull(txtEmployeeNumber) Then
MsgBox "Please enter the employee number.", _
vbOKOnly, "Watts A Loan - New Time Sheet"
Exit Sub
End If
If Not IsDate(txtStartDate) Then
MsgBox "Please enter a valid start date for the current time sheet.", _
vbOKOnly, "Watts A Loan - New Time Sheet"
Exit Sub
End If
timeSheetFound = False
Set dbWattsALoan = CurrentDb
Set rsTimeSheets = dbWattsALoan.OpenRecordset("TimeSheets", RecordsetTypeEnum.dbOpenTable)
If rsTimeSheets.RecordCount > 0 Then
Do Until rsTimeSheets.EOF
For Each fldTimeSheet In rsTimeSheets.Fields
If fldTimeSheet.Name = "TimeSheetID" Then
If fldTimeSheet.Value = Me.txtTimeSheetNumber Then
rsTimeSheets.Edit
rsTimeSheets("Week1Monday").Value = CDbl(Nz(txtWeek1Monday))
rsTimeSheets("Week1Tuesday").Value = CDbl(Nz(txtWeek1Tuesday))
rsTimeSheets("Week1Wednesday").Value = CDbl(Nz(txtWeek1Wednesday))
rsTimeSheets("Week1Thursday").Value = CDbl(Nz(txtWeek1Thursday))
rsTimeSheets("Week1Friday").Value = CDbl(Nz(txtWeek1Friday))
rsTimeSheets("Week1Saturday").Value = CDbl(Nz(txtWeek1Saturday))
rsTimeSheets("Week1Sunday").Value = CDbl(Nz(txtWeek1Sunday))
rsTimeSheets("Week2Monday").Value = CDbl(Nz(txtWeek2Monday))
rsTimeSheets("Week2Tuesday").Value = CDbl(Nz(txtWeek2Tuesday))
rsTimeSheets("Week2Wednesday").Value = CDbl(Nz(txtWeek2Wednesday))
rsTimeSheets("Week2Thursday").Value = CDbl(Nz(txtWeek2Thursday))
rsTimeSheets("Week2Friday").Value = CDbl(Nz(txtWeek2Friday))
rsTimeSheets("Week2Saturday").Value = CDbl(Nz(txtWeek2Saturday))
rsTimeSheets("Week2Sunday").Value = CDbl(Nz(txtWeek2Sunday))
rsTimeSheets.Update
MsgBox "The time sheet has been updated.", _
vbOKOnly, "Watts A Loan - Time Sheet Edition"
timeSheetFound = True
End If
End If
Next
rsTimeSheets.MoveNext
Loop
End If
If timeSheetFound = False Then
rsTimeSheets.AddNew
rsTimeSheets("EmployeeNumber").Value = txtEmployeeNumber
rsTimeSheets("StartDate").Value = CDate(txtStartDate)
rsTimeSheets("Week1Monday").Value = CDbl(Nz(txtWeek1Monday))
rsTimeSheets("Week1Tuesday").Value = CDbl(Nz(txtWeek1Tuesday))
rsTimeSheets("Week1Wednesday").Value = CDbl(Nz(txtWeek1Wednesday))
rsTimeSheets("Week1Thursday").Value = CDbl(Nz(txtWeek1Thursday))
rsTimeSheets("Week1Friday").Value = CDbl(Nz(txtWeek1Friday))
rsTimeSheets("Week1Saturday").Value = CDbl(Nz(txtWeek1Saturday))
rsTimeSheets("Week1Sunday").Value = CDbl(Nz(txtWeek1Sunday))
rsTimeSheets("Week2Monday").Value = CDbl(Nz(txtWeek2Monday))
rsTimeSheets("Week2Tuesday").Value = CDbl(Nz(txtWeek2Tuesday))
rsTimeSheets("Week2Wednesday").Value = CDbl(Nz(txtWeek2Wednesday))
rsTimeSheets("Week2Thursday").Value = CDbl(Nz(txtWeek2Thursday))
rsTimeSheets("Week2Friday").Value = CDbl(Nz(txtWeek2Friday))
rsTimeSheets("Week2Saturday").Value = CDbl(Nz(txtWeek2Saturday))
rsTimeSheets("Week2Sunday").Value = CDbl(Nz(txtWeek2Sunday))
rsTimeSheets.Update
MsgBox "The new time sheet has been created.", _
vbOKOnly, "Watts A Loan - New Time Sheet"
End If
Set rsTimeSheets = Nothing
Set dbWattsALoan = Nothing
DoCmd.Close
End SubOther Techniques of Accessing the Fields of a Record Set
So far, to access a field in a record set, we passed its indexed property as in rsTimeSheets("Week1Monday"). In both the MAOL and DAO, You can access a field by applying its name to the record set variable, both separated by the ! operator. Here is an example:
Private Sub cmdDataEntry_Click()
Dim curDatabase As Object
Dim rstEmployees As Object
Set curDatabase = CurrentDb
Set rstEmployees = curDatabase.OpenRecordset("Employees")
rstEmployees.AddNew
rstEmployees("Something").Value = ...
rstEmployees!FieldName = ...
Set rstEmployees = Nothing
Set curDatabase = Nothing
End Sub
If the name is in more than one word, include it between [ and ]. Here is an example:
Private Sub cmdDataEntry_Click()
Dim curDatabase As Object
Dim rstEmployees As Object
Set curDatabase = CurrentDb
Set rstEmployees = curDatabase.OpenRecordset("Employees")
rstEmployees.AddNew
rstEmployees("Something").Value = ...
rstEmployees!FieldName = ...
rstEmployees![Area Code] = ...
Set rstEmployees = Nothing
Set curDatabase = Nothing
End Sub
Practical Learning: Accessing the Fields of a Record Set
Private Sub cmdSubmit_Click()
Dim rsWaterBills As Recordset
Dim dbWaterCompany As Database
Set dbWaterCompany = CurrentDb
Set rsWaterBills = dbWaterCompany.OpenRecordset("WaterBills", _
RecordsetTypeEnum.dbOpenTable, _
RecordsetOptionEnum.dbConsistent, _
LockTypeEnum.dbPessimistic)
If IsNull(txtAccountNumber) Or _
IsNull(txtServiceFromDate) Or _
IsNull(txtServiceToDate) Or _
IsNull(txtMeterReadingStart) Or _
IsNull(txtMeterReadingEnd) Then
Exit Sub
End If
rsWaterBills.AddNew
rsWaterBills!AccountNumber = txtAccountNumber
rsWaterBills!ServiceFromDate.Value = CDate(txtServiceFromDate)
rsWaterBills!ServiceToDate.Value = CDate(txtServiceToDate)
rsWaterBills![NumberOfDays] = CInt(txtNumberOfDays)
rsWaterBills![MeterReadingStart] = CDbl(Nz(txtMeterReadingStart))
rsWaterBills![MeterReadingEnd] = CDbl(Nz(txtMeterReadingEnd))
rsWaterBills![TotalHCF] = CDbl(Nz(txtTotalHCF))
rsWaterBills![TotalGallons] = CLng(Nz(txtTotalGallons))
rsWaterBills![First15HCF] = CDbl(Nz(txtFirst15HCF))
rsWaterBills![Next10HCF] = CDbl(Nz(txtNext10HCF))
rsWaterBills!RemainingHCF = CDbl(Nz(txtRemainingHCF))
rsWaterBills!WaterUsageCharge = CDbl(Nz(txtWaterUsageCharge))
rsWaterBills!SewerCharge = CDbl(Nz(txtSewerCharge))
rsWaterBills!StormCharge = CDbl(Nz(txtStormCharge))
rsWaterBills![TotalCharges] = CDbl(Nz(txtTotalCharges))
rsWaterBills![StateTaxes] = CDbl(Nz(txtStateTaxes))
rsWaterBills![CountyTaxes] = CDbl(Nz(txtCountyTaxes))
rsWaterBills![PaymentDueDate] = CDate(txtPaymentDueDate)
rsWaterBills![AmountDue] = CDbl(Nz(txtAmountDue))
rsWaterBills![LatePaymentDate] = CDate(txtLatePaymentDate)
rsWaterBills![LatePaymentAmount] = CDbl(Nz(txtLatePaymentAmount))
rsWaterBills.Update
rsWaterBills.Close
dbWaterCompany.Close
MsgBox "The water has been prepared and approved.", _
vbOKOnly Or vbInformation, _
"Whirl Water Shine Corporation"
DoCmd.Close
End SubDeleting a Record in DAO
To support the ability to delete a record, the Recordset class is equipped with a method named Delete. Here is an example of calling:
Private Sub cmdDeleteRecord_Click()
Dim fldEmployee As DAO.Field
Dim curDatabase As DAO.Database
Dim rstEmployees As DAO.Recordset
Set curDatabase = CurrentDb
Set rstEmployees = curDatabase.OpenRecordset("Employees",
RecordsetTypeEnum.dbOpenTable, _
RecordsetOptionEnum.dbAppendOnly, _
LockTypeEnum.dbOptimistic)
With rstEmployees
Do Until .EOF
For Each fldEmployee In .Fields
If fldEmployee.Name = "EmployeeID" Then
If fldEmployee.Value = CInt(txtEmployeeID) Then
' The record to be deleted has been found
.Delete
Exit For
End If
End If
Next
.MoveNext
Loop
End With
End Sub
Data Analysis With a Record Set
Introduction
Data analysis is available in a record set. In fact, as opposed to the DoCmd.RunSQL() method, the record set presents some advantages. For example, if an error occurs when you execute a SQL statement in DoCmd.RunSQL, you may have difficulties finding out what type of error and why. On the other hand, the record set can give you some information about what is going on.
As seen already, you can pass a SQL statement as argument to a record set. After opening the record set, it returns a list of records. This time, instead of visiting each field of the record set to check its name, you would know with certainty what fields are in the set.
As you should know already, both the DoCmd.RunSQL() and the OpenRecordset() methods produce a list of records. One of the advantages that a record set presents over DoCmd.RunSQL() is that you can find out if the OpenRecordset() did not produce any record at all, which is difficult information to get with the former. When the OpenRecordset() method is called, if it produces an empty list, the database engine produces (throws) a 3021 error. This allows you to take appropriate actions.
Controlling a Sub-Form Using a Record Set
You can create a record set from a form that acts as the parent of a sub-form, populate that record set with records, and bind the record set to the sub-form. To make this possible, remember that every form has a property named Recordset. Instead of using the name of a table or query, you can create a SQL statement as complex as you want, pass it to the OpenRecordset() method of a record set, and then assign that record set to the sub-form.
Practical
Learning: Testing a Database
| Account # | First Name | Last Name | Address | City | County | State | ZIP Code | Cable TV Basic Fee | Uses DVR Service | Uses Sports Package | Internet Basic Fee | Provides Own Modem | Internet Speed Applied |
| 5805864 | Joseph | Muir | 2795 Texas Rd | Laurel | Prince George | MD | 20742 | 24.95 | Checked | Checked | 64.50 | 1 | |
| 9475117 | Scott | Haughley | 11720 Esplanade Crt | Woolsey | Fairfax | VA | 20169 | 26.85 | 64.50 | Checked | 1 | ||
| 2858070 | Karen | Ressner | 1088 Barnley Rd | Washington | DC | 20004 | 22.70 | 115.40 | 3 | ||||
| 5070686 | Catherine | Alvarez | 11148 Kemp Know Mills Rd | Reiterstown | Baltimore | MD | 21136 | 24.95 | 82.20 | Checked | 2 | ||
| 9686951 | Andrew | Tiggs | 884 Zephyr St | Warsaw | Prince William | VA | 22572 | 25.25 | Checked | Checked | 64.50 | Checked | 1 |
| 4028408 | Joseph | Marlens | 10328 Wellington Ave | Silver Spring | Montgomery | MD | 20906 | 24.95 | 82.20 | 2 | |||
| 7977829 | Philippe | Norte | 4148 Millfoy Rd | Rock Mills | Culpeper | VA | 22716 | 27.30 | Checked | 64.50 | Checked | 1 | |
| 2408504 | Pascale | Donfack | 4003 Addison Str | Washington | DC | 20008 | 20.15 | 115.40 | 3 | ||||
| 2495708 | Melodie | Wright | 8266 Georgina Rd | Alexandria | VA | 22314 | 25.75 | Checked | 82.20 | Checked | 2 | ||
| 9370241 | Frederick | Birds | 7002 Knowles Rd | Laurel | Anne Arundel | MD | 20724 | 27.50 | 75.00 | 3 | |||
| 7024059 | Harry | Sons | 8420 Givensons Ave | Hyattsville | Prince George | MD | 20782 | 24.95 | Checked | Checked | 64.50 | 1 | |
| 8508620 | William | Goodson | 1077 Elm Rebuque Ave | Silver Spring | Montgomery | MD | 20910 | 24.95 | Checked | Checked | 64.50 | 1 |
|
|
||
| Previous | Copyright © 2005-2022, FunctionX, Inc. | Next |
|
|
||