Excel VBA 连接SQL数据库后的操作。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel VBA 连接SQL数据库后的操作。相关的知识,希望对你有一定的参考价值。
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
conn.ConnectionString =....Database=db04...
conn.Open
以上,成功连接数据库,
但我不知道db04的表名
那么 select * from...就没法完成了。
问题1 怎么查询表名?
问题2 查询到结果后的rs。怎么输出到excel里面?
谢谢,如果为交流,那很高兴认识你。
如果想要分,也没事,只要你能帮我,你要多少都行。
Private Sub CommandButton5_Click()
Dim Conn As New ADODB.Connection '定义ADODB连接对象
Dim ConnStr As String '定义连接字符串
Dim xiao As String
xiao = ComData.Text
'对于SQL 2008,如果以IP方式访问服务器,必须要启动SQL Server Browser服务,如果是Express版本,要以“IP(计算机名)\实例名”方式访问
ConnStr = txtData.Text
Dim Records As New ADODB.Recordset '定义ADODB对象的记录集
Dim Sheet As Worksheet '定义工作表
Set Sheet = ThisWorkbook.Worksheets("Sheet2") '给变量Sheet赋值,注意:是工作簿中索引为1的那个表(通常一个新的工作簿Sheet1的索引为1)
'Sheet.Name = "Data" '把Sheet名称改为Data
Sheet.Cells.Clear '清空表中原有的数据
'连接状态是打开就不在进行Open操作
Conn.Open ConnStr
Dim SQLStr As String '要执行的SQL语句
SQLStr = "select * from Shift_Code where Club='" + xiao + "'" '可以执行更复杂的SQL语句
Records.Open SQLStr, Conn, adOpenStatic, adLockBatchOptimistic '读取SQL查询结果到Records记录集
'Records.Open
Dim i, j, TotalRows, TotalColumns As Integer
j = 0
TotalRows = Records.RecordCount
TotalColumns = Records.Fields.Count
'下面的循环把表头(即列名)写到Excel表的第一行
For i = 0 To TotalColumns - 1
Sheet2.Cells(1, i + 1) = Records.Fields(i).Name
Next
'下面的循环把查询结果写到Excel表中
Do While Not Records.EOF
For i = 0 To TotalColumns - 1
Sheet2.Cells(j + 2, i + 1) = Records.Fields(i).Value
Next
Records.MoveNext
j = j + 1
Loop
Records.Close '关闭记录集
Conn.Close '关闭连接
Set Records = Nothing '清空对象
Set Conn = Nothing '清空对象
End Sub
有什么不懂的话Hi我! 参考技术A select * from sys.objects where type='u'
查了查资料,说是这个可以查表名.这个我不知道你有没有弄过,对Sql我也在摸索阶段.
没有编写过这样的程序.呵呵
如果表名中含工资字段,查含工资的所有表名语句为:
select * from sys.objects where type='u' and name like N'%工资%'
至于你的第二个问题.
[a4].CopyFromRecordset Cnn.Execute(Sql)
不知道这句话对你有启示没有.请留个信箱.我有一份这方面的资料传给你.
看对你有没有启发. 参考技术B 我以前写的一段代码里的一句,可以连接到数据库的表名,只是我是用VB连接到ACCESS的,SQL的没连过
Set db2re = db2.OpenSchema(adSchemaTables)
db2re.MoveNext
If db2re!table_name = "db04" Then
声明:
Dim db2 As New Connection
Dim db2re As New Recordset
连接:
db2.CursorLocation = adUseClient
db2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\数据库文件;Persist Security Info=False;Jet OLEDB:Database Password=" + dbmm
希望能对你有点帮助 参考技术C http://zhidao.baidu.com/q?ct=24&cm=16&tn=ucframework#task-2
Excel VBA 连接各种数据库 VBA连接SQL Server数据库
本文主要涉及:
- VBA中的SQL Server环境配置
- VBA连接SQL Server数据库
- VBA读写SQL Server数据
- 如何安装SQL Client
系统环境:
- Windows 7 64bit
- Excel 2016 64bit
1. VBA连接SQL Server前的环境配置
在Excel这边,需要先在VBE中启动数据库连接支持。按下Alt+F11打开VBE,在菜单栏选择“工具”-“引用”,在弹出的引用窗口中,找到"Microsoft ActiveX Data Objects 6.1 Library"和"Microsoft ActiveX Data Objects Recordset 2.8 Library",把前面的框勾选上,点击确定即可。 (如果不是这两个版本,则选择一个版本号最高的勾选即可,如果是需要分享给office2003版的用户,建议勾选版本最低的)
2. VBA连接SQL Server
在按照上述步骤配置了环境支持后,就可以在VBA中使用代码连接SQL Server了。
首先需定义连接对象:
Dim conn as ADODB.Connection Set conn = new ADODB.Connection
这里也可以简写为:
Dim con As New ADODB.Connection
连接数据库
conn.ConnectionString = "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456" conn.Open
连接字符串ConnectionString
中的各个参数应该很明了,就不一一解释了。
上一段代码也可以简写为
con.Open "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456"
至此,数据库连接成功!
可以使用连接对象的State
属性和Version
属性查看数据库状态和版本(检查是否连接成功)
MsgBox("连接成功!" & vbCrLf & "数据库状态:" & con.State & vbCrLf & "数据库版本:" & con.Version)
最后关闭数据库连接
con.Close Set con = Nothing
整个过程的完整代码如下:
Sub 连接SQL Server数据库() \'1. 引用ADO工具 \'2. 创建连接对象 Dim con As New ADODB.Connection \'3. 建立数据库的连接 con.ConnectionString = "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456" con.Open MsgBox ("连接成功!" & vbCrLf & "数据库状态:" & con.State & vbCrLf & "数据库版本:" & con.Version) con.Close Set con = Nothing End Sub
3. VBA读写SQL Server数据表
3.1 读取SQL Server数据到Excel
代码如下:
Sub linkSQL Server() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Set conn = New ADODB.Connection Set rs = New ADODB.Recordset \'配置连接串 conn.ConnectionString = "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456" conn.Open \'从test数据库的YGXM表中取出所有数据 rs.Open "select * from `YGXM`", conn \'设置表头 Range("A1:B1").Value = Array("ID", "Name") \'将数据输出到工作表 Range("A2").CopyFromRecordset rs \'关闭连接 rs.Close: Set rs = Nothing conn.Close: Set conn = Nothing End Sub
相比前面的代码,以上代码多了 ADODB.Recordset 和 rs.Open,ADODB.Recordset 用于执行SQL语句并接收查询语句返回的结果集。
这里需要提一下的是,在VBA中执行SQL语句有两种方式,其一是使用连接对象执行: conn.Execute ,其第一个参数就是SQL语句;另一种则使用结果集对象执行: rs.Open ,这种方式有两个必要参数,分别是SQL语句和连接对象,如上例中的 rs.Open "select * from `test`", conn 。
接下来的两行Range是用于把查询结果复制到Excel表格中的。
3.2 写入数据到SQL Server
其实写入数据,只需要把上例中的SQL语句改成 UPDATE 或者 INSERT 即可,就不多说了。
番外篇—— 安装SQL Server client 服务
如果你正好需要使用其他语言通过ODBC连接SQL Server,可能需要先安装SQL Server client服务。
可以选择使用官方安装包,或者使用Navicat连接一次SQL Server(第一次连接时如果没安装会提示你安装)
这里以使用官方安装包为例: 下载地址 提取码: 913s
一路下一步,在这一步选择“此功能及所有子功能将安装到本地硬盘上
然后继续一路下一步即可。
ODBC的设置和MySQL或Oracle类似,在此不再赘述,如需要可以留言或者发邮件讨论。
PS:数据库连接工具推荐使用Navicat,可以同时连接不同的数据库,非常方便。
我常用的是11.0.16版本 下载地址 提取码: s5kt
往期链接:
Excel VBA 连接各种数据库(一) VBA连接MySQL数据库
Excel VBA 连接各种数据库(二) VBA连接Oracle数据库
以上是关于Excel VBA 连接SQL数据库后的操作。的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA 连接各种数据库 VBA连接SQL Server数据库
如何使用sql语句和vba将数据从MS-Access导入excel power查询?
使用 VBA 将 Excel 表连接到 SQL Server