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

我想根据用户选择替代TBLSS将TBLBBB替换为TBLBBB,并且具有相同的选择(在field strchoice中(,tblwax需要是tblhat。那是:如果strchoice = 1,则tblwax,tblaaa,tblbbb如果strchoice = 2,则tblhat,tblaaa,tblsss

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

在 @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

只需使用条件逻辑,例如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
...

并使用Else进行其余的不遵循其他Case语句

Case Else
...

最新更新