ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA调用sql server存储过程失败

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-9 09:39 | 显示全部楼层 |阅读模式
本帖最后由 superlsf 于 2018-8-9 11:51 编辑

sql server中一个存储过程本身运行正常,但在VBA中调用时,运行过程本身没报错,但没正常结果返回

  1. Sub 多参数的存储过程()

  2.     Dim strSQL As String
  3.     Dim i As Long

  4.     If conn Is Nothing Then Connect
  5.     If conn.State = 0 Then conn.Open
  6.    
  7. '    execute dbo.proc_jggz       @as_odr_no      = :as_odr_no,
  8. '                                @as_pur_no      = :as_pur_no,
  9. '                                @as_date_start = :as_date_start,
  10. '                                @as_date_end    = :as_date_end,
  11. '                                @as_vendermid   = :as_vendermid,
  12. '                                @as_style       = :as_style,
  13. '                                @as_contract_no = :as_contract_no,
  14. '                                @as_matno       = :as_matno,
  15. '                                @as_matsx       = :as_matsx,
  16. '                                @unit           = :as_unit,
  17. '                                @ls_baozhuang   = :ls_baozhuang


  18.     cmd.ActiveConnection = conn
  19.     cmd.CommandType = adCmdStoredProc
  20.     'cmd.Prepared = True

  21.     cmd.commandText = "proc_jggz  " '存储过程的名称
  22.     cmd.Parameters.Append cmd.CreateParameter("as_odr_no", adVarWChar, adParamInput, 16, "")
  23.     cmd.Parameters.Append cmd.CreateParameter("as_pur_no", adVarWChar, adParamInput, 256, "")
  24.     cmd.Parameters.Append cmd.CreateParameter("as_date_start", adVarWChar, adParamInput, 10, "2018-08-01")
  25.     cmd.Parameters.Append cmd.CreateParameter("as_date_end", adVarWChar, adParamInput, 10, "2018-08-08")
  26.     cmd.Parameters.Append cmd.CreateParameter("as_vendermid", adVarWChar, adParamInput, 8, "")
  27.     cmd.Parameters.Append cmd.CreateParameter("as_style", adVarWChar, adParamInput, 16, "")
  28.     cmd.Parameters.Append cmd.CreateParameter("as_contract_no", adVarWChar, adParamInput, 64, "")
  29.     cmd.Parameters.Append cmd.CreateParameter("as_matno", adWChar, adParamInput, 26, "")
  30.     cmd.Parameters.Append cmd.CreateParameter("as_matsx", adVarWChar, adParamInput, 1, "")
  31.     cmd.Parameters.Append cmd.CreateParameter("unit", adVarWChar, adParamInput, 8, "")
  32.     cmd.Parameters.Append cmd.CreateParameter("ls_baozhuang", adVarWChar, adParamInput, 8, "")
  33.    
  34. '    cmd.Parameters.Refresh
  35. '    For i = 0 To cmd.Parameters.Count - 1
  36. '        Debug.Print cmd.Parameters(i).Name, cmd.Parameters(i).Type, cmd.Parameters(i).Direction
  37. '    Next
  38. '    ActiveSheet.Range("A1").CopyFromRecordset cmd.Execute

  39.     cmd.Execute
  40.    
  41.     '语法 recordset.Open Source, ActiveConnection, CursorType, LockType, Options
  42.     rst.Open cmd, , adOpenStatic, adLockBatchOptimistic ', adCmdStoredProc
  43.     Sheet1.Cells.Clear
  44.     If Not rst.EOF Then
  45.         For i = 0 To rst.Fields.Count - 1
  46.             Sheet1.Cells(1, i + 1).Value = rst.Fields(i).Name
  47.         Next
  48.         Sheet1.Cells(2, 1).CopyFromRecordset rst
  49.     End If
  50.     rst.Close
  51.     conn.Close
  52. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-9 11:25 | 显示全部楼层
本帖最后由 superlsf 于 2018-8-9 17:09 编辑

proc_jggz这个存储过程里面最后一句是:select * from 临时表
主要问题好像在这二句
cmd.Execute
rst.Open cmd, , adOpenStatic, adLockBatchOptimistic
没产生任何数据


目前发现采用相同调用方法,调用无参数存储过程、4个参数的存储过程均正常,会不会与proc_jggz这个存储过程有关呢?

proc_jggz里面有除了有动态执行sql语句外,无其它特别之处

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-10 09:25 | 显示全部楼层
1、重写一个有动态sql的存储过程(代码简短,传入一个参数),vba调用正常。
2、受1启发,把原存储过程的复制一份另存一个再调用,无法返回结果
3、在2基础上,把传入参数减少到4个,调用正常
4、在3基础上,重新将传入参数全恢复,调用正常。此时二个存储过程除了名称,其它代码都一样,返回结果却不一样。真正原因还是不知道
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 21:48 , Processed in 0.020478 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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