SQL执行没有问题,但在VB中提示错误码:3704 ADODB.Recordset:对象关闭时,不允许操作

hbqc_zh 2017-08-03 09:25:20
为什么在SQL执行一切OK,但是Vb中执行以下语句时报错。
报错信息如下
=========================================
错误码:3704 ADODB.Recordset:对象关闭时,不允许操作
=========================================


VB代码 如下:
'得到生产订单条形码
‘注明:gconn 数据库连接正常
Dim mrc2 As ADODB.Recordset


txtsql = "declare @p5 nvarchar(50)"
txtsql = txtsql + " exec ZJMES_GetBarcodeStr N'ZJMES_SCMoOrder',@p5 output "
txtsql = txtsql + " select @p5"
Set mrc2 = gconn.Execute(txtsql)

If mrc2.EOF = False Then
Mo_Barcode = Trim(mrc2.Fields(0))
End If
mrc2.Close


/*

功能:得到条形码
创建:Zh
创建时间:2017-08-02

declare @p5 nvarchar(50)
exec ZJMES_GetBarcodeStr 'ZJMES_SCMoOrder',@p5 output
select @p5

*/




ALTER PROCEDURE [dbo].[ZJMES_GetBarcodeStr]
(
@TableName nvarchar (50),
@BarcodeStr nvarchar(50) output
)
AS
declare @DateStr as datetime
declare @Barcode_Str nvarchar(50)


set @DateStr=convert(nvarchar(10),GetDate(),120)
set lock_timeout 30000




BEGIN TRAN T1

if not exists(select * from ZJMES_BaseMaxID with (updlock,rowlock) where NDate=@DateStr and TableName=@TableName)
begin
insert into ZJMES_BaseMaxID(TableName,NDate,MaxNDateID)values(@TableName,@DateStr,1)
if @@error <>0
begin
goto ErrHandle
end
set @BarcodeStr=convert(varchar(8),@DateStr,112) + '0001'


end
else
begin


select @Barcode_Str=convert(varchar(8),@DateStr,112) + right('0000'+cast(isnull(Max(MaxNDateID),0)+1 as varchar(4)),4)
from ZJMES_BaseMaxID where NDate=@DateStr and TableName=@TableName

set @BarcodeStr=@Barcode_Str
update ZJMES_BaseMaxID set MaxNDateID=MaxNDateID+1 where TableName=@TableName and NDate=@DateStr
if @@error <>0
begin
goto ErrHandle
end
end
if @@error <>0
begin
goto ErrHandle
end
COMMIT TRAN T1
return 0
ErrHandle:
rollback tran T1
return -1
...全文
729 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-04
  • 打赏
  • 举报
