![]() |
Operations on Record Sets |
|
Overview of Record Operations |
In Lesson 13, we saw various means of maintaining records using either database objects or SQL. In the same ways, the various libraries that ship with Microsoft Access provide their own approach. As you will see in the various sections, the Microsoft Access Object Library and DAO use the same techniques. ADO follows the same approach but sometimes add a few steps. Consider the following list of videos: |
|
|
| Field Name | Data Type | Caption | Other Properties |
| ItemCategoryID | AutoNumber | Item Category ID | Primary Key |
| ItemCategory | Item Category |
| Item Category ID | Item Category |
|---|---|
| 1 | Women |
| 2 | Men |
| 3 | Girls |
| 4 | Boys |
| 5 | Toddlers |
| 6 | Miscellaneous |
| Field Name | Data Type | Caption | Field Size | Other Properties |
| InventoryItemID | AutoNumber | Inventory Item ID | Primary Key | |
| DateEntered | Date/Time | Date Entered | Format: Medium Dale Input Mask: 99\->L<LL\-00;0;_ |
|
| ItemNumber | Item # | 10 | ||
| ItemName | 80 | |||
| ItemCategoryID | ||||
| ItemSize | Item Size | |||
| OriginalPrice | Number | Original Price | Double | Format: Fixed |
| UnitsInStock | Number | Units In Stock | Integer |

| Field Name | Data Type | Caption | Field Size | Other Properties |
| SaleItemID | Sale Item ID | |||
| DateEntered | ||||
| ItemNumber | ||||
| ItemName | ||||
| ItemCategoryID | ||||
| ItemSize | ||||
| MarkedPrice | Marked Price | |||
| DiscountRate | Number | Discount Rate | Double | Format: Percent Default Value: 0 Validation Rule: <1 Validation Text: Enter a value such as 0.0775 for a 7.75% tax rate |
| PriceAfterDiscount | Number | Price Discount | Double | Format: Fixed |
| UnitsInStock | Number | Units In Stock | Integer |
| Field Name | Data Type | Caption | Field Size | Other Properties |
| CustomerOrderID | AutoNumber | Order ID | Primary Key | |
| OrderDate | Date/Time | Order Date | Format: Medium Date Input Mask: 99\->L<LL\-00;0;_ |
|
| Item1Number | 10 | |||
| Item1Name | 80 | |||
| Item1Size | ||||
| Item1MarkedPrice | Number | Double | Format: Fixed | |
| Item1DiscountRate | Number | Double | Format: Percent Default Value: 0 Validation Rule: <1 Validation Text: Enter a value such as 0.20 for a 20% discount |
|
| Item1PriceAfterDiscount | Number | Price Discount | Double | Format: Fixed |
| Item1Quantity | Number | Integer | ||
| Item1SubTotal | Number | Double | Format: Fixed | |
| Item2Number | 10 | |||
| Item2Name | 80 | |||
| Item2Size | ||||
| Item2MarkedPrice | Number | Double | Format: Fixed | |
| Item2DiscountRate | Number | Double | Format: Percent Default Value: 0 Validation Rule: <1 Validation Text: Enter a value such as 0.20 for a 20% discount |
|
| Item2PriceAfterDiscount | Number | Price Discount | Double | Format: Fixed |
| Item2Quantity | Number | Integer | ||
| Item2SubTotal | Number | Double | Format: Fixed | |
| Item3Number | 10 | |||
| Item3Name | 80 | |||
| Item3Size | ||||
| Item3MarkedPrice | Number | Double | Format: Fixed | |
| Item3DiscountRate | Number | Double | Format: Percent Default Value: 0 Validation Rule: <1 Validation Text: Enter a value such as 0.20 for a 20% discount |
|
| Item3PriceAfterDiscount | Number | Price Discount | Double | Format: Fixed |
| Item3Quantity | Number | Integer | ||
| Item3SubTotal | Number | Double | Format: Fixed | |
| Item4Number | 10 | |||
| Item4Name | 80 | |||
| Item4Size | ||||
| Item4MarkedPrice | Number | Double | Format: Fixed | |
| Item4DiscountRate | Number | Double | Format: Percent Default Value: 0 Validation Rule: <1 Validation Text: Enter a value such as 0.20 for a 20% discount |
|
| Item4PriceAfterDiscount | Number | Price Discount | Double | Format: Fixed |
| Item4Quantity | Number | Integer | ||
| Item4SubTotal | Number | Double | Format: Fixed | |
| Item5Number | 10 | |||
| Item5Name | 80 | |||
| Item5Size | ||||
| Item5MarkedPrice | Number | Double | Format: Fixed | |
| Item5DiscountRate | Number | Double | Format: Percent Default Value: 0 Validation Rule: <1 Validation Text: Enter a value such as 0.20 for a 20% discount |
|
| Item5PriceAfterDiscount | Number | Price Discount | Double | Format: Fixed |
| Item5Quantity | Number | Integer | ||
| Item5SubTotal | Number | Double | Format: Fixed | |
| ItemsTotal | Number | Items Total | Double | Format: Fixed |
| SalesTaxRate | Number | Sales Tax Rate | Double | Format: Percent Default Value: 0.0775 Validation Rule: <1 Validation Text: Enter a value such as 0.20 for a 20% discount |
| OrderTotal | Number | Order Total | Double | Format: Fixed |

