为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

fl

2011-03-19 6页 doc 161KB 76阅读

用户头像

is_765582

暂无简介

举报
fl附录:常见错误信息 常见错误信息 在调试运行VB应用程序的过程中,难免会出现一些错误。这些错误大体上分为两 类:一类是编译错误,一类是运行错误(又称实时错误)。如下图: 如果程序代码没有按照VB的规则去编写,VB处理系统在将源程序编译为机器语言的过程中,不能正确识别,因此编译过程无法进行,将产生图附所示(左图)的编译错误信息。对于编译错误的处理,一般是按确定按钮,然后注意代码窗口中以红色突出显示的这一行(出错语句),根据我们所学的VB的语法规则进行修改,然后再次运行,直至没有编译错误出现为止。 实时错误一般是程序中的逻辑错误所...
fl
附录:常见错误信息 常见错误信息 在调试运行VB应用程序的过程中,难免会出现一些错误。这些错误大体上分为两 类:一类是编译错误,一类是运行错误(又称实时错误)。如下图: 如果程序代码没有按照VB的规则去编写,VB处理系统在将源程序编译为机器语言的过程中,不能正确识别,因此编译过程无法进行,将产生图附所示(左图)的编译错误信息。对于编译错误的处理,一般是按确定按钮,然后注意代码窗口中以红色突出显示的这一行(出错语句),根据我们所学的VB的语法规则进行修改,然后再次运行,直至没有编译错误出现为止。 实时错误一般是程序中的逻辑错误所导致,例如作为除数的变量而其值为0,又如 声明a数组共有20个元素而引用a(i)时i值大于20,等等。图附3.1所示(右图)的实时错误信息,显示“类型不匹配”。函数、过程调用时形参与实参之间类型不匹配,或者达式中运算符两边的操作数之间类型不匹配,都会产生此类错误信息。一般是按调试按钮,然后注意代码窗口中以黄色突出显示的这一行、或与该行相关的部分,修正错误后继续调试运行。 以下列出了一些常见的错误信息,并对产生错误的原因作了适当的分析。 一、编译错误 1.缺少:语句结束 如程序代码为:x=12 y=34 错误起因在于x=12作为一个完整的语句应该结束,两个赋值语句应分写在两行中或在中间用冒号连接。 又如程序代码为:Call MySub 5 错误起因在于没有括号。应在函数调用时使用指定参数的括号,或在使用Call关键字的过程调用中使用括号。 再如程序代码为:Fori=1 T0 10 错误起因在于For关键字和i之间没有分隔符,VB将Fori理解成一个变量,即将Fori=1作为一个赋值语句来使用。 2.缺少: ) 如程序代码为:z=(x+y*12 错误起因在于表达式中的括号没有成对出现,在书写一些比较复杂的表达式时经常出现这一错误。 3.缺少:= 如程序代码为:MySub(5,7) 没有Call的过程调用。如参数有多个时不能加括号,否则必须使用Call关键字。 4.缺少:表达式 如程序代码为:X= 错误起因在于没有给变量赋值,在赋值号右边应该有表达式。 5.缺少:函数或变量 如程序代码为:x=2+MySub(5,7) 错误起因在于过程调用出现在表达式中。在表达式中总是出现函数调用;过程调用应作为独立的命令,可以用、也可以不用Call关键字来完成。 6.End If没有对应的If块 End lf语句必须有相应的If语句。应检查在If...End lf结构中的其它控制结构,检查它们是否配对,检查If块的格式是否正确。 另外,行If语句不需要也不应该有Endlf,如: If x > 0 Then Print X End lf 同样会导致该错误。 7.If块缺少End 1f 使用块If语句时,缺少配对的Endlf语句。 块If语句必须有配对的EndIf语句。对嵌入式If...Endlf语句而言,必须确保每个封闭的If...Endlf结构中,应有配对的If...Endlf结构。 8.For没有Next 每一个For语句必须有配对的Next语句。应检查For...Next结构,检查循环控制变量是否一致。 9.Next没有For Next语句之前一定要有一个For语句与之配对。 应检查For...Next结构内的其他控制结构,看它们是否正确地配对。例如,在For...Next结构内,没有与If配对的EndIf便会产生这个错误。如: For i=0 to 10 If I mod 2=0 Then Print i Next i End lf 10.缺少:列表分割符或括号 数组的参数必须是ByRef,以Dim、ReDim,或Static声明的数组,不能以ByVal的方式传递,试图以ByVal的方式传递整个数组时产生该错误。 数组中个别的元素可用ByVal(按值)传递,但整个数组必须以ByRef(按地址)方式传递。请注意ByRef为缺省值。 11.子程序或函数未定义 Sub或Function过程必须先定义,然后才能调用。如果已经定义仍出现该错误,可能是过程名称拼错,请检查拼写并改正。 , 另外,在模块中声明为Private的过程不能被模块外部的过程调用。 二、实时错误 1.无效的过程调用或参数(错误5) 调用操作不能完成,参数值可能超出了允许的范围。例如,Sin函数只接受特定范围的值,表达式“Sin(9.3E+18)”会产生错误。应检查参数的允许取值范围。 2.溢出(错误6) 当赋值超出目标的限制时,就会发生溢出。变量应选择合适的数据类型,给属性的赋值也应确保合适的取值范围。 另外,在计算过程中也会出现溢出错误。例如: Dim x AS Long X=2000*365 ‘错误:溢出 两个整数相乘的结果超过了整数的范围。要解决这个问题,可用CLng函数,使得在计算时按照Long类型处理: Dim x AS Long X=CLng(2000)*365 3.下标越界(错误9) 只能在定义的范围内访问数组元素,如果引用了不存在的数组元素,则产生此类错误。声明数组时应该指定元素的数目。例如,下列代码就会导致此类错误: Dim A1() AS Integer A1(8)=234 ‘导致错误9 VB与早期的BASIC语言不同,不会将没有指定范围的数组自动设为10个元素,必须使用Dim或ReDim来指定数组中元素的个数。 4.除数为零(错误11) 除数为零是不允许的。此类错误经常在以下情况下出现: 表达式作除数使用,但其值为零;表达式中变量的拼写错误,拼写错误的变量会被当成数值变量并且初始值为零。 5.类型不匹配(错误13) VB在完成赋值运算时,能进行自动类型转换。此外,在兼容的数据类型间也能正确赋值,例如,Integer型数据可以赋给Long变量,Single型数据可以赋给Double变量,而任何类型(除了用户自定义类型外)数据可以赋给Variant变量,等等。这些,在允许的范围内,都不属于“类型不匹配”。 此类错误如: 执行语句x%="123a",产生类型不匹配错误(x%="123"是正确的,整个字符串可识别成为整型)。 在过程调用时也经常出现ByRef参数类型不匹配错误。按缺省规定,一个以ByRef(按地址)方式传递的参数,必须具有该过程所允许的正确数据s类型,如果所传递的参数,其类型不能被强迫转换成所需的类型,则产生该错误,如下列程序所示: Sub Mysub(a AS Long) If a Mod 2=0 Then Print a End Sub Private Sub Commandl_Click() Dim X AS Inteqer For X=1 TO 100 Call Mysub(x) Next x End Sub 上述程序中,过程中预期的是Long类型,而传递的却是Integer变量,就会产生ByRef参数类型不符错误。假如想要避免发生这种情形,可以将参数放在括弧中来传递,可将调用语句写成:CallMysub((x))。 将参数放在括弧中,强迫其作为一个表达式来计算。此时参数的传递方式实际上变成了ByVal。 6.错误的文件名或号码(错误52) 文件必须先打开,然后才能进行读写操作。读写命令中的文件号必须与Open语句中指定的文件通道号一致,文件通道号取值范围为1~512。 文件名必须遵循操作系统的约定,在Microsoft Windows中,可使用以下的约定: 文件或名称可以有两部分:文件名和任选性的扩展名。两部分以圆点隔开,例如,myfile.new。 文件名可达255个字符。 文件名中不能出现以下字符:双引号(〃)、撇号(`)、斜杠(/)、反斜杠(\)、冒号(:)、垂直条(|),但可以包含空格。 以下的名称将保留(指定为设备名),且不能用在文件或目录上:CON、AUX、COMl、COM2、COM3、COM4、LPTl、LPT2、LPT3、PRN、NUL。 7.找不到指定的文件(错误53) 所指定的文件找不到。如Open、Kill或Name等语句中,引用到一个不存在的文 件,应确保文件存在,检查文件名的拼写以及指定的路径是否正确。 8.文件模式错误(错误54) 文件的处理方式,必须与打开文件的模式一致。如将Print#语句使用在非Output或Append访问方式所打开的文件上;或者,将Input#或Line Input#语句使用在非Input访问模式所打开的文件上,就会导致此类错误。 9.文件已打开(错误55) 例如,一个以Input方式打开的文件在完成了输入操作后需要再进行输出操作,则必须先将其关闭,再以Output或Append方式打开。 又如Kill、SetAttr或Name等语句,所引用到的文件必须是处于关闭状态的。 10.设备I/0错误(错误57) 外部设备时常会有无法预测的错误。例如,当程序在使用像打印机或驱动器这类设备时,因设备故障或设备未准备好,发生输入/输出错误。应确保设备操作正常,然后重试一次。 11.文件已存在(错误58) 此类错误通常发生在产生一个新文件名时,例如,在Name语句中所指定的文件名和已存在的文件名相同。可以在Name语句中指定一个新的文件名或删除已有的文件。 12.磁盘已满(错误61) 磁盘没有足够的空间完成Print#、Write#或Close操作或磁盘,没有足够的空间来创建所需文件。 13.输入超出文件尾(错误62) 不能在文件尾位置后进行读操作。如用Input#或Linelnput#语句到已读完文件或空文件中读数据时产生此类错误。通常应该在程序中使用EOF函数来测试是否到了文件的结尾处,以决定是否继续进行读操作。 14.路径未找到(错误76) 文件路径包括指定的驱动器加上目录以及子目录,必须能遍历到文件的位置。路径可以是相对的也可以是绝对酌。例如,Open、MkDir、ChDir或RmDir等命令中所提供的路径必须正确,否则会出现路径未找到错误。 15.控件数组元素’irem’不存在(错误340) 使用无效的索引值引用控件数组的元素。即控件数组中不包含引用的索引值所指定的控件。如定义了文本框控件数组,包含两个元素Textl(0)和Textl(1),程序中如引用Textl(2),则出现控件数组元素’2’不存在错误信息。 16.控件数组索引无效(错误341) 使用无效的索引值引用控件数组中的一个元素。如代码中引用的索引值为负数等。在使用变量或表达式的值作为索引值时更应注意避免出现此类错误。 17.对象为非数组(错误343) 所用的控件不是控件数组中的一部分,但它被当作其中的一个元素而引用了。应删除索引值的引用,或者重新定义控件,使其成为控件数组的一个元素。 18.无效属性值(错误380) 给属性赋予了一个不适当的值,即试图为对象或控件的属性设置允许范围之外的值。如定时器控件的Interval属性只能取0到65535之间的值,否则就是无效属性值。 19.属性数组索引无效(错误381) 试图为属性数组索引设置一个超出允许范围的值。例如对ListBox而言,List属性数组的索引值必须在0到32767之间,小于0即为无效属性数组索引(如大于32767则产生溢出错误)。 20.运行时Irem属性不能被设置(错误382) 某些控件的某些属性为只读属性,不能在运行时赋值,试图在运行时改变该属性则出错。例如,列表框控件的Sorted属性,可在时赋值,但不能在运行时赋值。 21.‘Item’属性是只读的(错误383) 在设计和运行时属性都是只读的。此类属性其值不能设置或改变,只可以返回属性的值。 22.当最大化或最小化时窗体不能被移动或调整尺寸(错误384) 当窗体最大化或最小化时,试图采用Move方法或者改变窗体的Left、Top、Height或Width时产生该错误。使用Move方法前,可先检查窗体的WindowState属性,或禁止用户最大化或最小化窗体。 23.使用属性数组时必须指定索引(错误385) 引用属性数组时必须指定索引值。如Listl.List是无效的,产生“参数不可选”错误。 24.不能用分隔符条作为该控件的菜单名(错误395) 具有子菜单的Menu标题不能被设置为分隔符条,也就是说以分隔符条为标题的菜单项不可能有子菜单。 25.属性未找到<错误422) 并非所有对象都支持同样的属性。可能是此对象不支持指定的属性,应检查属性名的拼写是否错误,也有可能引用的是“Text"之类的属性,而此对象所支持的是"Caption”或类似的指定属性。 。 26.需要对象(错误424) 引用属性和方法经常需要指出一个明确的对象名,此类错误产生的原因可能是:当引用对象属性或方法时,没有提供对象名。例如,在本窗体模块中引用窗体对象的属性时,可以省略对象名,但是引用其他对象属性时,则必须指定对象名。另外,当从模块中引用窗体属性时,也必须指定窗体名。或是因为提供了一个错误的对象名,如将Forml写成了Froml。应确保对象存在并且对象名拼写正确。 27.弹出式菜单应至少有一个子菜单(错误428) 指定了一个没有子菜单的Menu控件作为PopupMenu方法的menuname参数。 28.对象不支持这个动作(错误445) 并非所有对象都支持所有动作。可能是此对象不支持引用的方法或属性。 29.参数不是任选项(错误449) 参数的个数和类型必须相互匹配。例如Left函数需要两个参数,第一个表示要处理的字符串,第二个表示字符串左边返回的字符数。因为参数不是任选项,所以必须全部提供。 30.参数数错误或无效的属性赋值(错误450) 传递给过程的参数个数必须和过程定义的参数个数匹配。产生此类错误的原因可能是:在调用过程时,所提供的参数个数和过程所要求的不一样。应与程序声明或定义进行比较,检查调用中的参数列表。试图给只读属性进行赋值时会产生该类错误。 31.未找到方法或数据成员(错误461) 对象不支持指定的方法,或不包含所引用的成员,或是因为方法名或成员名称拼写错误。如Forml.Clear写法错,因为窗体不支持Clear方法;又如Textl.Test写法错,将文本框Text属性拼写成Test,等等。 32.图片无效(错误481) Picture属性被赋予无效的图形格式。此错误产生的原因是:试图以不同于位图、图标或Windows元文件的图形格式,给窗体或控件的Picture属性赋值。应确保要加载到Picture属性中的文件是VB支持的有效图形文件。 33.不能绑定到字段:’irem’(错误545) 控件不能绑定到DataField属性所指定的字段。可能是被绑定控件的DataField属性被设置为一个字段,但该字段不在Data控件所提供的记录集中。应把绑定控件的DataField属性设置为有效的字段。设计时,可以通过在属性窗口中选择DataField属性的下拉列表, 而获取有效字段的列表。运行时,可以使用Data控件Recordset的Fields集合宋获取字段的列表。
/
本文档为【fl】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索