dim con as adodb.connect
dim rs as adodb.recordset
dim sql as string set con=createobject("adodb.connection")
con.open "server=...,driver={};uid=;pwd="
sql="select * from employee"****
set rs=createobject("adodb.recordset")
set rs=con.execute(sql)
****请问set rs=createobject("adodb.recordset")是否有分配内存,如果有,则和set rs=con.execute(sql)分配的内存是否是同一块?

解决方案 »

  1.   

    to xmddl (ddlqqq) 
     我也在考虑记录集耗内存的问题
    真是晕
      

  2.   

    记录集肯定是分配了内存,否则是不可能有以后的movefirst ,movelast 等方法的!
    至于分配的空间是否和set rs=con.execute(sql)分配的内存是同一块我想应该不是!
    因为 set rs=con.execute(sql)是程序语句,要程序开时执行时就必须调入内存
    而记录集是执行到这段程序时内存另外分配的一个堆!个人看法,仅供参考!
      

  3.   

    set rs=createobject("adodb.recordset") 
    使用createobject 就分配了内存 set rs=con.execute(sql)
    execute方法也分配了内存 并且返回了一个recordset的实例,rs 指向这个对象上面内存消耗应该是差不多的 都是一个recordset的实例 其实要使对象能运作肯定要分配内存的,就像画饼充饥 
      

  4.   

    同意楼上的,使用createobject 就分配了内存 肯定是分配了内存!
      

  5.   

    楼上的,
    set rs= createobject("adodb.rescordset")
    因为程序运行到这里,并不知道object对象有多大,所以不可能给它分配空间,只是分配了内存中的一个堆的地址而已,只有当执行conn.execute()语句时,才向这个堆里面放数据所以数据的地址和程序段的地址不一定是连续的
      

  6.   

    set rs=createobject("adodb.recordset")
    分配了内set rs=con.execute(sql)
    分配了内存,而且跟上面那个分配的内存不是同一块应为这两句分别创建了两个Recordset对象,之间没有任何关系,现在rs指向第二次创建的对象
      

  7.   

    内存分配是动态的。在没有被销毁之前,你或许可以用CopyMemory把那一块内存拷贝出来,那就不用分配两次了。
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
      

  8.   

    Private Sub Form_Click()
    Dim Data(10)
    Dim file(10)
    For i = 1 To 10
       Data(i) = i * 10
       CopyMemory file(i), Data(i), 10
    Next
    For Each aa In file
        Print aa
    Next
    End Sub
    //拷贝数组的例子,拷贝rs还没有试
      

  9.   

    <xmddl>大家都说两块内存不同,我还想问:****
    set rs=createobject("adodb.recordset")<-----这块内存是不是没办法释放啊?
    set rs=con.execute(sql)<----这里可以用(rs.close / set rs=nothing)释放内存.
    ****
      

  10.   

    这样释放
    set rs=createobject("adodb.recordset")
    set rs=nothing因为只创建了对象还没有加载任何数据,所以不用close。
    Recordset是COM对象,只要其引用计数器为0就会被释放的
    而且就算你没有释放,在离开作用域后vb也会自动将其释放