vb调用存储过程:VB中调用带参数存储过程的实现



vb做为快速应用开发(rad)工具越来越得到开发人员认可和接受它对许多api(如odbc api、 api等等)封装使得编程变得简单起来同时它支持集成开发环境下可视化、事件驱动、面向对象等编程特点下面我们谈谈在vb中存储过程实现思路方法及其注意事项 ---- 我们知道vb数据库编程有许多种思路方法比如直接用odbc api编程这种思路方法灵活、高效员可以实现对数据库复杂控制;也可以用vb中数据对象如rdo(远程数据对象)、dao(数据访问对象)、ado(activex 数据对象)这种思路方法实现起来方便、快捷但灵活性较差由于存储过程在实现数据封装、隐藏以及代码预编译、减少网络负载、维护方便等优点所以被许多rdbms和编程工具做支持vb中各类数据对象也提供对存储过程支持 ---- 我们以ado为例来介绍说明其实现步骤 ---- 1. 创建、调试存储过程你可以在数据库中也可以在其他外挂支持下进行存储过程创建和调试工作本例中存储过程代码如下(使用pubsms sql中例子库 ): create procedure myprocedure
@job_id small,
@job_lvl tiny
as
select *
from employee
where job_id < @job_id
and job_lvl > @job_lvl


---- 2. 在vb中生成个新工程工程有窗体个command(name:command1) 按钮个 msflexgrid(name:msflexgrid1)Control控件 ---- 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.record ‘结果集
dim strcnn as ‘连接

在窗体load事件中加入如下代码:
cnn1 = adodb.connection
‘生成个连接
strcnn = \"dsn=mydsn;uid=sa;pwd=\"
‘创建系统数据源mydsn指向pubs数据库
cnn1.open strcnn ‘打开连接
在窗体unload中加入代码如下:
cnn1.close ‘关闭连接
cnn1 = nothing ‘释放连接

在按钮中代码如下:
dim i as eger
dim j as eger
parm_jobid = adodb.parameter
mycommand = adodb.command
\' parm_jobid.name = \"name1\"
this line can be ommited
parm_jobid.type = adeger ‘参数类型
parm_jobid.size = 3 ‘参数长度
parm_jobid.direction = adparaminput
‘参数方向输入或输出
parm_jobid.value = 100 ‘参数
mycommand.parameters.append
parm_jobid ‘加入参数


parm_joblvl = adodb.parameter
‘parm_joblvl.name = \"name2\"
parm_joblvl.type = adeger
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 为存储过程
rstbyquery = adodb.record
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
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. record = 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来代替eger,系统会帮你自动实施转化; ---- 3.本例中仅为带输入参数存储过程如果要有输出参数根据msdn材料用ado不行你可以用rdo数据对象msdn中有个例子此处不做过多赘述; ---- 4.可以不用ado command对象也可直接ado connectionexecute思路方法,结果很类似

Tags:  vb调用函数 vb调用excel vb调用dll vb调用存储过程

延伸阅读

最新评论

发表评论