问题1:
实时错误‘3021’:BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
在敲学生信息管理系统时,应该很多人都遇到了这种情况:
数据库中没有添加记录,但我们点击修改记录时,会出现如下提示:
首先先说一下BOF和EOF的意思吧!因为只有知道错误是什么,我们才能对症下药......
BOF和EOF 他们是记录集(recordset)对象的一种方法,BOF(before of file)是指记录集对象的指针指向第一个记录之前(不是第一条记录),EOF(end of file)是指记录指针指向最后一个记录之后(不是最后一条记录)。使用这两个属性就可以使记录集浏览记录更加完善。如图:
只有在上图中的情况下,BOF和EOF 他们才会 返回布尔值(True),否则返回(False),True为属性默认值。
所以我们需要做的,就是当BOF或EOF为True时我们该怎么做......
下面有三种解决办法:
一、进行错误处理,错误处理的本质就是当遇到错误时,可以跳过该错误,直接进行下一步,以便于程序顺利进行!那么我们根据这个原理在程序中添加错误处理,程序便可迎刃而解!
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub form_Load() Dim txtsql As String Dim MsgText As String txtsql = "select * from course_Info " Set mrc = Executesql(txtsql,MsgText) On Error GoTo 1: mrc.MoveFirst Call viewData myBookmark = mrc.Bookmark '对当前记录进行标记 mcclean = True '可编辑状态 1: If Err = 3021 Then MsgBox "无记录!" End If end sub</span></span>
二、根据上述原理,我们可以将代码稍作修改,不做错误处理,而是当程序遇到这种情况时,用一个if语句,让程序直接进行下一步即可,与上述方法异曲同工!
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub Form_Load() Dim txtsql As String Dim msgText As String txtsql = "SELECT * FROM student_Info " Set mrc = Executesql(txtsql,msgText) '得到临时表 ’考虑无记录情况 If mrc.EOF And mrc.BOF Then ’一条IF语句充当错误处理,当无记录时,mrc.eof=true ’和mrc.bof=true两个条件同时满足! MsgBox "无记录!" frmAddinfo.show.Show’直接进行下一步,显示窗体 Else mrc.MoveFirst Call viewData myBookmark = mrc.Bookmark '对当前记录进行标记 mcclean = True '可编辑状态 End If</span></span>
那么,经过上述方法处理后,程序一旦遇到类似情况,就可直接提示“无记录”并运行下一步!
三、这种方法和第二种方法类似,只是表现形式不同:当程序遇到这种情况时,用一个if语句,让程序直接进行下一步即可,与上述方法基本相同~
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub form_Load() Dim txtsql As String Dim MsgText As String txtsql = "select * from course_Info " Set mrc = Executesql(txtsql,MsgText) If mrc.RecordCount = 0 Then firstCommand.Enabled = False prevIoUsCommand.Enabled = False nextCommand.Enabled = False lastCommand.Enabled = False editCommand.Enabled = False updateCommand.Enabled = False cancelCommand.Enabled = False deleteCommand.Enabled = False Exit Sub End If txtCourseno.Enabled = False txtCoursename.Enabled = False comboCoursetype.Enabled = False txtCoursedes.Enabled = False txtsql = "select * from course_Info " Set mrc = Executesql(txtsql,MsgText) mrc.MoveFirst Call viewData myBookmark = mrc.Bookmark mcclean = True End Sub</span></span>
很简单的一个问题,但我从中学到了不少知识......
问题2:
调试定位到:Dim mrc As ADODB.Recordset
解决方法:问题原因是未引用Microsoft ActiveX Data Objects 2.6 Library.
引用即可.
问题3:
实时错误‘424’ 要求对象
这个问题解决方法是引用陈晓婵csdn博客:(学生信息管理系统系列一:问题总结)
遇到这个问题,查了一下发现可能是工程内的类名无效(简单的说就是将窗体名或控件名写错了)这个问题,但是找了找没有发现有什么错误的,那到底是哪出了错误了呢?还是先了解一下sbStatusBar.Panels(1).Text= "添加用户"是什么意思吧。
StatusBar1是状态栏控件的名称;Panels(1).Text表示状态栏上第1个空格所显示的文本内容,Panels(1)代表状态栏控件的第一个窗格;Format(Date,"\yyyy年mm月dd日\")这是调用格式函数Format,设置文本格式,Format函数可以将信息设置成你所需要的显示形式(格式)。
应该怎么改呢?
第一种办法:删除sbStatusBar.Panels(1).Text = "添加用户"或者将它注释掉
第二种办法:新建form取名sbStatusBar,然后在这个窗体上新建个文本框取名Panels,并且文本框属性index为1就可以了。