如何实现EXCEL实时提取SQL中表的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现EXCEL实时提取SQL中表的数据?相关的知识,希望对你有一定的参考价值。

如何用一个按钮实现 点一下按钮自动从SQL中表数据更新到我的EXCEL中,实现EXCEL表中的数据与SQL数据同步

用VBA实现
Sub 连接数据库1()
Set Cnn = CreateObject("ADODB.Connection")
Set rt = CreateObject("ADODB.Recordset")
ID = "localhost"
Cnn.ConnectionString = "Provider = SQLOLEDB;server=" & ID & ";User ID= sa;password=sa;Data Source=" & test & ";" & "Initial Catalog = test"
Cnn.Open
SQL = "select * from 成绩表 "
Set rt = Cnn.Execute(SQL)
With Sheet1
For i = 0 To rt.Fields.Count - 1
.Cells(1, i + 1) = rt.Fields(i).Name
Next i
.Range("a2").CopyFromRecordset rt
.Cells.EntireColumn.AutoFit
End With
Set Cnn = Nothing
Set rt = Nothing
End Sub
参考技术A

您可以用powerbi(Excel2016及以上版本自带,其他低版本需要下载插件;或者下载powerbi desktop)

如果有powerbi专业版,将数据模型发布到powerbi网络服务后,还能自动刷新数据,连按钮都省了。

参考技术B 用VBA实现
Sub 连接数据库1()
Set Cnn = CreateObject("ADODB.Connection")
Set rt = CreateObject("ADODB.Recordset")
ID = "localhost"
Cnn.ConnectionString = "Provider = SQLOLEDB;server=" & ID & ";User ID= sa;password=sa;Data Source=" & test & ";" & "Initial Catalog = test"
Cnn.Open
SQL = "select * from 成绩表 "
Set rt = Cnn.Execute(SQL)
With Sheet1
For i = 0 To rt.Fields.Count - 1
.Cells(1, i + 1) = rt.Fields(i).Name
Next i
.Range("a2").CopyFromRecordset rt
.Cells.EntireColumn.AutoFit

公司有一台很重要SQL数据库,如何实现数据库实时同步?

一、客户需求

客户现在有一个需求,公司有一台很重要SQL数据库,怕有一天服务器或者系统崩溃,导致所有SQL数据库数据丢失,客户想把数据库数据,通过某种方式将数库进行实时同步到另外一台服务器上,这样可以做个backup。

那客户这个需求如何实现呢?

二、解决方案:

通过分析与研究,使用的是SQL自带的发布与订阅功能,旧的SQL Server版本是2008,新安装一个SQL Server 2014版本,通过旧SQL Serer发布,再通过SQL Server2014订阅,来同步数据库数据。

三、实现过程

3.1、发布

发布前准备:首先两个服务器之间要能相互通讯,也就是能ping命令能通。平时我们连接数据库时,经常都是用的ip登陆,但是发布的时候不能这样,必须用服务器名称。

如果在不同网段的两台数据库服务器,可以在两台服务器hosts文件中添加对应的IP地址和主机名。

在旧服务器上,打开SQL Server数据库软件,进行发布SQL数据库。

1、旧服务器上,找到复制--本地发布,右击新建发布。

技术图片

 

2、选择需要发布的数据库名称。

技术图片

 

3、选择事务发布。

技术图片

 

4、在此数据库中,查看表,是否都可以正常的被发布,如下图所示,有些表无法正常发布,那该怎么办?

技术图片

 

5、发现是由于这些表中没有主键,需要给这三张表设置主键。

技术图片

 

6、设置主键。

技术图片

 

技术图片

 

技术图片

 

8、发现还有一个表无法发布。

技术图片

 

9、查看原因。

技术图片

 

10、需要将此表中的,阻止保存要求重新创建表的更改项勾选去掉。

技术图片

 

技术图片

 

11、去掉后,发现此表可以正常设置主键。

技术图片

 

12、可以看到所有的表都可以正常发布了。

技术图片

 

13、下一步。

技术图片

 

14、选择添加。

技术图片

 

15、选择立即创建快照并使快照保持可用状态,以初始化订阅。

技术图片

 

16、选择安全设置。

技术图片

 

17、输入数据库的sa用户名和密码。

技术图片

 

18、选择下一步。这时要注意,需要将数据库的代理服务开启,和SQL browser服务开启。

技术图片

 

19、创建发布。

技术图片

 

20、新建一个发布名称。

技术图片

 

21、发布成功。

技术图片

 

22、发布的同时,要保证如下此SQL目录可读写。

技术图片

 

3.2、订阅

1、要新服务器上,找到SQL Server代理服务器,将其开启,自动。

技术图片

 

2、找到SQL Browser将其服务开启。

技术图片

 

3、可以Ping通发布服务器的主机名。

技术图片

 

4、找到复制--本地订阅。

技术图片

 

5、选择下一步。

技术图片

 

6、选择查找SQL Server发布服务器。

技术图片

 

7、选择发布服务器的名称,或者手动输入发布服务器名称,输入发布服务器的用户名sa,发布服务器数据库sa密码。

技术图片

 

8、可以查询到刚才我们发布的数据库名称。

技术图片

 

9、选择在发布服务器 PRD-SQL上运行所有代理。

技术图片

 

10、选择新建数据库。

技术图片

 

技术图片

 

11、新建一个数据库,来同步发布服务器中的数据库。

技术图片

 

12、新建数据库完成,点击下一步。

技术图片

 

13、选择与订阅服务器的连接。

技术图片

 

14、输入订阅服务器数据库sa用户名和密码。

技术图片

 

15、选择下一步。

技术图片

 

16、选择连续运行。

技术图片

 

17、选择立即初始化时间。

技术图片

 

18、选择创建订阅。

技术图片

 

19、选择完成。

技术图片

 

20、订阅创建成功。

技术图片

 

3.3、测试结果

1、在发布服务器上查看同步状态。

技术图片

 

2、可以看到正在同步数据库表。

技术图片

 

技术图片

 

技术图片

 

3、同步完成后,可以查看数据库数据有多少条和订阅服务器进行对比,如果一样说明成功。

技术图片

 

4、在订阅服务器上,可以查看到所有的表都已经同步过来了。而且数据总条目都和发布服务器数据一样,实时数据备份成功。

当以后,发布服务器此数据库中有变动,订阅服务器数据库也会实时变动。

技术图片

 

以上是关于如何实现EXCEL实时提取SQL中表的数据?的主要内容,如果未能解决你的问题,请参考以下文章

SQL server如何查询满足条件的前3数据

如何实现MS SQL中同一数据库中表与表之间的数据复制?

SQL Server 如何提取汉字首字母

VBA实现将EXCEL数据导入WORD表格

如何提取复杂Excel数据

SQL如何取时间字段的小时和分钟