德国背景
背景:这两天帮人调错很有感触,因为代码都是自己敲的,出的错误也是各类奇葩都有,有时即使问题出错警报虽然一样,但是问题根源却不尽相同,例如91错误等其实根源是不一定相同的,如果不是遇到过很多错误的人,挑起来还真有点费劲,闲话少说,下面将我当时学生的一点总结分享给大家,再次强调,这些只是冰山一角,欢迎大家交流指正。
一、数据库连接阶段
第一步
在SQL中添加数据库。两种方法:
1、在数据库中附加”student“。或者在“文件” 中打开“student.sql”文件,然后连接,点击“执行“(一定要执行)。
第二步
接下来是ODBC的连接了控制面板——大图标——数据源(ODBC),接下来按步骤添加文件DSN连接就可以了。
二、遇见的问题
用户定义类型未定义
在机房收费系统中又遇到了这个问题,是因为没有启用ADODB的引用,或者加载ADODC控件,
在“工程|引用”中添加“Microsoft ActiveX Data Object[版本号,比如2.8等]Library”就可以了[用户定义类型未定义]
对象变量或with块变量未设置
这个问题在系统中表现一种是是和数据库相关的问题,表现形式就是相应的对象并没有在数据库中取得相应的值,也就是数据库连接不通,这时候需要解决问题:
首先看代码,看代码连接是否有问题,在这个系统中我们使用了两种连接方式,一种是系统在自己的电脑上连接自己的电脑上的数据库,代码如下:
ConnectString="FileDSN=studentinfo.dsn;UID=sa;PWD=1"
另一种则是将系统放到别的机子上然后连接自己机子上的数据库,代码如下
ConnectString ="Provider=SQLOLEDB;Data www.2cto.com Source=192.168.24.176;InitialCataLog=Student;UID=sa;PWD=1",如果代码没有什么问题问题的话,那么接下来查看ODBC的配置是否有问题,这里需要注意的两点是:一是filedsn的名称代码中和配置的要相同,第二点则是用户名和密码,这里的用户名和密码指的是登录sql server服务器的用户名和密码.
以上这两点比较容易出问题,要时常注意.
如果odbc配置的没有问题,那么就需要看看你的sql server 服务是否开启,有的时候不知道什么原因电脑重新启动之后服务无法开启.这时候你需要想尽办法的去开启服务.
值得一提的是91错误有许多种,有些错误不是数据库连接问题,而是代码出错,要认真检查代码,严格代码规范,尤其是SQL语句中大小写、空格等地方要注意。就行了。
无法出现主窗体
确定登陆后无法出现主窗体,在登陆界面cmdOK按钮内加了一行frmmain.Show代码就好了。
超出当前范围
这种错误一般是因为文本框等录入控件没有设定字符串的范围或者设定的范围超出了对应数据库中该属性的范围,导致输入的内容超出了本应该规定的范围,当然这样的错误可以通过设定文本框等录入控件的最大字符串长度maxlength来避免错误.
然而这其中有一个大的弊端,比如电话号码设定的长度是十位,如果出现了十一位的电话号码,那么第十一位会被自动裁剪掉.而且不会报错,这样如果不注意的话,很可能造成了数据录入的错误,当然这些需要在设计数据库的时候充分的考虑,是能够避免的.
EOF或 BOF一个为真或者一个为假
这种错误的原因是因为表已经人去楼空,没有数据,自然设定的一些对象和书签不能够使用了,这其实也不能说是个错误,只是我们可以将程序变得更加的完善一些.当然这种错误一般出现在两个地方,一个就是当功能窗体加载的时候这时候可能需要数据库中的数据来显示一些内容,如果数据库中没有了数据那么会显示错误,另一个就是当删除的时候有可能删掉最后一条记录,这时候的书签没有了相应的数据也可能报同样的错误.我们可以添加一段代码来避免错误的产生:
更改账户密码时子函数或函数未定义
最后发现是:
原来excutesql少了一个“E” ,早就知道是故意给的有错误的代码,所以早该想到了,哈哈
多步OLE DB 操作产生错误
出现这样的错误,一般是因为update进去的数据长度超过了数据库字段的长度或者是数据类型不匹配导致,请留意检查:
此外,数据库中定义数据长度必须一致,添加信息长度不能长于数据库中定义长度,否则提示出错,引用时可以加上trim函数,将应用信息长度降到最低。
问题就出在了数据库字段大小上,该字段大小为默认的50,而我输入的titlename已经60多。
修改字段大小,保存退出。
测试程序,一切正常,通过!
数据库中不能保存更改
在SSMS中选择 选项,设计器,表和数据库设计器,把阻止更改前的勾去掉即可。
对象关闭时,不允许操作
因为Student前没有空格,但是去掉连接符后原句应该为
txtSQL ="select * from student_Info where student_ID= '" & Trim(txtSID.Text)
where与student中间必须有空格,加上连字符后空格也不能省略,否则会报错。
登录窗体时出现此错误,查遍了代码也没有发现错误,最后发现模块代码出错了,因为模块为全局级别,和许多窗体都有关,找不出错误可以试试模块。
添加班级信息时候报错91
出错地方如下:
经查,是因为拼写错误,class拼成了calss
修改91错误后出现这个错误:
经查:是sql语句select出的内容为空,这时候你仍然调用它,当然会出错,加上判断语句就行了,这里的逻辑关系稍微有点复杂,一定要想好。当时删除记录时我的delete键逻辑关系是这样的:
str2$ = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
If str2$ = vbOK Then
If (mrc.EOF And mrc.BOF) Then
MsgBox "数据库中已无记录,请添加!"
Exit Sub
Else
If (mrc.EOF Or mrc.BOF) Then
MsgBox "请向下选择记录!"
mrc.MoveFirst
Exit Sub
Else
mrc.Delete
txtClassno.Text = ""
comboGrade.Text = ""
txtDirector.Text = ""
txtClassroom.Text = ""
mrc.MoveNext
If (mrc.EOF And mrc.BOF) Then
MsgBox "往下已经没有记录,请向上查找!"
Else
Call viewData
End If
End If
End If
Else
Call viewData
End If
a = True
大意:删除时首先查询数据库中有无记录,如果有,再判断是否处于EOF 或BOF,如果不是,删除记录,游标下移一条记录,在判断是否处于EOF,如果不是,Call viewData。
将if end 判断加上就行了
提示运行时错误383Text属性为只读
当combobox的style设置为2的时候,会出现第二种情况,但是第一种情况应该和combo的设置无关。
如Styte为2时则.text只能取List中的值。建议每次用Addnew进行数据库添加后用代码重新用代码处理,先用Clear清除所有项后再全部添加.这样就不会出错了。
后来将combosex注释掉,解决了
无效使用null
是数据库中不允许空值,但是vb代码中部出现了空值,所引起的冲突,在数据库中将对应字段允许空值就行了。
累了,就到这里了,下次更新机房收费系统问题。谢谢大家光临!
有问题随时交流。