One situation where I've seen this same behavior is when ADO and DAO are mixed, either in the same routine, or where a DAO routine calls an ADO routine, or vice versa. Could that be involved in your case?

I don't see any problem in the declarations, but I personally make it a rule to keep my DAO and ADO in separate routines and not to call one from the other. The only time I call DAO from ADO or vice versa is when the result is a value or something similar that is not affected by the object model involved. Basically, anything that returns an object of any sort has to be kept within its own object model exclusively. Specifying the object model in your declarations can prevent a LOT of problems, since there are so many objects with the same name in both models, none of which is interchangeable with the other type. It can be awfully hard to track down this kind of problem, but given your mix of ADO and DAO, I'd lay odds that's where it's coming from.