Public Function make_sql(ByVal strsql As String, ByVal constring As String) As ADODB.Recordset  Dim conn As ADODB.Connection
  Dim rs As ADODB.Recordset
  
  On Error GoTo ErrorHandler
  
  Set conn = New ADODB.Connection
  'conn.Open "dsn=material;user id=sa;password=;server=stn"
  conn.ConnectionString = constring
  conn.ConnectionTimeout = 30
  conn.Open
  Set rs = New ADODB.Recordset
  rs.Open "select " & strsql, conn, adOpenKeyset, adLockReadOnly, adCmdText
  Set conn = Nothing
  Set make_sql = rs
  Set rs = Nothing
  Exit Function
  
ErrorHandler:
  
  If Not rs Is Nothing Then
    Set rs = Nothing
  End If
  If Not conn Is Nothing Then
     Set conn = Nothing
  End If
    
 End Function
主要就是调用上面这个函数,constring的值如下:
constring = "driver={SQL Server};server=stnn;uid=tech;pwd=123;database=tes" 

解决方案 »

  1.   

    将:
      Set conn = Nothing
      Set make_sql = rs
      Set rs = Nothing
      Exit Function
      
    ErrorHandler:
      
      If Not rs Is Nothing Then
        Set rs = Nothing
      End If
      If Not conn Is Nothing Then
        Set conn = Nothing
      End If
        
    End Function
    改为下面的试试:
      Set make_sql = rs
      rs.close
      conn.close
      Set conn = Nothing  
      Set rs = Nothing
      Exit Function
      
    ErrorHandler:
      
      If Not rs Is Nothing Then
        Set rs = Nothing
      End If
      If Not conn Is Nothing Then
        Set conn = Nothing
      End If
        
    End Function主要是因为SQL SERVER 查询缓存没有清空!
      

  2.   

    加上
      rs.close
      conn.close
    后,记录集就关闭了,传不出数据啊!
      

  3.   

      Set rs.ActiveConnection = Nothing
      Set make_sql = rs
      set rs=nothing
      conn.close
      

  4.   

    怎么会呢,是先赋值后关闭记录集,应该可以传出数据,我写过这样的DLL,你在试试吧
      

  5.   

    我试过了,单只加conn.close,组件都传不出去。我在ASP中的调用这个DLL如下
    set obj=createobject("technic_general.search")
    set rs=obj.sql(sql)
    set obj=nothing
    if not rs.eof then
    equipname=rs.fields("equipname").value
    equipTime=rs.fields("equiptime").value
    regUser=rs.fields("regname").value
    typeID=rs.fields("typeID").value
    model=rs.fields("model").value
    =rs.fields("").value
    re=rs.fields("re").value
    state=rs.fields("state").value
    re=trim(rs.fields("re").value)
    regtime=rs.fields("regtime").value
    typenames=rs.fields("typename").value
    end if
    rs.close
    set rs=nothing
      

  6.   

    我试过了,单只加conn.close,组件都传不出去,出错提示对象已关闭。我在ASP中的调用这个DLL如下
    sql="selct * from test"
    constring = "driver={SQL Server};server=stnn;uid=tech;pwd=123;database=tes" 
    set obj=createobject("technic_general.search")
    set rs=obj.make_sql(sql,constring)
    set obj=nothing
    if not rs.eof then
       equipname=rs.fields("equipname").value
       equipTime=rs.fields("equiptime").value
      ...
    end if
    rs.close
    set rs=nothing
    知不知道如何在CLASS_Terminate关闭所有和数据库的连接。
      

  7.   

    '加多一次 
      Set rs.ActiveConnection = Nothing
      Set make_sql = rs
      set rs=nothing
      conn.close 
      

  8.   

    Public Function make_sql(ByVal strsql As String, ByVal constring As String) As ADODB.Recordset    Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        On Error GoTo ErrorHandler
        
        Set conn = New ADODB.Connection
        'conn.Open "dsn=material;user id=sa;password=;server=stn"
        conn.ConnectionString = constring
        conn.ConnectionTimeout = 30
        conn.Open
        Set rs = New ADODB.Recordset
        rs.Open "select " & strsql, conn, adOpenKeyset, adLockReadOnly, adCmdText
        Set rs.ActiveConnection = Nothing
        Set make_sql = rs
        Set rs = Nothing
        Set conn = Nothing
        Exit Function
      
    ErrorHandler:
      
        Set rs = Nothing
        Set conn = Nothing
        
    End Function
      

  9.   

    噢,还是不行,执行到Set rs.ActiveConnection = Nothing这句,程序就跳到
    ErrorHandler:的 Set rs = Nothing行了。
      

  10.   

    Public Function make_sql(ByVal strsql As String, ByVal constring As String) As ADODB.Recordset    Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        On Error GoTo ErrorHandler
        
        Set conn = New ADODB.Connection
        'conn.Open "dsn=material;user id=sa;password=;server=stn"
        'this is important
        conn.CursorLocation = adUseClient
        conn.ConnectionString = constring
        conn.ConnectionTimeout = 30
        conn.Open
        Set rs = New ADODB.Recordset
        rs.Open strsql, conn, adOpenKeyset, adLockReadOnly, adCmdText
        Set rs.ActiveConnection = Nothing
        Set make_sql = rs
        Set rs = Nothing
        Set conn = Nothing
        Exit Function
      
    ErrorHandler:
      
        Set rs = Nothing
        Set conn = Nothing
        
    End Function
      

  11.   

    Public Function make_sql(ByVal strsql As String, ByVal constring As String) As ADODB.Recordset    Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        
        On Error GoTo ErrorHandler
        
        Set conn = New ADODB.Connection
        'conn.Open "dsn=material;user id=sa;password=;server=stn"
        'this is important
        conn.CursorLocation = adUseClient
        conn.ConnectionString = constring
        conn.ConnectionTimeout = 30
        conn.Open
        Set rs = New ADODB.Recordset
        rs.Open strsql, conn, adOpenKeyset, adLockReadOnly, adCmdText
        Set rs.ActiveConnection = Nothing
        Set make_sql = rs
        Set rs = Nothing
        Set conn = Nothing
        Exit Function
      
    ErrorHandler:
      
        Set rs = Nothing
        Set conn = Nothing
        
    End Function