对不同单元格的多个 MySQL 查询

Multiple MySQL Queries to different Cells

我试图开始工作的是不同的 MySQL 一个 Sub 中的查询,它应该在一个 table 中填充不同的范围。

这是我目前得到的:

使用函数 "ConnectionDB" 我想连接到远程数据库。在 Sub "QueryDatabase" 中,我打开连接并执行两个 Sql 查询。第一个 Sql 查询应填充范围 A2,第二个查询应填充同一工作表中的范围 D2。

我从录制的宏中提取了 Sql 字符串到远程数据库,并且在录制的宏中运行良好。

当我执行我的代码(见下文)时,Excel 工作了一段时间,但地址单元格保持为空。我没有得到调试错误。

伙计们,在这里我很高兴能得到所有帮助来使它正常工作=)这甚至可能成为现在想要的方式吗?

Public conMySQL As ADODB.Connection
Public rs As ADODB.Recordset
Public strSql As String

Public Function ConnectionDB()

Set conMySQL = New ADODB.Connection
Set rs = New ADODB.Recordset

conMySQL.Open 
"Driver={MySQL ODBC 5.3 UNICODE Driver}; _
    Server={XXX}; UID=XXX; PWD=XXX; DATABASE=XXX; _
    Option=3; PORT=3306"
End Function


Sub QueryDatabase()

  Call ConnectionDB 

    With Sheets("Energiedaten").Range("A2") 

        strSql = "SELECT Messdaten_0.Terminal, Messdaten_0.Timestamp, Messdaten_0.Value" & Chr(13) & "" & Chr(10) & "FROM BLB_Data.Messdaten Messdaten_0" & Chr(13) & "" & Chr(10) & _
        "WHERE (Messdaten_0.Terminal = 'TerminalX') AND (Messdaten_0.Timestamp>=('" & UserForm1.TextBox1.Text & "') And (Messdaten_0.Timestamp<=('" & UserForm1.TextBox2.Text & "'))" _
        & Chr(13) & "" & Chr(10) & "ORDER BY Messdaten_0.Timestamp" 

    End With

    With Sheets("Energiedaten").Range("D2")

        strSql = "SELECT Messdaten_0.Terminal, Messdaten_0.Timestamp, Messdaten_0.Value" & Chr(13) & "" & Chr(10) & "FROM BLB_Data.Messdaten Messdaten_0" & Chr(13) & "" & Chr(10) & _
        "WHERE (Messdaten_0.Terminal = 'TerminalY') AND (Messdaten_0.Timestamp>=('" & UserForm1.TextBox1.Text & "') And Messdaten_0.Timestamp<=('" & UserForm1.TextBox2.Text & "'))" _
        & Chr(13) & "" & Chr(10) & "ORDER BY Messdaten_0.Timestamp " 

    End With

conMySQL.execute strSql

conMySQL.Close

End Sub

您可以使用Range.CopyFromRecordset方法。您已经声明了 rs As ADODB.Recordset,因此您需要打开记录集,将其写入 sheet,然后为每个 SQL 语句关闭它。

编辑:用完整代码替换了示例代码部分:

Option Explicit

Public conMySQL As ADODB.Connection

Public Function ConnectionDB()

    Set conMySQL = New ADODB.Connection

    conMySQL.Open "Driver={MySQL ODBC 5.3 UNICODE Driver};" _
        & "Server={XXX}; UID=XXX; PWD=XXX; DATABASE=XXX;" _
        & "Option=3; PORT=3306"

End Function

Sub QueryDatabase()

Dim rs As ADODB.Recordset
Dim strSql As String

    Set rs = New ADODB.Recordset

    Call ConnectionDB

    strSql = "SELECT `Terminal`, `Timestamp`, `Value` FROM Messdaten WHERE `Terminal` = 'Extruder' AND `Timestamp` >= '" & UserForm1.TextBox1.Text & "' AND `Timestamp` <= '" & UserForm1.TextBox1.Text & "' ORDER BY `Timestamp` ASC"

    rs.Open Source:=strSql, ActiveConnection:=conMySQL, CursorType:=adOpenStatic, _
        LockType:=adLockOptimistic
    ThisWorkbook.Sheets("Energiedaten").Range("A2").CopyFromRecordset rs
    rs.Close

    strSql = "SELECT `Terminal`, `Timestamp`, `Value` FROM Messdaten WHERE `Terminal` = 'Beschichtungseinheit' AND `Timestamp` >= '" & UserForm1.TextBox1.Text & "' AND `Timestamp` <= '" & UserForm1.TextBox1.Text & "' ORDER BY `Timestamp` ASC "

    rs.Open Source:=strSql, ActiveConnection:=conMySQL, CursorType:=adOpenStatic, _
        LockType:=adLockOptimistic
    ThisWorkbook.Sheets("Energiedaten").Range("D2").CopyFromRecordset rs
    rs.Close

    conMySQL.Close

End Sub

类似于:

Option Explicit

Public conMySQL As ADODB.Connection

Public Sub ConnectionDB()

    Set conMySQL = New ADODB.Connection

    conMySQL.Open "Driver={MySQL ODBC 5.3 UNICODE Driver};" & _
                  "Server={XXX}; UID=XXX; PWD=XXX; DATABASE=XXX;" & _
                  "Option=3; PORT=3306"
End Sub

Sub QueryDatabase()

   ConnectionDB

    strSql = "SELECT Messdaten_0.Terminal, Messdaten_0.Timestamp, Messdaten_0.Value" & Chr(13) & "" & Chr(10) & "FROM BLB_Data.Messdaten Messdaten_0" & Chr(13) & "" & Chr(10) & _
    "WHERE (Messdaten_0.Terminal = 'TerminalX') AND (Messdaten_0.Timestamp>=('" & UserForm1.TextBox1.Text & "') And (Messdaten_0.Timestamp<=('" & UserForm1.TextBox2.Text & "'))" _
    & Chr(13) & "" & Chr(10) & "ORDER BY Messdaten_0.Timestamp"

    PutResults Sheets("Energiedaten").Range("A2"), strSql


    strSql = "SELECT Messdaten_0.Terminal, Messdaten_0.Timestamp, Messdaten_0.Value" & Chr(13) & "" & Chr(10) & "FROM BLB_Data.Messdaten Messdaten_0" & Chr(13) & "" & Chr(10) & _
        "WHERE (Messdaten_0.Terminal = 'TerminalY') AND (Messdaten_0.Timestamp>=('" & UserForm1.TextBox1.Text & "') And Messdaten_0.Timestamp<=('" & UserForm1.TextBox2.Text & "'))" _
        & Chr(13) & "" & Chr(10) & "ORDER BY Messdaten_0.Timestamp "

    PutResults Sheets("Energiedaten").Range("D2"), strSql


    conMySQL.Close

End Sub

Sub PutResults(rng As Range, SQL As String)
    Dim rs As ADODB.Recordset
    Set rs = conMySQL.Execute(SQL)
    If Not rs.EOF Then
        rng.Cells(1).CopyFromRecordset rs
    End If
    rs.Close
    Set rs = Nothing
End Sub