标题:数据库操作问题,困扰许久!感谢有心人帮忙!
只看楼主
zhc
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2010-12-1
结帖率:100%
已结贴  问题点数:20 回复次数:5 
数据库操作问题,困扰许久!感谢有心人帮忙!
--------------------------------------------------------
第一种·····

这是个将数据保存到数据库的命令,有没有On Error Resume Next,都不会出现实时错误3705 对象打开时,不允许操作!

Private Sub Command8_Click()
'On Error Resume Next
Set Rcset = New ADODB.Recordset
If = 1 Then
   Sqlstr = "select * from 第一环节 where 题目编号=" + + ""
ElseIf = 2 Then
   Sqlstr = "select * from 第二环节 where 题目编号=" + + ""
End If
Rcset.Open Sqlstr, Con, adOpenStatic, adLockOptimistic
If Rcset.RecordCount > 0 Then
   Rcset.MoveFirst
   For i = 1 To 6
       Rcset(CStr(i) & "选项(%)") = Me.Text10(i).Text
       Rcset(CStr(i) & "选项(票)") = Me.Text4(i).Text
   Next i
   Rcset("yx") = Me.Text4(1).Text
   Rcset("bchz") = Me.Text4(4).Text
   Rcset("chz") = Me.Text4(2).Text
   Rcset("jbcz") = Me.Text4(3).Text
   Rcset("qquan") = Me.Text4(5).Text
   Rcset.Update
 Else
   Rcset.AddNew
   Rcset("题目编号") =
   For i = 1 To 6
       Rcset(CStr(i) & "选项(%)") = Me.Text10(i).Text
       Rcset(CStr(i) & "选项(票)") = Me.Text4(i).Text
   Next i
   Rcset("yx") = Me.Text4(1).Text
   Rcset("bchz") = Me.Text4(4).Text
   Rcset("chz") = Me.Text4(2).Text
   Rcset("jbcz") = Me.Text4(3).Text
   Rcset("qquan") = Me.Text4(5).Text
   Rcset.Update
 End If
End Sub
’模块的
Public Con As ADODB.Connection
Public Rcset As ADODB.Recordset
Public Sqlstr As String '查询字符串
Public ConStr As String
  Sub Main()
    Set Con = New ADODB.Connection
    ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\表决数据.mdb" & ";Persist Security Info=False"
    Con.Open ConStr
    Form1.Show
End Sub
----------------------------------------------
第二种情况·····
下面的哦!!!!!!
'''模块的
Public myrst As New ADODB.Recordset
Public mycon As New ADODB.Connection
//////////////////
Private Sub Command2_Click()   '本过程用来加载数据
Set mycon = New ADODB.Connection''''如果隐掉此句,第一次单机按钮显示数据,第二次时就会出现
实时错误3705 对象打开时,不允许操作!不隐去则不会出现,这是为什么?????请师傅赐教

mycon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & App.Path & "\fay.mdb;"
mycon.Open
Set myrst = New ADODB.Recordset
stron = "select * from 基本情况" '可以理解为从某中选择所有(即*)的记录
myrst.Open stron, mycon, adOpenDynamic, adLockOptimistic
'MsgBox myrst.Fields(3)         
'下面用循环语句把myrst这个记录集中的数据写进flexgrid表格
With MSf
    .ColWidth(0) = 200
    .Row = 1
    .Rows = 2
    Do While Not myrst.EOF                            '这个循环来完成把记录集中的数据输出到mshflexgrid控件。
        For i = 1 To myrst.Fields.Count - 1
            .TextMatrix(.Row, i) = myrst.Fields(i)   '.row用来确定是“这一行”。然后for循环写入这一行的这一行的每一个字段
        Next i
        .Rows = .Rows + 1
        .Row = .Row + 1   '下一条记录写在msf的下一行,所以这里要把row加1
        myrst.MoveNext    '移动到下一条记录。
    Loop
End With
End Sub
-----------------------------------------------------------------------
第三种情况······
Private Sub ConnectDatabase()
If mycon.State = 0 Then
   mycon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & App.Path & "\fay.mdb;"
   mycon.Open
End If
End Sub
-----
Private Sub Command2_Click()   '本过程用来加载数据
ConnectDatabase
stron = "select * from 基本情况" '可以理解为从某中选择所有(即*)的记录
If myrst.State = 1 Then   '这里和mycon的判断同理
    myrst.Close   
End If   '''''如果隐掉此if-end if句,第一次单机按钮显示数据,第二次时就会出现
实时错误3705 对象打开时,不允许操作!不隐去则不会出现,这是为什么?????请师傅赐教


myrst.Open stron, mycon, adOpenDynamic, adLockOptimistic
MsgBox myrst.Fields(3)           
'下面用循环语句把myrst这个记录集中的数据写进flexgrid表格
With MSf
    .ColWidth(0) = 200
    .Row = 1
    .Rows = 2
    Do While Not myrst.EOF                            '这个循环来完成把记录集中的数据输出到mshflexgrid控件。
        For i = 1 To myrst.Fields.Count - 1
            .TextMatrix(.Row, i) = myrst.Fields(i)   '.row用来确定是“这一行”。然后for循环写入这一行的这一行的每一个字段
        Next i
        .Rows = .Rows + 1
        .Row = .Row + 1   '下一条记录写在msf的下一行,所以这里要把row加1
        myrst.MoveNext    '移动到下一条记录。
    Loop
End With
End Sub
----------这三种情况,数据库的打开 与关闭都是怎样哦,会出现这种情况了?第一个怎么没问题啊?请各位同仁相助,不胜感激!谢谢!









搜索更多相关主题的帖子: 数据库 有心人 
2011-02-22 11:31
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
得分:2 
为什么要"如果隐掉此"

无知
2011-02-22 13:48
zhc
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2010-12-1
得分:0 
回复 2楼 Artless
第一种·····

这是个将数据保存到数据库的命令,有没有On Error Resume Next,都不会出现实时错误3705 对象打开时,不允许操作!
第二种情况
Set mycon = New ADODB.Connection''''如果隐掉此句,第一次单机按钮显示数据,第二次时就会出现
实时错误3705 对象打开时,不允许操作!不隐去则不会出现,这是为什么?????请师傅赐教
第三种情况
If myrst.State = 1 Then   
    myrst.Close   
End If   '''''如果隐掉此if-end if句,第一次单机按钮显示数据,第二次时就会出现
实时错误3705 对象打开时,不允许操作!不隐去则不会出现,这是为什么?????请师傅赐教
 斑竹大哥!第一种情况 怎么操作数据库都没问题不会出现实时错误,
           而代码中也没有对象打开 或关闭的代码!这里为什么没出现二,三那样的情况啊!
           而第三种情况  隐掉此if-end if句,第一次单机按钮显示数据,第二次时就会出现
实时错误3705 对象打开时,不允许操作!不隐去则不会出现,为什么要加个这if语句条件啊  ???
     
2011-02-22 14:32
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:8 
Public mycon As New ADODB.Connection                                '建立新对象,但还没有开始使用
//////////////////
Private Sub Command2_Click()   '本过程用来加载数据
Set mycon = New ADODB.Connection      建立新对象。如果前面建立的新对象已使用,并且没有关闭,没有释放掉,就报错。

--------------------------------------------------
你这个变量 mycon  是定义 的公用变量,并且初始化过了,所以不需要再重新
使用 set 命令进行重新初始化。
使用 set 命令初始化,系统就是 丢弃前一个 对象,然后建立全新的对象。而前一个对象本来也是全新的。

如果你使用过,那么前一个变量只要关闭了,就可以释放掉,然后重新初始化。
-----------------------------------
我的理解就是这样的,你参考参考。

[ 本帖最后由 风吹过b 于 2011-2-22 15:38 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2011-02-22 15:35
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:10 
If myrst.State = 1 Then   '这里和mycon的判断同理
    myrst.Close   
End If   '''''如果隐掉此if-end if句,第一次单机按钮显示数据,第二次时就会出现
实时错误3705 对象打开时,不允许操作!不隐去则不会出现,这是为什么?????请师傅赐教
------------------
数据对象分为二层, 连接 和 表

一个程序里,可以使用一个连接,这个连接,一般建议是 程序开始后自动连接,而不是使用 按钮来进行连接。
表,也就是查询 ,每一次使用一个表后,都是建议 立即关闭这个表。需要时再打开,用完立即关闭。

你前面的情况,都是 表 没有关闭的情况下,又去要求打开另一个表,肯定出错的。
--------------------------------
养成好习惯,命令直接成对写好。
如数据操作:
写在 open ,则先写一个  close ,然后到这二条命令中间再加所需要的代码。
文件操作也是如此。

--------------------------
VB只程序结束时,才会自动关闭所有的打开的对象、文件。


授人于鱼,不如授人于渔
早已停用QQ了
2011-02-22 15:43
zhc
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2010-12-1
得分:0 
回复 5楼 风吹过b
想通了,就一个弯没绕过来额!
       谢谢您的细致,耐心!
2011-02-22 16:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-332579-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.427844 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved