首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数据从SQL Server加载到Excel的最快方法

将数据从SQL Server加载到Excel的最快方法
EN

Stack Overflow用户
提问于 2018-06-04 03:58:39
回答 1查看 6.8K关注 0票数 4

我在SQL Server上有一个相对较大的表(大约300,000行)。此数据用作验证用户在Excel电子表格中所做操作的数据池。

确保用户始终使用最新数据的一种方法是设置VBA,使其在电子表格打开时自动从SQL server拉取数据。

代码:

代码语言:javascript
复制
Private Sub Workbook_Open()
        Set objMyConn = New ADODB.Connection
        Set objMyRecordset = New ADODB.Recordset
        Dim strSQL As String

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB; Data Source=Server Name;Initial Catalog=Database;User ID=User;Password=Password; Trusted_Connection=no"
        objMyConn.Open

    'Set and Excecute SQL Command'
        strSQL = "SELECT * FROM [Database]"

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open strSQL

    'Copy Data to Excel'
        Sheets("TEPSD").Range("A1").CopyFromRecordset (objMyRecordset)

        objMyConn.Close

End Sub

这样做的问题是需要很长的时间。有时,它花费的时间太长,我最终不得不ctrl+break它。

我想知道有没有更快的方法?或者使用另一种方法来验证用户数据,而不必将整个表拉到Excel中?

任何意见都将非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 06:11:45

在我们的讨论之后。

目前,每个用户都试图在短时间内从服务器提取大量数据,然后数据将变得陈旧,因为除非用户关闭并重新打开工作簿,否则数据不会更新。

而是切换到Worksheet_Change()宏。这将在每次进行更改时刷新数据。

这将允许您在用户每次进行更改时发送自定义查询-例如,按enter。

strSQL从提取所有数据的静态查询更改为strSQL = "SELECT name FROM [Database] WHERE name = " & Target.Value

注意:你真的应该看看VBA记录集希望你如何做参数连接,以避免Little Bobbie Tables

如果查询成功-即一个有效的条目-那么它应该返回相同的名称。如果没有相应的条目-即不是有效的选择-那么您应该得到一个空的recordset。这意味着您可以使用If rsObj.RecordCount < 1 Then测试查询结果,以便优雅地退出(或提示用户等)。当没有有效的匹配项时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档