DataReport 问题,请大家帮忙! 请问如何在数据环境的 command 中使用带参数的存储过程,参数该如何传递,请大家指点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VB中调用带参数存储过程的实现 --- VB做为快速应用开发(RAD)工具越来越得到开发人员的认可和接受。它对许多API(如ODBC API、SOCKET API等等)的封装使得编程变得简单起来。同时,它支持集成开发环境下的可视化、事件驱动、面向对象等编程特点。下面,我们谈谈在VB中调用存储过程的实现方法及其注意事项。 ---- 我们知道,VB的数据库编程有许多种方法,比如直接用ODBC API编程,这种方法灵活、高效,程序员可以实现对数据库复杂的控制;也可以用VB中的数据对象,如RDO(远程数据对象)、DAO(数据访问对象)、ADO(ActiveX 数据对象),这种方法实现起来方便、快捷,但灵活性较差一些。由于存储过程在实现数据封装、隐藏以及代码的预编译、减少网络负载、维护方便等优点,所以被许多RDBMS和编程工具做支持。VB中的各类数据对象也提供对存储过程的支持。 ---- 我们以ADO为例来说明其实现的步骤 ---- 1. 创建、调试存储过程。你可以在数据库中也可以在其他外挂程序的支持下进行存储过程的创建和调试工作。本例中的存储过程代码如下(使用PUBS的MS SQL中的例子库 ): CREATE PROCEDURE myprocedure@job_id smallint,@job_lvl tinyintASSELECT *FROM employeeWHERE job_id < @job_id AND job_lvl > @job_lvl---- 2. 在VB中生成一个新的工程,工程有一窗体,一个COMMAND(NAME:COMMAND1) 按钮,一个 MSFlexGrid(NAME:MSFlexGrid1)控件。 ---- 3. 创建连接ADO connection; ---- 4. 创建命令ADO command; ---- 5. 创建参数并设置各个参数的属性; ---- 6. 执行ADO command; ---- 7. 对数据进行处理;MSFlexGrid显示查询到的数据 ---- 8. 释放连接,退出程序。 ---- 其中代码如下: 在窗体中声明以下变量:Dim cnn1 As ADODB.Connection ‘连接Dim mycommand As ADODB.Command ‘命令Dim parm_jobid As ADODB.Parameter ‘参数1Dim parm_joblvl As ADODB.Parameter ‘参数2Dim rstByQuery As ADODB.Recordset ‘结果集Dim strCnn As String ‘连接字符串在窗体的LOAD事件中加入如下代码:Set cnn1 = New ADODB.Connection ‘生成一个连接strCnn = "DSN=MYDSN;uid=sa;pwd="‘创建的系统数据源MYDSN指向PUBS数据库cnn1.Open strCnn ‘打开连接在窗体的UNLOAD中的加入代码如下:cnn1.Close ‘关闭连接Set cnn1 = Nothing ‘释放连接在按钮中的代码如下: Dim i As integer Dim j as integer Set parm_jobid = New ADODB.ParameterSet mycommand = New ADODB.Command' parm_jobid.Name = "name1" this line can be ommitedparm_jobid.Type = adInteger ‘参数类型parm_jobid.Size = 3 ‘参数长度 parm_jobid.Direction = adParamInput ‘参数方向,输入或输出parm_jobid.value = 100 ‘参数的值mycommand.Parameters.Append parm_jobid ‘加入参数 Set parm_joblvl = New ADODB.Parameter‘parm_joblvl.Name = "name2"parm_joblvl.Type = adIntegerparm_joblvl.Size = 3parm_joblvl.Direction = adParamInputmycommand.value = 100mycommand.Parameters.Append parm_joblvlmycommand.ActiveConnection = cnn1 ‘指定该command 的当前活动连接mycommand.CommandText = " myprocedure " ‘myprocedure 是你要调用的存储过程名称mycommand.CommandType = adCmdStoredProc ‘表明command 为存储过程Set rstByQuery = New ADODB.Recordset Set rstByQuery = mycommand.Execute()i = 0Do While Not rstByQuery.EOFi = i + 1 ‘ i 中保存记录个数rstByQuery.MoveNextLoopMSFlexGrid1.Rows = i + 1 ‘动态设置MSFlexGrid的行和列MSFlexGrid1.Cols = rstByQuery.Fields.Count + 1MSFlexGrid1.Row = 0For i = 0 To rstByQuery.Fields.Count - 1MSFlexGrid1.Col = i + 1MSFlexGrid1.Text = rstByQuery.Fields.Item(i).NameNext ‘设置第一行的标题,用域名填充i = 0Set rstByQuery = mycommand.Execute()Do While Not rstByQuery.EOF i = i + 1 MSFlexGrid1.Row = i ‘确定行 For j = 0 To rstByQuery.Fields.Count - 1 MSFlexGrid1.Col = j + 1 MSFlexGrid1.Text = rstByQuery (j) ‘添充所有的列 NextrstByQuery.MoveNext Loop ‘这个循环用来填充MSFlexGrid的内容---- 特殊说明 ---- 1. Set recordset = command.Execute( RecordsAffected, Parameters, Options ) command.Execute RecordsAffected, Parameters, Options 这是command的两种用法,一种有返回结果集,一种没有返回结果集。 ---- RecordsAffected:是指用update、delete操作时所影响的结果,对select的查询,其值为-1;这和在Ms sql server 中的Query Analyzer中的不一样。Query Analyzer中,select、update、delete的结果显示的是实际查、改、删的记录数。 ---- Options:指明command的类型,有adCmdText、adCmdTable、adCmdStoredProc等等,用户可见MSDN。 ---- 2.在参数的类型中,用户可以用varchar来代替integer,系统会帮你自动实施转化; ---- 3.本例中仅为带输入参数的存储过程,如果要有输出参数,根据MSDN的材料,用ADO不行。你可以用RDO数据对象,MSDN中有一个例子,此处不做过多赘述; ---- 4.可以不用ADO COMMAND对象,也可直接调用ADO CONNECTION的execute方法,结果很类似。 (文/张永晓) 谢谢rainstormmaster(rainstormmaster)的热心帮助,可我想在数据报表中操作带参数的存储过程,该参数在数据环境的command下有一设置 propertys/parameters/value ,我想动态改变该value 值以显示不同的报表,此参数该如何传递呀,请大家帮我! 嘿嘿,病好了,散分喽。。。。。。。。。。。。。。。。。 初学者的大难题,希望大师们帮我想哈。谢谢! 打印机设置 在EXCEL中怎么实现链接表功能 请问大家有免费的VB代码检测工具软件? 时间比较:这么写有什么 不对啊 QQ的网络工作原理是怎么样的?所有的消息都要经过服务器吗? api程序响应键盘上下光标,如同word一样 关于VB操作EXCEL vb数组 C/S模式中,程序在客户机不能访问服务器端SQL数据库求救!!! 用记录集对象(Recordset)打开Oracle数据库中的数据,出错!急!在线等待。
@job_id smallint,
@job_lvl tinyint
AS
SELECT *
FROM employee
WHERE job_id < @job_id
AND job_lvl > @job_lvl
---- 2. 在VB中生成一个新的工程,工程有一窗体,一个COMMAND(NAME:COMMAND1) 按钮,一个 MSFlexGrid(NAME:MSFlexGrid1)控件。 ---- 3. 创建连接ADO connection; ---- 4. 创建命令ADO command; ---- 5. 创建参数并设置各个参数的属性; ---- 6. 执行ADO command; ---- 7. 对数据进行处理;MSFlexGrid显示查询到的数据 ---- 8. 释放连接,退出程序。 ---- 其中代码如下: 在窗体中声明以下变量:
Dim cnn1 As ADODB.Connection ‘连接
Dim mycommand As ADODB.Command ‘命令
Dim parm_jobid As ADODB.Parameter ‘参数1
Dim parm_joblvl As ADODB.Parameter ‘参数2
Dim rstByQuery As ADODB.Recordset ‘结果集
Dim strCnn As String ‘连接字符串在窗体的LOAD事件中加入如下代码:
Set cnn1 = New ADODB.Connection
‘生成一个连接
strCnn = "DSN=MYDSN;uid=sa;pwd="
‘创建的系统数据源MYDSN指向PUBS数据库
cnn1.Open strCnn ‘打开连接
在窗体的UNLOAD中的加入代码如下:
cnn1.Close ‘关闭连接
Set cnn1 = Nothing ‘释放连接在按钮中的代码如下:
Dim i As integer
Dim j as integer
Set parm_jobid = New ADODB.Parameter
Set mycommand = New ADODB.Command
' parm_jobid.Name = "name1"
this line can be ommited
parm_jobid.Type = adInteger ‘参数类型
parm_jobid.Size = 3 ‘参数长度
parm_jobid.Direction = adParamInput
‘参数方向,输入或输出
parm_jobid.value = 100 ‘参数的值
mycommand.Parameters.Append
parm_jobid ‘加入参数
Set parm_joblvl = New ADODB.Parameter
‘parm_joblvl.Name = "name2"
parm_joblvl.Type = adInteger
parm_joblvl.Size = 3
parm_joblvl.Direction = adParamInput
mycommand.value = 100
mycommand.Parameters.Append parm_joblvl
mycommand.ActiveConnection = cnn1
‘指定该command 的当前活动连接
mycommand.CommandText = " myprocedure "
‘myprocedure 是你要调用的存储过程名称
mycommand.CommandType = adCmdStoredProc
‘表明command 为存储过程
Set rstByQuery = New ADODB.Recordset
Set rstByQuery = mycommand.Execute()
i = 0
Do While Not rstByQuery.EOF
i = i + 1 ‘ i 中保存记录个数
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows = i + 1
‘动态设置MSFlexGrid的行和列
MSFlexGrid1.Cols = rstByQuery.Fields.Count + 1
MSFlexGrid1.Row = 0
For i = 0 To rstByQuery.Fields.Count - 1
MSFlexGrid1.Col = i + 1
MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name
Next ‘设置第一行的标题,用域名填充i = 0
Set rstByQuery = mycommand.Execute()
Do While Not rstByQuery.EOF
i = i + 1
MSFlexGrid1.Row = i ‘确定行
For j = 0 To rstByQuery.Fields.Count - 1
MSFlexGrid1.Col = j + 1
MSFlexGrid1.Text = rstByQuery (j)
‘添充所有的列
Next
rstByQuery.MoveNext Loop ‘这个循环用来填充MSFlexGrid的内容---- 特殊说明 ---- 1. Set recordset = command.Execute( RecordsAffected, Parameters, Options ) command.Execute RecordsAffected, Parameters, Options 这是command的两种用法,一种有返回结果集,一种没有返回结果集。 ---- RecordsAffected:是指用update、delete操作时所影响的结果,对select的查询,其值为-1;这和在Ms sql server 中的Query Analyzer中的不一样。Query Analyzer中,select、update、delete的结果显示的是实际查、改、删的记录数。 ---- Options:指明command的类型,有adCmdText、adCmdTable、adCmdStoredProc等等,用户可见MSDN。 ---- 2.在参数的类型中,用户可以用varchar来代替integer,系统会帮你自动实施转化; ---- 3.本例中仅为带输入参数的存储过程,如果要有输出参数,根据MSDN的材料,用ADO不行。你可以用RDO数据对象,MSDN中有一个例子,此处不做过多赘述; ---- 4.可以不用ADO COMMAND对象,也可直接调用ADO CONNECTION的execute方法,结果很类似。 (文/张永晓)