请高手指教,帮小弟一把。VB的ADO引用总是报错

zheng518 2003-06-24 01:47:01
我用VB为开发工具,Access为数据库后台,ADO对象引用方法连接数据库,总是报告错误。说是:如果对象已经打开,则不允许执行应用程序所要求的操作;错误的地方就是我字定义的一个过程(ShowData,为的是显示窗体上各个字段的数值,即从数据库中提取数据)。这个窗体的代码如下:
Option Explicit
Dim mrc As ADODB.Recordset
Public txtSQL As String
Dim adoCn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim N As Integer
Dim DaiHao As String


Private Sub CboClass_Change()
Dim sSql As String
Dim MsgText As String

End Sub

Private Sub CboClass_KeyDown(KeyCode As Integer, Shift As Integer)
EnterToTab KeyCode
End Sub

Private Sub CmdCancel_Click()
Unload Me
End Sub

Private Sub CmdSave_Click()
Dim Msg As Integer
Msg = MsgBox("你确认输入的数据保存吗?", vbYesNo + vbQuestion, "数据输入提示询问")
If Msg = vbYes Then

Else
Call Form_Load
End If

End Sub

Private Sub Command1_Click()
Unload Me
FrmPublishHouse.Show 1, Me
End Sub

Private Sub Form_Load()
adoCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\library.mdb" & ";Persist Security Info=False"
adoCn.Open adoCn

Dim MsgText As String
' Rs.Bookmark = Rs.MoveLast

txtSQL = "select * from 家庭藏书书库"
Set rs = ExecuteSQL(txtSQL, MsgText)
Call ShowData(rs)

DaiHao = rs.Fields(0)
LblID.Caption = DaiHao + 1
CboClass.Text = "管理类"
TxtBook.Text = ""
TxtWriter.Text = ""
TxtTranst.Text = ""
TxtMoney.Text = "" & "元"
TxtBooks.Text = ""
' Txtpublish.Text = ""
DTPicker2.Value = ""
TxtNo.Text = ""
DTPicker1.Value = Day(Date)
TxtKaiben.Text = "16" & "开本"
Txtpages.Text = "" & "页"
TxtInfo.Text = ""
TxtBook.SetFocus
CmdLooking.Enabled = False
CboClass.AddItem "所有", 0





End Sub

Public Sub ShowData(rs As ADODB.Recordset)
adoCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\library.mdb" & ";Persist Security Info=False"
adoCn.Open adoCn
Call InitFields(rs)
LblID.Caption = rs.Fields(0)
CboClass.Text = rs.Fields(1)
TxtBook.Text = rs.Fields(2)
TxtWriter.Text = rs.Fields(3)
TxtTranst.Text = rs.Fields(4)
TxtMoney.Text = rs.Fields(5)
TxtBooks.Text = rs.Fields(6)
DBCombo1.Text = rs.Fields(7)
'Txtpublish.Text = Rs.Fields(7)
' DTPicker2.Value = rs.Fields(8)
TxtNo.Text = rs.Fields(9)
DTPicker1.Value = rs.Fields(10)
TxtKaiben.Text = rs.Fields(11)
Txtpages.Text = rs.Fields(12)
TxtInfo.Text = rs.Fields(13)
End Sub





Private Sub TxtInfo_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
CmdSave.SetFocus
End If
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If CmdLooking.Enabled = True Then
If KeyCode = vbKeyPageUp And Not rs.BOF Then
rs.MovePrevious
If rs.BOF Then rs.MoveFirst
End If
If KeyCode = vbKeyPageDown And Not datPrimaryRS.Recordset.EOF Then
rs.MoveNext
If rs.EOF Then rs.MoveLast
End If
End If
End Sub

