ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1185|回复: 9

vba调用存储过程的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-12-13 22:52 来自手机 | 显示全部楼层 |阅读模式
recoreset.open打开执行存储过程
range.copyfromset

存储过程本身无任何问题,在数据库中可以正常执行。过程中有个stuff函数的字段。

但vba里面这字段显示不了,请问如何解决
初步估计应该是某个参数不对








TA的精华主题

TA的得分主题

发表于 2017-12-14 08:31 | 显示全部楼层
不明白你说的是什么,请上传你的代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-14 08:55 | 显示全部楼层
huang1314wei 发表于 2017-12-14 08:31
不明白你说的是什么,请上传你的代码

create PROCEDURE [dbo].[UDF_P_GETUnAuditList]
        @DATE CHAR(8)
AS
BEGIN
     SELECT G.TG001 AS MQ001, Q.MQ002 AS MQ002, G.TG002 AS OrderNum, G.TG003 AS OrderDate, G.CREATOR AS CREATOR,
        G.CREATE_DATE AS CREATE_DATE, G.MODIFIER AS MODIFIER, G.MODI_DATE AS MODI_DATE ,G.TG049 as DeptID,
        (case when NOT exists(select 1 from PURTH where TH001=G.TG001 and TH002=G.TG002) then '空单身' end) as BZ,
         (STUFF((SELECT  DISTINCT ','+RTRIM(TH009)+'('+RTRIM(MC002)+')' FROM PURTH LEFT JOIN CMSMC ON TH009=MC001
        WHERE TH001=G.TG001 AND TH002=G.TG002 FOR XML PATH('')),1,1,'')) AS CK
   FROM dbo.PURTG AS G
   LEFT JOIN dbo.CMSMQ AS Q ON Q.MQ001=G.TG001
WHERE G.TG013='N' AND Q.MQ003='34'
and  (G.TG003<= @DATE OR G.TG003 IS NULL )
end

这个是存储过程,在数据库里面执行是正常的!

VBA里面调用
strcon = "Driver={SQL Server};Server=" & server & ";UID=" & uid & ";PWD=" & pwd & ";DataBase=" & db
    cn.Open strcon
   
    strsql = "exec UDF_P_GETUnAuditList '" & Me.txtEndDate.Text & "'"  '参数可选
     'rs.Open strsql, cn, adOpenDynamic, adLockBatchOptimistic
    'rs.Open strsql, cn, adOpenKeyset, adLockReadOnly
    rs.Open strsql, cn ', adOpenStatic, adLockBatchOptimistic
   
    Range("A5").CopyFromRecordset rs


存储过程的那个STUFF字段的值就是显示不出来,如果不用那个函数,又可以显示

TA的精华主题

TA的得分主题

发表于 2017-12-14 09:22 | 显示全部楼层
happy_109 发表于 2017-12-14 08:55
create PROCEDURE [dbo].
        @DATE CHAR(8)
AS

最好你能把你的sql mdb数据库发上来,方便测试代码,仅看代码我没有看出哪里的问题,另外,调用SQL存储过程,并不一定只有exec这条路,还可以使用以下链接的方法
http://club.excelhome.net/forum. ... id=1080899#lastpost

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-14 09:34 | 显示全部楼层
huang1314wei 发表于 2017-12-14 09:22
最好你能把你的sql mdb数据库发上来,方便测试代码,仅看代码我没有看出哪里的问题,另外,调用SQL存储过 ...

我使用的是SQL SERVER,
我觉得应该是RECORDSET OPEN参数的问题

TA的精华主题

TA的得分主题

发表于 2017-12-14 09:39 | 显示全部楼层
happy_109 发表于 2017-12-14 09:34
我使用的是SQL SERVER,
我觉得应该是RECORDSET OPEN参数的问题

我知道你用的是sql server,我的意思是,你把你的sql server数据库原文件发上来,应该是mdf文件吧,发上来之后我好导入到我电脑上的sql然后测试代码,我才好找到问题所在

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-15 13:25 | 显示全部楼层
huang1314wei 发表于 2017-12-14 09:39
我知道你用的是sql server,我的意思是,你把你的sql server数据库原文件发上来,应该是mdf文件吧,发上 ...

create Table Dept(deptid int,deptname varchar(10))
insert into Dept values('1','测试部')
insert into Dept values('2','采购部')
insert into Dept values('3','系统集成部')
create Table Staffs(userid int,username varchar(10),FK_Deptid int)
insert into  Staffs values('1','张三','1')
insert into  Staffs values('2','张四','1')
insert into  Staffs values('3','张五','2')
insert into  Staffs values('4','张六','3')

select deptid,deptname,
(STUFF((SELECT DISTINCT ';'+username  FROM Staffs WHERE FK_Deptid=Dept.deptid FOR XML PATH('')),1,1,'')) from Dept

这是DEMO的语句,最后那个

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-15 13:25 | 显示全部楼层
huang1314wei 发表于 2017-12-14 09:39
我知道你用的是sql server,我的意思是,你把你的sql server数据库原文件发上来,应该是mdf文件吧,发上 ...

最后那个语句要查询出来能在EXCEL显示出来,通过存储过程

TA的精华主题

TA的得分主题

发表于 2017-12-15 23:31 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-12-16 09:10 来自手机 | 显示全部楼层
liuhoubin168 发表于 2017-12-15 23:31
加个中括号

什么意思,没太明白
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 11:33 , Processed in 0.044147 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表