学生信息管理系统问题(二)

来源:互联网 发布:淘宝网夹子 编辑:程序博客网 时间:2024/05/01 10:19
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset'executes SQL and returns Recordset   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            '非Select语句      cnn.Execute SQL   '数据量不大时,可以在连接上,直接执行SQL语句      MsgString = sTokens(0) & " query successful"      '虽然MsgString不是返回值,但传递方式是ByRef,实参地址和这个地址相同   Else                                                                 'Select语句      Set rst = New ADODB.Recordset      rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic      '得到临时表,游标指向第一条记录      'get RecordCount,      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_ExitEnd Function


 

 

 

1.这是一个自定义的函数过程,用来执行SQL语句。

2.这里用到了Split()函数来将某个SQL语句的长字符串存储到一个下标从零开始的一维数组中。

 

  

  Split(expression[, delimiter[, count[, compare]]])

  expression 是原始字符串

  delimiter 用于标识子字符串边界的字符串字符,用作分隔符。如果忽略,则使                                    用空格字符("")作为分隔符。

  count 要返回的子字符串数。

  代码中Split(SQL)就是将一个SQL语句以空格字符为分隔符分成一个一个的元素存储到

 数组中,并将这个数组赋给sTokens()这个数组变量。

3.条件句中先判断sTokens(0)该元素是否在“InsertDeleteUpdate”,如果

  在,则直接执行SQL语句,该过程通过InStr()函数来进行,其用法

  不在这里叙述。

4.如果不在,则创建一个记录集,将ExecuteSQL函数的返回值存到该记录集里。

 

5.Recordset对象.Open Source,ActiveConnection,CursorType,LockType,Options

(1)Source 

Recordset对象可以通过Source属性来连接Command对象。

Source参数可以是一个Command对象名称、一段SQL命令、一个数据表名称、

            一个存储过程或是一个Recordset文件名。

(2)ActiveConnection 
    Recordset对象可以通过ActiveConnection属性来连接Connection对象。

ActiveConnection可以是一个Connection对象或是一串包含数据库连接

                            信息(ConnectionString)的字符串参数。

(3)CursorType 
    CursorType参数表示将以什么样的游标类型启动数据,

包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic

 adOpenKeyset  类似动态游标,允许任意移动,并且允许更改记录集。

                          其他用户对记录集的添加和删除,这个游标反映不出来。

                          但它能反映出其他用户对记录集的更改。 
    (4)Lock Type
    LockType参数表示要采用的Lock类型,

包含adLockReadOnly、adLockPessimistic、adLockOptimistic

及 adLockBatchOptimistic等

adLockOptimistic 只在调用Update方法时才锁定记录。

                             当数据源正在更新时,系统并不会锁住其他用户的动作,

                             其他用户可以对数据进行 增、删、改的操作。

 

6.还需说明的是,MsgString该参数是传址的,用来返回一些查询的文字信息,如查询成功,查询错误等。

原创粉丝点击