BUG二:更新为已有记录时出错。
原代码中是“先删除,再判断”。
所以即使是修改为已有学号,则它是先删除该(要进行修改)记录,然后在判断是否有重复的学号,如果重复,则继续进行更改,可是再一次更改完成后单击更新时,需要更改的记录已经在上一次更新时删除了,因此这次删除的是一个空记录,故会产生错误!
而改后的代码是“先判断,再删除”。
因此在判断出有重复的学号时,则不进行删除,这样在再一次更改后若满足条件,则先将原记录删除,再将新的记录添加到数据库中。
补充:
由于改后的代码是先判断后删除,所以在判断过程中,若学号没有更改则会发生错误,于是我用了“where student_ID='" & Trim(txtNumber.Text) & "' or student_ID='" & mrs.Fields(0).Value & "'"”语句来避免此错误发生。
下面我们以frmModifysinfo中(在其他修改窗体中类似错误)的更新错误为例:
源代码:
mrc.Delete
txtSQL = "select * from student_Info where student_ID = '" & Trim(txtSID.Text) & "'"
Set mrcc = ExecuteSQL(txtSQL, MsgText)
If mrcc.EOF = False Then
MsgBox "学号重复,请重新输入!", vbOKOnly + vbExclamation, "警告"
mrcc.Close
txtSID.SetFocus
Else
mrcc.Close
mrc.AddNew
……
结果运行时,若将一个记录学号更改为一个已有记录,会提示重复,再次更改为没有的记录时会出现错误
改后代码:
strSQL = "select * from student_Info where student_ID='" & Trim(txtNumber.Text) & "' or student_ID='" & mrs.Fields(0).Value & "'"
Set mrss = ExecuteSQL(strSQL, MsgText)
If mrss.RecordCount > 1 Then
MsgBox "已有该学号,请重新输入!", vbExclamation + vbOKOnly, "警告"
txtNumber.SetFocus
txtNumber.Text = ""
mrss.Close
Exit Sub
Else
mrss.Close
strSQL = "select * from student_Info"
Set mrs = ExecuteSQL(strSQL, MsgText)
mrs.Delete
mrs.MoveNext
If mrs.EOF Then mrs.MovePrevious
mrs.addnew
……