| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1663 人关注过本帖
标题:新问题,关于VB中使用通配符传参给存储过程
只看楼主 加入收藏
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
回复 10楼 lowxiong
我之前也改了一下,也无任何提示错误,DataGrid1字段标题也变成了英文,但是为什么不能显示查询的结果
就像这几个测试的语句,首先将各参数初始化为通配符%,如果查询时选择了combo里面的内容,则查找相应的结果
exec query_friends '%','男','%','%'
exec query_friends '%','%','同事','%'
exec query_friends '%','男','朋友','%'
exec query_friends '%','%','%','%'

我的目的就是将相应的查询结果显示在DataGrid1中
修改后的程序已经上传DEMO4
DEMO4.rar (1.21 MB)

学习是个过程,贵在坚持
2013-08-22 09:10
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
我用cmd的模式访问也不成功,等我慢慢找原因。
还是用sql模式访问存储过程吧,这个方式调试成功,代码如下:(全部覆盖Command1_Click即可)
Private Sub Command1_Click()
Dim sql As String
Set rs5 = New ADODB.Recordset
conn.CursorLocation = adUseClient
sql = "query_friends"
sql = sql & "'%" & Trim(Combo1.Text) & "%',"
sql = sql & "'%" & Trim(Combo2.Text) & "%',"      '构造
sql = sql & "'%" & Trim(Combo3.Text) & "%',"
sql = sql & "'%" & Trim(Combo4.Text) & "%'"
Set rs5 = conn.Execute(sql)
Set DataGrid1.DataSource = rs5
End Sub
2013-08-22 10:19
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:18 
已找到原因,不需要单引号。
估计是存储过程里已经标注参数类型,因此在传递参数时就不需要单引号区别参数类型了,代码修改如下:
Private Sub Command1_Click()
Dim cmd As New Command
Set rs5 = New ADODB.Recordset
cmd.ActiveConnection = conn
conn.CursorLocation = adUseClient
= adCmdStoredProc
= "query_friends"
cmd.Parameters("@qcname") = "%" & Trim(Combo1.Text) & "%"
cmd.Parameters("@qcsex") = "男"                  '男为默认性别
If Trim(Combo2.Text) <> "" Then cmd.Parameters("@qcsex") = Trim(Combo2.Text)    '构造
cmd.Parameters("@qcrela") = "%" & Trim(Combo3.Text) & "%"
cmd.Parameters("@qcposs") = "%" & Trim(Combo4.Text) & "%"
Set rs5 = cmd.Execute
Set DataGrid1.DataSource = rs5
Set cmd = Nothing
Set rs5 = Nothing
End Sub

2013-08-22 11:13
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
回复 13楼 lowxiong
大师果然奏效,不过还是有点瑕疵,就是默认了性别是男,我改了一下,正好符合我的要求,已经没有问题
Private Sub Command1_Click()
Dim cmd As New Command
Set rs5 = New ADODB.Recordset
cmd.ActiveConnection = conn
conn.CursorLocation = adUseClient
= adCmdStoredProc
= "query_friends"
cmd.Parameters("@qcname") = "%" & Trim(Combo1.Text) & "%"
cmd.Parameters("@qcsex") = "%"
If Trim(Combo2.Text) <> "" Then cmd.Parameters("@qcsex") = Trim(Combo2.Text)
cmd.Parameters("@qcrela") = "%" & Trim(Combo3.Text) & "%"
cmd.Parameters("@qcposs") = "%" & Trim(Combo4.Text) & "%"
Set rs5 = cmd.Execute
Set DataGrid1.DataSource = rs5
Set cmd = Nothing
Set rs5 = Nothing
End Sub



我在form_load里加了combo的第一个值都为空,这样如果不选任何一个combo,查询的就是全部结果


感谢您耐心的解答,严重感谢了!!!

学习是个过程,贵在坚持
2013-08-22 12:35
快速回复:新问题,关于VB中使用通配符传参给存储过程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049184 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved