ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VB实现SQL数据库记录的查询,新增,删除,修改,保存

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-29 09:18 | 显示全部楼层 |阅读模式
求高手写个简单的例子,谢谢!

TA的精华主题

TA的得分主题

发表于 2014-11-29 10:54 | 显示全部楼层
。。,。。。。

收集.zip

56.75 KB, 下载次数: 923

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-29 11:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QQ214189912 发表于 2014-11-29 10:54
。。,。。。。

系统错误&H8004011(-2147221231). classfactory 无法供应请求的类别                          内存溢出  


提示错误啊 大侠!

TA的精华主题

TA的得分主题

发表于 2014-11-29 18:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 opiona 于 2014-11-29 19:36 编辑
  1. Sub opiona()
  2. Rem Excel链接本地数据库SQL Server
  3.     'Data Source=服务器名称
  4.     'Initial Catalog=数据库名称
  5.     'Uid=SA 用户名
  6.     'PWD=1002 '/密码
  7.     Str_coon = "Provider=SQLOLEDB.1;Data Source=FANGWEI;Initial Catalog=CPECC_Temp;Uid=SA;PWD=1002;Persist Security Info=false"
  8.     StrSQL = "SELECT * FROM 用户信息表格"
  9.     ARR = GET_SQLCoon(StrSQL, Str_coon, True)
  10.     Sheet1.Range("A1").Resize(UBound(ARR, 1) + 1, UBound(ARR, 2) + 1) = ARR
  11.    
  12. End Sub



  13. 'CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ThisWorkbook.FullName    '//连接Excel2007
  14. 'CN.Open "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=yes';data source=" & ThisWorkbook.FullName      '//OFFICE2003
  15. 'CN.Open "provider=Microsoft.JET.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\Info.mdb"
  16. 'CN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\DB.mdb;Jet OLEDB:Database Password=52330067"                                                                 '//连接Access
  17. 'CN.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\数据库名.accdb;Jet OLEDB:Database Password=52330067"                                               '//连接Access2007-2010
  18. 'CN.Open "Provider=SQLOLEDB;Server=192.168.0.2;Database=元器件信息查询;Uid=sa;Pwd=1001;"                                    '//SQLServer 局域网内链接
  19. 'CN.Open "provider = OraOLEDB.oracle; Data Source = suntime; User ID =用户名; Password =密码;"                                     '//Oracle
  20. 'CN.Open "Provider=SQLOLEDB;User ID=sa;Password =1001;Data Source=FANGWEI\SQL2005数据"                                       '//SQLServer 本地链接
  21. 'CN.Open "Provider=SQLOLEDB.1;Data Source=FANGWEI;Initial Catalog=CPECC_Temp;Uid=SA;PWD=1002;Persist Security Info=false"       '//SQLServer 2008本地链接
  22.    'Data Source=服务器名称
  23.    'Initial Catalog=数据库名称
  24.    'Uid=SA 用户名
  25.    'PWD=1002 '/密码
  26. '*****************************************************************************************
  27. '函数名:    GET_SQLCoon
  28. '函数功能:  获得指定SQL的查询结果,自定义连接字符串,可以连接各种数据库
  29. '返回值:    返回一个二维数组
  30. '参数1:     StrSQL   字符类型   SQL查询语句
  31. '参数2:     Str_coon 字符类型   数据库连接语句
  32. '参数3:     Biaoti   可参数选   是否输出标题,默认带有标题
  33. '使用方法:  Arr =  GET_SQLCoon(StrSQL,Str_coon,true)
  34. '            Arr(0,1)  '//数组第一行为标题行,从i=1 开始是数据
  35. '            Sh2.Range("A2").Resize(UBound(ARR, 1) + 1, UBound(ARR, 2) + 1) = ARR
  36. '*****************************************************************************************
  37. Public Function GET_SQLCoon(ByVal StrSQL As String, ByVal Str_coon As String, Optional Biaoti As Boolean = True) As Variant()
  38. On Error Resume Next    ' 改变错误处理的方式。
  39. Dim CN, RS
  40.    Err.Clear
  41.    Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  42.    Set RS = CreateObject("adodb.recordset")
  43.        CN.Open Str_coon
  44.        RS.Open StrSQL, CN, 1, 3
  45. '       If RS.RecordCount > 0 Then '//如果找到数据
  46.             If Biaoti = True Then
  47.                  ReDim ARR(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)
  48.                      For a = 0 To RS.Fields.Count - 1  '//导入标题
  49.                         ARR(0, a) = RS.Fields(a).Name
  50.                      Next
  51.                  For i = 0 To RS.RecordCount - 1  '//导入数据
  52.                      For a = 0 To RS.Fields.Count - 1
  53.                          ARR(i + 1, a) = RS.Fields(a).Value
  54.                      Next a
  55.                      RS.MoveNext
  56.                  Next
  57.             Else
  58.                  ReDim ARR(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)
  59.                  For i = 0 To RS.RecordCount - 1  '//导入数据
  60.                      For a = 0 To RS.Fields.Count - 1
  61.                          ARR(i, a) = RS.Fields(a).Value
  62.                      Next a
  63.                      RS.MoveNext
  64.                  Next
  65.             End If
  66. '        Else '//如果没有找到数据
  67. '            ReDim Arr(1, 1)
  68. '            Arr(0, 0) = ""
  69. '        End If

  70.   GET_SQLCoon = ARR
  71.   CN.Close  '//关闭ADO连接
  72.   Set RS = Nothing
  73.   Set CN = Nothing  '//释放内存
  74. End Function

  75. '*****************************************************************************************
  76. '函数名:    GET_SQLRS
  77. '函数功能:  获得指定SQL的查询结果,修改CN连接字符串,可以连接各种数据库
  78. '返回值:    返回一个recordset数据集
  79. '参数1:     StrSQL   字符类型   SQL查询语句
  80. '使用方法: Set RS = CreateObject("adodb.recordset")  '//先引用ADO:Microsoft ActiveX Data Objects 2.5 或更高版本
  81.             'Set RS = GET_SQLRS(StrSQL,StrCoon)
  82.             'Sh1.Range("A2").CopyFromRecordset RS
  83. '*****************************************************************************************
  84. Public Function GET_SQLRS(ByVal StrSQL As String, ByVal Str_coon As String) As ADODB.Recordset
  85. On Error Resume Next    ' 改变错误处理的方式。
  86. Dim CN, RS
  87.     Err.Clear
  88.     Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  89.     Set RS = CreateObject("adodb.recordset")
  90.     CN.Open Str_coon
  91.     RS.Open StrSQL, CN, 1, 3
  92.     Set GET_SQLRS = RS
  93. GET_SQLRS_Exit:
  94.     Exit Function
  95. GET_SQLRS_Error:
  96.     MsgBox Err.Description
  97.     Resume GET_SQLRS_Exit
  98. End Function
  99. '*****************************************************************************************
  100. '函数名:    GET_SQL
  101. '函数功能:  获得指定SQL的查询结果,修改CN连接字符串,可以连接各种数据库
  102. '返回值:    返回一个二维数组
  103. '参数1:     StrSQL   字符类型   SQL查询语句
  104. '参数2:     Biaoti   可参数选   是否输出标题,默认带有标题
  105. '使用方法:  Arr = GET_SQL(StrSQL,true)
  106. '            Arr(0,1)  '//数组第一行为标题行,从i=1 开始是数据
  107. '            Sh2.Range(Sh2.Cells(1, 1).Address, Sh2.Cells(UBound(Arr, 1) + 1, UBound(Arr, 2) + 1).Address) = Arr
  108. '*****************************************************************************************
  109. Public Function GET_SQL(StrSQL As String, Optional Biaoti As Boolean = True) As Variant()
  110. On Error Resume Next    ' 改变错误处理的方式。
  111. Dim CN, RS
  112.    Err.Clear
  113.    Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  114.    Set RS = CreateObject("adodb.recordset")
  115.        CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ThisWorkbook.FullName
  116.        RS.Open StrSQL, CN, 1, 3
  117.        If Biaoti = True Then
  118.             ReDim ARR(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)
  119.                 For a = 0 To RS.Fields.Count - 1  '//导入标题
  120.                    ARR(0, a) = RS.Fields(a).Name
  121.                 Next
  122.             For i = 0 To RS.RecordCount - 1  '//导入数据
  123.                 For a = 0 To RS.Fields.Count - 1
  124.                     ARR(i + 1, a) = RS.Fields(a).Value
  125.                 Next a
  126.                 RS.MoveNext
  127.             Next
  128.        Else
  129.             ReDim ARR(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)
  130.             For i = 0 To RS.RecordCount - 1  '//导入数据
  131.                 For a = 0 To RS.Fields.Count - 1
  132.                     ARR(i, a) = RS.Fields(a).Value
  133.                 Next a
  134.                 RS.MoveNext
  135.             Next
  136.        End If
  137.   GET_SQL = ARR
  138.   CN.Close  '//关闭ADO连接
  139.   Set RS = Nothing
  140.   Set CN = Nothing  '//释放内存
  141. End Function
  142. ''*****************************************************************************************
  143. '函数名:    NumInfoSql
  144. '函数功能:  获得指定SQL的查询结果的行数,修改CN连接字符串,可以连接各种数据库
  145. '返回值:    返回一个整数
  146. '参数1:     StrSQL   字符类型   SQL查询语句
  147. '使用方法:  Int= NumInfoSql(StrSQL,true)
  148. '*****************************************************************************************

  149. Public Function NumInfoSql(ByVal StrSQL As String, ByVal Str_coon As String) As Integer      '//执行SQL语句查到数据个数
  150. On Error Resume Next    ' 改变错误处理的方式。
  151. Dim CN, RS
  152.    Err.Clear
  153.    If StrSQL = "" Then NumInfoSql = 0: Exit Function
  154.    Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  155.    Set RS = CreateObject("adodb.recordset")
  156.        CN.Open Str_coon
  157.        RS.Open StrSQL, CN, 1, 3
  158.        If Err.Number <> 0 Then NumInfoSql = 0 Else NumInfoSql = RS.RecordCount
  159.   CN.Close  '//关闭ADO连接
  160.   Set RS = Nothing
  161.   Set CN = Nothing  '//释放内存
  162. End Function

  163. '*****************************************************************************************
  164. '函数名:    AddDelMove
  165. '函数功能:  执行SQL语句,一般为添加、修改删除语句
  166. '返回值:    返回一个布尔值,是否成功完成
  167. '参数1:     StrSQL     字符类型   SQL查询语句
  168. '参数2:     Str_coon   字符类型   链接语句
  169. '使用方法: StrSQL=“update [sheet1$i8:i9] set f1='Your Pleasure”
  170. '                     StrSQL="insert into [sheet1$k2:l6] (f1,f2) values (9,'mine')"
  171. '                     Bool_1= AddDelMove(StrSQL, Str_coon)
  172. '*****************************************************************************************
  173. Public Function AddDelMove(ByVal StrSQL As String, ByVal Str_coon As String) As Boolean    '//执行SQL语句,一般为添加、修改删除语句
  174. On Error Resume Next    ' 改变错误处理的方式。
  175. Err.Clear
  176.     If StrSQL = "" Then AddDelMove = False: Exit Function
  177.         Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
  178.         Set RS = CreateObject("adodb.recordset")
  179.         CN.Open Str_coon
  180.         CN.Execute (StrSQL)
  181.         If Err.Number <> 0 Then AddDelMove = False Else AddDelMove = True
  182.         CN.Close  '//关闭ADO连接
  183.     Set RS = Nothing
  184.     Set CN = Nothing  '//释放内存
  185. End Function
  186. '*****************************************************************************************
