从VBA创建的数组更新Sqlite表值

时间:2017-11-23 00:09:56

标签: sql arrays vba sqlite adodb

我试图更新一个名为" OrigMask"的表列。在myfile.sqlite中使用在我的VBA代码中创建的数组。我在语法方面苦苦挣扎。 VBA数组命名为" NewMask"和表格#34; OrigMask"有864个元素。如何在VBA中创建sql语句并执行。非常感谢帮助!

我正在建立声明&像这样的连接:

Set conn = CreateObject("ADODB.Connection") 

Set rst = CreateObject("ADODB.Recordset")

conn.Open "DRIVER=SQLite3 ODBC Driver;Database=C:\myfile.sqlite;"

strSQL1 = "UPDATE MyTable SET OrigMask= NewMask;"

rst.Open strSQL1, conn
Set rst = Nothing: Set conn = Nothing

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

  1. 您需要遍历数组而不是将整个对象集成到SQL中,因为 NewMask 是数据库中无法识别的标识符。

  2. 更新查询是一个操作查询,而不是要在记录集中检索的结果集。

  3. WHERE中需要UPDATE子句,或者所有记录都不是逐行更新。

  4. 因此,请考虑通过参数化ADO命令对象进行For Each循环:

    strSQL1 = "UPDATE MyTable SET OrigMask = ? WHERE id = ?;"
    i = 1
    
    For Each var In NewMask
        Set cmd = CreateObject("ADODB.Command")
        With cmd
           .ActiveConnection = conn
           .CommandText = strSQL1
           .CommandType = adCmdText
           .CommandTimeout = 15
           .Parameters.Append .CreateParameter("maskparam", adVarChar, adParamInput, 255, var)
           .Parameters.Append .CreateParameter("idparam", adInt, adParamInput, , i)
           .Execute
        End With
    
        i = i + 1
    Next var