I was selected to be a guest blogger on the official Microsoft Access blog! You can read the article here:
Please read and come back here for some final thoughts on the technique.
Another alternative: DAO
When I wrote the guest post I automatically selected ADODB since that’s what I use almost always in my code. Here’s the same concept using DAO:
Private Sub OrderStatus_MouseMove( _
Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single _
)
Dim strSQL As String
Dim rst As DAO.Recordset
Dim db As DAO.Database
10 If IsNull(Me.OrderID) Or Me.OrderID = "" Then
20 Exit Sub
30 End If
32 strSQL = "Select ItemNum from tblOrderItems Where OrderID = " & Me.OrderID
33 Set db = CurrentDB
34 Set rs = db.OpenRecordset(strSQL)
60 With rs
70 If .RecordCount > 0 Then
80 strSQL = ""
90 Do While .EOF = False
100 strSQL = strSQL & !ItemNum & vbCrLf
110 .MoveNext
120 Loop
130 End If
140 End With
150 Me.OrderStatus.ControlTipText = strSQL
160 Set rs = Nothing
End Sub
Persistent Recordset
If you find yourself constantly opening and closing the recordset, you can choose to create a module level variable, move out the line 30-32 into form’s load or current event and not closing the recordset by commenting out line 160 above. If you do go down this route then you would need to retrieve all related records in one trip. You also may want to open the recordset as a snapshot-type recordset to ensure the request is pulled only once. If it’s a lot of records in memory it may not be worth it.
After all these years I’m continually amazed at the capabilities of Access and how we can stretch the envelope of what can be done.