| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2689 人关注过本帖
标题:OLE DB 错误。。
只看楼主 加入收藏
bingyun
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-6-29
收藏
 问题点数:0 回复次数:5 
OLE DB 错误。。

用SQL做后台数据库,有个模块有时能实现,有时出现错误,代码如下,请高手帮忙,怎么回事

Option Explicit '是否改动过记录,ture为改过 Dim mblChange As Boolean Dim mrc As ADODB.Recordset Public txtSQL As String

Private Sub cboItem_Change(Index As Integer) '有变化设置gblchange mblChange = True End Sub

Private Sub cboItem_Click(Index As Integer) Dim sSql As String Dim MsgText As String Dim mrcc As ADODB.Recordset '初始化员工名称和ID If Index = 0 Then txtSQL = "select typename,price from roomtype where typename='" & Trim(cboItem(0)) & "'" Set mrcc = ExecuteSQL(txtSQL, MsgText) If Not mrcc.EOF Then txtItem(2) = mrcc!price cmdSave.Enabled = True Else MsgBox "请先建立客房标准!", vbOKOnly + vbExclamation, "警告" cmdSave.Enabled = False Exit Sub End If mrcc.Close End If Exit Sub End Sub

Private Sub cboItem_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) EnterToTab KeyCode End Sub

Private Sub cmdExit_Click() If mblChange And cmdSave.Enabled Then If MsgBox("保存当前记录的变化吗?", vbOKCancel + vbExclamation, "警告") = vbOK Then '保存 Call cmdSave_Click End If End If Unload Me End Sub

Private Sub cmdSave_Click() Dim intCount As Integer Dim sMeg As String Dim mrcc As ADODB.Recordset Dim MsgText As String For intCount = 0 To 3 If Trim(txtItem(intCount) & " ") = "" Then Select Case intCount Case 0 sMeg = "客房编号" Case 1 sMeg = "客房位置" End Select sMeg = sMeg & "不能为空!" MsgBox sMeg, vbOKOnly + vbExclamation, "警告" txtItem(intCount).SetFocus Exit Sub End If Next intCount If gintRmode = 1 Then txtSQL = "select * from rooms where roomNO='" & Trim(txtItem(0)) & "'" Set mrc = ExecuteSQL(txtSQL, MsgText) If mrc.EOF = False Then MsgBox "已经存在此客房编号的记录!", vbOKOnly + vbExclamation, "警告" txtItem(0).SetFocus Exit Sub End If mrc.Close End If If gintRmode = 2 Then '先删除已有记录 txtSQL = "delete from rooms where roomNO='" & Trim(txtItem(0)) & "'" Set mrc = ExecuteSQL(txtSQL, MsgText) End If '再加入新记录 txtSQL = "select * from rooms" Set mrc = ExecuteSQL(txtSQL, MsgText) mrc.AddNew mrc.Fields(0) = Trim(txtItem(0)) mrc.Fields(1) = Trim(cboItem(0)) For intCount = 1 To 2 If Trim(txtItem(intCount) & " ") = "" Then mrc.Fields(intCount + 1) = Null Else mrc.Fields(intCount + 1) = Trim(txtItem(intCount)) End If Next intCount mrc.Fields(4) = " " mrc.Fields(5) = Trim(txtItem(3)) mrc.Update mrc.Close If gintRmode = 1 Then For intCount = 0 To 3 txtItem(intCount) = "" Next intCount mblChange = False If flagRedit Then Unload frmRoom frmRoom.txtSQL = "select * from rooms" frmRoom.Show End If ElseIf gintRmode = 2 Then Unload Me If flagRedit Then Unload frmRoom End If frmRoom.txtSQL = "select * from rooms" frmRoom.Show End If End Sub