Private Sub InitFields(mrc As ADODB.Recordset)
'Dim intCount As Integer
Dim MsgText As String
'Dim mrc As ADODB.Recordset
txtSQL = "select * from 图书类别表"
Set mrc = ExecuteSQL(txtSQL, MsgText)
While (mrc.EOF = False)
CboClass.AddItem Trim(mrc.Fields(1))
mrc.MoveNext
Wend
' CboClass.ListIndex = 0
txtSQL = "select * from 出版社信息表"
Set mrc = ExecuteSQL(txtSQL, MsgText)
' Do While Not mrc.EOF
While (mrc.EOF = False)
DBCombo1.Text = Trim(mrc.Fields(1))
mrc.MoveNext
Wend


mrc.Close
End Sub
如果我把这个过程前两句话删掉,则报告错误:如果对象已经关闭,则不允许执行应用程序所要求的操作;
...全文
131 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wei1027 2003-07-02
  • 打赏
  • 举报
回复
showdata中开头加入
adocn.close
zheng518 2003-07-02
  • 打赏
  • 举报
回复
如何判断及其类型转换
饮水需思源 2003-06-26
  • 打赏
  • 举报
回复
在每一个rs要open之前加上一句:
if rs.state=adstateopen then rs.close
rs.open ...
zheng518 2003-06-26
  • 打赏
  • 举报
回复
谢谢!那我想请问,如何避免这个错误。窗体加载过程中打开数据库连接,而其他过程也必须再次调入这个过程,那该如何很好的协调呢?还有一个问题请教,我设置的数据库第一个字段是图书编号,我想在数据库中让这个编号以一个固定格式自动显示或添加时自动增加1,因此我写了一个过程,使其在窗体加载或添加数据时自动增加1,过程如下:前两句话在模块里定义其类型:

Public RowsInTable As String
Public IID
Private Sub InitBookId()
Dim Number As Integer
Dim msgtext As String
txtSQL = "select 图书编号 from 家庭藏书书库"
Set mrc = ExecuteSQL(txtSQL, msgtext)
RowsInTable = rs.Fields(0)

IID = Format(CLng(RowsInTable) + 1, "00000")
'LblID.Caption = Format(RowsInTable + 1, "00000")
LblID.Caption = IID
' LblID.Caption = rs.Fields(0)
mrc.Close

End Sub

但是最后总是出现类型不匹配的错误,光标定位与:IID = Format(CLng(RowsInTable) + 1, "00000")这行,我去掉函数CLng,结果也是一样。请问这是为何呢
player2 2003-06-25
  • 打赏
  • 举报
回复
Private Sub CmdSave_Click()
Dim Msg As Integer
Call Form_Load
End If

Private Sub Form_Load()
adoCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\library.mdb" & ";Persist Security Info=False"
adoCn.Open adoCn
Call ShowData(rs)
End Sub

Public Sub ShowData(rs As ADODB.Recordset)
adoCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\library.mdb" & ";Persist Security Info=False"
adoCn.Open adoCn
End Sub

没有关闭adoCn,就再次打开,肯定会出错。不仅是在showdata这里,当你调用CmdSave_Click()的时候还会出错。
zheng518 2003-06-25
  • 打赏
  • 举报
回复
而且光标总是定位于第一、二两句
zheng518 2003-06-25
  • 打赏
  • 举报
回复
我指的是showdata()过程。
zhuangcrui 2003-06-24
  • 打赏
  • 举报
回复
我不知道你说的哪个过程了,我想出现这个问题的原因是你没有打开记录集,我以前也碰到过这个问题
hzybc 2003-06-24
  • 打赏
  • 举报
回复
看一下记录集,是不是打开在那儿,又重新要打开记录集,或者是关闭了,想操作记录集
可用RS.STATE的状态来判断一下
If RS.State = 1 Then '打开时 =0是关闭
***
else
*****
endif

Alicky 2003-06-24
  • 打赏
  • 举报
回复
dim StrSql as string
StrSql = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\library.mdb" & ";Persist Security Info=False"
adoCn.Open StrSql
'上面的意思是打开一个连接。
内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