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

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_Exit
End 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该参数是传址的,用来返回一些查询的文字信息,如查询成功,查询错误等。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值