Ошибка выполнения «28»: не хватает места в стеке в Excel VBA и Excel вылетает - PullRequest
1 голос
/ 08 ноября 2019

Я могу запустить код и создать соединение, но когда я пытаюсь вставить данные в базу данных MySQL из Excel, используя VBA. На нем показано «28: Out of Stack space»

У меня есть код, и вот данные здесь

Name     Analyst     Method    Numsample   Condition
AAA       AAA        AAA         2           ABC

Ниже приведен код, который я написал,


Dim oConn As ADODB.Connection
Private Sub ConnectDB()

   On Error GoTo ErrHandle

   Set oConn = New ADODB.Connection
    oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
        "SERVER=******************t-1.rds.amazonaws.com;" & _
        "DATABASE=worksheet;" & _
        "USER=***;" & _
        "PASSWORD=****;" & _
        "Option=3"

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
    ConnectDB
    With wsBooks
        For rowCursor = 2 To 3
            strSQL = "INSERT INTO TestExperiment (Experiment_Name, Experiment_Method, Experiment_Analyst, Experiment_NumSample, Experiment_condition) " & _
                "VALUES ('" & esc(.Cells(rowCursor, 1)) & "', " & _
                "'" & esc(.Cells(rowCursor, 2)) & "', " & _
                "'" & esc(.Cells(rowCursor, 3)) & "', " & _
                "'" & esc(.Cells(rowCursor, 4)) & "', " & _
                esc(.Cells(rowCursor, 5)) & ")"
            rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
        Next
    End With
    MsgBox "Connection successful"

ExitHandle:
   Set con = Nothing  ' RELEASE ALL set OBJECTS
   Exit Sub

ErrHandle:
   MsgBox Err.Number & ": " & Err.Description
   Resume ExitHandle
    End Sub

Function esc(txt As String)
    esc = Trim(Replace(txt, "'", "\'"))
End Function


Абсолютно новый для VBA, просто изучение кода может иметь некоторые ошибки. Пожалуйста, помогите мне, если можете, спасибо.

1 Ответ

2 голосов
/ 08 ноября 2019

"Out of stack space" - это VBA's StackOverflowException. Это означает, что вы непреднамеренно написали рекурсивную логику, которая никогда не ускользает от рекурсии, продолжает копать и копать глубже ... до тех пор, пока стек вызовов не будет полностью заполнен и VBA не сможет отследить, куда возвращаться.

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
    ConnectDB '<~ recursive call!
    With wsBooks

Удалить рекурсивный вызов, проблема решена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...