我写了一个函数从ORACLE函数内取出一个数据集.将数据集的第二个字段做为Collection的KEY 第三个字段做为Collection的VALUE  将Collection返回出去. 在外面NEW一个Collection来接收这个Collection  在取值的时候发现COUNT有98 当我a.Item("xh")取值时则出现异常. RUNTIME ERROR为3420 错误信息是对象不再有效. 这是怎么回事??  代码在下面. 各位大大帮我看下.谢谢!
=================================这段是Function体==============================================
Public Function CallService(ByVal serialNo as string,byval invalue as string ,byval servicename as string) as CollectionDim Con As New ADODB.Connection
Dim Rst1 As New ADODB.Recordset
Dim xItems As New Collection
Dim Cmd As New ADODB.Command
Dim Prm1 As New ADODB.Parameter
Dim Prm2 As New ADODB.Parameter
Dim Prm3 As New ADODB.Parameter
Dim Prm4 As New ADODB.ParameterCon.Provider = "OraOLEDB.Oracle"
Con.ConnectionString = "Data Source=edb.stc.gov.cn;" & _
"User ID=itosc;Password=itosc;PLSQLRSet=1"
Con.Open
Set Cmd.ActiveConnection = Con
Cmd.CommandType = adCmdTextDim prm As New ADODB.Parameter
Set prm = Cmd.CreateParameter("l_request", adSmallInt, adParamReturnValue)
Cmd.Parameters.Append prm
Set Prm1 = Cmd.CreateParameter("SerialNo", adBSTR, adParamInput, , serialNo)
Cmd.Parameters.Append Prm1
Set Prm2 = Cmd.CreateParameter("inValue", adBSTR, adParamInput, , inValue)
Cmd.Parameters.Append Prm2
Set Prm3 = Cmd.CreateParameter("hint", adSmallInt, adParamOutput)
Cmd.Parameters.Append Prm3
Set Prm4 = Cmd.CreateParameter("error", adSmallInt, adParamOutput)
Cmd.Parameters.Append Prm4
Cmd.CommandText = "{?= CALL " & serviceName & "(?,?,?,?)}"
Set Rst1 = Cmd.Execute
Rst1.MoveFirst
Do While (Not Rst1.EOF)
        xItems.Add Rst1.Fields(2), Rst1.Fields(1)
    Rst1.MoveNext
Loop
Rst1.Close
Set Rst1 = Nothing
Con.Close
Set Con = Nothing
Set CallService = xItems
End Function=======================================================================================Private Sub Command2_Click()
Dim a As Collection
   Set a = Module1.CallService("1234567891", ",02,B6E228,", "itosc_access.callservice")
MsgBox a.Count  '此结果为98
MsgBox a.Item("xh") '在此行RUN TIME ERROR
End Sub