我的存储过程没有我的预期的执行结果,不知哪里出错了,特来请教各路大侠
9876 2003-09-25 08:57:29 SQL数据库表结构和存储过程如下
create table Department
(
cDepartmentID char(4) constraint pkDepartment primary key,
vDepartmentName varchar(20),
vDepartmentHead varchar(20),
vLocation varchar(200)
)
create procedure prcDepartmentAutoGen @iIncrement int output
as
declare @cDepartmentID char(4)
select @cDepartmentID=max(cDepartmentID) from Department
select @iIncrement=convert(int,substring(@cDepartmentID,1,4))+1
return
GO
窗体代码如下:
Option Explicit
Dim i As Integer
Dim blnStatus As Boolean
Dim intPosition As Integer
Private Sub fillList()
On Error GoTo errorhandler
List1.Clear
rs.Requery
rs.MoveFirst
While Not rs.EOF
List1.AddItem rs("vDepartmentName")
rs.MoveNext
Wend
rs.MoveFirst
Call display
Exit Sub
errorhandler:
MsgBox Err.Number & "," & Err.Source & "," & Err.Description, vbInformation, "部门管理"
End Sub
Private Sub display()
txtID = rs("cDepartmentID")
txtName = rs!vDepartmentName
txtHead = rs.Fields(2)
txtAddress = rs(3)
End Sub
Private Sub disallow()
Toolbar1.Buttons(1).Enabled = True
Toolbar1.Buttons(2).Enabled = False
Toolbar1.Buttons(3).Enabled = True
Toolbar1.Buttons(4).Enabled = False
Toolbar1.Buttons(5).Enabled = True
Toolbar1.Buttons(6).Enabled = True
End Sub
Private Sub allow()
Toolbar1.Buttons(1).Enabled = False
Toolbar1.Buttons(2).Enabled = True
Toolbar1.Buttons(3).Enabled = False
Toolbar1.Buttons(4).Enabled = True
Toolbar1.Buttons(5).Enabled = False
Toolbar1.Buttons(6).Enabled = True
End Sub
Private Sub Form_Load()
Call connectionSQLServer
If rs.State = adStateOpen Then rs.Close
rs.Open "select * from Department order by cDepartmentID", con, adOpenDynamic, adLockOptimistic
Call fillList
Call disallow
End Sub
Private Sub List1_Click()
intPosition = List1.ListIndex
rs.MoveFirst
rs.Move intPosition
Call display
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Dim prmOfPrc As parameter
Set prmOfPrc = New parameter//定义参数
Dim strDepartmentID As String//存储存储过程结果的字符串变量
Select Case Button.Key
Case "add"//以下是单击工具栏添加按钮时触发的事件代码
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then
Controls(i).Enabled = True
Controls(i).Text = ""
End If
Next//清空各文本框并设置为有效
rs.AddNew//开始添加记录
Call allow//改变工具栏各个按钮的有效性
com.CommandType = adCmdStoredProc//以下均为存储过程代码
com.CommandText = "prcDepartmentAutoGen"
Set prmOfPrc = com.CreateParameter("DepartmentID", adInteger, adParamOutput)
com.Parameters.Append prmOfPrc
com.Execute
If com(0) < 10 Then
strDepartmentID = "000" + CStr(com(0))
ElseIf com(0) < 100 Then
strDepartmentID = "00" + CStr(com(0))
ElseIf com(0) < 1000 Then
strDepartmentID = "0" + CStr(com(0))
End If
txtID.Text = strDepartmentID//设置文本框为存储过程执行结果
Case "save"
blnStatus = True
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then
If Controls(i).Text = "" Then
MsgBox "资料填写不完整,请检查", vbInformation, "部门管理"
blnStatus = False
Exit For
End If
End If
Next
If blnStatus = True Then
rs(0) = txtID.Text
rs(1) = txtName.Text
rs(2) = txtHead.Text
rs(3) = txtAddress.Text
rs.Update
MsgBox "记录已经成功保存到数据库", vbInformation, "部门管理"
Call fillList
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then Controls(i).Enabled = False
Next
Call disallow
End If
Case "delete"
If rs.BOF = True Then
MsgBox "没有任何部门档案记录,不能进行删除操作", vbInformation, "部门管理"
Toolbar1.Buttons(3).Enabled = False
Exit Sub
End If
rs.Delete
rs.MoveNext
If rs.EOF = True Then
rs.Requery
If rs.BOF = True Then
MsgBox "现在已经没有任何部门档案记录", vbInformation, "部门管理"
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then Controls(i).Text = ""
Next
Toolbar1.Buttons(3).Enabled = False
List1.Clear
Exit Sub
End If
End If
Call fillList
Case "cancel"
rs.CancelUpdate
If rs.BOF = True Then
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then Controls(i).Enabled = False
Next
Call disallow
Exit Sub
End If
rs.MoveFirst
Call display
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then Controls(i).Enabled = False
Next
Call disallow
Case "update"
If rs.BOF = True Then
MsgBox "没有任何部门档案记录,不能进行更新操作", vbInformation, "部门管理"
Toolbar1.Buttons(5).Enabled = False
Exit Sub
End If
For i = 0 To Controls.Count - 1
If TypeOf Controls(i) Is TextBox Then Controls(i).Enabled = True
Next
Call allow
Case "exit"
Unload Me
End Select
End Sub
不知哪里出错了,请问各路大侠
附:错误消息
run-time error '-2147217900(80040e14)':
为过程或函数prcDepartmentAutoGen 指定的参数太多
另外我测试时是这样的,就是数据库中没有记录时,单击工具栏添加按钮时未出现错误,但是文本框中并没有出现存储过程中应该执行的结果("0001"字符串)
单击工具栏取消按钮,再次单击添加按钮时出现如上错误
另外数据库中存在记录时,单击会有存储过程执行的结果,但是取消再添加时又会出现如上错误,不知该怎么修正代码,应该在哪里修改,望赐教
以上rs con com均为ADO对象,在模块代码中声明,干脆附上模块代码,做个参考
Public strServerName As String
Public con As Connection
Public rs As Recordset
Public com As Command
Public Sub getSQLServerName()
If GetSetting("OnlineBankingDB", "SQL Server Name", "ServerName") = "" Then
strServerName = InputBox("请输入数据库服务器名称")
SaveSetting "OnlineBankingDB", "SQL Server Name", "ServerName", strServerName
Else
strServerName = GetSetting("OnlineBankingDB", "SQL Server Name", "ServerName")
End If
End Sub
Public Sub connectionSQLServer()
Set con = New Connection
Set rs = New Recordset
Set com = New Command
On Error GoTo errorhandler
Call getSQLServerName
Set con = New Connection
With con
.Provider = "sqloledb"
.ConnectionString = "user id=sa;" & _
"password=810614;" & _
"data source=" & strServerName & _
";initial catalog=OnlineBankingDB"
.Open
End With
com.ActiveConnection = con
Exit Sub
errorhandler:
MsgBox Err.Number & Err.Source & Err.Description
End Sub