Dim rskucun As ADODB.Recordset
    Set rskucun = New Recordset
dim cquery as string
cquery = "select * from tablename"
    rskucun.CursorLocation = adUseClient  '使用本地游标
    rskucun.Open cquery, conn, adOpenStatic, adLockOptimistic
    Set DataGrid1.DataSource = rskucun
    DataGrid1.Refresh
    'rskucun.Close
    
    Set rskucun = Nothing
问题是:如果加上rskucun.close ,则表格中不会显示数据,可是不加close 就可以显示,但是都有set nothing这一句呀!我不明白,为什么set nothing都可以,却不能close 呢?
说上都说,一个对象用完后要及时关闭和set nothing,我就要把数据表内容显示到datagrid中。
如果说close 不行,可是set nothing后却能显示,nothing后应该肯定关闭了呀!
真纳闷

解决方案 »

  1.   

    rskucun.Close是断开连接,set nothing是将内存值清掉
      

  2.   

    "Set X = Nothing"的含义是这样的:如果X不再被使用,则由VB内置的垃圾回收器删除X并收回其占有的内存空间。然而, "Set DataGrid1.DataSource = rskucun"表明rskucun正在被DataGrid1使用,所以rskucun还不会马上被删除。
      

  3.   

    "Set X = Nothing"的含义是这样的:如果X不再被使用,则由VB内置的垃圾回收器删除X并收回其占有的内存空间。然而, "Set DataGrid1.DataSource = rskucun"表明rskucun正在被DataGrid1使用,所以rskucun还不会马上被删除。
    -----------------
    谢谢,我应该如何写才好呢?
    是不是只写set rskucun = nothing就行呢?在之前不能写rskucun.close呢?
    还有:如果这样写的话,是不是当记录集rskucun不再使用时,就会自动释放内存呢?
    to aiur2000(闭关练神功):
    rskucun不是连接对象,而是记录集对象。请给予指教。谢谢。
      

  4.   

    关闭对象,并与提供该对象的应用程序终止连接。语法object.Closeobject 是一个对象表达式,其值是“应用于”列表中的一个对象。说明这个方法只应用于内嵌对象,并且它与关闭对象是等效的。它对链接对象不起作用。
    内嵌对象:
    由其它应用程序创建然后嵌入到 Visual Basic 应用程序中的对象。在创建内嵌对象时,所有与该对象相关联的数据都被复制并包含到 Visual Basic 应用程序中。===============================
    这里rs创建了和datagrid的实时连接,close掉就会关闭
      

  5.   

    这里rs创建了和datagrid的实时连接,close掉就会关闭
    -----------------
    我想问一下,比如我上面的代码,如何写才是规范的呢?
    能帮我改一下吗?
    期待中...
      

  6.   

    在DataGrid1.Refresh后面加上一段可延时的代码
    如:
    For i=1 To 100
    '就是空循环
    Next
    然后再
    rskucun.Close如果好使就能解释原因了,如果不好使,那就另分析。关注...
      

  7.   

    因为你要把数据表内容显示到datagrid中,在此过程中你不应该用rskucun.Close关闭链接(rskucun正在被使用,还没有被用完),否则datagrid就取不到数据了。应该在不再需要显示datagrid的时候关闭链接、释放对象,比如Form的Unload事件中处理。为此目的,你需要将rskucun定义在函数之外。