相比之下这篇博客来的晚了些、也不知道最近在忙什么,时间就不知不觉的找不到了...
继之前的 “ 学生信息管理系统之问题总结(1) 咱们继续完善在敲 学生管理系统中遇到的种
种问题,帮别人也帮自己、
1、ByRef 参数类型不符,编译错误、
出现这种问题可能会有很多种情况,我遇到的是 “上下不匹配” 、下面进行分析、
1。传递参数未定义类型,假如参数在调用前未定义类型,系统自动将他定义为variant类型,由于和过程或函数
中的对就参数类型不相同,所以提示"byref参数类型不符"
2。传递参数类型已定义,但由于定义方法不对,所以提示"byref参数类型不符"。具体情况如下:
当vb中如此定义变量时,将会出现以上错误信息的出现
private sub command1_click()
dim i , j as integer
i = 3
j = 4
call get1(i, j)
text1.text = i
end sub
private sub get1(byref para1 as integer, para2 as integer)
para1 = para1 + para2
end sub
假如将 dim i , j as integer 改为
dim i as integer
dim i as integer
程式执行正常。也就是说,第一种方法的变量定义,只是对 j 做了定义,并未对前面的 i 进行定义
一般在过程和函数中定义参数时采用byref,则需要参数声明的类型和实际参数的类型完全相同,否则vb就会报告错误。可以参考资料:http://www.sudu.cn/info/html/edu/net/20071226/24393.html
2、实时错误 ' 340 ' :
控件数组元素 ’ 2' 不存在
已存在的控件数组中没有引用的索引值所指定的控件。
对存在元素的其中之一,把 Index 属性的设置改为所引用的值。或者使用 Load 语句,向数组中添加一个控件,
该控件的索引等于此值,然后再引用此索引值。
再者,就是你的控件与代码是不符合的,让其保持一致性、
3、实时错误 ‘91’:对象变量或With块变量未设置
在frmSetcourseinfo中
Private Sub comboGrade_Click()
Dim mrc As ADODB.Recordset
Dim txtSQL As String
Dim MsgText As String
Dim i As Integer
listSelectcourse.Clear
txtSQL = "select * from gradecourse_Info where grade='" & comboGrade.Text & "'"
没有查询出数据结果,查询语句出现了问题、
错误原因: 缺少语句 Set mrc = ExecuteSQL(txtSQL, MsgText)
4、实时错误 ’ 3201 ’ :
BOF 或 EOF 中 有一个是 “真” , 或者当前的记录已被删除,所需的操作要求一个当前的记录。
先看这样一段错误的代码代码
Private SubcmdPre_Click()
If mrc.BOF = True Then
mrc.MoveLast
Else
mrc.MovePrevious
End If
CallViewData
End Sub
为什么会出错呢,我们来分析一下.当指针指向第一条记录的时候,if条件不成立,所以会执行mrc.MovePrevious,
此时指针指向第一条记录之前,callviewdata时出错.
所以正确的程序应该是这样的:
Private SubcmdPre_Click()
mrc.MovePrevious
If mrc.BOF = True Then
mrc.MoveLast
End If
Call ViewData
End Sub