按下面的方法创建了个DLL文件:
1)新建工程,类型为 ActiveX Dll。工程名称为IncSl。
2)添加引用 Microsoft ActiveX Data Objects 2.x Library
3)在类模块UtoS 中添加代码:
Option ExplicitPublic Function GetData() As Recordset
    Dim cn As ADODB.Connection
    
    Set cn = New ADODB.Connection
    cn.Open "..."
    
    Set GetData = cn.Execute("Select 扫描器地址 From ProRate Where......")
End Function将工作编译为IncSl.DLL
之后新建一标准工程:
Private Sub Form_Click()
    Dim TestDll   As IncSl.UtoS
    Set TestDll = New IncSl.UtoS
    
    Debug.Print TestDll.GetData.ActiveConnection
    Do While TestDll.GetData.EOF = False
        Debug.Print TestDll.GetData.RecordCount '为什么这里的值一直不变都是-1
        Debug.Print TestDll.GetData.Fields.Item("扫描器地址").Value'这个值也一直不变
        TestDll.GetData.MoveNext '使用这种方法指针不能移动?
    Loop End Sub

解决方案 »

  1.   

    记录集执行错误,否则RecordCount返回0或者大于0的数;建立工程组跟踪调试一下吧
      

  2.   


    但是没有提示任何错误的,并且Debug.Print TestDll.GetData.Fields.Item("扫描器地址").Value语句能取到第一条记录的值,但是不能移动指针
      

  3.   

    没有提示任何错误是吧!那Sql语句没问题,我以前做项目时也遇到过类似情况,你应该用的是set Rs=cnn.execute(sql) 格式吧,改成rs.open sql,cnn试试,或者多添加几个可选参数,试一下就可以解决!
      

  4.   


    换成以下的方法也一样
    Public Function GetCode() As Recordset
        Dim cn As ADODB.Connection
        Dim rst As ADODB.Recordset
        Dim SqlStr As String
        
        Set cn = New ADODB.Connection
        cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=ProdRoom;Data Source=192.1.1.36"    Set rst = New ADODB.Recordset
        SqlStr = "Select * From 工序分组" '"Select cInvCode,cInvName,cInvStd From Inventory Where cInvName='" & McInvName & "' And cInvstd='" & McInvStd & "'"
        GetCode = rst.Open(SqlStr, cn, adOpenDynamic, adLockReadOnly)
        Set GetCode = rst
    End Function
      

  5.   

    把你的标准工程改为如下试试,另外rst.Recordset是在dll中就为-1了吗,找出最开始出错的地方
    Private Sub Form_Click()
        Dim Rst As ADODB.Recordset
        Dim TestDll As IncSl.UtoS '这是一个类
        Set TestDll = New IncSl.UtoS
        
        Set Rst = TestDll.GetData() '取得记录集
        Debug.Print Rst.ActiveConnection
        Do While Rst.EOF = False
            Debug.Print Rst.RecordCount '为什么这里的值一直不变都是-1
            Debug.Print Rst.Fields.Item("扫描器地址").Value '这个值也一直不变
            Rst.MoveNext '使用这种方法指针不能移动?
        LoopEnd Sub
      

  6.   

    好像要设置cn.CursorLocation = adUseClient  返回的才不会是-1
      

  7.   

    默认用服务端游标,打开记录集并不读取记录,所以不知道确切的记录数,返回 RecordCount = -1。
    想要打开时就知道记录数,要用客户端游标。