Oracle 面临从多个多选列表框构造SQL的困难
我有一个表单,其中大约有6个多选列表框。列表框由不同的表填充。我可以将列表框中的选择存储在变量中,然后在SQL查询中使用这些变量。该变量存储列表框中的选定项,如下所示:Oracle 面临从多个多选列表框构造SQL的困难,oracle,vb6,listbox,multi-select,Oracle,Vb6,Listbox,Multi Select,我有一个表单,其中大约有6个多选列表框。列表框由不同的表填充。我可以将列表框中的选择存储在变量中,然后在SQL查询中使用这些变量。该变量存储列表框中的选定项,如下所示: If clientList.SelCount > 0 Then For i = 0 To clientList.ListCount - 1 If clientList.Selected(i) Then If Len(criteria_cl) = 0 Then
If clientList.SelCount > 0 Then
For i = 0 To clientList.ListCount - 1
If clientList.Selected(i) Then
If Len(criteria_cl) = 0 Then
criteria_cl = Chr(39) & clientList.List(i) & Chr(39)
Else
criteria_cl = criteria_cl & "," & Chr(39) & clientList.List(i) & Chr(39)
End If
End If
Next
Else
End If
SQL查询如下所示,其中包含更多变量,这些变量称为条件_xx
strsql = "select * from pmt_hist_dmart_step2 where dbr_portfolio in (" & criteria_pf & ") and DBR_CLIENT in (" & criteria_cl & _
") and DBR_ACCT_TYPE in (" & criteria_ac & ")..... ;"
当用户没有选择时,我如何处理这种情况。当前,criteria_xx变量变为空,IN子句包含(“”)并抛出错误
请就如何克服这一问题提供一些建议?如果只有两个或三个列表框,我会编写不同的查询,但这是六个多选列表框,我没有任何线索
提前感谢。这里有一种方法:
strsql = " select * " & _
" from pmt_hist_dmart_step2 " & _
" where " & iif(len(criteria_pf) = 0, _
"", _
"dbr_portfolio in (" & criteria_pf & ") and " _
) & _
iif(len(criteria_cl) = 0, _
"", _
"DBR_CLIENT in (" & criteria_cl & ") and " _
) & _
iif(len(criteria_ac) = 0, _
"", _
"DBR_ACCT_TYPE in (" & criteria_ac & ") and " _
) & _
... & _
" 1 = 1;"
这里的想法是,(…)中形式为dbr\u组合的每个子句仅当…
为非空时才应包括在内iif
是一个内置函数,包含三个参数;如果其第一个参数为true
,则返回第二个参数;如果其第一个参数为false
,则返回第三个参数。例如,iif(1=1,5,10)
返回5
,而iif(1=2,5,10)
返回10
。(注意:第二个和第三个参数始终都会被计算,即使其中一个参数在之后被忽略。)
由于类似于where和
或和
之类的内容将不是有效的SQL,因此我将每个和
都包含在前面子句的iif
控制代码中。然后,因为final和
不是有效的SQL,所以我附加了一个final1=1
子句,它没有实际效果
(顺便说一句,如果我的缩进方案很难看的话,我很抱歉;我上次写VB6已经有十几年了,所以我真的不记得VB6代码通常是如何格式化的。)如果SQL中的那部分是空的,那么可能会重复,这将需要您稍微多做一些有条件的操作。