在另一个单元格中输入 SQL table id 后,如何使用 Excel 与 MySQL 交互并在单元格中显示 SQL 查询的结果?
How can I use Excel to interact with MySQL and show result of an SQL query in a cell, after I enter SQL table id in another cell?
我正在尝试弄清楚如何使用 Excel 作为 MySQL 的交互式前端。这将是我第一次 VBA 使用数据库。
我的方案是我想在一个单元格中输入订单号,完成输入后,我希望 SQL 查询为 运行,如 SELECT field1, field2 FROM table WHERE order_number = ?
,并且然后在单元格中显示 field1
的 return 结果。我可能会在其他单元格中使用 field2
。
我看到 some code here 可能有用,但我不知道在哪里输入该代码,也不知道在单元格中输入订单号后如何使该代码生效。我已经建立了一个 ODBC 驱动程序连接,可以使用 Excel 数据库函数连接到数据库。我还不知道如何使用 VBA 建立数据库连接或 运行 交互式查询。
你能帮我在一个单元格中输入订单号,然后看到 field1
出现在另一个单元格中吗,其中 field1
将是 SQL 查询,如上?
将代码放在输入订单号的工作表上。这使用通过 ODBC 数据源管理器创建的 DSN。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ar As Variant
If Target.Address = "$B" Then
ar = GetOrder(Target.Value)
Range("B4") = ar(0)
Range("B5") = ar(1)
End If
End Sub
Function GetOrder(OrderNo As Long) As Variant
Const CONN = "DSN=***;UID=***;PWD=***;"
Const SQL = " SELECT Field1,Field2" & _
" FROM table1 " & _
" WHERE OrderNo = ?"
Dim dbConn As ADODB.Connection, dbCmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim param As ADODB.Parameter, n As Long
Set dbConn = New ADODB.Connection
dbConn.Open CONN
Set dbCmd = New ADODB.Command
With dbCmd
.ActiveConnection = dbConn
.CommandType = adCmdText
.CommandText = SQL
Set param = .CreateParameter("P1", adInteger, adParamInput, 0)
.Parameters.Append param
End With
Set rs = dbCmd.Execute(n, OrderNo)
If Not rs.EOF Then
GetOrder = Array(rs(0).Value, rs(1).Value)
Else
GetOrder = Array("#N/A", "#N/A")
MsgBox "Could not find " & OrderNo, vbExclamation, "Error"
End If
dbConn.Close
End Function
我正在尝试弄清楚如何使用 Excel 作为 MySQL 的交互式前端。这将是我第一次 VBA 使用数据库。
我的方案是我想在一个单元格中输入订单号,完成输入后,我希望 SQL 查询为 运行,如 SELECT field1, field2 FROM table WHERE order_number = ?
,并且然后在单元格中显示 field1
的 return 结果。我可能会在其他单元格中使用 field2
。
我看到 some code here 可能有用,但我不知道在哪里输入该代码,也不知道在单元格中输入订单号后如何使该代码生效。我已经建立了一个 ODBC 驱动程序连接,可以使用 Excel 数据库函数连接到数据库。我还不知道如何使用 VBA 建立数据库连接或 运行 交互式查询。
你能帮我在一个单元格中输入订单号,然后看到 field1
出现在另一个单元格中吗,其中 field1
将是 SQL 查询,如上?
将代码放在输入订单号的工作表上。这使用通过 ODBC 数据源管理器创建的 DSN。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ar As Variant
If Target.Address = "$B" Then
ar = GetOrder(Target.Value)
Range("B4") = ar(0)
Range("B5") = ar(1)
End If
End Sub
Function GetOrder(OrderNo As Long) As Variant
Const CONN = "DSN=***;UID=***;PWD=***;"
Const SQL = " SELECT Field1,Field2" & _
" FROM table1 " & _
" WHERE OrderNo = ?"
Dim dbConn As ADODB.Connection, dbCmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim param As ADODB.Parameter, n As Long
Set dbConn = New ADODB.Connection
dbConn.Open CONN
Set dbCmd = New ADODB.Command
With dbCmd
.ActiveConnection = dbConn
.CommandType = adCmdText
.CommandText = SQL
Set param = .CreateParameter("P1", adInteger, adParamInput, 0)
.Parameters.Append param
End With
Set rs = dbCmd.Execute(n, OrderNo)
If Not rs.EOF Then
GetOrder = Array(rs(0).Value, rs(1).Value)
Else
GetOrder = Array("#N/A", "#N/A")
MsgBox "Could not find " & OrderNo, vbExclamation, "Error"
End If
dbConn.Close
End Function