【學生資訊管理系統】模組程式碼的理解

00潤物無聲00發表於2014-08-14

學生資訊管理系統中,最難理解的程式碼就是模組中的,理解了模組中的一些程式碼,學生資訊管理系統基本上就掌握了,剩下的窗體中的程式碼都是重複的。模組中的程式碼又以ExecuteSQL函式最費解。

<span style="font-size:14px;">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</span><span style="color: red; font-family: Calibri;font-size:18px;"> </span>

sTokens = Split(SQL)

Split函式:返回一個下標從零開始的一維陣列,它包含指定數目的子字串。

 寫一句SQL語句:"select *from student_Info"

                執行sTokens=SplitSQL

                sTokens0="select"

               sTokens1="*"

                sTokens2="from"

              sTokens3="student_Info"

         這樣就把一個查詢語句拆分成了一個陣列

<span style="color: rgb(255, 0, 0); font-family: 宋體; font-size: 18px;">If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then</span>

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知識,模組部分才是最應該認認真真去學習的。



相關文章