Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用vba将sql数据导入excel_Sql_Vba_Excel - Fatal编程技术网

使用vba将sql数据导入excel

使用vba将sql数据导入excel,sql,vba,excel,Sql,Vba,Excel,我正在尝试将SQL表中的数据拉入excel。我用数据源工具录制了一个宏。然而,我提取的数据量通常会使excel崩溃。有没有办法在我的vba脚本中添加一个变量来限制从sql表中提取的数据?本质上是将where子句添加到sql中的select语句中 谢谢 -肖恩 尝试连接到数据库并执行查询,而不是尝试将整个数据库拉入工作表。这应该让你开始: 请确保添加Microsoft ActiveX Data Objects 6.0库引用或运行此行一次: ActiveWorkbook.VBProject.Refe

我正在尝试将SQL表中的数据拉入excel。我用数据源工具录制了一个宏。然而,我提取的数据量通常会使excel崩溃。有没有办法在我的vba脚本中添加一个变量来限制从sql表中提取的数据?本质上是将where子句添加到sql中的select语句中

谢谢

-肖恩


尝试连接到数据库并执行查询,而不是尝试将整个数据库拉入工作表。这应该让你开始: 请确保添加Microsoft ActiveX Data Objects 6.0库引用或运行此行一次: ActiveWorkbook.VBProject.References.AddFromGuid{B691E011-1797-432E-907A-4D8C69339129},6,0


尝试连接到数据库并执行查询,而不是尝试将整个数据库拉入工作表。这应该让你开始: 请确保添加Microsoft ActiveX Data Objects 6.0库引用或运行此行一次: ActiveWorkbook.VBProject.References.AddFromGuid{B691E011-1797-432E-907A-4D8C69339129},6,0


一旦您对代码感到满意,就应该将其切换到后期绑定。早期绑定很好,因为在开发应用程序时您可以获得完全的智能感知,但随着时间的推移和应用程序升级到新版本,我发现后期绑定的麻烦会少一些

此外,由于我经常使用连接字符串,因此在模块顶部贴花也是一件好事……省去了以后对这段硬代码的挖掘:

p、 这只是Kevin的代码,有一些改动;不一定是改进,但更多的只是替代方案


一旦您对代码感到满意,就应该将其切换到后期绑定。早期绑定很好,因为在开发应用程序时您可以获得完全的智能感知,但随着时间的推移和应用程序升级到新版本,我发现后期绑定的麻烦会少一些

此外,由于我经常使用连接字符串,因此在模块顶部贴花也是一件好事……省去了以后对这段硬代码的挖掘:

p、 这只是Kevin的代码,有一些改动;不一定是改进,但更多的只是替代方案


谢谢@whytheq-参考资料说明added@KevinPope-添加引用的代码行;我从哪里可以找到更多的信息?@whytheq-老实说,我是从网上了解到的。它对于只传递一个.bas文件,而不必给出如何向不懂技术的用户添加引用的详细说明非常有用。它在Outlook中不起作用,但在其他Office应用程序中,您可以在信任中心的宏设置中启用它。谢谢@whytheq-参考说明added@KevinPope-添加引用的代码行;我从哪里可以找到更多的信息?@whytheq-老实说,我是从网上了解到的。它对于只传递一个.bas文件,而不必给出如何向不懂技术的用户添加引用的详细说明非常有用。它在Outlook中不起作用,但在其他Office应用程序中,您可以在信任中心的宏设置中启用它。
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
    "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=10.22.30.215;Use Procedure for Prepare=1;Aut" _
    , _
    "o Translate=True;Packet Size=4096;Workstation ID="FakeName";Use Encryption for Data=False;Tag with column collation when possible=Fa" _
    , "lse;Initial Catalog=FakeCatelog"), Destination:=Range("$A$1")). _
    QueryTable
    .CommandType = xlCmdTable
    .CommandText = Array( _
    """FakeName""")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceConnectionFile = _
    "C:\UFakeFilePathodc"
    .ListObject.DisplayName = "FakeName"
    .Refresh BackgroundQuery:=False
End With
End Sub`
Sub QueryDB()
    Dim dbName As ADODB.Connection
    Dim dbResults As ADODB.Recordset
    Set dbName = openDBConn("YOURDATABASE", "YourTable")
    Set dbResults = dbName.Execute("SELECT * FROM YOURDATABASE")
    While Not dbResults.EOF
        'Do Something'
        dbResults.MoveNext
    Wend
End Sub

Function openDBConn(dataSource As String, table As String) As ADODB.Connection
    Dim newDBConn As ADODB.Connection
    Set newDBConn = New ADODB.Connection
    newDBConn.CommandTimeout = 60
    Dim strConn As String
    strConn = "PROVIDER=SQLOLEDB;DATA SOURCE=" & dataSource & ";INITIAL CATALOG=" & table & ";INTEGRATED SECURITY=SSPI"
    newDBConn.Open strConn
    Set openDBConn = newDBConn
End Function
Global Const strConn As String = "PROVIDER=SQLOLEDB;DATA SOURCE=" & dataSource & ";INITIAL CATALOG=" & table & ";INTEGRATED SECURITY=SSPI"
Sub QueryDB()
       Dim dbName As Object
       Dim dbResults As Object
       Set dbName = CreateObject("ADODB.Connection")
       dbName = openDBConn("YOURDATABASE", "YourTable")
       Set dbResults = CreateObject("ADODB.Recordset")
       dbResults = dbName.Execute("SELECT * FROM YOURDATABASE")
       While Not dbResults.EOF
           'Do Something'
           dbResults.MoveNext
       Wend
End Sub

Function openDBConn(dataSource As String, table As String) As ADODB.Connection
       Dim newDBConn As Object
       Set newDBConn = CreateObject("ADODB.Connection")
       newDBConn.CommandTimeout = 60

       newDBConn.Open strConn
       Set openDBConn = newDBConn
End Function