提示确定选择了哪些组合框?

时间:2015-10-09 10:05:33

标签: vba ms-access access-vba

我在Access数据库中有8个组合框。每个组合框可以拥有值或没有值(2个选项)。总共可以有256种组合(2 ^ 8)。我试图在VBA中创建一些代码来循环这些组合以确定当前存在哪种组合,最终目标是在VBA中基于该组合编写SQL查询。例如,假设combo1和combo2都有选择,但不是combo3到combo8。如果组合,我希望我的SQL查询执行SELECT FROM查询WHERE db = combo1中的列和db = combo2中的列。任何人都可以提供关于如何构建我的代码的提示吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

Dim a as string, b as string 
const myAND as string = "AND "

a = ""
a = "SELECT * FROM a table "

b = ""
if cbo1.value <> "" then
  b = b & myAND & "AND field1 = '" & cbo1.value & "'"
end if

if cbo2.value <> "" then
  b = b & myAND & "field2 = '" & cbo2.value & "'"
end if

etc for each cbo box

If b <> "" Then

   ' Lazy way 
   ' a = a & "WHERE 1=1 " & b 

   ' remove the first AND way
   a = a & "WHERE 1=1 " & mid(b,len(myAND))

End if

' a now contains the SQL you need.

答案 1 :(得分:0)

Dim where_condtion as String
Dim sqlquery as String

where_condtion = ""

IF combo1 <>"" then
    where_condtion = where_condtion + "~fieldname~ = " & combo1
End IF
IF combo2 <>"" then
    where_condtion = where_condtion + "AND ~fieldname~ = " & combo2
End IF
*
*
*
IF combo8 <>"" then
    where_condtion = where_condtion + "AND ~fieldname~ =" & combo8
End IF

IF where_condtion <> "" then
    sqlquery = "Select * from ~table name~ where" + where_condtion
ELSE
    sqlquery = "Select * from ~table name~
End IF

sqlquery = Replace(sqlquery, "where AND ", "where ")

DoCmd.OpenQuery "sqlquery", acViewNormal, acEdit

OR

CurrentDb.OpenRecordset("sqlquery")

答案 2 :(得分:0)

Am选项是串联字符串

代码示例

Dim strSQL as String
'basic string
strSQL = "SELECT tbl.fieldA, tbl.fieldB FROM tbl "

Dim strSQLwhere as String
strSQLwhere = ""
'Combobox cmbbox1
If Not isNull(cmbbox1) And cmbbox1.ListIndex <> -1 then
    strSQLwhere = strSQLwhere & "tbl.fieldToFilter1=" & cmbbox1
End if

'Combobox cmbbox2
If Not isNull(cmbbox2) And cmbbox2.ListIndex <> -1 then
    iF NOT strSQLwhere = "" then     
       strSQLwhere = strSQLwhere & " AND "
    end if
    strSQLwhere = strSQLwhere & "tbl.fieldToFilter2=" & cmbbox2
End if

'And so on until cmbBox 8

'Combine all Strings
if not strSQLwhere = "" then
    strSQL  = strSQL  & " WHERE (" & strSQLwhere & ")"
End if

'Add here further thing like ORDER BY, GROUP BY
'Show SQL sting if it is well fomratted, change string concatenation if not
debug.print strSQL  

如果您能够在VBA中执行此操作,则可以在单独的函数中执行组合框if-then-(else)情况。