如何使用 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
我试图借助 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