Private Sub EvaluateOrder()
Dim dblItemsTotal As Double
Dim dblTaxAmount As Double
Dim dblNetPrice As Double
dblItemsTotal = Val(Nz([Item1SubTotal]) + Nz([Item2SubTotal]) + _
Nz([Item3SubTotal]) + Nz([Item4SubTotal]) + _
Nz([Item5SubTotal]))
dblTaxAmount = CLng(dblItemsTotal * Nz([SalesTaxRate]) * 100) / 100
dblNetPrice = dblItemsTotal + dblTaxAmount
Me.ItemsTotal = dblItemsTotal
Me.SalesTaxAmount = dblTaxAmount
Me.OrderTotal = dblNetPrice
End Sub
Private Sub Item1Number_LostFocus()
On Error GoTo ErrorOccurred
If Not IsNull(DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item1Number & "'")) Then
[Item1Name] = DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item1Number & "'")
[Item1Size] = DLookup("ItemSize", "SaleItems", "ItemNumber = '" & Item1Number & "'")
[Item1MarkedPrice] = DLookup("MarkedPrice", "SaleItems", "ItemNumber = '" & Item1Number & "'")
[Item1DiscountRate] = DLookup("DiscountRate", "SaleItems", "ItemNumber = '" & Item1Number & "'")
[Item1PriceAfterDiscount] = CDbl([Item1MarkedPrice]) - CLng(Nz([Item1MarkedPrice]) * Nz([Item1DiscountRate]) * 100) / 100
[Item1Quantity] = "1"
[Item1SubTotal] = [Item1PriceAfterDiscount]
EvaluateOrder
Else
[Item1Number] = "000000"
[Item1Name] = "Miscellaneous"
[Item1Size] = "N/A"
[Item1MarkedPrice] = "0.00"
[Item1DiscountRate] = "0.00%"
[Item1PriceAfterDiscount] = "0.00"
[Item1Quantity] = "0"
[Item1SubTotal] = "0.00"
[Item1Name].SetFocus
End If
GetOuttaHere:
Exit Sub
ErrorOccurred:
If Err.Number = -2147352567 Then
Resume GetOuttaHere
Else
MsgBox "An error occured when retrieving the product information" & vbCrLf & _
"Please call the program vendor and report the error as follows:" & vbCrLf & _
"Error #: " & Err.Number & vbCrLf & _
"Reason: " & Err.Description
Resume Next
End If
End Sub
|
Private Sub Item2Number_LostFocus()
On Error GoTo ErrorOccurred
If Not IsNull(DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item2Number & "'")) Then
[Item2Name] = DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item2Number & "'")
[Item2Size] = DLookup("ItemSize", "SaleItems", "ItemNumber = '" & Item2Number & "'")
[Item2MarkedPrice] = DLookup("MarkedPrice", "SaleItems", "ItemNumber = '" & Item2Number & "'")
[Item2DiscountRate] = DLookup("DiscountRate", "SaleItems", "ItemNumber = '" & Item2Number & "'")
[Item2PriceAfterDiscount] = CDbl([Item2MarkedPrice]) - CLng(Nz([Item2MarkedPrice]) * Nz([Item2DiscountRate]) * 100) / 100
[Item2Quantity] = "1"
[Item2SubTotal] = [Item2PriceAfterDiscount]
EvaluateOrder
Else
[Item2Number] = "000000"
[Item2Name] = "Miscellaneous"
[Item2Size] = "N/A"
[Item2MarkedPrice] = "0.00"
[Item2DiscountRate] = "0.00%"
[Item2PriceAfterDiscount] = "0.00"
[Item2Quantity] = "0"
[Item2SubTotal] = "0.00"
[Item2Name].SetFocus
End If
GetOuttaHere:
Exit Sub
ErrorOccurred:
If Err.Number = -2147352567 Then
Resume GetOuttaHere
Else
MsgBox "An error occured when retrieving the product information" & vbCrLf & _
"Please call the program vendor and report the error as follows:" & vbCrLf & _
"Error #: " & Err.Number & vbCrLf & _
"Reason: " & Err.Description
Resume Next
End If
End Sub
|
Private Sub Item3Number_LostFocus()
On Error GoTo ErrorOccurred
If Not IsNull(DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item3Number & "'")) Then
[Item3Name] = DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item3Number & "'")
[Item3Size] = DLookup("ItemSize", "SaleItems", "ItemNumber = '" & Item3Number & "'")
[Item3MarkedPrice] = DLookup("MarkedPrice", "SaleItems", "ItemNumber = '" & Item3Number & "'")
[Item3DiscountRate] = DLookup("DiscountRate", "SaleItems", "ItemNumber = '" & Item3Number & "'")
[Item3PriceAfterDiscount] = CDbl([Item3MarkedPrice]) - CLng(Nz([Item3MarkedPrice]) * Nz([Item3DiscountRate]) * 100) / 100
[Item3Quantity] = "1"
[Item3SubTotal] = [Item3PriceAfterDiscount]
EvaluateOrder
Else
[Item3Number] = "000000"
[Item3Name] = "Miscellaneous"
[Item3Size] = "N/A"
[Item3MarkedPrice] = "0.00"
[Item3DiscountRate] = "0.00%"
[Item3PriceAfterDiscount] = "0.00"
[Item3Quantity] = "0"
[Item3SubTotal] = "0.00"
[Item3Name].SetFocus
End If
GetOuttaHere:
Exit Sub
ErrorOccurred:
If Err.Number = -2147352567 Then
Resume GetOuttaHere
Else
MsgBox "An error occured when retrieving the product information" & vbCrLf & _
"Please call the program vendor and report the error as follows:" & vbCrLf & _
"Error #: " & Err.Number & vbCrLf & _
"Reason: " & Err.Description
Resume Next
End If
End Sub
|
Private Sub Item4Number_LostFocus()
On Error GoTo ErrorOccurred
If Not IsNull(DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item4Number & "'")) Then
[Item4Name] = DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item4Number & "'")
[Item4Size] = DLookup("ItemSize", "SaleItems", "ItemNumber = '" & Item4Number & "'")
[Item4MarkedPrice] = DLookup("MarkedPrice", "SaleItems", "ItemNumber = '" & Item4Number & "'")
[Item4DiscountRate] = DLookup("DiscountRate", "SaleItems", "ItemNumber = '" & Item4Number & "'")
[Item4PriceAfterDiscount] = CDbl([Item4MarkedPrice]) - CLng(Nz([Item4MarkedPrice]) * Nz([Item4DiscountRate]) * 100) / 100
[Item4Quantity] = "1"
[Item4SubTotal] = [Item4PriceAfterDiscount]
EvaluateOrder
Else
[Item4Number] = "000000"
[Item4Name] = "Miscellaneous"
[Item4Size] = "N/A"
[Item4MarkedPrice] = "0.00"
[Item4DiscountRate] = "0.00%"
[Item4PriceAfterDiscount] = "0.00"
[Item4Quantity] = "0"
[Item4SubTotal] = "0.00"
[Item4Name].SetFocus
End If
GetOuttaHere:
Exit Sub
ErrorOccurred:
If Err.Number = -2147352567 Then
Resume GetOuttaHere
Else
MsgBox "An error occured when retrieving the product information" & vbCrLf & _
"Please call the program vendor and report the error as follows:" & vbCrLf & _
"Error #: " & Err.Number & vbCrLf & _
"Reason: " & Err.Description
Resume Next
End If
End Sub
|
Private Sub Item5Number_LostFocus()
On Error GoTo ErrorOccurred
If Not IsNull(DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item5Number & "'")) Then
[Item5Name] = DLookup("ItemName", "SaleItems", "ItemNumber = '" & Item5Number & "'")
[Item5Size] = DLookup("ItemSize", "SaleItems", "ItemNumber = '" & Item5Number & "'")
[Item5MarkedPrice] = DLookup("MarkedPrice", "SaleItems", "ItemNumber = '" & Item5Number & "'")
[Item5DiscountRate] = DLookup("DiscountRate", "SaleItems", "ItemNumber = '" & Item5Number & "'")
[Item5PriceAfterDiscount] = CDbl([Item5MarkedPrice]) - CLng(Nz([Item5MarkedPrice]) * Nz([Item5DiscountRate]) * 100) / 100
[Item5Quantity] = "1"
[Item5SubTotal] = [Item5PriceAfterDiscount]
EvaluateOrder
Else
[Item5Number] = "000000"
[Item5Name] = "Miscellaneous"
[Item5Size] = "N/A"
[Item5MarkedPrice] = "0.00"
[Item5DiscountRate] = "0.00%"
[Item5PriceAfterDiscount] = "0.00"
[Item5Quantity] = "0"
[Item5SubTotal] = "0.00"
[Item5Name].SetFocus
End If
GetOuttaHere:
Exit Sub
ErrorOccurred:
If Err.Number = -2147352567 Then
Resume GetOuttaHere
Else
MsgBox "An error occured when retrieving the product information" & vbCrLf & _
"Please call the program vendor and report the error as follows:" & vbCrLf & _
"Error #: " & Err.Number & vbCrLf & _
"Reason: " & Err.Description
Resume Next
End If
End Sub
|
Private Sub Item1MarkedPrice_LostFocus()
Dim dblMarkedPrice As Double
Dim dblDiscountRate As Double
Dim dblDiscountAmount As Double
Dim dblPriceAfterDicsount As Double
Dim intQuantity As Integer
Dim dblSubTotal As Double
' Get the current (marked) price of the item, in case the clerk changed it
dblMarkedPrice = CDbl(Nz(Me.Item1MarkedPrice))
' Get the discount rate, whether it was entered automatically or manually
dblDiscountRate = CDbl(Nz(Me.Item1DiscountRate))
' Calculate the amount of the discount based on the unit price and the rate
dblDiscountAmount = CLng(dblMarkedPrice * dblDiscountRate * 100) / 100
' Subtract the discount amount, if any, from the marked price
dblPriceAfterDicsount = dblMarkedPrice - dblDiscountAmount
' Get the quantity order by the customer
intQuantity = CInt(Nz(Me.Item1Quantity))
' Calcute the sub-total based on the discounted price and the quantity
dblSubTotal = dblPriceAfterDicsount * intQuantity
' Display the values in the appropriate text boxes
Me.Item1PriceAfterDiscount = dblPriceAfterDicsount
Me.Item1SubTotal = dblSubTotal
' Re-calculate the order if necessary
EvaluateOrder
End Sub
|
Private Sub Item2MarkedPrice_LostFocus()
Dim dblMarkedPrice As Double
Dim dblDiscountRate As Double
Dim dblDiscountAmount As Double
Dim dblPriceAfterDicsount As Double
Dim intQuantity As Integer
Dim dblSubTotal As Double
dblMarkedPrice = CDbl(Nz(Me.Item2MarkedPrice))
dblDiscountRate = CDbl(Nz(Me.Item2DiscountRate))
dblDiscountAmount = CLng(dblMarkedPrice * dblDiscountRate * 100) / 100
dblPriceAfterDicsount = dblMarkedPrice - dblDiscountAmount
intQuantity = CInt(Nz(Me.Item2Quantity))
dblSubTotal = dblPriceAfterDicsount * intQuantity
Me.Item2PriceAfterDiscount = dblPriceAfterDicsount
Me.Item2SubTotal = dblSubTotal
EvaluateOrder
End Sub
|
Private Sub Item3MarkedPrice_LostFocus()
Dim dblMarkedPrice As Double
Dim dblDiscountRate As Double
Dim dblDiscountAmount As Double
Dim dblPriceAfterDicsount As Double
Dim intQuantity As Integer
Dim dblSubTotal As Double
dblMarkedPrice = CDbl(Nz(Me.Item3MarkedPrice))
dblDiscountRate = CDbl(Nz(Me.Item3DiscountRate))
dblDiscountAmount = CLng(dblMarkedPrice * dblDiscountRate * 100) / 100
dblPriceAfterDicsount = dblMarkedPrice - dblDiscountAmount
intQuantity = CInt(Nz(Me.Item3Quantity))
dblSubTotal = dblPriceAfterDicsount * intQuantity
Me.Item3PriceAfterDiscount = dblPriceAfterDicsount
Me.Item3SubTotal = dblSubTotal
EvaluateOrder
End Sub
|
Private Sub Item4MarkedPrice_LostFocus()
Dim dblMarkedPrice As Double
Dim dblDiscountRate As Double
Dim dblDiscountAmount As Double
Dim dblPriceAfterDicsount As Double
Dim intQuantity As Integer
Dim dblSubTotal As Double
dblMarkedPrice = CDbl(Nz(Me.Item4MarkedPrice))
dblDiscountRate = CDbl(Nz(Me.Item4DiscountRate))
dblDiscountAmount = CLng(dblMarkedPrice * dblDiscountRate * 100) / 100
dblPriceAfterDicsount = dblMarkedPrice - dblDiscountAmount
intQuantity = CInt(Nz(Me.Item4Quantity))
dblSubTotal = dblPriceAfterDicsount * intQuantity
Me.Item4PriceAfterDiscount = dblPriceAfterDicsount
Me.Item4SubTotal = dblSubTotal
EvaluateOrder
End Sub
|
Private Sub Item5MarkedPrice_LostFocus()
Dim dblMarkedPrice As Double
Dim dblDiscountRate As Double
Dim dblDiscountAmount As Double
Dim dblPriceAfterDicsount As Double
Dim intQuantity As Integer
Dim dblSubTotal As Double
dblMarkedPrice = CDbl(Nz(Me.Item5MarkedPrice))
dblDiscountRate = CDbl(Nz(Me.Item5DiscountRate))
dblDiscountAmount = CLng(dblMarkedPrice * dblDiscountRate * 100) / 100
dblPriceAfterDicsount = dblMarkedPrice - dblDiscountAmount
intQuantity = CInt(Nz(Me.Item5Quantity))
dblSubTotal = dblPriceAfterDicsount * intQuantity
Me.Item5PriceAfterDiscount = dblPriceAfterDicsount
Me.Item5SubTotal = dblSubTotal
EvaluateOrder
End Sub
|
Private Sub Item1DiscountRate_LostFocus()
Item1MarkedPrice_LostFocus
End Sub
|
Private Sub Item2DiscountRate_LostFocus()
Item2MarkedPrice_LostFocus
End Sub
|
Private Sub Item3DiscountRate_LostFocus()
Item3MarkedPrice_LostFocus
End Sub
|
Private Sub Item4DiscountRate_LostFocus()
Item4MarkedPrice_LostFocus
End Sub
|
Private Sub Item5DiscountRate_LostFocus()
Item5MarkedPrice_LostFocus
End Sub
|
Private Sub Item1Quantity_LostFocus()
Item1MarkedPrice_LostFocus
End Sub
|
Private Sub Item2Quantity_LostFocus()
Item2MarkedPrice_LostFocus
End Sub
|
Private Sub Item3Quantity_LostFocus()
Item3MarkedPrice_LostFocus
End Sub
|
Private Sub Item4Quantity_LostFocus()
Item4MarkedPrice_LostFocus
End Sub
|
Private Sub Item5Quantity_LostFocus()
Item5MarkedPrice_LostFocus
End Sub
|
![]() |
||||||||||||||||||||||||||||
|



