测试表单:
Dim rs1 As ADODB.Recordset
Dim zh As Z9652.j51
Private Sub Form_Load()'Set zh = New Z9652.j51
set zh=createobject("z9652.j51")Set rs1 = zh.GetData()        :显示指示此处
Debug.Print rs1.Fields(0)
Text1 = rs1.Fields(0)
Text2 = rs1.Fields(1)
Text3 = rs1.Fields(2)
Text4 = rs1.Fields(3)
End Sub你的组件是否注册成功?
mts运行了吗?

解决方案 »

  1.   

    中间层com
    在GetData中初始化
    set cnn=Createobject("ADODB.Connection")
    set rs=CreateObject("ADODB.Recordset")
    测试表单
    同样也要做初始化,但最好不要用NEW关键字,因为New是VB关键字,如果要进行Com编程的话,应该用
    Com(com+)的CreateObject函数,这样可以利用Com的诸多优势.
    我不经常用QQ不过可以给我写信[email protected]
      

  2.   

    cnn 和 rs 始终就没有实例化!
    不要用 ADODB.Recordset 作 GetData 的 返回值,否则 COM 里就要实例化 ADODB.Recordset,
    最好将 ADODB.Recordset 作为 GetData 的参数 ByRef 传参!在主程序中实例化 ADODB.Recordset
      

  3.   


      未设置对象变量或with block变量
    怎么办,原代码如下:
    中间层com:Option Explicit
    Dim cnn As ADODB.Connection
    Dim str As String
    Dim s1 As String
    Dim rs As ADODB.Recordset
    Public Function getdata() As ADODB.Recordset
    str = "DRIVER={SQL SERVER};server=N5S1X2;uid=sa;pwd=;database=CHINAREN"
    ----------------------------------------
    加上一句:set cnn=new adodb.connection
              set rs=new adodb.Recordset
    就可以了.
    -------------------------------------
    cnn.ConnectionString = cnn
    cnn.CursorLocation = adUseClient
    cnn.Mode = adModeReadWrite
    cnn.Open
    s1 = "select * from chinaren"
    rs.ActiveConnection = cnn
    rs.LockType = adLockBatchOptimistic
    rs.CursorType = adOpenDynamic
    rs.Open s1
    Set getdata = rs
    End Function
    测试表单:
      

  4.   

    你的COM是不是没有做过单体测试?
    楼上的兄弟说得对,你好象只是定义了rs和cnn,没有实例化。