分享

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

 昵称32057794 2016-11-13
  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. '*****************************************************************************************

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约