现在,我有一个问题向你请教.
现在,我正在做一个三层结构的系统.
客户端通过远程访问应用服务器,应用服务器再访问数据库服务器.
中间层(dll文件)放在应用服务器上,我在客户端怎样访问中间层的
dll文件,再通过中间层的dll文件访问数据库服务器.
最好有简单的VB源代码.谢谢了。

解决方案 »

  1.   

    服务器端
    新建一个ActiveX DLL命名为VBCOMServer并在下面新建一个名为COMServer的ClassModule,输入如下代码:
    =============================================================
    Option Explicit
    Public Function getString(ByVal Value As Integer) As String
        On Error GoTo ErrHandle
        getString = Str(Value)
    ErrHandle:
        Err.Raise Err.Number, "VBCOMServer.COMServer.getString", Err.Description
    End Function
    =============================================================
    客户端
    =============================================================
    Dim APServer As ObjectPrivate Sub Form_Load()
       On Error Goto ErrHandle
       Dim iValue As Integer
       Dim sValue As String   
       Set APServer = CreateObject("VBCOMServer.COMServer", "(local)")
       ivale = 1025
       sValue = APServer.getString(iValue)
       MsgBox sValue
    ErrHandle:
       MsgBox Err.Description
    End Sub
    =============================================================
      

  2.   

    其实你这样做的话是按照WINDOWS DNA来做,中间层组件用VB实现.DLL,然后用ASP设计表示层。
      

  3.   

    谢谢大家的帮助.
    能否给一个访问数据库的简单的VB代码.
    比如,在数据库有一个A表.在客户端通过
    访问应用服务器,来访问A表,在客户端和应用服务器端,
    怎么写代码,谢谢了。
      

  4.   

    to   unsigned(僵哥):
     报错,未在本地机器上注册类。
     应该怎样注册??
      

  5.   

    同意 unsigned(僵哥) 的说法:补充一下:在服务器上用COM+(组件服务)安装和配置好Com+服务后,生成打包安装程序,在客户端上安装,再写客户端程序.或都,把COMServer.Dll拷到客户端,用Regsvr32 注册一下...就OK了
      

  6.   

    在服务器上递交Com+服务并导出,然后拿导出的文件到客户端运行就注册了。如果哪位大哥有自注册的程序发个来给偶看看哦。
      

  7.   

    在服务器上把%Program Files%\Common Files\System\msadc下的handsafe.reg和HANDLER.reg添加到注册表,然后将服务器端的COM的ProgID(比如上面的VBCOMServer.COMServer)以主键添加到
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\parameters\ADCLaunch
    之下.
    这样就可以使用如下方式使用:
    Dim APServer As Object
    Dim oRDS As Object 
    Set oRDS = CreateObject("RDS.DataSpace")
    Set APServer = oRDS.CreateObject("VBCOMServer.COMServer",[ServerIPAddress or ServerName])
      

  8.   

    注册时还要注意的是仍然需要完成正常的COM+组件注册。
      

  9.   

    不过这种方式我很少用,我都使用另外一种访问方法,基于Socket的.
    你也可以试试,这个就简单点。
    下载地址:http://iemis.vicp.net/EasyDCOMObject.RAR
    包括文件:
       1.ScktSrvr.exe
       2.EasyDCOMObject.DLL
    说明:
       ScktSrvr.exe 全称Borland Socket Server,用来Socket方式的COM代理服务器
       EasyDCOMObject.dll 一个用BCB6做的基于Socket方式访问COM的组件。在注册了服务器组件的机器上启动scktsrvr.exe(可以使用/install开关加载为服务),然后在用户机器上注册EasyDCOMObject.dll,然后就可以如下使用:Dim objEasyDCOMObject as Object
    Dim APServer as Object
    Dim iValue as Integer
    Dim sValue as String
    set objEasyDCOMObject=CreateObject("EasyDCOMObject.EasyDCOMObject")
    set APServer=objEasyDCOMObject.GetObj("VBCOMServer.COMServer")
    iValue=1000
    sValue=APServer.getString(iValue)
    Debug.Print sValue
      

  10.   

    非常感谢了。据我所知,这样做的DLL拷到SYSTEM32下就行了,客户端就不用注册了。真是,非常感谢了!!!
      

  11.   

    不是所有文件拷贝到system32下都行的。这是基于COM而不是基于API的,基于API才是放入搜索路径就可以了,但是COM是必须要注册。
      

  12.   

    另外要提一下这个ScktSrvr.exe并不是CBuilder或Delphi自带的那个,是以过了修改的,否则,就只认Bolrand的开发工具开发出来的COM组件了。所以最好不要自作聪明。
      

  13.   

    再纠正一下,前面的getString函数有个错误,在ErrHandle:之前少了个Exit Function
    另外将ProgID添加到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\parameters\ADCLaunch
    之后只授权给了WEB访问方式,也就是说
    RDSObject.CreateObject(ProgID,ServerName/ServerIP)应改为
    RDSObject.CreateObject(ProgID,"http://"+Server)