Article ID: 112724
Article Last Modified on 1/18/2007
Sub Slow()
Dim d As Database
Dim r As Recordset
Set d = CurrentDB()
Set r = d.OpenRecordset("Order Details")
While Not r.EOF
r.Edit
r.Fields("Price") = r.Fields("Qty") * r.Fields("UnitCost")
r.Update
r.MoveNext
Wend
r.Close
End Sub
In the example above, the field variable "lookup" (that is, where the
Visual Basic function equates variable names with database fields) for the
three field variables Price, Qty, and UnitCost is performed in the same
While loop in which the calculations are performed. In this configuration,
both calculations and lookups must be performed inside the While loop,
which is not an efficient design.
Sub Faster()
Dim d As Database
Dim r As Recordset
Dim Price As Field, Qty As Field, UnitCost As Field
Set d = CurrentDB()
Set r = d.OpenRecordset("Order Detail")
Set Price = r.Fields("Price")
Set Qty = r.Fields("Qty")
Set UnitCost = r.Fields("UnitCost")
While Not r.EOF
r.Edit
Price = Qty * UnitCost
r.Update
r.MoveNext
Wend
r.Close
End Sub
This example runs faster because Visual Basic performs the field lookup
only once for each field and completes it before executing the loop. A
direct reference to each of the three fields is then stored in the three
field variables: Price, Qty, and UnitCost. As a result, no lookup is
required in the While loop, and the field values are accessed and
manipulated directly.
Additional query words: queries programming
Keywords: kbinfo kbprogramming KB112724