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

来源:互联网 发布:数据抓取 编辑:程序博客网 时间:2024/05/16 11:34

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

一、SQL注入。

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

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

参考ASCII码表


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 SelectEnd 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 DateDim getdate As Date'定义变量borndate =Trim(txtBorndate.Text)getdate =Trim(txtRudate.Text)If getdate<=borndate then'进行比较MsgBox"入学时间不能早于出生时间,请重新输入",vbOKOnly + vbInformation,"警告"txtRudate.SetFocusExit SubEnd If
 方法2:
Dim a As Integera = DateDiff("d", txtRudate.Text, txtBorndate.Text)If a > 0 ThenMsgBox "出生日期应早于入校日期!!请修改……", vbOKOnly, "警告"Exit SubtxtRudate.Text = ""txtRudate.SetFocusElse
 但是,在加入了这样的代码后,会衍生出另外一个问题,错误13,类型不匹配。
经过反复调试,我认为这是因为新加的代码与原代码冲突,新加代码使日期类型发生改变,致使下面的原代码类型不吻合,无法正常运行,我也没什么更好的解决办法,就加了一个 on error goto 语句来跳转了这个错误。算是投机取巧吧。



四、查询表显示不完全。
两个查询表中,myFlexgrid中字体总是显示不完全,这让用户体验非常不好。于是。
首先修改myFlexgrid属性:
通用》行调整模式(Z)》3—Both
接下来在模块中敲下如下代码:
Public Sub AutocolWidth(Form As Form, Grid As MSHFlexGrid)'同一窗体和控件文字大小Dim FontSize As IntegerFontSize = Form.FontSizeForm.FontSize = Grid.Font.SizeDim RowNum As Long, ColNum As Long, ColWidth As DoubleWith 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    NextEnd WithForm.FontSize = FontSizeEnd Sub
接下来在窗体中敲
AutocolWidth Me, myFlexgrid '使表格适应文字长度
这样,myFlexgrid表格就会随着文本的大小而改变自身大小。



五、课程重复导入问题。
代码如下:
Private Sub cmdAdd_Click()    If listallcourse.ListIndex <> -1 Then        Call addlist(listselectcourse, listallcourse.list(listallcourse.ListIndex))    End IfEnd 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 = TrueEnd Function



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



七、错误3021、3001、91。

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

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