复制代码

TA的精华主题

TA的得分主题

发表于 2014-11-29 23:05 | 显示全部楼层
mk                                             

TA的精华主题

TA的得分主题

发表于 2014-11-30 11:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
估计引用问题吧 我的是office2010 运行没问题
QQ图片20141130114055.jpg

TA的精华主题

TA的得分主题

发表于 2018-10-21 21:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
厉害了,学习中

TA的精华主题

TA的得分主题

发表于 2019-8-9 23:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

修改了下你这个文件,同时加上了大量数据,在listview的双击修改环节出了问题,不会改那些代码,还有是导出的时候,如果已交费的达到9W多条的情况下,读取导出的数量金额都有问题。导出excel身份证号码也会被常规格式截断。大神能完善不?

窗体录入修改导入-.7z

1.95 MB, 下载次数: 94

TA的精华主题

TA的得分主题

发表于 2019-8-10 14:16 | 显示全部楼层
cnlo 发表于 2019-8-9 23:38
修改了下你这个文件,同时加上了大量数据,在listview的双击修改环节出了问题,不会改那些代码,还有是导 ...

上我的共享文件看,有专门VBA操作SQL数据库的

TA的精华主题

TA的得分主题

发表于 2023-3-12 17:25 | 显示全部楼层
1588078/37 发表于 2019-8-10 14:16
上我的共享文件看,有专门VBA操作SQL数据库的

您的共享文件在哪里查看呀?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 13:35 , Processed in 0.038895 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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