请高手指教,帮小弟一把。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
如果我把这个过程前两句话删掉,则报告错误:如果对象已经关闭,则不允许执行应用程序所要求的操作;
...全文
85 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
'上面的意思是打开一个连接。

1,216

社区成员

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

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