Private Sub Form_Load() Dim sSql As String Dim intCount As Integer Dim MsgText As String Dim mrcc As ADODB.Recordset If gintRmode = 1 Then Me.Caption = Me.Caption & "添加" '初始化物资名称 txtSQL = "select DISTINCT typename from roomtype" Set mrc = ExecuteSQL(txtSQL, MsgText) If Not mrc.EOF Then Do While Not mrc.EOF cboItem(0).AddItem Trim(mrc.Fields(0)) mrc.MoveNext Loop cboItem(0).ListIndex = 0 Else MsgBox "请先进行客房标准设置!", vbOKOnly + vbExclamation, "警告" cmdSave.Enabled = False Exit Sub End If mrc.Close ElseIf gintRmode = 2 Then Set mrcc = ExecuteSQL(txtSQL, MsgText) If mrcc.EOF = False Then With mrcc txtItem(0) = .Fields(0) For intCount = 1 To 2 If Not IsNull(.Fields(intCount + 1)) Then txtItem(intCount) = .Fields(intCount + 1) End If Next intCount txtItem(3) = .Fields(5) txtSQL = "select DISTINCT typename from roomtype" Set mrc = ExecuteSQL(txtSQL, MsgText) If Not mrc.EOF Then Do While Not mrc.EOF cboItem(0).AddItem Trim(mrc.Fields(0)) mrc.MoveNext Loop cboItem(0).ListIndex = 0 Else MsgBox "请先进行客房标准设置!", vbOKOnly + vbExclamation, "警告" cmdSave.Enabled = False Exit Sub End If mrc.Close End With End If mrcc.Close Me.Caption = Me.Caption & "修改" End If mblChange = False End Sub

Private Sub Form_Unload(Cancel As Integer) gintRmode = 0 End Sub

Private Sub txtItem_Change(Index As Integer) '有变化设置gblchange mblChange = True End Sub

Private Sub txtItem_GotFocus(Index As Integer) txtItem(Index).SelStart = 0 txtItem(Index).SelLength = Len(txtItem(Index)) End Sub

Private Sub txtItem_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) EnterToTab KeyCode

End Sub

搜索更多相关主题的帖子: OLE SQL 数据库 Dim String 
2004-06-29 10:29
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
收藏
得分:0 

代码这么长,你又不说清错误是在哪个过程中产生的,一行行看代码很伤神的,我只能放弃看代码了,给你说一下可能的错误原因。

产生多步错误的原因很多,常见的有如下几种:

1.要更新的表被锁定。 2.事务未提交时,又开始新的事务 3.试图对不允许更新的字段进行更新 4.试图对只读记录集进行更新 5.对某字段进行某种操作时,该字段的属性不允许。 6.试图对不允许recordcount属性的记录集调用recordcount 7.试图对“仅向前”的记录集向后移动记录指针 …… ……

总之,每一个对记录集的非法操作都可能产生多步错误,这个错误是最令人恼火的,有时即使是其它非法操作(如4、7条),也会报“多步错误”,解决错误的办法只有逐行跟踪,而且大多数情况下,产生错误中断的那条语句并不是错误的真正来源,你可能要逐条检查对ADODB的操作才能找到。

耐心点,慢慢找吧。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-06-29 12:32
bingyun
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-6-29
收藏
得分:0 

Private Sub cmdSave_Click() 的

For intCount = 2 To 4 mrcc.Fields(intCount + 2) = txtItem(intCount) Next intCount

2004-06-29 14:42
bingyun
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2004-6-29
收藏
得分:0 

2.事务未提交时,又开始新的事务

如果是这个怎么避免

2004-06-29 14:47
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
收藏
得分:0 
以下是引用bingyun在2004-06-29 14:42:28的发言:

Private Sub cmdSave_Click() 的

For intCount = 2 To 4 mrcc.Fields(intCount + 2) = txtItem(intCount) Next intCount

是说你的代码在这段出错吗? 检查一下你的字段类型和要赋的值是否相符,比如字段是数值型的(包括int,smallint,money等等),而txtitem(intcount)的内容却不能转换成有效数值。

还有你要赋值的字段是否存在?mrcc.fields(4)到mrcc.fields(6)这些字段是否存在。

建议不要用这种方式,虽然少写了几行代码,但代码的可读性和维护性大大降低,得不偿失。 可以使用这种方式赋值:mrcc!fieldname1=value1,mrcc!fieldname2=value2(fieldname1,fieldname2表示字段的名称,value1,value2表示要赋的值),提高代码的可读性,调试时也更容易找出错误。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-06-29 15:32
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
收藏
得分:0 
以下是引用bingyun在2004-06-29 14:47:12的发言:

2.事务未提交时,又开始新的事务

如果是这个怎么避免

这个只能靠你在写代码时注意,保证begintrans一定对应一个committrans或rollbacktrans。ADODB没有提供检查一个连接是否在事务中的方法。

你的错误不是这个原因,我虽然没有一行行看你的代码,粗粗浏览了一下,你没有用到事务。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-06-29 15:37
快速回复:OLE DB 错误。。
数据加载中...
 
   



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

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