一、无法连接服务器
原因:a.SQL Server服务没有打开
b.SQL Server使用了"仅 Windows"的身份验证方式
解决办法:
a.开启SQL Server服务,右键计算机-管理-服务和应用程序-SQL Server配置管理器-SQL Server服务
b.首先用windows身份验证登录
然后在服务器上右击属性,进入属性页,在安全性中设置服务器身份验证。
断开服务器连接,重新选择SQL身份验证,用户名为sa,密码为自己设置的密码。
二、对象错误
实时错误424,要求对象:这种错误的原因是对象不存在或对象命名错误。
我的错误原因是控件的命名与代码不一致,将控件的名称改一下就可以了。
三、实时错误3021
1.出现此错原因:
a.查找的数据库记录为空,可以用rs.RecordCount 来判断数据是否等于0
b.查找到数据后,用 Del 命令删除记录后,再引用 Fields 后会出现错误.
c.已经用MoveFirst 或用MovePrevious 命令移动至数据库开始后再用 MovePrevious 命令.
d.已经用MoveLast 或用 MoveNext 命令 移动至数据库开始后再用 MoveNext 命令.
我出现的错误是因为数据库记录为空,SQL语句不对,导致查询的记录为空。修改一下SQL语句就可以了,注意SQL语句的书写格式规范。
图片中出现了BOF和EOF,不是很清楚这个东西是什么,之前验收红皮书实例的时候师傅问过我这个问题,当时明白了,但是没总结,又忘了,今天也顺便总结一下吧。
2.BOE与EOF的含义:
EOF,英文译名 End Of File,指示当前记录位置位于Recordset 对象的最后一个记录之后。
BOF,英文译名 Before of File,指示当前记录位置位于 Recordset 对象的第一个记录之前。
比如一个1、2、3、4代码中定义了mrc的四个数据集,按如下排列:
-1 |
1 |
2 |
3 |
4 |
5 |
当mrc指向-1的时候就满足了BOF的情况;当mrc指向5的时候就满足了EOF的情况;当BOF和EOF都满足是,记录为空。
3.BOF与EOF的比较:
EOF | BOF | |
True | 当前行在最后一行的后面,无记录 | 当前行在第一行之前,无记录 |
False | 当前行在最后一行或其前面,有记录 | 当前行是第一行或其后面,有记录 |
四、实时错误383
这个是由于我将combox控件的Style属性变成了2-Dropdown List 的下拉式列表式,只有只读属性。
combox控件的style 属性有三种:
0-Dropdown :包括一个下拉列表和一个文本框,可以选择也可输入文字;
1-Simple :简单组合框,包括一个文本框和一个不会下拉的列表;
2-Dropdown List :只选组合框。
出现错的代码(其中一处):
mrc.AddNew
mrc.Fields(0) = Trim(txtCourseno.Text)
mrc.Fields(1) = Trim(txtCoursename.Text)
mrc.Fields(2) = Trim(comboCoursetype.Text)
mrc.Fields(3) = Trim(txtcoursedes.Text)
'更新数据库
mrc.Update
'关闭数据库对象
mrc.Close
MsgBox "添加课程信息成功!", vbOKOnly + vbExclamation, "添加课程信息"
Unload Me
修改代码如下:
mrc.AddNew
mrc.Fields(0) = Trim(txtCourseno.Text)
mrc.Fields(1) = Trim(txtCoursename.Text)
comboCoursetype.AddItem "必修"
comboCoursetype.AddItem "考查"
mrc.Fields(3) = Trim(txtcoursedes.Text)
'更新数据库
mrc.Update
'关闭数据库对象
mrc.Close
MsgBox "添加课程信息成功!", vbOKOnly + vbExclamation, "添加课程信息"
Unload Me
就是将所有关于combox控件的类似代码修改成添加的,即comboCoursetype.AddItem ,要不然数据读不进去。
五、实时错误3265
错误代码为:
Private Sub viewData()
txtSID.Text = mrc.Fields(0)
txtName.Text = mrc.Fields(1)
comboGender.Text= mrc.Fields(2)
txtBorndate.Text = Format(mrc.Fields(3), "yyyy-mm-dd")
comboClassno.Text= mrc.Fields(4)
txtTel.Text = mrc.Fields(5)
txtRudate.Text = Format(mrc.Fields(6), "yyyy-mm-dd")
txtAddress.Text = mrc.Fields(7)
txtComment.Text = mrc.Fields(8)
End Sub
更改为如下代码:
Private Sub viewData()
txtSID.Text = mrc.Fields(0)
txtName.Text = mrc.Fields(1)
'comboGender.AddItem mrc.Fields(2)
comboGender.AddItem "男"
comboGender.AddItem "女"
txtBorndate.Text = Format(mrc.Fields(3), "yyyy-mm-dd")
comboClassno.AddItem mrc.Fields(4)
txtTel.Text = mrc.Fields(5)
txtRudate.Text = Format(mrc.Fields(6), "yyyy-mm-dd")
txtAddress.Text = mrc.Fields(7)
txtComment.Text = mrc.Fields(8)
End Sub
因为combox的只读属性使得数据没有添加进去,没有对应的字段存在,需要改成添加形式的。
六、实时错误'-2147217887(80040e21)':多步OLE DB操作产生错误。
填的数据不符合或者没有转换成数据库相应字段的数据类型或约束。添加学号和电话的时候,字符长度超出了表的限制。我输入的学号和电话号码的字符长度是11,而表里限定的长度是10位:
解决方法:重新设计表
点开SQL Server中的数据库-表:右键-设计就可以看到上图:
但是更改char后,又出现如下问题:
解决办法如下:
打开SQL Server工具-选项-设计器,勾选“阻止保存要求重新创建表的更改”这一选项就可以更改了。
七、实时错误91
出错代码:
'判断是否有重复记录
txtSQL="select * from student_Info where student_ID ='" & Trim(txtSID.Text) & "'"
Set mrc=ExcecuteSQL(txtSQL,MsgText)
If mrc.EOF =False Then
MsgBox "学号重复,请重新输入!",vbOKOnly + vbExclamation ,"警告"
mrc.Close
txtSID.SetFocus
Else
错在ExecuteSQL这个函数里面,数据没有传过来,导致mrc显示的是空值nothing.
解决办法:将Set mrc= ExecuteSQL(txtSQL,MsgText)里面的逗号改成英文符号就可以了。