【学生信息管理系统】模块代码的理解

学生信息管理系统中,最难理解的代码就是模块中的,理解了模块中的一些代码,学生信息管理系统基本上就掌握了,剩下的窗体中的代码都是重复的。模块中的代码又以ExecuteSQL函数最费解。

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                              '判断字符串中是否含有指定内容。
        cnn.Execute SQL                                                                     '执行SQL语句
        MsgString = sTokens(0) & "query successful"                                         '返回查询信息
    Else
        Set rst = New ADODB.Recordset                                                       '创建数据集对象
        rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic                            
        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 

sTokens = Split(SQL)

Split 函数:返回一个下标从零开始的一维数组,它包含指定数目的子字符串。

 写一句SQL语句:"select *from student_Info"

                执行sTokens=SplitSQL

                sTokens0="select"

               sTokens1="*"

                sTokens2="from"

              sTokens3="student_Info"

         这样就把一个查询语句拆分成了一个数组

If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then

Instr函数:返回 Variant (Long)

     InStr([start, ]string1, string2[, compare]),下标从1开始,返回指定一字符串在另一字符串中最先出现的位置。在字符串string1中,从start开始找string2,省略start时,string1头开始找。找不到时,函数值为0

Ucase$函数:返回 Variant(String),其中包含转成大写的字符串。只有小写的字母会转成大写;原本大写或非字母之字符保持不变。

Execute 方法:运行动作查询或执行 SQL 语句,它们都不返回行。


rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic  


语法格式:

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

 

参数说明:

  1.  Source可选。Variant,计算有效的 Command 对象、SQL 语句、表名、存储过程调用、URL 或包含持久存储的 Recordset 的文件或 Stream对象的名称。
  2. ActiveConnection可选。Variant 或 String,Variant 用于计算有效的 Connection 对象变量的名称;String 包含ConnectionString 参数。
  3. CursorType可选。CursorTypeEnum 值,确定当打开 Recordset 时提供者应使用的游标类型。默认值为 adOpenForwardOnly。
  4. LockType可选。LockTypeEnum 值,确定打开 Recordset 时提供者应使用的锁定类型(并发)。默认值为 adLockReadOnly。
  5. Options可选。Long 值,指示如果 Source 参数表示的不是 Command 对象,提供者应如何计算该参数;或者指示应从先前保存 Recordset的文件中恢复 Recordset。可以是一个或者多个 CommandTypeEnum 或 ExecuteOptionEnum 值。

 其中:

1、CursorType参数的取值:

  • adOpenDynamic-使用动态游标。其他用户所作的添加、更改或删除均可见,而且允许Recordset 中的所有移动类型(如果提供者不支持书签,则书签除外)。
  • adOpenForwardOnly-默认值。使用仅向前游标。除了在记录中只能向前滚动外,与静态游标相同。当只需要在Recordset 中进行一个传递时,用它可提高性能。
  • adOpenKeyset-使用键集游标。尽管从您的Recordset 不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,它和动态游标相似。其他用户所作的数据更改依然可见。
  • adOpenStatic-使用静态游标。一组记录的静态副本,可用于查找数据或生成报告。其他用户所作的添加、更改或删除不可见。
  • adOpenUnspecified-不指定游标类型。

 2、LockType参数的取值:

  • adLockBatchOptimistic-指示开放式批更新。需要批更新模式。
  • adLockOptimistic-指示逐个记录开放式锁定。提供者使用开放式锁定,仅在调用Update 方法时锁定记录。
  • adLockPessimistic-指示逐个记录保守式锁定。提供者要确保记录编辑成功,通常在编辑之后立即在数据源锁定记录。
  • adLockReadOnly-指示只读记录。无法改变数据。
  • adLockUnspecified-未指定锁定类型。创建副本时,副本与源对象使用相同的锁定类型。
学生信息管理系统中,许多的VB代码知识,都是接触过的,综合以前学过的VB知识,模块部分才是最应该认认真真去学习的。



你可能感兴趣的:(☀,成长经历)