[英]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.