当前位置:编程学习 > VB >>

vb 连接数据库 适时错误3704

公共窗体模块代码
Public Function getrs(ByVal strquery As String) As ADODB.Recordset
Dim rs As New ADODB.Recordset
Dim conn As New ADODB.Connection
On Error GoTo getrs_error
conn.ConnectionString = "provider=microsoft.jet.4.0;data source=E:\毕业设计\设计\毕业设计软件\考勤系统.mdb"
conn.Open
rs.Open Trim(strquely), conn, adOpenKeyset, adLockOptimistic
Set getrs = rs
getrs_exit:
Set rs = Nothing
Set conn = Nothing
Exit Function
getrs_error:
MsgBox (Err.Description)
Resume getrs_exit
End Function
Public Sub executesql(ByVal strcmd As String)
Dim conn As New ADODB.Connection
On Error GoTo executesql_error
conn.ConnectionString = "provider=microsoft.jet.4.0;data source=E:\毕业设计\设计\毕业设计软件\考勤系统.mdb"
conn.Open
conn.Execute Trim(strcmd)
Set executesql = rs
executesql_exit:
Set conn = Nothing
Exit Sub
executesql_error:
MsgBox (Err.Description)
Resume executesql_exit
End Sub
窗体模块代码

Private Sub cmdADD_Click()
Dim rs As New ADODB.Recordset
If Len(txtname.Text) = 0 Then
MsgBox "课程名称不能为空!", vbInformation + vbOKOnly, "提示"
txtname.SetFocus
Exit Sub
End If
If Len(txtid.Text) = 0 Then
MsgBox "课程编号不能为空!", vbInformation + vbOKOnly, "提示"
txtid.SetFocus
Exit Sub
End If
If Len(txttea.Text) = 0 Then
MsgBox "课程教师不能为空!", vbInformation + vbOKOnly, "提示"
txttea.SetFocus
Exit Sub
End If
strsql = "select*from 课程信息表 where 课程编号='" & Trim(txtname.Text) & "'"
Set rs = getrs(strsql)
If rs.RecordCount > 0 Then --- 《调试显示错误在这里》
MsgBox "该课程编号已存在!", vbInformation, "提示"
Else
rs.AddNew
rs("课程名称").Value = txtname.Text
rs("课程编号").Value = txtid.Text
rs("课程教师").Value = txttea.Text
rs("课程地点").Value = txtpla.Text
rs("授课时间").Value = txttime.Text
rs.Update
MsgBox "添加", vbInformation, "提示"
End If
rs.Close
Set rs = Nothing
End Sub


这是一个像ACCESS数据库输入数据的窗体。整个程序到此就做不下去了,自己思考了今天,没办法了。各位大师谁能帮我看看到底问题出在哪里。不胜感激。 --------------------编程问答-------------------- 3704
0x800A0E78
 如果对象关闭,则不允许应用程序请求的操作。 

去掉getrs(strsql)中出错处理,然后调试。 --------------------编程问答--------------------

rs.Open Trim(strquely), conn, adOpenKeyset, adLockOptimistic
Set getrs = rs
-------------Exit Function
getrs_exit:
Set rs = Nothing
Set conn = Nothing
Exit Function

getrs_error:
MsgBox (Err.Description)
Resume getrs_exit

End Function

仔细看看逻辑! --------------------编程问答-------------------- 上面两位的建议都认真去试了一下。结果还是一样的,问题解决不了。
会不会是这句话出现了问题:strsql = "select*from 课程信息表 where 课程编号='" & Trim(txtname.Text) & "'"
--------------------编程问答-------------------- *前后都有空格才可以

引用 3 楼 liubo0704 的回复:
上面两位的建议都认真去试了一下。结果还是一样的,问题解决不了。
会不会是这句话出现了问题:strsql = "select*from 课程信息表 where 课程编号='" & Trim(txtname.Text) & "'"
--------------------编程问答-------------------- 空格有的。出错提示还是一样。 --------------------编程问答-------------------- 把Set rs = Nothing去掉 --------------------编程问答-------------------- 试过了,没用用 --------------------编程问答-------------------- 去掉函数中的
Set getrs = rs
getrs_exit:
Set rs = Nothing
Set conn = Nothing   '此处对象关闭了,肯定报错!

再去掉
Set rs = getrs(strsql)
试一下


--------------------编程问答-------------------- Dim rs As New ADODB.Recordset
Dim conn As New ADODB.Connection

把上面的改成
public  rs As New ADODB.Recordset
public conn As New ADODB.Connection
省的每次定义 --------------------编程问答-------------------- 有个问题。在调试显示“适时错误3704,对象关闭时,不容许操作”之前。先提示了“未找到提供程序,该程序可能未正确安装。”ACCESS是win7 系统自带的,是ACCESS软件没装好会造成3704错误吗
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,