優化一:在登陸界面不允許輸入單引号:
今天在優化的時候聽齊智說學生的登陸界面不可以輸入單引号,于是我就試了試果然隻要輸入單引号,我們的程序就會出錯,但是除了單引号之後的其他符号都可以輸入,但是為什麼不能輸入單引号,最後在師傅的博客中找到了這個錯誤叫做: sql 注入
防止SQL注入:在用戶名前面加上一個 ’ ,就會提示錯誤,這個錯誤就是SQL注入。
點擊下面的鍊接可以看:
SQL注入
再解決這個問題之前,先了解一下什麼是SQL注入:
但是我們在程序中可以用代碼來限制用戶輸入,不允許用戶在文本框中輸入單引号具體實現的代碼:
解決辦法:(就目前水平)限制用戶名隻能輸入數字,大小寫字母和删除鍵,其他輸入均被視為無效輸入。
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57 '隻能輸入數字
Case 65 To 90 '隻能輸入大小寫字母
具體的添加方式:
工程—– 部件——- Microsoft Windows Common Controls-2.6.0 → 應用 → 确定
與數據庫結合(時間格式):
DTPicker1.CustomFormat = “yyyy.mm.dd”
寫入判斷條件代碼:
'檢驗出生和入校時間的關系
If DTBornData.Value DTRudate.Value Then
MsgBox "出生日期必須早于入校時間", vbOKCancel vbExclamation, "警告"
Exit Sub
End If
'給控件變量賦初值
DTBornData.MaxDate = Date
DTRudate.MaxDate = Date
If DTBornData.MaxDate DTBornData.Value Then
msgbox "根據您填寫的出生日期,您還沒有出生!", vbOKOnly vbExclamation, "警告"
Exit Sub
End If
'判斷時間
If DTRudate.MaxDate DTRudate.Value Then
msgbox "根據您填寫的入校日期,您還沒有出生!", vbOKOnly vbExclamation, "警告"
DTRudate.Value = ""
DTRudate.SetFocus
Exit Sub
End If
12345678910111213141516171819202122 優化三:添加成績信息窗體———–自動顯示姓名
(使得我們的程序用起來更加人性化!)
原本這個窗體的功能是通過選擇“班号” ,然後通過“班号”來篩選出對應的“學号”
通過“班号” 篩選中對應的“年級” 最後通過年級篩選出對應的“課程”
具體的過程如下:
Private Sub comboClassno_Click()
Dim mrc As New ADODB.Recordset
Dim txtSQL As String
Dim Msgtext As String
comboSID.Clear
comboCourse.Clear
'添加學号
'通過班号找到該班學生的學号
txtSQL = "select* from student_info where class_No='" comboClassno.Text "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)
While (mrc.EOF = False)
comboSID.AddItem mrc!student_ID
mrc.MoveNext
Wend
mrc.Close
'獲得年級信息
’通過班号找到對應的年級
txtSQL = "select * from class_info where class_no ='" comboClassno.Text "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)
Grade = mrc.Fields(1)
mrc.Close
‘獲得對應的課程信息:
'通過年級找到對應的課程
txtSQL = "select * from gradecourse_info where grade ='" Grade "'"
'grade 是gradecourse表中的一個字段
Set mrc = ExecuteSQL(txtSQL, Msgtext)
While (mrc.EOF = False)
comboCourse.AddItem mrc!course_Name
mrc.MoveNext
Wend
mrc.Close
End Sub
123456789101112131415161718192021222324252627282930313233343536 但是當你運行後你會發現,窗體中的名字還需要我們自己打進入,這個時候我覺得就出現了嚴重的問題,不但浪費時間,而且很容易把名字打錯,因為數據庫中的學号是唯一的,所以我們為什麼不能根據唯一的學号來篩選出對應的學生姓名?
優化之後添加的具體代碼如下:
由于是把學号作為基準,所以我将這些代碼添加到了學号的單擊事件中:
Private Sub comboSID_Click()
Dim mrc As ADODB.Recordset
Dim txtSQL
Dim Msgtext
'通過學号,顯示姓名
txtSQL = "select * from student_Info where student_id = '" comboSID.Text "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)
txtName.Text = mrc!student_name
mrc.Close
End Sub
123456789101112 這樣我們在選擇了學号之後名字也就會自動出現!
優化四:添加學生信息時,在姓名的文本框中隻能添加漢字:
實現代碼:
Private Sub txtSID_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Is 0, H20, H8
Case Else
KeyAscii = 0
MsgBox “姓名隻能輸入漢子”
End Select
End Sub
優化五:更改數據庫的設計結構:
設置電話号的限定長度
在學生系統的添加學生信息中,細心的話你會發現,當你輸入電話号的長度多于10位的時候我們的系統就會報錯,剛開始我以為是文本框的原因,于是就用
Len(texttell.text) 10 這個語句限定了文本框的輸入長度,但是仔細想想發現我們現實中的電話号一般都是11,這個時候一定是數據庫中限定了電話字段的長度,
隻要我們将電話字段的長度從10 改為11 那麼我們的程序就可以正常運行了
具體操作方法:
打開數據庫找到student 表 右擊 “student_Info”——–點擊“設計” ——這個時候就會打開這個設計表的界面
仔細觀察我畫圈的部位,他的長度果然是10 , 所以我們如果将那個10 改為11 那麼我們在程序中就可以輸入11位的電話号了。
但是這個時候數據庫出錯了,彈出了提示:
如何将數據庫的設計改為可以更改?
操作方法:
工具—-選項—–設計器—-将“阻止保存要求重新創建表的更改” 中的勾取消掉
最後保存我們對表結構的設計就可以暢通無阻了
優化五: 拒絕重複添加年級的課程
在添加年級課程這個窗體中,當我們點擊“設置課程”按鈕時候你會發現 我們的“所有課程”列表框中的内容會一直重複添加:
隻要一句代碼就可以讓這種現象消失:
在”設置課程” 的點擊事件中添加這樣一句代碼:
listallcourse.Clear 即可
當我們将課程從“所有課程” 向”已經選擇課程” 列表框中添加的時候你會發現,可以多次添加一個課程,這樣就會讓程序混亂,為了讓程序看起來更加完美,我們要限定 ”已經選擇課程” 列表框中的課程不能同名:
解決辦法:
在右箭頭的按鈕的單擊事件中添加代碼,實現限定列表框内容:
具體代碼:
Private Sub CmdAdd_Click()
Dim b As Integer
Dim s As String
'判斷數據時候被選中
If listallcourse.ListIndex -1 Then
s = listallcourse.List(listallcourse.ListIndex)
'判斷數據是否唯一
If listselectcourse.ListCount = 0 Then
listselectcourse.AddItem listallcourse.List(listallcourse.ListIndex)
Else
For b = 0 To listselectcourse.ListCount - 1
If listselectcourse.List(b) = s Then
MsgBox "不能重複添加課程"
Exit For
Else
listselectcourse.AddItem listallcourse.List(listallcourse.ListIndex)
End If
Next
End If
End If
End Sub
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!