Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Mysql VBA记录集从单元格值循环_Mysql_Vba_Ado - Fatal编程技术网

Mysql VBA记录集从单元格值循环

Mysql VBA记录集从单元格值循环,mysql,vba,ado,Mysql,Vba,Ado,我有一个查询表,并转移到excel。我从单元格范围循环到数据库中重新查询,它工作得很好,但自从我使用下面的代码以来,它确实花费了很多时间。。代码需要在每个单元格中每次满足IF条件时查询并执行记录集。这段代码是否有其他方式在数据库服务器中执行,并且一旦完成,就只执行记录集 'Set Connection Set Cn = CreateObject("ADODB.Connection") Cn.Open "Driver={MySQL ODBC 5.3 ANSI Dr

我有一个查询表,并转移到excel。我从单元格范围循环到数据库中重新查询,它工作得很好,但自从我使用下面的代码以来,它确实花费了很多时间。。代码需要在每个单元格中每次满足IF条件时查询并执行记录集。这段代码是否有其他方式在数据库服务器中执行,并且一旦完成,就只执行记录集

     'Set Connection
      Set Cn = CreateObject("ADODB.Connection")
      Cn.Open "Driver={MySQL ODBC 5.3 ANSI Driver};Server=" & _
      Server_Name & ";Port=" & Port & ";Database=" & Database_Name & _
      ";Uid=" & User_ID & ";Pwd=" & Password & ";"

   'Set Recordset
    Set rs = CreateObject("ADODB.Recordset")

    rs.CursorLocation = 3
    rs.Open SQLQuery, Cn, adOpenStatic


    myArray = rs.GetRows()


    kolumner = UBound(myArray, 1) 'Count number of Columns
    rader = UBound(myArray, 2) 'count number of rows

    For K = 0 To kolumner ' Using For loop data are displayed
    Range("A5").Offset(0, K).Value = rs.Fields(K).Name 'Field is the header 
    of each column and not included in Array. Field(0) means header of first 
    column.

    For R = 0 To rader
        Range("A5").Offset(R + 1, K).Value = myArray(K, R)

    Next
    Next




    set rows = 0 to rader

    Range("L5").Value = "Debug Note" 'insert Name of Column

    For R = 6 To 1100

    Datevalue = Sheets("Sheet1").Range("I" & R)

    Dateexcel = FORMAT(Datevalue, "yyyy-MM-dd HH:mm:ss")
    SQLQuery2 = "SELECT * FROM Mfg.databasemodels_note " & _
                "where typeId = " & Sheets("Sheet1").Range("B" & R) & " AND 
                 date > " & "'" & Dateexcel & "'" & " order by date asc 
                 limit 1;"
    Set rs2 = CreateObject("ADODB.Recordset")
    rs2.CursorLocation = 3 'client
    rs2.Open SQLQuery2, Cn, adOpenStatic
    myArray2 = rs2.GetRows()


    If Not (rs2.BOF And rs2.EOF) And (Range("J" & R).Value = "failed" Or 
    Range("J" & R).Value = "invalid") Then
    Range("L" & R).Value = myArray2(3, 0)
    Else
    End If
    On Error Resume Next
    rs2.Close
    Set rs2 = Nothing

    Next

如果有效,它属于codereview.stackexchange.com您使用的是什么数据库?您应该使用ADO对象的显式定义,这将有助于更快地执行。另外,我看不到您在哪里定义连接,因此请确保在代码之前连接一次,然后关闭它。有些人认为这种联系是一个循环或是什么东西,需要永远。此外,从范围读取比从阵列读取慢,因此将所有范围数据转储到阵列中,并从阵列而不是从范围/单元读取连接代码。。