我一直不懂这个程序为什么用这个复杂的结构,Implements ObjectControl是类里面还要用类吗?没看懂,而且Set oDb = oObjectContext.CreateInstance("ADODB.Connection")  ’调用时保错“对象变量或with块变量没设置”?????????????类源代码为:
Private oObjectContext As ObjectContext
Private oDb As ADODB.Connection
Private oRs As ADODB.Recordset
Private vSql As Variant
Const vDBConn As Variant = "DSN=crm;UID=sa;PWD=;"
Implements ObjectControl
Private Function ObjectControl_CanBePooled() As Boolean
    ObjectControl_CanBePooled = True
End Function
Private Sub ObjectControl_Deactivate()
    Set oObjectContext = Nothing
End Sub
Private Sub ObjectControl_Activate()
    Set oObjectContext = GetObjectContext()
End Sub
Public Function checkpassword(ByVal username As Variant, ByVal password As Variant) As Variant
'On Error GoTo checkpasswordError
Dim vAccount As New Collection
Dim vresponse As New Collection  
Set oDb = oObjectContext.CreateInstance("ADODB.Connection")  ’调用时保错“对象变量或with块变量没设置”?????????????
Set oRs = oObjectContext.CreateInstance("adodb.recordset")
Let vSql = "SELECT * FROM employee WHERE employeeid = '" & Trim(username) & "';"
oDb.Open vDBConnSet oRs = oDb.Execute(vSql)
If Not oRs.EOF Then
    If Trim(oRs.Fields("Password")) = Trim(password) Then
         vAccount.Add Trim(oRs.Fields("employeeid")), "login"
        vAccount.Add Trim(oRs.Fields("popedom")), "popedom"
        vAccount.Add Trim(oRs.Fields("name")), "name"
         vAccount.Add Trim(oRs.Fields("datapopedom")), "datapopedom"
         vAccount.Add Trim(oRs.Fields("depart")), "depart"
    
         oObjectContext.SetComplete
         oDb.Close
         vresponse.Add vAccount, Key:="account"
         vresponse.Add False, Key:="error"
Set checkpassword = vresponse ' error handling
 Exit Function
               Else
        vresponse.Add True, Key:="error"
        vresponse.Add "密码错!", Key:="reason"
        Set checkpassword = vresponse
        oDb.Close
        oObjectContext.SetComplete
        Exit Function
        
    End If
Else
    vresponse.Add True, Key:="error"
    vresponse.Add "没找到用户名!", Key:="reason"
    Set checkpassword = vresponse
    oDb.Close
    oObjectContext.SetComplete
    Exit FunctionEnd If
checkpasswordError:
    oObjectContext.SetAbort
    vresponse.Add True, Key:="error"
    vresponse.Add Err.Description, Key:="reason"
    Set checkpassword = vresponse
End Function

解决方案 »

  1.   

    我的调用方式为
    Dim objCompany As ObjectSet objCompany = New crm.loginSet aa = objCompany.checkpassword("admin", "admin")
    不知什么地方出了问题?
      

  2.   

    使用ObjectContext需要首先在程序中引用
    Microsoft Transaction Server Type Library (mtxas.dll).
      

  3.   

    我这里找不到mtxas.dll阿,哪位兄弟能给我发一个吗?谢谢!我的系统是win2000 adv server
    [email protected]
      

  4.   

    在微软网站看到关于mtxas.dll的说明,是不是win2000不支持MTS,而转为支持com+阿,这样属性和方法就都变了????????急????怎么解决阿,请指教。
    MTS 
    Microsoft 事务服务器类型库
    (MTXAS.DLL)
    共享属性管理器类型库
    (MTXSPM.DLL)
     MTS 2.0 管理类型库
    (MTXADMIN.DLL)
    在win2000下变为
    COM+  COM+ 服务类型库
    (COMSVCS.DLL)
     COM+ 服务类型库
    (COMSVCS.DLL)
     MTS 2.0 管理类型库
    (MTSADMIN.TLB)MTS Admin DLL 引用已经转换为 MTS TLB 引用以获得向后兼容性。COM+ Admin 引用是单独的项目。但是,如果计划使用 COM+ Admin 对象,则需要仔细阅读文档,因为它们支持的集合、属性和方法已经改变。
      

  5.   

    安装pws
    选择mts即可win98光盘/add-ons目录