It ccould be something to do with the cursor type of the recordset.
Possibly the default cursor for SQL behaves differently to that for MSAccess.
Trying this
Code:
Set rsItemsInCart = New ADODB.Recordset
strItemsInCart = "SELECT * FROM CartItems, Products WHERE " _
& "CartID='" & CartID & "' AND CartItems.ProductID=Products.ProductID"
rsItemsInCart.Open strItemsInCart , Database, adOpenStatic, adLockReadOnly, adCmdText