Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1899|回复: 0

VBA调用sql server存储过程得不到正确的返回结果

[复制链接]
发表于 2018-8-9 22:21 | 显示全部楼层 |阅读模式
  1. Sub 多参数的存储过程()


  2.     Dim i As Long

  3.     If conn Is Nothing Then Connect '一个连接数据库的过程
  4.     If conn.State = 0 Then conn.Open

  5. '    在SQL Server Management Studio中执行以下存储过程正常,能返回很多记录
  6. '    execute dbo.proc_jggz       @as_odr_no      = :as_odr_no,
  7. '                                @as_pur_no      = :as_pur_no,
  8. '                                @as_date_start = :as_date_start,
  9. '                                @as_date_end    = :as_date_end,
  10. '                                @as_vendermid   = :as_vendermid,
  11. '                                @as_style       = :as_style,
  12. '                                @as_contract_no = :as_contract_no,
  13. '                                @as_matno       = :as_matno,
  14. '                                @as_matsx       = :as_matsx,
  15. '                                @unit           = :as_unit,
  16. '                                @ls_baozhuang   = :ls_baozhuang



  17.     cmd.commandText = "proc_jggz" '存储过程的名称
  18.     cmd.ActiveConnection = conn
  19.     cmd.CommandType = adCmdStoredProc
  20.     'cmd.Prepared = True

  21.     cmd.Parameters.Append cmd.CreateParameter("as_odr_no", adVarWChar, adParamInput, 16, "")
  22.     cmd.Parameters.Append cmd.CreateParameter("as_pur_no", adVarWChar, adParamInput, 256, "")
  23.     cmd.Parameters.Append cmd.CreateParameter("as_date_start", adVarWChar, adParamInput, 10, "2018-08-01")
  24.     cmd.Parameters.Append cmd.CreateParameter("as_date_end", adVarWChar, adParamInput, 10, "2018-08-08")
  25.     cmd.Parameters.Append cmd.CreateParameter("as_vendermid", adVarWChar, adParamInput, 8, "")
  26.     cmd.Parameters.Append cmd.CreateParameter("as_style", adVarWChar, adParamInput, 16, "")
  27.     cmd.Parameters.Append cmd.CreateParameter("as_contract_no", adVarWChar, adParamInput, 64, "")
  28.     cmd.Parameters.Append cmd.CreateParameter("as_matno", adWChar, adParamInput, 26, "")
  29.     cmd.Parameters.Append cmd.CreateParameter("as_matsx", adVarWChar, adParamInput, 1, "")
  30.     cmd.Parameters.Append cmd.CreateParameter("unit", adVarWChar, adParamInput, 8, "")
  31.     cmd.Parameters.Append cmd.CreateParameter("ls_baozhuang", adVarWChar, adParamInput, 8, "")
  32.     cmd.Execute
  33.     rst.Open cmd, , adOpenStatic, adLockBatchOptimistic
  34.     Sheet1.Cells.Clear
  35.     If Not rst.EOF Then
  36.         For i = 0 To rst.Fields.Count - 1
  37.             Sheet1.Cells(1, i + 1).Value = rst.Fields(i).Name
  38.         Next
  39.         Sheet1.Cells(2, 1).CopyFromRecordset rst
  40.     End If
  41.     rst.Close
  42.     conn.Close

  43.     Set rst = Nothing
  44.     Set cmd = Nothing
  45.     Set conn = Nothing

  46. End Sub

  47. 存储过程【proc_jggz】有一句动态sql
  48. set  @sSQL = N'insert  into #tab_jgmx (Pur_no, Sub_no, Pur_date, Pur_kind,Pur_lb,VendermId, Sg_no, Odr_no, Matno,Unit,Qty,Dj_mk,
  49.                                                                                                  Price, Pur_hb, Sjmoney,Note,deptno, Hqty,tqty,  dqty,  fact, jlzz, use_qty,contract_no,
  50.                                                                                                  dg_kind, bl_kind,style ,price_no,dgname,ciq_kind ,zafei,IsMY,Qty_ZP,Qty_BL,Qty_ZS,IsZpYb,chargemode
  51.                                                                                                  ,Offset_YN,Offset_HgYsNo,PrintNum,PrintedBy,PrintedON)
  52.                                                   SELECT Pur_no, Sub_no, Pur_date, Pur_kind,Pur_lb,VendermId, Sg_no, Odr_no, Matno,Unit,Qty,Dj_mk,
  53.                                                                  Price, Pur_hb, Sjmoney,Note,deptno, Hqty,tqty,  dqty,  fact, jlzz, use_qty,contract_no,
  54.                                                                  dg_kind, bl_kind,style ,price_no  ,dgname,ciq_kind,zafei,IsMY,Qty_ZP,Qty_BL,Qty_ZS,IsZpYb,chargemode
  55.                                                                  ,Offset_YN,Offset_HgYsNo,PrintNum,PrintedBy,PrintedON
  56.                                                         from purd  with (nolock)
  57.                                                         where  qty > 0
  58. exec (@sSQL + @sWhere)  '如果这句执行的话,vba中就得不到返回数据

  59. 如果直接运行以下形式的sql,则vba中就能得返回数据
  60. insert  into #tab_jgmx (XXXX)
  61.         Select ... From XXX Where ......
  62.                
复制代码


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 03:04 , Processed in 0.282802 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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