|
Record Location |
|
As mentioned in Lesson 13 on record maintenance, editing a record consists of changing the value of one or more columns. As done visually using a table, a query or a form, on a record set, editing a record is done in various steps. First, you must locate the record. If you know exactly the index of the record that contains the value you want to edit, you can call the Move() method to jump to it. From the above table, imagine that you have finally found out the name of the director of the video titled Congo. By looking at the table, we see that it is the 7th video as indicated by the text box on the status bar. Before editing the value, you can first jump to the record number 6. Here is an example that use Microsoft Access Object library: Private Sub cmdMovePosition_Click()
Dim dbVideoCollection As Object
Dim rstVideos As Object
Set dbVideoCollection = CurrentDb
Set rstVideos = dbVideoCollection.OpenRecordset("Videos")
rstVideos.Move 6
End Sub
Although this uses the Microsoft Access Object Library, you can also apply it to DAO by simply changing the names of the objects to the appropriate ones: 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 Sub
We also saw that you could call one of the other Move-oriented methods (MoveFirst(), MovePrevious(), MoveNext(), or MoveLast()). Once you get to a record, you can then perform the necessary operation. For example, you can retrieve the values held by that record.
|
|
|
Private Sub txtItemNumber_LostFocus()
Dim rstInventoryItems As ADODB.Recordset
Dim blnFound As Boolean
' This flag will allow us to know whether the item number was found
Dim fldItem As ADODB.Field
' Since we are only starting, we assume that no item number has been found
blnFound = False
' If there is no value in the Item Number text box, don't do nothing
If Me.txtItemNumber = "" Then Exit Sub
Set rstInventoryItems = New ADODB.Recordset
rstInventoryItems.Open "SELECT * FROM InventoryItems WHERE ItemNumber = '" & txtItemNumber & "'", _
CurrentProject.Connection, _
adOpenStatic, adLockReadOnly, adCmdText
With rstInventoryItems
' Check each record
While Not .EOF
' Check the name of the column
For Each fldItem In .Fields
' If the current column is ItemNumber
If fldItem.Name = "ItemNumber" Then
' Check its value
' If the current column holds the item number that the user entered
If fldItem.Value = txtItemNumber Then
' ... then get the record and display its values in the controls
Me.txtItemName = rstInventoryItems.Fields("ItemName")
Me.cboItemCategoryID = rstInventoryItems.Fields("ItemCategoryID")
Me.txtItemSize = rstInventoryItems.Fields("ItemSize")
Me.txtOriginalPrice = rstInventoryItems.Fields("OriginalPrice")
Me.txtUnitsInStock = rstInventoryItems.Fields("UnitsInStock")
' Set the found flag to true (we will use it later on)
blnFound = True
End If
End If
Next
' In case you didn't find it, move to the next record
.MoveNext
Wend
End With
' If the item number was not found, ...
If blnFound = False Then
' ... let the user know, ...
' MsgBox "The item number you entered is not in our list of products"
' ... and reset the form
cmdReset_Click
Me.txtItemNumber.SetFocus
End If
rstInventoryItems.Close
Set rstInventoryItems = Nothing
End Sub
|
|
|
||
| Previous | Copyright © Yevol, 2007 | Next |
|
|
||