在函数的内部,我正在使用字符串运行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
...