|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 opiona 于 2014-11-29 19:36 编辑
- Sub opiona()
- Rem Excel链接本地数据库SQL Server
- 'Data Source=服务器名称
- 'Initial Catalog=数据库名称
- 'Uid=SA 用户名
- 'PWD=1002 '/密码
- Str_coon = "Provider=SQLOLEDB.1;Data Source=FANGWEI;Initial Catalog=CPECC_Temp;Uid=SA;PWD=1002;Persist Security Info=false"
- StrSQL = "SELECT * FROM 用户信息表格"
- ARR = GET_SQLCoon(StrSQL, Str_coon, True)
- Sheet1.Range("A1").Resize(UBound(ARR, 1) + 1, UBound(ARR, 2) + 1) = ARR
-
- End Sub
- 'CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ThisWorkbook.FullName '//连接Excel2007
- 'CN.Open "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=yes';data source=" & ThisWorkbook.FullName '//OFFICE2003
- 'CN.Open "provider=Microsoft.JET.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\Info.mdb"
- 'CN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "\DB.mdb;Jet OLEDB:Database Password=52330067" '//连接Access
- 'CN.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\数据库名.accdb;Jet OLEDB:Database Password=52330067" '//连接Access2007-2010
- 'CN.Open "Provider=SQLOLEDB;Server=192.168.0.2;Database=元器件信息查询;Uid=sa;Pwd=1001;" '//SQLServer 局域网内链接
- 'CN.Open "provider = OraOLEDB.oracle; Data Source = suntime; User ID =用户名; Password =密码;" '//Oracle
- 'CN.Open "Provider=SQLOLEDB;User ID=sa;Password =1001;Data Source=FANGWEI\SQL2005数据" '//SQLServer 本地链接
- 'CN.Open "Provider=SQLOLEDB.1;Data Source=FANGWEI;Initial Catalog=CPECC_Temp;Uid=SA;PWD=1002;Persist Security Info=false" '//SQLServer 2008本地链接
- 'Data Source=服务器名称
- 'Initial Catalog=数据库名称
- 'Uid=SA 用户名
- 'PWD=1002 '/密码
- '*****************************************************************************************
- '函数名: GET_SQLCoon
- '函数功能: 获得指定SQL的查询结果,自定义连接字符串,可以连接各种数据库
- '返回值: 返回一个二维数组
- '参数1: StrSQL 字符类型 SQL查询语句
- '参数2: Str_coon 字符类型 数据库连接语句
- '参数3: Biaoti 可参数选 是否输出标题,默认带有标题
- '使用方法: Arr = GET_SQLCoon(StrSQL,Str_coon,true)
- ' Arr(0,1) '//数组第一行为标题行,从i=1 开始是数据
- ' Sh2.Range("A2").Resize(UBound(ARR, 1) + 1, UBound(ARR, 2) + 1) = ARR
- '*****************************************************************************************
- Public Function GET_SQLCoon(ByVal StrSQL As String, ByVal Str_coon As String, Optional Biaoti As Boolean = True) As Variant()
- On Error Resume Next ' 改变错误处理的方式。
- Dim CN, RS
- Err.Clear
- Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
- Set RS = CreateObject("adodb.recordset")
- CN.Open Str_coon
- RS.Open StrSQL, CN, 1, 3
- ' If RS.RecordCount > 0 Then '//如果找到数据
- If Biaoti = True Then
- ReDim ARR(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)
- For a = 0 To RS.Fields.Count - 1 '//导入标题
- ARR(0, a) = RS.Fields(a).Name
- Next
- For i = 0 To RS.RecordCount - 1 '//导入数据
- For a = 0 To RS.Fields.Count - 1
- ARR(i + 1, a) = RS.Fields(a).Value
- Next a
- RS.MoveNext
- Next
- Else
- ReDim ARR(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)
- For i = 0 To RS.RecordCount - 1 '//导入数据
- For a = 0 To RS.Fields.Count - 1
- ARR(i, a) = RS.Fields(a).Value
- Next a
- RS.MoveNext
- Next
- End If
- ' Else '//如果没有找到数据
- ' ReDim Arr(1, 1)
- ' Arr(0, 0) = ""
- ' End If
- GET_SQLCoon = ARR
- CN.Close '//关闭ADO连接
- Set RS = Nothing
- Set CN = Nothing '//释放内存
- End Function
- '*****************************************************************************************
- '函数名: GET_SQLRS
- '函数功能: 获得指定SQL的查询结果,修改CN连接字符串,可以连接各种数据库
- '返回值: 返回一个recordset数据集
- '参数1: StrSQL 字符类型 SQL查询语句
- '使用方法: Set RS = CreateObject("adodb.recordset") '//先引用ADO:Microsoft ActiveX Data Objects 2.5 或更高版本
- 'Set RS = GET_SQLRS(StrSQL,StrCoon)
- 'Sh1.Range("A2").CopyFromRecordset RS
- '*****************************************************************************************
- Public Function GET_SQLRS(ByVal StrSQL As String, ByVal Str_coon As String) As ADODB.Recordset
- On Error Resume Next ' 改变错误处理的方式。
- Dim CN, RS
- Err.Clear
- Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
- Set RS = CreateObject("adodb.recordset")
- CN.Open Str_coon
- RS.Open StrSQL, CN, 1, 3
- Set GET_SQLRS = RS
- GET_SQLRS_Exit:
- Exit Function
- GET_SQLRS_Error:
- MsgBox Err.Description
- Resume GET_SQLRS_Exit
- End Function
- '*****************************************************************************************
- '函数名: GET_SQL
- '函数功能: 获得指定SQL的查询结果,修改CN连接字符串,可以连接各种数据库
- '返回值: 返回一个二维数组
- '参数1: StrSQL 字符类型 SQL查询语句
- '参数2: Biaoti 可参数选 是否输出标题,默认带有标题
- '使用方法: Arr = GET_SQL(StrSQL,true)
- ' Arr(0,1) '//数组第一行为标题行,从i=1 开始是数据
- ' Sh2.Range(Sh2.Cells(1, 1).Address, Sh2.Cells(UBound(Arr, 1) + 1, UBound(Arr, 2) + 1).Address) = Arr
- '*****************************************************************************************
- Public Function GET_SQL(StrSQL As String, Optional Biaoti As Boolean = True) As Variant()
- On Error Resume Next ' 改变错误处理的方式。
- Dim CN, RS
- Err.Clear
- Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
- Set RS = CreateObject("adodb.recordset")
- CN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ThisWorkbook.FullName
- RS.Open StrSQL, CN, 1, 3
- If Biaoti = True Then
- ReDim ARR(0 To RS.RecordCount, 0 To RS.Fields.Count - 1)
- For a = 0 To RS.Fields.Count - 1 '//导入标题
- ARR(0, a) = RS.Fields(a).Name
- Next
- For i = 0 To RS.RecordCount - 1 '//导入数据
- For a = 0 To RS.Fields.Count - 1
- ARR(i + 1, a) = RS.Fields(a).Value
- Next a
- RS.MoveNext
- Next
- Else
- ReDim ARR(0 To RS.RecordCount - 1, 0 To RS.Fields.Count - 1)
- For i = 0 To RS.RecordCount - 1 '//导入数据
- For a = 0 To RS.Fields.Count - 1
- ARR(i, a) = RS.Fields(a).Value
- Next a
- RS.MoveNext
- Next
- End If
- GET_SQL = ARR
- CN.Close '//关闭ADO连接
- Set RS = Nothing
- Set CN = Nothing '//释放内存
- End Function
- ''*****************************************************************************************
- '函数名: NumInfoSql
- '函数功能: 获得指定SQL的查询结果的行数,修改CN连接字符串,可以连接各种数据库
- '返回值: 返回一个整数
- '参数1: StrSQL 字符类型 SQL查询语句
- '使用方法: Int= NumInfoSql(StrSQL,true)
- '*****************************************************************************************
- Public Function NumInfoSql(ByVal StrSQL As String, ByVal Str_coon As String) As Integer '//执行SQL语句查到数据个数
- On Error Resume Next ' 改变错误处理的方式。
- Dim CN, RS
- Err.Clear
- If StrSQL = "" Then NumInfoSql = 0: Exit Function
- Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
- Set RS = CreateObject("adodb.recordset")
- CN.Open Str_coon
- RS.Open StrSQL, CN, 1, 3
- If Err.Number <> 0 Then NumInfoSql = 0 Else NumInfoSql = RS.RecordCount
- CN.Close '//关闭ADO连接
- Set RS = Nothing
- Set CN = Nothing '//释放内存
- End Function
- '*****************************************************************************************
- '函数名: AddDelMove
- '函数功能: 执行SQL语句,一般为添加、修改删除语句
- '返回值: 返回一个布尔值,是否成功完成
- '参数1: StrSQL 字符类型 SQL查询语句
- '参数2: Str_coon 字符类型 链接语句
- '使用方法: StrSQL=“update [sheet1$i8:i9] set f1='Your Pleasure”
- ' StrSQL="insert into [sheet1$k2:l6] (f1,f2) values (9,'mine')"
- ' Bool_1= AddDelMove(StrSQL, Str_coon)
- '*****************************************************************************************
- Public Function AddDelMove(ByVal StrSQL As String, ByVal Str_coon As String) As Boolean '//执行SQL语句,一般为添加、修改删除语句
- On Error Resume Next ' 改变错误处理的方式。
- Err.Clear
- If StrSQL = "" Then AddDelMove = False: Exit Function
- Set CN = CreateObject("Adodb.Connection") '//新建一个ADO连接
- Set RS = CreateObject("adodb.recordset")
- CN.Open Str_coon
- CN.Execute (StrSQL)
- If Err.Number <> 0 Then AddDelMove = False Else AddDelMove = True
- CN.Close '//关闭ADO连接
- Set RS = Nothing
- Set CN = Nothing '//释放内存
- End Function
- '*****************************************************************************************
复制代码 |
|