我是初次学习使用存储过程序,在网上找个实例照写的,这个程序是有两个变量带到存储过程序,输出结果集,可是在执行到MsgBox rs4.RecordCount时,rs4.RecordCount的值为-1 ,是不是没的查询结果的意思,不知道是不是我的参数有问题,请高手帮我看看,我也多学习学习呀存储过程
**********************
CREATE procedure select_users
@regname char(20),
@regname1 char(20),
@numrows char(20) OutPut
as
SELECT RelayBarCode,CheckerBarCode,OperatorBarCode,OptDate,ErrBarCode,YH002,OPTE,ds,jdqcode,jdqname
FROM CX
left join XTCPDA.dbo.jdqdzb ON TH=jdqcode
WHERE OptDate between @regname and @regname1
ORDER BY OptDate,RelayBarCode
GO
VB中语句
********************************************
Private Sub Command3_Click()
Set rs4 = New ADODB.Recordset Set cmd = New ADODB.Command cmd.ActiveConnection = ADOCN 'mConn 指定连接的数据库 cmd.CommandText = "select_users" '指定调用的存储过程名称 cmd.CommandType = adCmdStoredProc '将 CommandText 作为存储过程名进行计算
Set param = cmd.CreateParameter("RetVal", adInteger, adParamReturnValue, 4) cmd.Parameters.Append param Set param = cmd.CreateParameter("regname", adChar, adParamInput, 20, Trim(Text4.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("regname1", adChar, adParamInput, 20, Trim(Text5.Text))
cmd.Parameters.Append param Set param = cmd.CreateParameter("numrows", adInteger, adParamOutput) cmd.Parameters.Append param Set rs4 = cmd.Execute() MsgBox rs4.RecordCount Set DataGrid1.DataSource = rs4 DataGrid1.Refresh
End Sub
**********************
CREATE procedure select_users
@regname char(20),
@regname1 char(20),
@numrows char(20) OutPut
as
SELECT RelayBarCode,CheckerBarCode,OperatorBarCode,OptDate,ErrBarCode,YH002,OPTE,ds,jdqcode,jdqname
FROM CX
left join XTCPDA.dbo.jdqdzb ON TH=jdqcode
WHERE OptDate between @regname and @regname1
ORDER BY OptDate,RelayBarCode
GO
VB中语句
********************************************
Private Sub Command3_Click()
Set rs4 = New ADODB.Recordset Set cmd = New ADODB.Command cmd.ActiveConnection = ADOCN 'mConn 指定连接的数据库 cmd.CommandText = "select_users" '指定调用的存储过程名称 cmd.CommandType = adCmdStoredProc '将 CommandText 作为存储过程名进行计算
Set param = cmd.CreateParameter("RetVal", adInteger, adParamReturnValue, 4) cmd.Parameters.Append param Set param = cmd.CreateParameter("regname", adChar, adParamInput, 20, Trim(Text4.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("regname1", adChar, adParamInput, 20, Trim(Text5.Text))
cmd.Parameters.Append param Set param = cmd.CreateParameter("numrows", adInteger, adParamOutput) cmd.Parameters.Append param Set rs4 = cmd.Execute() MsgBox rs4.RecordCount Set DataGrid1.DataSource = rs4 DataGrid1.Refresh
End Sub
请使用EOF属性判断:
dim i as long
rs.movefirst
do while not rs4.eof
i=i+1
rs4.movenext
loop
msgbox i
我对存储过程只是从网上实例套过来的,请高手帮我看看是不是程序有问题,我总觉得是变量带的不对
如果游标类型不支持 RecordCount,则该属性返回 –1;
对仅向前游标,RecordCount 属性将返回 -1;
对静态或键集游标返回实际计数,对动态游标取决于数据源返回 -1 或实际计数。
ADOCN.CursorLocation = adUseClient
7F不错,那是将游标类型改变了.