学生信息管理系统问题总结

在学生信息管理系统的调试中,我遇到的问题如下。

一、SQL注入。

进入管理系统时,相信大家都会遇到SQL注入问题。

在用户名前面加上一个 '  ,就会提示错误,这个错误就是SQL注入。我是这样解决的。

参考ASCII码表

学生信息管理系统问题总结_第1张图片

Private Sub txtUserName_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case 48 To 57         '只能输入数字
        Case 65 To 90         '只能输入大写字母
        Case 97 To 122        '只能输入小写字母
        Case 8                '只能输入退格
        Case Else             '否则
            KeyAscii = 0      '输入无效
    End Select
End Sub

这样,我就限制了用户名只能输入数字,大小写字母和删除键,其他输入均被视为无效输入。

同样,在限制用户输入类型时,比如班号只允许输入数字,同样可以用这个办法。




二、密码修改优化。

在修改密码界面,我们发现只要是进了系统,任何人都可以随意修改密码,非常不安全,于是,我进行了如下修改。添加了密码验证。

If Trim(txtPassword1.Text)<>Trim(txtPassword2.Text) Then
<span style="white-space:pre">	</span>修改密码
Else
<span style="white-space:pre">	</span>msgbox"原密码错误,请重新输入!,"vbOkOnly+vbexclamation,"警告"
End If

然后在Form Load中显示登录的用户名。

Private Sub Form_Load()
    Dim txtSQL, MsgText As String'定义变量
    Dim mrc As ADODB.Recordset 
    Dim name As String
    txtPassword0.Text = ""
    txtPassword1.Text = ""
    txtPassword2.Text = ""
    
    txtSQL = "select * from user_Info where user_ID = '" & UserName & "'" '连接数据库
    Set mrc = ExecuteSQL(txtSQL, MsgText) '调用自定义函数
    
    name = Trim(mrc.Fields(0)) 'name赋值
    Label4.Caption = "当前用户名为:" & name '显示复制内容
End Sub

经过这样的修改后,修改密码界面可以显示当前用户名,需要验证原密码。




三、出生日期晚于入学日期。
在添加学籍的时候,如果你的出生日期晚于入学日期是可以添加成功的,但这在现实中是不允许的。于是我用了如下两种方法。
方法1: 
Dim borndate As Date
Dim getdate As Date'定义变量
borndate =Trim(txtBorndate.Text)
getdate =Trim(txtRudate.Text)
If getdate<=borndate then'进行比较
	MsgBox"入学时间不能早于出生时间,请重新输入",vbOKOnly + vbInformation,"警告"
	txtRudate.SetFocus
	Exit Sub
End If
 方法2:
Dim a As Integer
a = DateDiff("d", txtRudate.Text, txtBorndate.Text)
If a > 0 Then
MsgBox "出生日期应早于入校日期!!请修改……", vbOKOnly, "警告"
	Exit Sub
	txtRudate.Text = ""
	txtRudate.SetFocus
Else
 但是,在加入了这样的代码后,会衍生出另外一个问题,错误13,类型不匹配。
经过反复调试,我认为这是因为新加的代码与原代码冲突,新加代码使日期类型发生改变,致使下面的原代码类型不吻合,无法正常运行,我也没什么更好的解决办法,就加了一个 on error goto 语句来跳转了这个错误。算是投机取巧吧。



四、查询表显示不完全。
两个查询表中,myFlexgrid中字体总是显示不完全,这让用户体验非常不好。于是。
首先修改myFlexgrid属性:
通用》行调整模式(Z)》3—Both
接下来在模块中敲下如下代码:
Public Sub AutocolWidth(Form As Form, Grid As MSHFlexGrid)
'同一窗体和控件文字大小
Dim FontSize As Integer
FontSize = Form.FontSize
Form.FontSize = Grid.Font.Size

Dim RowNum As Long, ColNum As Long, ColWidth As Double
With Grid '遍历每一列
    For ColNum = 0 To .Cols - 1
        ColWidth = 0
        '遍历每一行,找到最长文本
        For RowNum = 0 To .Rows - 1
            If Form.TextWidth(.TextMatrix(RowNum, ColNum)) > ColWidth Then
                ColWidth = Form.TextWidth(.TextMatrix(RowNum, ColNum))
            End If
        Next
        '在最长文本长度的基础上增加长度90缇
        .ColWidth(ColNum) = ColWidth + 150
    Next
End With
Form.FontSize = FontSize
End Sub
接下来在窗体中敲
AutocolWidth Me, myFlexgrid '使表格适应文字长度
这样,myFlexgrid表格就会随着文本的大小而改变自身大小。



五、课程重复导入问题。
代码如下:
Private Sub cmdAdd_Click()
    If listallcourse.ListIndex <> -1 Then
        Call addlist(listselectcourse, listallcourse.list(listallcourse.ListIndex))
    End If
End Sub
Private Function addlist(list As ListBox, str As String) As Boolean '只允许单次添加
    Dim i As Long
    For i = 0 To list.ListCount - 1
        If list.list(i) = str Then
            Exit Function
        End If
        Next
        list.AddItem str
        addlist = True
End Function



六、溢出问题。
我遇到的溢出有时间溢出和字符串溢出。
字符串溢出:
首先我们设置一下text的MaxLength属性,让它和数据库中允许最大长度相同就可以了,如果是手机号,还需要修改数据库中的最大长度值。
 
时间溢出:
时间溢出指的是输入的年份在1753年之前,超出datatime范围,就会出现实时错误6。
解决方法如下:
If DateDiff("d",CDdate(txtBorndate.Text),"1753-01-01">0 Then
	MsgBox "出生日期请输入1753年以后的年份!",vbOKOnly + vbExclamation,"警告"
	txtBorndate.SetFocus
exit Sub



七、错误3021、3001、91。

3021错误主要是因为EOF和BOF的问题,当数据库中无数据时,再次执行这个代码就会出现错误,因为两个指针指到了同一个地方,  这是不允许的,我的解决方法也是加了一个 on error goto  语句,出现msgbox使之提示“无数据!”。

对于错误3001和91大多是因为代码问题,细心点就不会出错,当然,91还可能是数据库连接方面出的问题。
 
 
 
八、总结。
学会站在巨人的肩膀上学习,通过敲学生信息管理系统,培养了我们的调错能力,通过看其他人的博客,增长了我们的知识,加深了我们对数据库的认识。使我们向VB海洋的更深处遨游。

你可能感兴趣的:(学生信息管理系统问题总结)