具有多个集合的SQL语句';要更新表,请执行以下操作:

具有多个集合的SQL语句';要更新表,请执行以下操作:,sql,excel,ms-access,ms-access-2010,vba,Sql,Excel,Ms Access,Ms Access 2010,Vba,大家好,我有一些从Excel更新访问字段的代码,当我只想更新一个值(MonitorCapacity)时,它工作正常,但是我现在希望它更新多个值,例如,一个名为MonitorSiteref的字段,它将具有相同的位置-因此当Monitor\u Siteref='”&strID&>“我不确定从哪里开始,因为我对SQL比较陌生,我已经得到了: strID = ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 66).Value cnn.Exec

大家好,我有一些从Excel更新访问字段的代码,当我只想更新一个值(
MonitorCapacity
)时,它工作正常,但是我现在希望它更新多个值,例如,一个名为
MonitorSiteref
的字段,它将具有相同的
位置
-因此当
Monitor\u Siteref='”&strID&>“
我不确定从哪里开始,因为我对SQL比较陌生,我已经得到了:

strID = ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 66).Value


cnn.Execute "UPDATE Tbl_Primary SET MonitorCapacity = " & _
IIf(ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 74).Value2 = "", "Null", _
"'" & ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 74).Value2 & "'") & _
" WHERE Monitor_Siteref = '" & strID & "'"`
下一次编辑:

cnn.Execute "UPDATE Tbl_Primary " & _
"SET MonitorCapacity = " & IIf(ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 74).Value2 = "", "Null", _
"'" & ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 74).Value2 & "'"), _
"Monitor_Permnumber = " & IIf(ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 73).Value2 = "", "Null", _
"'" & ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 73).Value2 & "'") & _
" WHERE Monitor_Siteref = '" & strID & "'"

lngRow = lngRow + 1

标准SQL更新语法如下所示:

    update <TABLE> set <COLUMN> = <VALUE>, 
                       <COLUMN> = <VALUE> where <COND>;
updateset=,
=其中;
所以我猜你想用逗号分隔你的列,值元组

您还可能希望将逻辑置于语句创建之外。这将使它更具可读性

检查此项以获得进一步的解释:

首先,您确实应该将值作为准备好的语句参数传递。为什么?读一读这个故事

例如:

Dim siteref As String = _
    ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 66).Value

Dim capacity As String = _
    capacity = ThisWorkbook.Worksheets("Tbl_Primary").Cells(lngRow, 74).Value2

If capacity = "" Then capacity = Nothing

Dim stmt As New ADODB.Command
With stmt
    .ActiveConnection = cnn
    .CommandType = adCmdText
    .Prepared = True
    .CommandText = _
        "UPDATE Tbl_Primary " & _
        "SET    MonitorCapacity = ? " & _
        "WHERE  Monitor_Siteref = ?"

    .Parameters.Append .CreateParameter( _
        "MonitorCapacity", _
        adVarChar, _
        adParamInput, _
        Len(capacity), _
        capacity _
    )

    .Parameters.Append .CreateParameter( _
        "Monitor_Siteref", _
        adVarChar, _
        adParamInput, _
        Len(siteref), _
        siteref _
    )

    .Execute
End With
然后,要回答实际问题,只需在
SET
子句中添加多个术语(用逗号分隔):


显然,您还需要向该命令添加其他参数。

我正在构建一个包含多列的update语句,以便使用VBA更新MSQL。这是我的简单代码。我正在分析函数中的一个变量以执行SQL命令:

Function GetUpdateTextSQL(PIC As String, Customer As String, DOB As Date, 
                          Rank As String, Organization As String, 
                          Status As String, Gender As String, 
                          Religion As String, Hobby As String, 
                          CreatedBy1 As String, CreatedOn1 As Date, 
                          ChangedBy1 As String, ChangedOn1 As Date, 
                          PeopleID As Integer) As String

           Dim SQLStr As String

           SQLStr = "UPDATE People" & _
                    "SET PIC = " & _
                    "'" & PIC & "', Customer = '" & Customer & "'," & _
                    "DOB = '" & Format(DOB, "yyyy-mm-dd") & "',_
                    Rank = '" & Rank & "'," & _
                    "Organization = '" & Organization & "',Status = '" &_ 
                    Status & "', Gender = '" & Gender & "'," & _
                    "Religion = '" & Religion & "', Hobby = '" & Hobby &_ 
                    "'," & _
                    "CreatedBy = '" & CreatedBy1 & "', CreatedOn = '" &_ 
                    CreatedOn1 & "'," & _
                    "ChangedBy = '" & ChangedBy1 & "', ChangedOn = '" &_ 
                    ChangedOn1 & "'" & _
                    "WHERE PeopleID =  & PeopleID &;"

           GetUpdateTextSQL = SQLStr

我得到的错误是“PIC附近的语法不正确”。出了什么问题,我如何修复它?

MySQL在这里是如何使用的?(不要标记未涉及的产品。)我尝试过类似的方法,它不起作用,只是用相同的答案填充
MonitorCapacity
中的每个字段,请参见编辑后的答案。编辑时要做的是:更新表集列=值,更新表集列=值。你只需要一次“更新表集”的部分。我意识到,在没有更新的情况下尝试过,同样的问题(上面的新代码)再次出现了@Matze抱歉有点神经过敏,但我正在努力解决这个问题,我再次添加了我的最新代码。看起来还不错。我根本没有VBA的经验,所以长语句确实令人困惑。你真的应该事先计算这些值。另外,正如eggyal提到的,您应该使用准备好的语句。这不仅增加了更多的安全性,还增加了可读性。尝试显式编写update语句,直到它工作为止,或者将语句字符串打印到stdout(以查看处理后的外观)。然后添加变量。嗨@eggyal,我尝试了你的第二种代码格式,但还是没有成功?请查看我编辑的答案,了解我当前代码的外观。。
Function GetUpdateTextSQL(PIC As String, Customer As String, DOB As Date, 
                          Rank As String, Organization As String, 
                          Status As String, Gender As String, 
                          Religion As String, Hobby As String, 
                          CreatedBy1 As String, CreatedOn1 As Date, 
                          ChangedBy1 As String, ChangedOn1 As Date, 
                          PeopleID As Integer) As String

           Dim SQLStr As String

           SQLStr = "UPDATE People" & _
                    "SET PIC = " & _
                    "'" & PIC & "', Customer = '" & Customer & "'," & _
                    "DOB = '" & Format(DOB, "yyyy-mm-dd") & "',_
                    Rank = '" & Rank & "'," & _
                    "Organization = '" & Organization & "',Status = '" &_ 
                    Status & "', Gender = '" & Gender & "'," & _
                    "Religion = '" & Religion & "', Hobby = '" & Hobby &_ 
                    "'," & _
                    "CreatedBy = '" & CreatedBy1 & "', CreatedOn = '" &_ 
                    CreatedOn1 & "'," & _
                    "ChangedBy = '" & ChangedBy1 & "', ChangedOn = '" &_ 
                    ChangedOn1 & "'" & _
                    "WHERE PeopleID =  & PeopleID &;"

           GetUpdateTextSQL = SQLStr