现在的位置: 首页 > 综合 > 正文

对记录集出现的一些问题的总结

2013年07月23日 ⁄ 综合 ⁄ 共 2101字 ⁄ 字号 评论关闭

 1.set rs =nothingrs.close的异同点

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对象的方法有:opencloseexecute

 

·Execute方法

该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:

.执行SQL查询语句时,将返回查询得到的记录集。用法为:

Set 对象变量名=连接对象.Execute("SQL 查询语言")

Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

.执行SQL的操作性语言时(如:deleteupdate),没有记录集的返回。此时用法为:

连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]

·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。

·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

 

【上篇】
【下篇】

抱歉!评论已关闭.