VB中总是提示连接无法用于执行此操作。在此上下文中它可能已被关闭或无效 是什么原因呢?怎么解决

代码如下:PrivateSubCommand1_Click()DimsqlAsStringDimrs_addAsNewADODB.RecordsetIfTrim(Text... 代码如下:
Private Sub Command1_Click()
Dim sql As String
Dim rs_add As New ADODB.Recordset
If Trim(Text1.Text) = "" Then
MsgBox "用户名不能为空", vbOKOnly + vbExclamation, ""
Exit Sub
Text1.SetFocus
Else
sql = "select * from 系统管理"
rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic //实时错误'3709'
While (rs_add.EOF = False)
If Trim(rs_add.Fields(0)) = Trim(Text1.Text) Then
MsgBox "该用户名已被注册,请重新输入", vbExclamation
Text1.SetFocus
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Combo1.Text = ""
Exit Sub
Else
rs_add.MoveNext
End If
Wend
If Trim(Text2.Text) = "" Then
MsgBox "密码不能为空,请重新输入!", vbExclamation, "警告"
Text2.Text = ""
Text2.SetFocus
Exit Sub
End If
If Trim(Text2.Text) <> Trim(Text3.Text) Then
MsgBox "两次密码不一致!", vbExclamation
Text2.SetFocus
Text2.Text = ""
Text3.Text = ""
Exit Sub
ElseIf Trim(Combo1.Text) <> "system" And Trim(Combo1.Text) <> "guest" Then
MsgBox "请选择正确的用户权限!", vbExclamation
Combo1.SetFocus
Combo1.Text = ""
Exit Sub
Else
rs_add.AddNew
rs_add.Fields(0) = Text1.Text
rs_add.Fields(1) = Text2.Text
rs_add.Fields(2) = Combo1.Text
rs_add.Update
rs_add.Close
MsgBox "添加用户成功", vbOKOnly + vbExclamation, ""
Unload Me
End If
End If
End Sub

Private Sub Command2_Click()
adduser.Hide
End Sub

Private Sub Form_Load()
Combo1.AddItem "system"
Combo1.AddItem "guest"
End Sub
展开
 我来答
创作者zUzVB1Sl31
2012-06-19 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5975

向TA提问 私信TA
展开全部
我给个建议吧,用ADO控件,代码太复杂过时,都没法看
Adodc1.connectionstring="Driver={SQL Server};Server=服务器IP;Uid=用户名;Pwd=密码;DataBse=数据库名"
Adodc1.RecordSource="SELECT * FROM 表名 WHERE 条件"
Adodc1.Refrsh
这样就行了,你要处理处理下连接异常就加句
Adodc1.ConnectionTimeout = 时间值
你的错误不上那句打开数据源语句写错了,而是根本就没有去连接数据库,你直接去查询数据表了,你的数据库数据从哪里来?ADODB.ConnectionString呢,原代码是不是把conn定义为ADO连接字符串,你没给他定义怎么直接就用了起来,所以他在这句提示:
rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic //实时错误'3709'
conn是什么?根本就没定义,非要这样,你就该先定义
Dim conn As ADODB.Connecton
再给他赋值
conn.ConnectionString="连接服务器数据库字符串"
再可以对他的数据源进行操作,这种方法相当过时,而且代码复杂,我的建议是你用
Microsoft ADO Data Control 2.0控件,直接给他的两个属性赋值就好了
Adodc1.connectionstring="Driver={SQL Server};Server=服务器IP;Uid=用户名;Pwd=密码;DataBse=数据库名"
Adodc1.RecordSource="SELECT * FROM 表名 WHERE 条件"
Adodc1.Refrsh
这就算是连接上了,要去登陆验证那就改这句
Adodc1.RecordSource="SELECT * FROM 表名 WHERE 用户名='"+控件名称+"' AND 密码='"+控件名称+"'"
用窗体上的控件去筛选,查询结果为空时就是ADO控件记录集为假,那就判断他:
IF Adodc1.RecordSet.EOF Then
。。。。
ELSE
登陆
。。。。
END if
是不是比上面的代码好理解多了
yiyueyangxinyu
2012-06-18 · 超过32用户采纳过TA的回答
知道答主
回答量:183
采纳率:0%
帮助的人:97.8万
展开全部
你应该是在之前有一个打开数据库的过程,这些代码应该是你的一部分代码,在你打开数据库以后,你应该是用别的方法关闭了它,所以你这儿提示出现了不正确。你在那儿加了一个实时错误,这块本身没有问题,你的数据库操作语法也没有错误。原因应该是你在之前关闭了数据库。这是我个人的见解,因为我以前碰到过这种问题。 我刚才试验了一下,你的程序本身是没有问题的,所以你可以看一看涉及到数据库的部分,很好改正
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yiyiarrow
2012-06-18 · TA获得超过391个赞
知道小有建树答主
回答量:588
采纳率:0%
帮助的人:424万
展开全部
你的conn 没有写,如果写了conn还是不行的话 试试下面的:
rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic 改为rs_add.Open sql, conn
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式