首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

SQL语句中怎么包含全部

2013-01-05 
SQL语句中如何包含全部在一个查询窗体中包含3个COMBOBOX控件,分别是小区(COMBOBOX1)、楼号(COMBOBOX2)、单元

SQL语句中如何包含全部
在一个查询窗体中包含3个COMBOBOX控件,分别是小区(COMBOBOX1)、楼号(COMBOBOX2)、单元(COMBOBOX3),sql=" select * from 用户信息表 where 小区=' " & COMBOBOX1.text & "',楼号='" & COMBOBOX2.text &  "',单元='" & COMBOBOX3.text & "'"

如何查询
  (1) 1号小区中 2单元的用户
  (2) 1号小区中 所有单元的用户  

分别对应以下2语SQL语句
 (1)sql=" select * from 用户信息表 where 小区=' " & COMBOBOX1.text & "',楼号='" & COMBOBOX2.text &  "',单元='" & COMBOBOX3.text & "'"    
注:此时COMBOBOX1 选择的是1号小区  COMBOBOX3 选择的是2号单元
 (2) (1)sql=" select * from 用户信息表 where 小区=' " & COMBOBOX1.text & "',楼号='" & COMBOBOX2.text &  "'  "    
注:此时COMBOBOX1 选择的是1号小区  COMBOBOX3 选择的是 "全部"

(2)中只能将SQL语句中的  ,单元='" & COMBOBOX3.text & "'"  部分去掉。

如果 小区 、楼号 、单元 均分(1)具体内容 (2)全部 这两项的话,那要包含所有情况,那要写8条SQL语句,有什么办法能解决这个问题。

谢谢大家。



[解决办法]
(1)sql=" select * from 用户信息表 where 小区='" & COMBOBOX1.text & "' and 楼号='" & COMBOBOX2.text & "' and 单元='" & COMBOBOX3.text & "'"
[解决办法]
dim str小区 as string
dim str楼号 as string
dim str单元 as string

if trim(combobox1.text)="全部" then
    str小区=""
else
    str小区=" and 小区='"& trim(combobox1.text) &"'"
end if
if trim(combobox2.text)="全部" then
    str楼号=""
else
    str楼号=" and 楼号='"& trim(combobox2.text) &"'"
end if
if trim(combobox3.text)="全部" then
    str单元=""
else
    str单元=" and 单元='"& trim(combobox3.text) &"'"
end if

sql=" select * from 用户信息表 where 1=1 " & str小区 & str楼号 & str单元

[解决办法]
SQL是可以多次拼装的

    Dim sql As String
    Dim bHaveCondition As Boolean
    
    sql = " select * from 用户信息表 "
    If LenB(COMBOBOX1.Text) Then
        sql = sql & "where 小区='" & COMBOBOX1.Text & "'"
        bHaveCondition = True
    End If
    If LenB(COMBOBOX2.Text) Then
        sql = sql & IIf(bHaveCondition, ",", "where ") & "楼号='" & COMBOBOX2.Text & "'"
        bHaveCondition = True
    End If
    If LenB(COMBOBOX3.Text) Then


        sql = sql & IIf(bHaveCondition, ",", "where ") & "单元='" & COMBOBOX3.Text & "'"
        bHaveCondition = True
    End If


[解决办法]
实际上,只有上一级条件存在时,下一级条件才有意义。

有意义的 SQL 只有 4 种:
SELECT * FROM 用户信息表
SELECT * FROM 用户信息表 WHERE 小区='<小区名称>'
SELECT * FROM 用户信息表 WHERE 小区='<小区名称>' AND 楼号='<楼号>'
SELECT * FROM 用户信息表 WHERE 小区='<小区名称>' AND 楼号='<楼号>' AND 单元='<单元号>'


    Dim sql As String
    sql = "SELECT * FROM 用户信息表"
    If COMBOBOX1.Text > "" And COMBOBOX1.Text <> "全部" Then
        sql = sql & " WHERE 小区='" & COMBOBOX1.Text & "'"        

        If COMBOBOX2.Text > "" And COMBOBOX2.Text <> "全部" Then
            sql = sql & " AND 楼号='" & COMBOBOX2.Text & "'" 

            If COMBOBOX3.Text > "" And COMBOBOX3.Text <> "全部" Then
              sql = sql & " AND 单元='" & COMBOBOX3.Text & "'"        
            End If
        End If
    End If    

[解决办法]
sql=" select * from 用户信息表 where 小区 like ' " & iif(COMBOBOX1.text="全部","%%",COMBOBOX1.text) & _
"' and 楼号 like '" & iif(COMBOBOX2.text="全部","%%",COMBOBOX2.text) & _
"' and 单元 like '" & iif(COMBOBOX3.text="全部","%%",COMBOBOX3.text) & "'"
另外,条件不是用逗号分隔的,而是用逻辑运算符连接的.
[解决办法]
引用:
引用:
sql=" select * from 用户信息表 where 小区 like ' " &amp;amp; iif(COMBOBOX1.text="全部","%%",COMBOBOX1.text) &amp;amp; _
"' and 楼号 like '" &amp;amp; iif(COMBOBOX2.text="全部","%%",COMBOB……


不加通配符,不会.

热点排行