如何使用 vba 将 sql 服务器数据库 table 列的数据插入到 excel 中

How to insert data of sql server database table columns into excel using vba

我试图借助 vba 编码

将 sql 服务器数据库 table 中的所有数据插入到 excel 宏中

这是我的代码-

Private Sub CommandButton1_Click()

    Dim myConn As ADODB.Connection
    Dim myCommand As ADODB.Command
    Dim DB_CONNECT_STRING As String
    Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=P3A-B1YH882\SQLOPER;Initial Catalog=master;Integrated Security=SSPI"
    Set myConn = CreateObject("ADODB.Connection")
    Set myCommand = CreateObject("ADODB.Command")
    myConn.Open DB_CONNECT_STRING
    Set myCommand.ActiveConnection = myConn
    myCommand.CommandText = "SELECT *FROM Table_1"
    myCommand.Execute
    myConn.Close

End Sub

我的代码没有 运行 成功,它向我显示了一些编译错误 user-defined type not defined 。

另外我也不知道在代码中写什么来分配宏值。 我不知道该怎么做任何帮助表示感谢

您对所谓的“早期绑定”与“后期绑定”有疑问。两种方式各有优势。
如果你想使用“early binding”,你必须通过添加一个引用来告诉VBA编译器像ADODB.Connection这样的东西是什么:在VBA-Editor,选择 Tools->References 并在列出的 Active X DataObject 库之一上设置复选标记。可能您缺少此引用,导致编译器错误。

我给出了适合您的两种方式的示例 - 阅读绑定并决定哪种方式更适合您。
请注意,Connection 和 Command 对象需要由您创建(因此 var 声明中的 new resp CreateObject),而 RecordSet 对象由 Execute 方法创建。

要从记录集中获取数据到您的工作表中,最简单的方法是 Range.CopyFromRecordSet 方法。作为替代方案,您可以遍历记录集并手动进行写入 - 您可以在 Internet 上找到足够的示例。

Sub EarlyBinding()
    Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=P3A-B1YH882\SQLOPER;Initial Catalog=master;Integrated Security=SSPI"

    Dim myConn As New ADODB.Connection
    Dim myCommand As New ADODB.Command
    Dim myRs As ADODB.Recordset

    myConn.Open DB_CONNECT_STRING
    Set myCommand.ActiveConnection = myConn
    myCommand.CommandText = "SELECT * FROM Table_1"
    Set myRs = myCommand.Execute

    ThisWorkbook.Worksheets("Sheet1").Range("A1").CopyFromRecordset myRs 

    myConn.Close    
End Sub

Sub LateBinding()
    Const DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=P3A-B1YH882\SQLOPER;Initial Catalog=master;Integrated Security=SSPI"

    Dim myConn As Object
    Dim myCommand As Object
    Dim myRs As Object

    Set myConn = CreateObject("ADODB.Connection")
    myConn.Open DB_CONNECT_STRING
    Set myCommand = CreateObject("ADODB.Command")
    Set myCommand.ActiveConnection = myConn

    myCommand.CommandText = "SELECT * FROM Table_1"
    Set myRs = myCommand.Execute

    ThisWorkbook.Worksheets("Sheet1").Range("A1").CopyFromRecordset myRs 

    myConn.Close
End Sub