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数据库

本文主要涉及:

  1. VBA中的SQL Server环境配置
  2. VBA连接SQL Server数据库
  3. VBA读写SQL Server数据
  4. 如何安装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

在 VBA 中使用 SQL 连接两个 Excel 工作簿中的数据(只读错误)

VBA中的Excel过滤和复制

Excel VBA 宏,用于过滤从连接的 SQL 表中提取的时间戳数据