Type recordset/recordset?

F

FlaviusFlav

Im trying to pass a recordset to a procedure to better separate my cod
but getting a type mismatch.

...
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.open "someurl"
...
(the above all works fine)

dosomething(rs) <---Type mismatch here



private sub dosometing(rs as ADODB.recordset)

end sub

I have a watch on rs, and at the point of the procedure call, it i
listed as Type "recordset/recordset"
What does this mean, and how would I pass this to a procedure
 
D

Dick Kusleika

Flav

It works okay for me.

Sub bbb(rs As ADODB.Recordset)

Debug.Print TypeName(rs)
Debug.Print rs.Fields(1).Value

End Sub

returns Recordset and the proper field value. To which version of ADO have
you set a reference?

You could type your argument As Object which might take care of it, but I'd
be interested to know what's going on. I used XL2000, Win98, ADO 2.7 and
also tested ADO 2.1.
 
B

Bob Phillips

Flavius,

By using

dosomething(rs)

the rs is being evaluated before passed to the procedure. Use

dosomething rs

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
F

FlaviusFlav

Thanks for the help Bob.

I'm so used to using parens around arguments that I didnt think t
think that its just evaluating the containing expressio
 
O

onedaywhen

FlaviusFlav wrote ...
rs.open "someurl"
dosomething(rs) <---Type mismatch here
private sub dosometing(rs as ADODB.recordset)

What puzzle's me is why you would want to pass an *open* recordset by
reference to a procedure. It would be very complicated for the calling
procedure if the dosometing code changed the rs pointer to reference
another recordset object. I suspect you want

Private Sub DoSometing(ByVal rs as ADODB.Recordset)

It pays to always be explicit; don't rely on default behavior. Ask
yourself whether you want ByVal or ByRef: the answer is usually ByVal
but the default is ByRef. Being explicit will help the person who
inherits your project when you move on to greater things.

--
 
Top