学生信息管理系统——公共模块

前段时间敲完了一部分的学生窗体,但是回过头发现印象并不是很深,打算从头将代码再理一次,在之前掌握了宏观的前提下,这次通过微观的学习脚踏实地的往前走。


Public Username As String
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
   '传递参数SQL传递查询语句,MsgString 传递查询信息'自身以一个数据集对象的形式返回    
   '重新定义一个数据连接   
        Dim cnn As New ADODB.Connection    '定义一个数据集   
        Dim rst As ADODB.Recordset    '定义字符串   
        Dim sTokens() As String    '异常处理    
        On Error GoTo ExecuteSQL_Error    ' 用split函数产生一个包含各个子串的数组    
        sTokens = Split(SQL) '用split 函数产生一个包含子串的数组,个人对这个函数的理解就拆分, 
例如 SQL ="select*from user_info"                
'split(SQL)                 
'stokens(0)=select  
stokens(1)=*   
stokens(2)= from 
stoken(3)=user_info                 
'这样就把一个完整的SQL 语句拆分成了一个数据                    
  ' 创建连接      
  Set cnm = New ADODB.Connection  
' 这里之所以用的new 是因为引用的是引用对象,具体的使用方法代码下面有详细的说明       
'打开连接并且定义了 connectstring    
cnn.Open ConnectString    
'判断字符串中是否含有指定内容   
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then '$表示返回的类型明确是字符型
’ 如果只有 ucase 那么就是单纯的将小写字母变为大写字母,但是加了一个明确符 “ $” 说明就是字符型   
'执行查询语句   
    cnn.Execute SQL   
'返回查询语句   
    MsgString = sTokens(0) & "query successful"   
    Else   
'创建数据集对象    
    Set rst = New ADODB.Recordset   
'返回查询结果   
    rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic 'open 的具体用法在代码下面有
    '返回记录集对象   
    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       

Public Function ConnectString() As String    '返回一个数据库连接    
        ConnectString = "FileDSN=studentinfo.dsn;UID=sa;PWD="    
End Function


Sub main()
    Dim fLogin As New frmLogin
    '显示登陆窗口
    fLogin.Show vbModal
    '判断是否授权用户
    If Not fLogin.OK Then
    'OK为fMainForm类的成员
        'Login Failed so exit app
        End
    End If
    Unload fLogin
    '判断是将进入系统
    Set fMainForm = New FrmMain
    fMainForm.Show
    
    
End Sub
    ' 由于在后面的程序中,需要频繁检查各种文本框的内容是否为空,这里定义了Testtxt函数
    
Public Function Testtxt(txt As String) As Boolean
'判断输入内容是否为空
    If Trim(txt) = "" Then
        Testtxt = False
    Else
        Testtxt = True
    End If
    
End Function



   

1、split()函数

计算机语言解释: 返回一个下标从零开始的一维数组,它包含指定数目的子字符串。 
语法:Split(expression[, delimiter[, count[, compare]]])  
个人理解: split(SQL)就是把整个SQL语句拆解为一个数组。
例如:
          SQL="select * from user_Info"
          split(SQL)
          sTokens(0)=select 
          sTokens(1)=*
          sTokens(2)=from 
          sTokens(3)=user_Info
        这样就把一个完整的SQL语句拆解成了一个数组。

2. 关于 set new 对象实例化
   

对象分为值类型引用类型,所有的结构体都是值类型,所有的类对象都是引用类型值类型在创建时不需要使用new来实例化,但引用类型需要使用new实例化值类型包括大部分的数值对象,
     
比如byte\int\long\datetime等这些类型,这些是不需要用new来声明的,

比如dim a as int引用类型包括其他大部分的类型对象,比如数组、窗体对象、各种类型库对象都是。如果不用new声明,就会发生对象为空的错误一个

特例:string是引用类型,但它不需要使用new来声明 



 4.关于open 的用法 

其实在之前敲代码的时候对这句话很是不明白。

 VB 中,Open 语句提供对文件的读取、写入、限定于其它进程打开的文件的操作
Open([Source],[ActiveConnection],[CursorType],[LockType],[Options])
参数说明:

Source                  可选,变体型,计算 Command 对象的变量名、SQL 语句、表名、存储过程调用或持久 Recordset 文件名。 ActiveConnection     可选。变体型,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString 参数。
CursorType       可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。
可为下列常量之一(参阅 CursorType 属性可获得这些设置的定义)。
值  常量                 说明
--- ------------------- -----------------------
0   AdOpenForwardOnly   (默认值)打开仅向前类型游标。 
1   AdOpenKeyset             打开键集类型游标。
2   AdOpenDynamic         打开动态类型游标。
3   AdOpenStatic               打开静态类型游标。
----------------------------------------------------------------------------------
LockType              可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值 
值  常量                                   说明
--- -------------------------------- -----------------------
1   AdLockReadOnly           (默认值)只读 — 不能改变数据。 
2   AdLockPessimistic         保守式锁定,提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
3   AdLockOptimistic            开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
4   AdLockBatchOptimistic  开放式批更新—用于批更新模式(与立即更新模式相对)。 

猜你喜欢

转载自blog.csdn.net/qq_30631063/article/details/80896132