从一个数据库读取并更新另一个数据库时,“仅允许一个 SQL 语句”VBA 错误

问题描述 投票:0回答:1

我正在使用 VBA 7 和 MS Word 来更改 SQLite 数据库中的字段值。我需要从一个数据库读取表中的每条记录,更改其值并更新第二个数据库中另一个表中的某些记录。当我尝试更新第二个表时,收到错误:“仅允许一个 SQL 语句”。 我将不胜感激任何帮助。

Sub IterateThruDB1andUpdateDB2()
    Dim mCounter As Long
    Dim mEntry As String
    Dim mTranslation As String
    Dim qExec As String
    
    Set cnn1 = New ADODB.Connection
    cnn1.ConnectionString = "DSN=SomeDSN1;"
    cnn1.Open
    Set cnn2 = New ADODB.Connection
    cnn2.ConnectionString = "DSN=SomeDSN2;"
    cnn2.Open
    Dim rs1 As ADODB.Recordset
    Dim rs2 As ADODB.Recordset

    mCounter = 0
    If cnn1.State = adStateOpen Then
        qExec = "SELECT * FROM someTable1"
        Set rs1 = cnn1.Execute(qExec)
        Do Until rs1.EOF
            mWordId = rs1.Fields("_id")
            mWord = rs1.Fields("word")
            mTranslation = rs1.Fields("translation") & "Some text"
            qExec = "UPDATE someTable2 SET translation='" & mTranslation & "' WHERE _id='" & mWordId & "'"
            Set rs2 = cnn2.Execute(qExec)
            If rs2.EOF Then
                mCounterNotFound = mCounterNotFound + 1
                resp = MsgBox("Couldn't update! [" & mWordId & "]")
                If resp = vbCancel Or resp = vbNo Then
                    rs2.Close
                    Exit Do
                End If
            Else
                mCounter = mCounter + 1
            End If
            rs2.Close
            rs1.MoveNext
        Loop
    End If
    rs1.Close
    cnn1.Close
    cnn2.Close
    Set rs1 = Nothing
    Set rs2 = Nothing
    Set cnn1 = Nothing
    Set cnn2 = Nothing
End Sub

如果我将 Update 语句更改为 Select,它会起作用,因此它实际上允许两个语句,但不允许 Update 或 Insert。 第二组需要检查第二张表中的记录是否更新成功,因此需要在每次循环中关闭。第二套可以去掉,但是还是出现错误。

vba sqlite odbc vba7
1个回答
0
投票

代码中有两个问题:

  1. 按照亚历克斯的建议,我更换了 "更新 someTable2 SET 翻译='" & mTranslation & "' WHERE _id='" & mWordId & "'" 和 "更新 someTable2 SET 翻译='" & Replace(mTranslation, "'", "''") & "' WHERE _id='" & mWordId & "'" 第一个问题就消失了。
  2. 正如 Tim 指出的,执行更新查询会返回一个关闭的记录集,因此我将其删除并允许完成作业。
© www.soinside.com 2019 - 2024. All rights reserved.