我的有问题的工程可以从这里下载到:http://www.cmddos.cn/store-err.rar
就是,我想从存储过程中查询手机号码为13000000000的这条记录并返回到recordset中。ReportDayTotal_SDYC 是存储过程。问题是:
我需要传递参数到存储过程中,第一种代码如下:
Dim Cn As New ADODB.ConnectionDim cmd As New ADODB.Command
Dim param As New ADODB.Parameter'上面这三行是窗体公共部分Private Sub Command1_Click()
Set cmd.ActiveConnection = CnDim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "ReportDayTotal_SDYC"
cmd.Parameters(1) = "2008-9-25 00:00:00"
cmd.Parameters(2) = "2008-9-25 12:00:00"
cmd.Parameters(3) = 0
cmd.Parameters(5) = "13000000000"
cmd.Executers.Open "ReportDayTotal_SDYC", Cn, adOpenDynamic, adLockOptimistic
Set rs = cmd.ExecuteEnd Sub错误停留在rs.open这一行。错误提示是 没有给begindatetime赋值。但是cmd.Parameters(1)这一个不是给他赋值吗?第二种做法:
Private Sub Command2_Click() Dim cmd As ADODB.Command 'Command对象
Dim para As ADODB.Parameter '参数
Dim rs As New ADODB.Recordset '记录集
rs.CursorLocation = adUseClient
Set cmd = New ADODB.Command '实例化命令对象
Set cmd.ActiveConnection = Cn '指定连接
cmd.CommandText = "存储过程名" '指定要执行的存储过程
cmd.CommandType = adCmdStoredProc '指定命令类型为存储过程 Set para = cmd.CreateParameter() '实例化参数
para.Name = "@BeginDateTime" '参数名称,这里用你自己存储过程中的参数名代码
para.Type = adDBTime '指定参数类型
para.Value = "2008-9-25 00:00:00" '指定参数值 Set para = cmd.CreateParameter() '实例化参数
para.Name = "@EndDateTime" '参数名称,这里用你自己存储过程中的参数名代码
para.Type = adDBTime '指定参数类型
para.Value = "2008-9-25 12:00:00" '指定参数值 Set para = cmd.CreateParameter() '实例化参数
para.Name = "@PayTypeID" '参数名称,这里用你自己存储过程中的参数名代码
para.Type = adInteger '指定参数类型
para.Value = 1 '指定参数值
rs.Open "ReportDayTotal_SDYC", Cn, adOpenDynamic, adLockOptimistic
Set rs = cmd.Execute() '执行存储过程,如果不返回记录集的,可以写成 cmd.Execute
Set DataGrid1.DataSource = rs
End Sub错误也是停留在 rs.open 这一行。希望大侠赐教了。谢谢。郁闷了快2天了。
就是,我想从存储过程中查询手机号码为13000000000的这条记录并返回到recordset中。ReportDayTotal_SDYC 是存储过程。问题是:
我需要传递参数到存储过程中,第一种代码如下:
Dim Cn As New ADODB.ConnectionDim cmd As New ADODB.Command
Dim param As New ADODB.Parameter'上面这三行是窗体公共部分Private Sub Command1_Click()
Set cmd.ActiveConnection = CnDim rs As New ADODB.Recordset
rs.CursorLocation = adUseClient
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "ReportDayTotal_SDYC"
cmd.Parameters(1) = "2008-9-25 00:00:00"
cmd.Parameters(2) = "2008-9-25 12:00:00"
cmd.Parameters(3) = 0
cmd.Parameters(5) = "13000000000"
cmd.Executers.Open "ReportDayTotal_SDYC", Cn, adOpenDynamic, adLockOptimistic
Set rs = cmd.ExecuteEnd Sub错误停留在rs.open这一行。错误提示是 没有给begindatetime赋值。但是cmd.Parameters(1)这一个不是给他赋值吗?第二种做法:
Private Sub Command2_Click() Dim cmd As ADODB.Command 'Command对象
Dim para As ADODB.Parameter '参数
Dim rs As New ADODB.Recordset '记录集
rs.CursorLocation = adUseClient
Set cmd = New ADODB.Command '实例化命令对象
Set cmd.ActiveConnection = Cn '指定连接
cmd.CommandText = "存储过程名" '指定要执行的存储过程
cmd.CommandType = adCmdStoredProc '指定命令类型为存储过程 Set para = cmd.CreateParameter() '实例化参数
para.Name = "@BeginDateTime" '参数名称,这里用你自己存储过程中的参数名代码
para.Type = adDBTime '指定参数类型
para.Value = "2008-9-25 00:00:00" '指定参数值 Set para = cmd.CreateParameter() '实例化参数
para.Name = "@EndDateTime" '参数名称,这里用你自己存储过程中的参数名代码
para.Type = adDBTime '指定参数类型
para.Value = "2008-9-25 12:00:00" '指定参数值 Set para = cmd.CreateParameter() '实例化参数
para.Name = "@PayTypeID" '参数名称,这里用你自己存储过程中的参数名代码
para.Type = adInteger '指定参数类型
para.Value = 1 '指定参数值
rs.Open "ReportDayTotal_SDYC", Cn, adOpenDynamic, adLockOptimistic
Set rs = cmd.Execute() '执行存储过程,如果不返回记录集的,可以写成 cmd.Execute
Set DataGrid1.DataSource = rs
End Sub错误也是停留在 rs.open 这一行。希望大侠赐教了。谢谢。郁闷了快2天了。
Dim prm As ADODB.Parameter 'Parameter 对象代表参数或与基于参数化查询或存储过程的Command 对象相关联的参数。
adoconn.ConnectionString = Adodc1.ConnectionString
adoconn.Open
Set adocomm.ActiveConnection = adoconn
adocomm.CommandText = "doc_ProcName"
adocomm.CommandType = adCmdStoredProc
Set prm = adocomm.CreateParameter("parameter1", adTinyInt, adParamInput, , "1")
adocomm.Parameters.Append prm
Set prm = adocomm.CreateParameter("parameter2", adInteger, adParamOutput)
adocomm.Parameters.Append prm
Set mRst = adocomm.Execute
ReturnValue = adocomm.Parameters(0)
ReportDayTotal_SDYC是存储过程名字。
我的目的是:查询手机号码为13000000000 的记录。把记录结果返回到rs中。也就是我可以用rs.fields(X)得到我想要的某一字段。
下面是代码,错误提示后面说
Private Sub Command3_Click()
Dim strS As String '定义一变量
Dim rs As New ADODB.Recordset
Dim adocomm As New ADODB.Command '
Set adocomm.ActiveConnection = Cn
With adocomm
.CommandText = "ReportDayTotal_SDYC"
.CommandType = adCmdStoredProc
.Parameters(1) = "2008-9-25 00:00:00"
.Parameters(2) = "2008-9-25 12:00:00"
.Parameters(3) = 1
.Parameters(5) = "13000000000"
Set rs = .Execute()
'到这里是没有任何错误提示的。 '问题出在这里:
rs.Open "reportdaytotal_sdyc", Cn, adOpenDynamic, adLockOptimistic
MsgBox rs.RecordCount
End With
End Sub 问题出在最后这2行语句,返回到rs之后,我要用rs.fields(X)来调用想要查询的字段,但是提示对象已关闭。于是我就 rs.open 这一句,结果这一句老是出现错误提示:多步oledb操作产生错误。 请问:我如何输出想要的值?需要不需要rs.open语句? 如果看不懂我说的什么,那麻烦写一下按条件查询的语句也可以。多谢了。条件是: 查询手机号码为13000000000 的记录。把记录结果返回到rs中。也就是我可以用rs.fields(X)得到我想要的某一字段。
.CommandText = "ReportDayTotal_SDYC"
.CommandType = adCmdStoredProc
.Parameters(1) = "2008-9-25 00:00:00"
.Parameters(2) = "2008-9-25 12:00:00"
.Parameters(3) = 1
.Parameters(5) = "13000000000"
Set rs = .Execute()
'到这里是没有任何错误提示的。
MsgBox rs.RecordCount
With adocomm
.CommandText = "ReportDayTotal_SDYC"
.CommandType = adCmdStoredProc
.Parameters(1) = "2008-9-25 00:00:00"
.Parameters(2) = "2008-9-25 12:00:00"
.Parameters(3) = 1
.Parameters(5) = "13000000000"
Set rs = .Execute()
'到这里是没有任何错误提示的。
MsgBox rs.RecordCount 如果这样的话,会提示对象已关闭。是指rs关闭状态。
在你的代码后面加msgbox mrst.recordcount 会提示没有找到项目。