繁体   English   中英

MS Access VBA:动态 SQL

[英]MS Access VBA: dynamic SQL

在函数内部,我使用字符串来运行 sql。 我需要根据用户选择改变一些字符串。 为简洁起见,我只包含了每个表中的一个字段。 此外,这些不是真正的表名。

strSQL = "DELETE * FROM tblWax"
db.Execute strSQL, dbFailOnError

strSQL = "INSERT INTO tblWax ( strPortName, lngShortSet ) " & _
         "SELECT tblAAA.strPastName, tblBBB.lngShortID " & _
         "FROM tblAAA INNER JOIN tblBBB ON tblAAA.Parameter = tblBBB.Parameter"
db.Execute strSQL, dbFailOnError

我想根据用户的选择将 tblSSS 替换为 tblBBB,并且使用相同的选择(在字段 strChoice 内),tblWax 需要是 tblHat。 即:如果 strChoice = 1,则 tblWax, tblAAA, tblBBB 如果 strChoice = 2,则 tblHat, tblAAA, tblSSS

否则,其余的字符串是相同的。

只需使用条件逻辑,如 VBA 的SELECT...CASE

Select Case strChoice

   Case 1
      strSQL = "DELETE * FROM tblWax"
      db.Execute strSQL, dbFailOnError

      strSQL = "INSERT INTO tblWax ( strPortName, lngShortSet ) " & _
               "SELECT tblAAA.strPastName, tblBBB.lngShortID " & _
               "FROM tblAAA INNER JOIN tblBBB ON tblAAA.Parameter = tblBBB.Parameter"

   Case 2
      strSQL = "DELETE * FROM tblHat"
      db.Execute strSQL, dbFailOnError

      strSQL = "INSERT INTO tblHat ( strPortName, lngShortSet ) " & _
               "SELECT tblAAA.strPastName, tblSSS.lngShortID " & _
               "FROM tblAAA INNER JOIN tblSSS ON tblAAA.Parameter = tblSSS.Parameter"

End Select

db.Execute strSQL, dbFailOnError

您甚至可以在一种情况下使用多个值

Case 1, 3, 5
...
Case 2, 4, 6
...

并对不遵循其他Case语句的其余部分使用Else

Case Else
...

扩展@Smandoli 和@Gustav 对表名使用字符串变量的回答。 这允许您创建多个案例,而不会在 SQL 字符串中丢失变量名称。

Select Case strChoice

    Case 1:
        strTarget = "tblWax"
        strJoin = "tblBBB"

    Case 2:
        strTarget = "tblHat"
        strJoin = "tblSSS"

end select

strSQL = "DELETE * FROM " & strTarget
db.Execute strSQL, dbFailOnError

strSQL = "INSERT INTO " & strTarget & " ( strPortName, lngShortSet ) " & _
         "SELECT tblAAA.strPastName, " & strJoin & ".lngShortID " & _
         "FROM tblAAA INNER JOIN " & strJoin & _
         " ON tblAAA.Parameter = " & strJoin & ".Parameter"

db.Execute strSQL, dbFailOnError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM