学生信息管理系统模块ExecuteSql 函数详解


'    ExecuteSQL这个函数简单的说,就是一个判断执行SQL语句的一个函数,
'    首先判断SQL这个变量,用SPLIT分割成数组形式给了数组变量sTokens ,
'    然后检测是否包含"INSERT,DELETE,UPDATE,EXECUTE",这几个命令,
'    如果包含就表示不是查询,就直接执行SQL语句,如果不包含,
'    那么基本上只会有“SELECT”,这表示查询命令,就显示符合查询条件的数量
Public Function executeSql(ByVal SQL As String, Msgstring As String) As ADODB.Recordset
'传递参数SQL传递查询语句,Msgstring 传递查询信息。自身以一个数据集对象的形式返回
    Dim cnn As ADODB.Connection '定义连接
    Dim rst As ADODB.Recordset
    Dim sTokens() As String '定义字符串
    
    On Error GoTo executesql_error '错误处理
    
    sTokens = Split(SQL)   '用Split函数产生一个包含各个子串的数组
    Set cnn = New ADODB.Connection '创建连接
    cnn.Open connectstring
     
    If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then 'UCase$ 将其中包含转化为大写字符串  InStr 指定一字符串在另一字符串中最先出现的位置
   ' 判断字符串中是否含有指定内容
        cnn.Execute SQL '执行查询语句
        Msgstring = sTokens(0) & "query successful"
    Else
        Set rst = New ADODB.Recordset '创建数据集对象
        rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic 'Trim$ 将字符串中的空格去掉
        '返回查询结果
        Set executeSql = rst '返回记录集对象
        Msgstring = "查询到" & rst.RecordCount & _
        "条记录"
    End If
    
executesql_exit:
        Set rst = Nothing '清空记录集
        Set cnn = Nothing '中断连接
        Exit Function
        
executesql_error:
    Msgstring = "查询错误" & _
        Err.Description
    Resume executesql_exit
End Function

对于红色部分  rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic涉及到Recordset 对象方法,下面做相因的介绍:

Recordset对象方法

Open方法

recordset.OpenSource,ActiveConnection,CursorType,LockType,Options

Source

Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored


ActiveConnection

Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。

 

CursorType

Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnlyadOpenKeysetadOpenDynamicadOpenStatic,分述如下:

--------------------------------------------------------------

常数常数值说明

--------------------------------------------------------------

adOpenForwardOnly 0缺省值,启动一个只能向前移动的游标(Forward Only)。

adOpenKeyset 1启动一个Keyset类型的游标。

bbs.bitsCN.com

adOpenDynamic 2启动一个Dynamic类型的游标。

adOpenStatic 3启动一个Static类型的游标。

--------------------------------------------------------------

LockType

Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnlyadLockPrssimisticadLockOptimisticadLockBatchOptimistic等,分述如下:

-------------------------------------------------------------

常数常数值说明

--------------------------------------------------------------

adLockReadOnly 1缺省值,Recordset对象以只读方式启动,无法运行AddNewUpdateDelete等方法

adLockPrssimistic 2当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。

adLockOptimistic 3当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。

adLockBatchOptimistic 4当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。

                 前一阵子敲完了学生信息管理系统,自己尝试着给工程添加了“查询班级信息”,然后自己仿照着源代码写了写,结果。。运行总是失败。后来师傅开会我又重提了这个问题,师傅让新建一个工程,新建一个表,创建一个查询老师信息的工程。这样下来才又重新敲了模块的代码。发现自己其实模块的代码百分之五六十都不懂,于是明白自己为何原来敲不对了,代码根本没懂怎么敲的好? 接下来就是各种百度,msdn,各种资料各种查。至此才对模块代码有个较为深入的了解。

       这次博客,希望可以跟各位同仁多多交流,同时也提醒自己,学习要踏实,一步一个脚印的往下走才走的长远。


你可能感兴趣的:(学生信息管理系统模块ExecuteSql 函数详解)