回复
注释掉所有On Error Resume Next语句,在VB6 IDE中运行, 出错后点击调试,光标会停在出错的那条语句处, 或者 事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断, 此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
4.设计体会 通过本次课程设计,使我从更深的层次了解了VB的设计技巧和应用方法。在程序的编制和调试过程,我从学到了很多有用的方法,比如通过本次设计,我更深刻的体会到了VB系统的方便与实用。在课程设计的过程,我对课本上的知识进行了复习,从找出了不少盲点,由衷地感觉到学习过程应该把学的知识作扎实,多动手多思考,这样才能最大限度的减少知识的漏洞。 把课本上的东西变成实际的东西,让其有使用的价值,是一件很让人高兴的事。我切实的体会到VB这门课程是有用处的,它解释了我平学习的很多疑惑,让我增长了很多见识。 5.参考文献 [1] 刘天惠.Visual Basic程序设计教程[M]. 北京: 清华大学大学出版社,2003.12-24 [2] 龚沛曾.Visual Basic程序设计教程[M]. 高等教育出版社, 2004.28-45 [3] 蒋加伏.Visual Basic程序设计教程[M].北京: 北京邮电大学出版社,2003.10-56 [4] Microsoft .Visual Basic 6.0 文版控件大全[M]北京:电子工业出版社,2004.15-23 6.附录 源程序代码如下: (1)用户登录窗体 Private Sub cmdOK_Click() Dim SQL As String Dim rs As ADODB.Recordset 沈 阳 大 学 课程设计说明书 NO.16 If Trim(UserName.Text = "") Then MsgBox "没有输入用户名称,请重新输入!", vbOKOnly + vbExclamation, "警告" UserName.SetFocus Else '查询用户 SQL = "select * from UserInfo where UserID='" & UserName.Text & "'" Set rs = TransactSQL(SQL) If iflag = 1 Then If rs.EOF = True Then MsgBox "没有这个用户,请重新输入!", vbOKOnly + vbExclamation, "警告" UserName.SetFocus Else If Trim(rs.Fields(1)) = Trim(PassWord.Text) Then rs.Close Me.Hide gUserName = Trim(UserName.Text) '保存用户名称 FrmMain.Show Unload Me Else MsgBox "密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告" PassWord.SetFocus PassWord.Text = "" 沈 阳 大 学 课程设计说明书 NO.17 End If End If Else Unload Me End If End If pwdCount = pwdCount + 1 '判断输入次数 If pwdCount = 3 Then Unload Me Exit Sub End If End Sub Private Sub Form_Load() pwdCount = 0 gUserName = "" End Sub Private Sub PassWord_KeyDown(KeyCode As Integer, Shift As Integer) TabToEnter KeyCode End Sub Private Sub UserName_KeyDown(KeyCode As Integer, Shift As Integer) TabToEnter KeyCode End Sub 沈 阳 大 学 课程设计说明书 NO.18 (2)添加用户窗体 Option Explicit Public str1 As String '保存修改SQL语句 Public ID As Integer '保存记录编号 Private baddflag As Boolean rivate Sub AID_KeyDown(KeyCode As Integer, Shift As Integer) TabToEnter KeyCode End Sub Private Sub AID_LostFocus() Dim SQL As String Dim rs As New ADODB.Recordset SQL = "select SName,SDept,SPosition from StuffInfo where SID='" & Me.AID.Text & "'" Set rs = TransactSQL(SQL) If rs.EOF = False Then Me.AName = rs(0) '初始化员工姓名 Me.AOldDept = rs(1) Me.AOldPosition = rs(2) Else MsgBox "员工编号输入错误,或者没有这个员工!", vbOKOnly + vbExclamation, "警告!" Me.AID = "" Me.AID.SetFocus Me.AID.ListIndex = 0 End If rs.Close End Sub 沈 阳 大 学 课程设计说明书 NO.19 Private Sub cmdCancel_Click() Unload Me Exit Sub End Sub rivate Sub checkinput() If Me.ANewPosition = "" Then MsgBox "请输入新的职务!", vbOKOnly + vbExclamation, "警告!" Me.ANewPosition.SetFocus ElseIf Me.AOutTime = "" Or IsDate(Me.AOutTime) = False Then MsgBox "请输入正确的调出间!", vbOKOnly + vbExclamation, "警告!" Me.AOutTime = "" Me.AOutTime.SetFocus ElseIf Me.AInTime = "" Or IsDate(Me.AInTime) = False Then MsgBox "请输入正确的调入间!", vbOKOnly + vbExclamation, "警告!" Me.AInTime = "" Me.AInTime.SetFocus Else baddflag = True End If End Sub Private Sub cmdOK_Click() Dim SQL As String Dim rs As New ADODB.Recordset 沈 阳 大 学 课程设计说明书 NO.20 baddflag = False Call checkinput If baddflag = True Then If flag = 1 Then 'Call checkinput SQL = "select * from AlterationInfo" Set rs = TransactSQL(SQL) rs.AddNew rs.Fields(1) = Me.AID rs.Fields(2) = Me.AName rs.Fields(3) = Me.AOldDept rs.Fields(4) = Me.ANewDept rs.Fields(5) = Me.AOldPosition rs.Fields(6) = Me.ANewPosition rs.Fields(7) = Me.AOutTime rs.Fields(8) = Me.AInTime rs.Fields(9) = Me.ARemark rs.Update rs.Close SQL = "update StuffInfo set SDept='" & Me.ANewDept & "', SPosition='" SQL = SQL & Me.ANewPosition & "' where SID='" & Me.AID & "'" TransactSQL (SQL) MsgBox "已经添加调动信息!", vbOKOnly + vbExclamation, "添加结果!" SQL = "select * from AlterationInfo order by ID" 沈 阳 大 学 课程设计说明书 NO.21 frmAlterationResult.Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\Person.mdb" frmAlterationResult.Adodc1.RecordSource = SQL If SQL <> "" Then frmAlterationResult.Adodc1.Refresh End If Else '修改记录 'Call checkinput SQL = "update StuffInfo set SDept='" & Me.ANewDept & "', SPosition='" SQL = SQL & Me.ANewPosition & "' where SID='" & Me.AID & "'" TransactSQL (SQL) SQL = "update AlterationInfo set AOldDept='" & Me.AOldDept & "',ANewDept='" SQL = SQL & Me.ANewDept & "',AOldPosition='" & Me.AOldPosition SQL = SQL & "',ANewPosition='" & Me.ANewPosition & "',AOutTime=#" & Me.AOutTime SQL = SQL & "#,AInTime=#" & Me.AInTime & "# where ID=" & ID TransactSQL (SQL) MsgBox "已经修改信息!", vbOKOnly + vbExclamation, "修改结果!" Unload Me SQL = "select * from AlterationInfo order by ID" frmAlterationResult.Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\Person.mdb" frmAlterationResult.Adodc1.RecordSource = SQL If SQL <> "" Then frmAlterationResult.Adodc1.Refresh End If 沈 阳 大 学 课程设计说明书 NO.22 Set frmAlterationResult.DataGrid1.DataSource = frmAlterationResult.Adodc1.Recordset frmAlterationResult.DataGrid1.Refresh frmAlterationResult.Show frmAlterationResult.ZOrder 0 Call init Me.ZOrder 0 End If End If End Sub (3)查询员工信息窗体 Option Explicit Private query As String Private fromdate As String Private todate As String Private Sub cmdCancel_Click() Unload Me Exit Sub End Sub Private Sub CombineDate() fromdate = Me.FromYear.Text & "-" & Me.FromMonth.Text & "-1" fromdate = Format(Me.FromYear.Text & "-" & Me.FromMonth.Text & "-1", "yyyy-mm-dd") todate = Me.ToYear.Text & "-" & Me.ToMonth.Text & "-1" todate = Format(todate, "yyyy-mm-dd") End Sub 沈 阳 大 学 课程设计说明书 NO.23 Private Sub setSQL() If IDCheck.Value = vbChecked Then query = "select * from StuffInfo where SID='" & Trim(Me.SID) & "'" End If If NameCheck.Value = vbChecked Then query = "select * from StuffInfo where SName='" & Trim(Me.SName) & "'" End If End Sub Private Sub cmdOK_Click() Call CombineDate Call setSQL frmResult.createList (query) frmResult.Show Unload Me End Sub Private Sub Form_Load() Dim i As Integer Dim SQL As String Dim rs As New ADODB.Recordset SQL = "select distinct datepart(yy,SInTime) from StuffInfo" Set rs = TransactSQL(SQL) If Not rs.EOF Then rs.MoveFirst While Not rs.EOF If Not IsNull(rs.Fields(0)) Then 沈 阳 大 学 课程设计说明书 NO.24 Me.FromYear.AddItem rs(0) Me.ToYear.AddItem rs(0) End If rs.MoveNext Wend rs.Close Me.FromYear.ListIndex = 0 Me.ToYear.ListIndex = 0 End If For i = 1 To 12 Me.FromMonth.AddItem i Me.ToMonth.AddItem i Next i Me.FromMonth.ListIndex = 0 Me.ToMonth.ListIndex = 0 End Sub
目 录 数据库课程设计报告 1 1.开发环境和相关技术介绍 5 1.1开发环境 5 1.2相关技术介绍 5 2.需求分析 5 2.1系统需求和功能 5 2.1.2功能需求描述 6 2.1.2.1员工基本信息模块 6 2.1.2.2工资结构设置模块 6 2.1.2.3工资汇总模块 6 2.2数据字典 6 2.2.1数据结构 7 2.2.2数据项 7 2.2.3数据流 8 2.4安全性要求 8 2.5一致性要求 9 2.6完整性要求 9 3 概念结构设计 9 3.1设计方法和步骤 9 3.2概念结构E-R图 9 4.逻辑结构设计 9 4.1具体RDBMS数据模型转换 9 4.2系统结构图 10 5.数据库物理设计 10 5.1索引的选择建立 10 5.2数据存放位置 10 5.3确定系统配置 10 6.数据库实施 10 6.1数据库创建 10 6.1.1各数据表说明 10 6.1.2数据库创建 11 6.2数据库备份和恢复方案 13 6.2.1应用辅助工具进行备份和恢复 13 6.2.2分离数据库法 13 6.3用户界面设计和应用程序编码 13 6.3.1用户界面设计 13 6.3.2类文件功能描述 14 6.3.3主要代码分析 14 }7.系统测试方案和测试报告 21 7.1测试方案 21 7.2测试过程 21 7.2.1登陆测试 21 8.安装和使用说明 25 8.1安装说明 25 8.1.1安装VB6.0E 25 8.1.2安装Microsoft SQL Server 2000 ODBC驱动程序 25 8.1.3升级Microsoft SQL Server 2000数据库管理系统 25 8.1.4附加数据库 25 8.1.5可能出现情况 25 9.完成情况和总结 25 9.1总结 25 1.开发环境和相关技术介绍 1.1开发环境 项目名称: 工资管理系统 开发软件:vb6.0与Access 2000 运行环境:2000/XP/2003 1.2相关技术介绍 Microsoft SQL Server 2000数据库管理系统是微软公司研制开发的关系型数据库管理系统。该系统支持并扩展了SQL语言标准,可以运用标准SQL语句对数据进行操作,也可以使用功能强大的GUI工具进行灵活的数据管理。同,系统还提供功能完善的API,可以在应用程序调用这些API来实现与数据库系统的连接以及相关数据的操作。sp3是该系统的一个版本号,只有sp4以上的SQL 2000系统才能够支持纯ODBC连接方式。 Vb6.0功能强大的应用程序开发工具,主要支持基于面向对像化的语言的各种开发项目。 2.需求分析 2.1系统需求和功能 工资管理信息系统对企业加强工资管理有着重要的作用,就一般的大型企业来说,它的设计内容非常复杂而且繁多,比如拥有工资计算功能,工资统计功能,报表输出功能,而且设计的模块也很多,比如工资管理模块,工资统计模块,报表设计模块,打印输出模块,模糊查询模块等。 由于本软件主要是为作者工作的一家科技公司定制开发的。该公司是一家刚刚成立的公司,总体人员比较少,有正式员工20人,人员结构比较简单,学历比较高,基本拥有大专以上学历,部门划分也很清晰,而且人员的流动性不高,所以公司目前对工资管理的要求不高。因此,针对该公司而言,我们经过反复论证,最终确定了工资管理系统的设计方案,该工资管理系统的主要功能如图3.1所示: 2.1.2功能需求描述 2.1.2.1员工基本信息模块 员工基本信息模块具有员工信息输入、员工增删、员工信息查询三个功能,员工基本信息包括员工号、员工姓名、员工性别、所在部门、所在岗位、工龄和工资等级等信息。员工增删实现了对数据库员工信息的增加和删除。员工可以通过员工号或员工姓名对员工信息进行查询。 2.1.2.2工资结构设置模块 根据该公司的工资管理实际情况,本系统将工资结构分为基础工资、岗位工资、工龄工资三部分。该模块可以对这三个工资类型设置工资等级,并对每个等级设置工资标准。 2.1.2.3工资汇总模块 用户在员工信息管理模块对该员工的工资等级进行输入以后,在工资汇总模块会自动对员工工资进行汇总。用户可以打印出工资汇总表,打印之前可以通过打印预览功能进行打预览。 2.2数据字典 该软件的数据库由下述四张数据表组成: 员工信息表、基础工资设置表、岗位工资设置表 1、 员工信息表 字段 字段名 类型 宽度 说明 1 员工号 字符型 3 数字 2 员工姓名 字符型 10 小于等于5个汉字 3 员工性别 字符型 2 “男”或“女” 4 岗位名称 字符型 14 小于等于7个汉字 5 工龄 数值型 2 1~99之间 6 工资等级 数值型 2 1~99之间 2、 基础工资设置表 字段 字段名 类型 宽度

1,216

社区成员

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

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