【问题标题】:Global Variables in SQL statementSQL 语句中的全局变量
【发布时间】:2014-03-21 16:11:17
【问题描述】:

我在 VBA 中有以下代码:

Dim strSQL As String
strSQL = "UPDATE Workstations SET MID = newvalue WHERE MID = tempvalue"
DoCmd.RunSQL strSQL

newvalue 和 tempvalue 都是全局变量,并且已经设置了值。语法明智,这有意义吗?还是我缺少引号?

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    试试这个:

    如果MID数字

    Dim strSQL As String
    strSQL = "UPDATE Workstations SET [MID] = " & newvalue & " WHERE [MID] = " & tempvalue
    DoCmd.RunSQL strSQL
    

    如果MID字符串(如果newvalue/tempvalue 不包含单引号'):

    Dim strSQL As String
    strSQL = "UPDATE Workstations SET [MID] = '" & newvalue & "' WHERE [MID] = '" & tempvalue & "'"
    DoCmd.RunSQL strSQL
    

    如果MID字符串(如果newvalue/tempvalue 包含单引号' 就像newvalue="Mike's car"):

    Dim strSQL As String
    strSQL = "UPDATE Workstations SET [MID] = '" & Replace(newvalue, "'", "''") & "' WHERE [MID] = '" & Replace(tempvalue, "'", "''") & "'"
    DoCmd.RunSQL strSQL
    

    如果MID日期

    Dim strSQL As String
    strSQL = "UPDATE Workstations SET [MID] = #" & newvalue & "# WHERE [MID] = #" & tempvalue & "#"
    DoCmd.RunSQL strSQL
    

    感谢@HansUp 在 cmets 中指出,

    MID 是函数的名称,因此在 SQL 语句中为该字段名称加上括号或别名会更安全:SET [MID]

    【讨论】:

    • MID 是一个函数的名称,因此在 SQL 语句中为该字段名称加上括号或别名会更安全:SET [MID]WHERE [MID] 更好的是,将字段重命名为不是reserved word 的名称。
    • 谢谢@HansUp,这很有意义。更新了我的答案。
    • 如果newvaluetempvalue 是带单引号的字符串,会发生什么?您还应该转义它们,或者更好地切换到参数化语句。
    • 非常感谢!在这里真的深入了。我可能应该指定 MID 是一个数字字段。再次感谢!
    • 最好使用别名UPDATE Workstations w SET w.MID 作为前缀,而不是括起来字段/列,这可以很好地扩展到其他服务器,您再也不用担心保留字了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多