設(shè)計分析
一般數(shù)據(jù)庫管理系統(tǒng)登錄對話框有兩種基本方法
方法1:在數(shù)據(jù)庫中建立一個數(shù)據(jù)表用于保存系統(tǒng)用戶登錄信息,在設(shè)計登錄對話框時通過查詢該數(shù)據(jù)表完成驗證.(一般性)
方法2:對于一些支持安全驗證的數(shù)據(jù)庫管理系統(tǒng),如SQL可將系統(tǒng)用戶定義為數(shù)據(jù)庫用戶,再設(shè)計登錄對話框時使用輸入的用戶名和登錄口令來連接數(shù)據(jù)庫,讓數(shù)據(jù)庫管理系統(tǒng)完成驗證.
技術(shù)要領(lǐng)
設(shè)置默認按鈕:將命令按鈕控件的default屬性設(shè)置為true,設(shè)置完以后按enter鍵即可選擇該按鈕
設(shè)置取消按鈕:將命令按鈕的cancle屬性設(shè)置為true.設(shè)置完以后按esc鍵或該按鈕獲得焦點時按enter鍵來選擇它
自定義函數(shù)過程
Function 函數(shù)名(參數(shù)1 AS 數(shù)據(jù)類型,,參數(shù)2 AS數(shù)據(jù)類型 …...)AS數(shù)據(jù)類型
……
函數(shù)名=返回值
……
End Function
注:要從函數(shù)返回一個值只需將該值賦給函數(shù)名,,在過程的任意位置都可以出現(xiàn)這種賦值。如果沒有對函數(shù)過程指定返回值,,則過程將返回一個默認值:數(shù)值函數(shù)返回0,,字符串函數(shù)返回一個零長度的字符串(""),Variant函數(shù)則返回Empty
操作
1.創(chuàng)建數(shù)據(jù)庫
(1在vb中選擇"外接程序"->"可視化數(shù)據(jù)管理器"命令)
(2)點擊文件->新建->Microsoft
Access->Version7.0 MDB命令,在文件名寫上"實例1"作為數(shù)據(jù)庫的文件名
(3)點擊保存
因為是新建的數(shù)據(jù)庫,數(shù)據(jù)庫窗口中僅顯示了一個Properties節(jié)點.此節(jié)點的屬性為
(4)在數(shù)據(jù)庫窗口中單擊鼠標右鍵,選擇"新建表"
(5)在表名稱文本框中輸入"系統(tǒng)用戶"作為數(shù)據(jù)表名稱,
(6)單擊添加字段按鈕,在此對話框中需要制定字段的名稱,類型,大小,順序位置,驗證文本,驗證規(guī)則,默認值,自動增加,字段大小固定或可變,是否為零長度,是否是必要的字段等信息
(7)設(shè)置完成以后單擊確定按鈕,完成一個字段的添加,同時添加字段對話框被復(fù)位可繼續(xù)添加
(8)單擊添加索引
(9)添加完索引之后的表結(jié)構(gòu)
(10)為數(shù)據(jù)表添加了字段和索引之后單擊生成表按鈕創(chuàng)建數(shù)據(jù)表
(11)右擊"系統(tǒng)用戶",選擇"打開"
(12)單擊添加按鈕
(13)輸入用戶名和口令后單擊更新按鈕
(14)退出可視化數(shù)據(jù)管理器,完成創(chuàng)建數(shù)據(jù)庫的創(chuàng)建
2.設(shè)計窗體
窗體包括兩個文本框,兩個標簽,兩個按鈕
注:文本框的名稱改為txtpassword 和txtusername,并且將txtpassword 的passwordchar屬性設(shè)置為*(用*代替用戶輸入,,達到隱藏口令的目的)
按鈕的名稱改為cmdok和cmdcancel
3.建立ADO引用
選擇 工程->引用
4.編寫代碼
- Option Explicit
- Const MaxLogTimes As Integer = 3 '定義允許用戶嚴重呢個登錄信息的最多次數(shù)
- <span style="color:#ff0000;"><span style="font-size:24px;"><strong>'取消按鈕</strong>
- </span></span>Private Sub cmdCancel_Click()
- Dim intResult As Integer '請求用戶是否真的退出系統(tǒng)登錄
-
- intResult = MsgBox("您是否真的要退出系統(tǒng)登錄,退出將不能啟動管理系統(tǒng),!" & vbCrLf _
- & "是否真的退出,?", vbYesNo, "登錄驗證")
-
- If intResult = vbYes Then End
- End Sub
-
- <span style="font-size:24px;"><span style="color:#ff0000;"><strong>'確定按鈕</strong>
- </span></span>Private Sub cmdOK_Click()
- Static intLogTimes As Integer
- Dim intChecked As Integer, strName As String, strPassword As String
- intLogTimes = intLogTimes + 1 '計算登陸次數(shù)
- If intLogTimes > MaxLogTimes Then
- MsgBox " 你已經(jīng)超過允許登陸次數(shù)!" & vbCr _
- & " 應(yīng)用程序?qū)⒔Y(jié)束,!", vbCritical, "登錄驗證"
-
- End
- Else
- strName = Trim(txtUserName.Text) '獲得輸入的用戶名
- strPassword = Trim(TxtPassWord.Text) '獲得輸入的口令
- '檢查用戶名和口令的合法性,,并根據(jù)檢查返回值執(zhí)行相應(yīng)的操作
- Select Case Check_PassWord(strName, strPassword)
- Case 0
- MsgBox "<" & strName & _
- ">不是系統(tǒng)用戶,請檢查用戶名輸入是否正確,!", vbCritical, "登錄驗證"
- txtUserName.SetFocus
- txtUserName.SelStart = 0
- txtUserName.SelLength = Len(txtUserName)
- Case 1
- MsgBox "口令錯誤,,請重新登錄!", vbCritical, "登錄驗證"
- TxtPassWord = ""
- TxtPassWord.SetFocus
- Case 2 '口令正確
- Unload Me
- MsgBox "登陸成功,將啟動系統(tǒng)程序,!", vbInformation, "登錄驗證"
- Case Else
- MsgBox "登錄驗證未正常完成,!請重新運行登陸程序," & vbCrLf _
- & "如果仍不能正常登錄,,請報告系統(tǒng)管理員,!", vbCritical, "登錄驗證"
-
- End Select
-
- End If
-
-
- End Sub
-
- <span style="font-size:24px;"><span style="color:#ff0000;"><strong>'用戶名和口令的驗證過程</strong>
- </span></span>Private Function Check_PassWord(ByVal UserName As String, ByVal Password As String) As Byte
-
- On Error GoTo gperror
- Dim objCn As New Connection, objRs As New Recordset, strCn As String
- Dim strSQL As String
- '建立數(shù)據(jù)庫連接
- 'MsgBox (App.Path)
- objCn.ConnectionString = "Provider=Microsoft.jet.oledb.3.51;" & _
- "Data source=" & "D:\VB98\系統(tǒng)登錄\實例1.mdb"
- 'MsgBox (objCn.ConnectionString)
- objCn.Open
- '執(zhí)行查詢命令,獲得用戶登錄口令
- strSQL = "SELECT 口令 FROM 系統(tǒng)用戶 WHERE 用戶名='" & UserName & "'"
- Set objRs.ActiveConnection = objCn
- objRs.Open (strSQL)
- '判斷有無查詢結(jié)果
- If objRs.EOF Then
- Check_PassWord = 0 '沒有查詢結(jié)果,,表示該用戶為非法用戶
- Else
- If Password <> Trim(objRs.Fields("口令").Value) Then
- Check_PassWord = 1 '口令不正確
- Else
- Check_PassWord = 2 '口令正確
- End If
- End If
-
- '關(guān)閉數(shù)據(jù)庫連接,,釋放對象
- objCn.Close
- Set objRs = Nothing
- Set objCn = Nothing
- Exit Function
-
- gperror:
- Check_PassWord = 255
- Set objRs = Nothing
- Set objCn = Nothing
-
- End Function
|