ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 在VBA里SQL登录可以定义为函数吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-26 10:44 | 显示全部楼层 |阅读模式
在论坛里学习的时候发现太多次重复调用连接SQL 所以求教下 vba连接SQL可以定义为函数模块吗 需要的时候就调用
Dim cn As Object    '定义数据链接对象 ,保存连接数据库信息
Set cn = CreateObject("ADODB.Connection")  '创建数据链接对象
Dim strCn As String '字符串变量
ser = Sheet1.Range("B1").Value  '定义服务器的名称
yhm = Sheet1.Range("B2").Value '定义服务器用户名
  mm = Sheet1.Range("B3").Value '定义服务器的登录密码
  da = Sheet1.Range("B4").Value '定义服务器的数据库
strCn = "Provider=sqloledb;" _
         & "Server=" & ser & ";" _
         & "Database=" & da & ";" _
         & "Uid=" & yhm & ";" _
         & "Pwd=" & mm & ";"   '定义数据库链接字符串

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-3 23:59 | 显示全部楼层
我自己挖的坑 我自己填吧 希望碰到类似的朋友 少点折腾
先定义个函数
例如
  1. Public Function SQLConnect(strServer As String, strDatabase As String, _
  2.     strUid As String, strPwd As String) As Boolean
  3.     'strServer 服务器名称
  4.     'strDatabase 数据库 库名
  5.     'strUid SQL访问用户名
  6.     'strPwd SQL访问密码
  7.     Set cn = CreateObject("ADODB.Connection")  '创建数据链接对象
  8.     strCn = "Provider=sqloledb;Server=" & strServer & ";Database=" & _
  9.         strDatabase & ";Uid=" & strUid & ";Pwd=" & strPwd & ";"    '定义数据库链接字符串
  10.         cn.Open strCn
  11.     End Function
复制代码

然后再引用
  1. Sub 连接SQL()
  2. SQLConnect Sheet1.Range("B1").Value, _
  3.            Sheet1.Range("B4").Value, _
  4.            Sheet1.Range("B2").Value, _
  5.            Sheet1.Range("B3").Value  '连接数据库
  6. 'Sever =服务器名称;Database =数据库名称,Uid =sa ; Pwd = 以sa身份登录数据库的密码
  7. On Error GoTo aa
  8. If cn <> "" Then
  9. MsgBox "数据库连接成功", vbInformation, "SQL"
  10. cn.Close
  11. Exit Sub
  12. End If
  13. aa: MsgBox "数据库连接失败", vbInformation, "SQL"
  14. End Sub
复制代码


SQLConnect这个就是第一段引用的 避免那么多段代码了

TA的精华主题

TA的得分主题

发表于 2018-8-4 15:08 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-4 18:31 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-6 18:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
opiona 发表于 2018-8-4 18:31
查添改删 都可,参考70楼:http://club.excelhome.net/thread-859194-1-1.html

先感谢 受教了 因为是新手难免会有很多疑问 习惯搜索,搜索不到答案 再发帖问的。 看了推荐帖子自定义函数研究中

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 22:40 | 显示全部楼层
本帖最后由 killer05 于 2018-8-17 09:02 编辑
  1. Public cn  As New ADODB.Connection
  2. Public rs, StrSQL, strCn, mydata As String
  3. Public Function Sql_Connet(ByVal strServerName As String, ByVal strDatabaseName As String, ByVal strUid As String, ByVal strPwd As String) As Boolean
  4. On Error GoTo Err_Set
  5. cn = "Driver={SQL Server};Server=" & strServerName & ";Database=" & strDatabaseName & ";Uid=" & strUid & ";Pwd=" & strPwd
  6. cn.ConnectionTimeout = 5
  7. cn.Open
  8. Exit Function
  9. Err_Set:
  10. [h5] = Err.Number
  11. [h6] = Err.Description
  12. MsgBox Err.Description
  13. Err.Clear
  14. End Function
复制代码

用自定义函数 这个代码又变短了如下代码忘记注释了 B1表格是服务器 B4是数据库 B2是服务器用户,B3是服务器登录密码放在表格sheet5
要引用ADO2.8要不然自定义函数找不到对象

引用ADO

引用ADO

要是给别人用别人不知道引用ADO那就在自定义函数里添加下列语句
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.recordset")

  1. Sub 连接SQL()
  2. With Sheet5
  3. Call Sql_Connet(.[B1], .[B4], .[B2], .[B3])
  4. End With
  5. cn.Close
  6. Set rs = Nothing
  7. Set cn = Nothing
  8. End Sub
复制代码
除去三行释放的代码 引用的是别人代码 借花献佛了


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 08:02 , Processed in 0.021938 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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