ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA调用带输入输出参数的SQL SERVER存储过程

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-12 09:16 | 显示全部楼层 |阅读模式
本帖最后由 向東 于 2018-8-13 10:16 编辑

SQL内置函数 字符串左右空格 掐头去尾

语法
返回删除了前/后导空格之后的字符表达式。
LTRIM ( character_expression )  --掐头
RTRIM ( character_expression )  --去尾

参数
character_expression
字符数据或二进制数据的表达式。character_expression 可以是常量、变量或列。character_expression 必须属于某个可隐式转换为 varchar 的数据类型(textntext image 除外)。否则,请使用 CAST 显式转换 character_expression

返回类型
varchar nvarchar

测试
  1. DECLARE @string_to_trim varchar(60)
  2. SET @string_to_trim = '  12 34     '
  3. SELECT '头' + RTRIM(LTRIM(@string_to_trim)) + '尾'
  4. GO
复制代码

Microsoft SQL Server Management Studio 中,新建查询,复制粘贴上面的代码,执行,就可以看见效果了!

版主说不能发SQL的内容在本版,我就加上VBA!
----------------------------------------------------------------------------------------------
下面言归正传:
Microsoft SQL Server Management Studio 中,选择一个测试数据库,然后新建查询,复制粘贴下面的代码,执行,就可以创建一个测试用的存储过程了。
  1. IF OBJECT_ID (N'PROC_TEST', N'P') IS NOT NULL
  2.     DROP procedure PROC_TEST;
  3. GO  --检测有没有这个存储过程,有就删除掉

  4. CREATE procedure PROC_TEST
  5.         @string_to_trim varchar(64), --输入参数
  6.         @output_string varchar(64) OUTPUT  --输入输出参数
  7. AS
  8. SET @output_string  = '头' + RTRIM(LTRIM(@string_to_trim)) + '尾' --就是前面说的掐头去尾大法!
  9. GO
复制代码
建好了测试用存储过程,下面就来看看VBA如何调用这个存储过程了:
创建下面的测试代码,估计大家都是轻车熟路了
  1. Private Sub CommandButton1_Click()
  2.     Dim lcConnectionString, lcCommandText As String
  3.     Dim loADODBConnection As New ADODB.Connection '注意引用,在VBE中菜单栏选择【工具】-【引用】,找到:Microsoft ActiveX Data Objects 2.8 Library (或更新版本) 打钩。
  4.     Dim loADODBCommand As New ADODB.Command
  5.     Dim inputStr As String
  6.    
  7.     inputStr = "  12 34    " '存储过程 的 输入字符串
  8. '-------------------------------------------------------------------------连接字符串
  9.     lcConnectionString = "Provider=SQLOLEDB;Data Source=数据服务器名;Initial Catalog=数据库名;User Id=sa;Password=密码;" '使用OLEDB数据提供程序 方式。数据服务器名,数据库名,密码 根据实际情况填入

  10.     loADODBConnection.Open lcConnectionString
  11. '-------------------------------------------------------------------------设置 ADODB.Command
  12.     With loADODBCommand
  13.         .ActiveConnection = loADODBConnection
  14.         .CommandText = "PROC_TEST" '存储过程名
  15.         .CommandType = adCmdStoredProc '设定 CommandText 为 储过程名
  16.         .Parameters.Append .CreateParameter("@str", adVarChar, adParamInput, 64, inputStr) '添加参数,此处为输入参数
  17.         .Parameters.Append .CreateParameter("@outstr", adVarChar, adParamOutput, 64) '添加参数,此处为输出参数
  18.         .Execute '执行 CommandText
  19.         MsgBox .Parameters("@outstr") '调用输出参数
  20.     End With
  21.                                 
  22. '--------------------------------------------------------------------------关闭连接
  23.     loADODBConnection.Close
  24.     Set loADODBConnection = Nothing
  25.     Set loADODBCommand = Nothing
  26.    
  27. End Sub
复制代码
代码都有解释,更多ADO内容参见:ADO参考手册:http://www.w3school.com.cn/ado/ado_reference.asp

顺带说一下:发现一个问题,我用 Google Chrome 版本 68.0.3440.106(正式版本) (64 位)浏览器复制代码,出来后会有乱码。
捕获.JPG
用 Firefox 61.0.2 (64 位) 或者 IE 11、Microsoft Edge 都没问题。

TA的精华主题

TA的得分主题

发表于 2018-8-12 10:05 | 显示全部楼层
本版块不要发与VBA无关的贴子

TA的精华主题

TA的得分主题

发表于 2018-8-12 10:16 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-12 16:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
huang1314wei 发表于 2018-8-12 10:05
本版块不要发与VBA无关的贴子

我改了,分享给大家。

TA的精华主题

TA的得分主题

发表于 2018-8-12 20:09 来自手机 | 显示全部楼层
Excel 也有数据库的操作,我认为班主说的欠妥当

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-12 20:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mythqiu 发表于 2018-8-12 20:09
Excel 也有数据库的操作,我认为班主说的欠妥当

VBA通过ADO调用SQL的存储过程算是VBA的进阶内容,这牵扯到ADO的知识和数据库的知识,特别是存储过程,也是SQL编程的内容。

TA的精华主题

TA的得分主题

发表于 2018-8-12 20:49 来自手机 | 显示全部楼层
向東 发表于 2018-8-12 20:12
VBA通过ADO调用SQL的存储过程算是VBA的进阶内容,这牵扯到ADO的知识和数据库的知识,特别是存储过程,也 ...

数据库的操作确实数组属于进阶了。题外话,论坛有些人把excel当数据库用了,其实是错误的用法。Excel个人认为更多是“展示”数据用的,顺便处理一下数据。数据库才是存储数据的,可以通过表格,网页,或者其他手段取得数据展示出来。一旦数据存储于数据库中,几乎所以的编程语言都可以获取自己需要的数据。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-13 10:18 | 显示全部楼层
mythqiu 发表于 2018-8-12 20:49
数据库的操作确实数组属于进阶了。题外话,论坛有些人把excel当数据库用了,其实是错误的用法。Excel个人 ...

EXCEL VBA的优势就在其输入输出上

TA的精华主题

TA的得分主题

发表于 2018-8-14 11:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
向東 发表于 2018-8-13 10:18
EXCEL VBA的优势就在其输入输出上

可以关注下我做的插件【Excel催化剂】,我已经把Excel与Sqlserver的交互方式做了实现,可满足绝大部分的使用场景,无需再苦苦地写VBA代码了

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-14 13:40 | 显示全部楼层
minren118 发表于 2018-8-14 11:56
可以关注下我做的插件【Excel催化剂】,我已经把Excel与Sqlserver的交互方式做了实现,可满足绝大部分的 ...

我这是分享【 VBA调用带输入输出参数的SQL SERVER存储过程 】原理的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 16:29 , Processed in 0.070732 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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