setrs=nothing是清空对象 ,要将对象从内存中完全删除,可将对象变量设置为 Nothing。
rs.close 是关闭对象, 使用 Close方法可关闭 Connection 对象或 Recordset对象以便释放所有关联的系统资源。关闭对象并非将它从内存中删除,可以更改它的属性设置并且在此后再次打开。
联系实际:拿一个装了水的瓶子比喻:set rs=nothing就是把水倒掉,当你要喝时它已经没有了,只能再一次的装水才可以;而rs.close是将水杯的盖子盖住,当你想喝水时,只要打开盖子就可以了,水还是存在的。
2.
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As adodb.Recordset
'执行SQL语句,注意理解函数返回值是一个记录集
Dim cnn As adodb.Connection
Dim rst As adodb.Recordset
Dim sTokens() As String
On Error GoTo ExecuteSQL_error '错误处理
sTokens = Split(SQL)
Set cnn = New adodb.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then '判断传入的SQL语句是以insert ,delete,update 开头的吗?
cnn.Execute SQL '若是,则执行语句 insert,delete,update语句不用打开记录集操作,直接使用cnn.execute即可。
MsgString = sTokens(0) & "query successful"
Else '若不是,则执行查询语句
Set rst = New Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic '将查询结果放在记录集中
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条记录"
End If
在这个位置不能关闭记录集rst或释放rst的空间
ExecuteSQL_Exit:
Set rst = Nothing
Set cnn = Nothing
Exit Function
ExecuteSQL_error:
MsgString = "查询错误" & Err.Description
Resume ExecuteSQL_Exit
End Function
ExecuteSQL这个记录集是rst的缓存对象,所以当rst的变动会影响到ExecuteSQL这个记录集,如rst.close;而set rst=nothing后,rst就从实际对象中分离出来了,而通过rst对象创建的对象都将被孤立。这些已缓存对象的任何属性依然可用
3.
通过记录集的操作:
记录集是一个对象:有它自身的方法,常见的有addnew,update,delete,open,close,find,move等
并没有select这样的方法,所以不能直接查询;要想查询就等用open方法,和sql查询语句。
刚开始学的时候有一个误区:认为任何操作都要先打开记录集。
通过connection对象的操作:
connection对象的方法有:open,close,execute
·Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
一.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
二.执行SQL的操作性语言时(如:delete,update等),没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。