如何在查询中忽略空文本框的内容

mi6236 2003-12-10 12:18:38
Private Sub cmdfind_Click()
Dim sql As String
sql = "select * from articlebook where aid=" & Val(Text1.Text) & " and Title ='" & Trim(Text2.Text) & "'and author = '" & Trim(Text3) & "' and atype='" & Trim(Text4.Text) & "' and afrom='" & Trim(Text5.Text) & "'"
rs.Open sql, str
If rs.EOF = True Then
MsgBox "对不起此处没有你要找的信息", vbOKOnly, "警告"
End If
rs.Close
End Sub
每个文本框中的内容为查询条件(每个文本框对应数据库中的一个字段)组合查询
问题:当有文本框为空时查询结果为空,怎样才能忽略空的文本框,程序该怎样写
...全文
49 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
leolan 2003-12-10
用if語句

sql="select * from 表名 where"
if len(trim(text1.txt))>0 then
sql=sql & " 字段名='" & text1.txt & "' and"
end if
if len(trim(text2.txt))>0 then
sql=sql & " 字段名='" & text2.txt & "' and"
end if
...
...
if right(sql,5)="where" then
sql=left(sql,len(sql)-5)
else
sql=left(sql,len(sql)-3)
end if


  • 打赏
  • 举报
回复
boydgmx 2003-12-10
简单;
就是根据各个文本框的情况组合SQL语句而已
  • 打赏
  • 举报
回复
饮水需思源 2003-12-10
dim tmp_text1 as string
dim tmp_text2 as string

if text1.text="" then
tmp_text1=""
else
tmp_text1=" and 字段='"& text1.text &"'"
end if
if text2.text="" then
tmp_text2=""
else
tmp_text2=" and 字段='"& text2.text &"'"
end if

strsql=" select * from tablename where 1=1 " & tmp_text1 & tmp_text2

if rs.state=adstateopen then rs.close
rs.open strsql,conn,adopenkeyset,adlockreadonly

  • 打赏
  • 举报
回复
pennyzhueng 2003-12-10
up!!
  • 打赏
  • 举报
回复
AresChen 2003-12-10
好,有讨论才有进步。
不知道你不用iif的观点是什么。
iif是属于简化的if语句,效率上来讲与if语句的效率相差无几,但因为属于函数性质,在一个超大的循环当中,因为调用函数需要耗费掉进栈、出栈的消耗,所以原理上会比只使用if语句慢一点,但因为VB本身的优化作用,我推测这种语句很可能会采用类似C中inline的方式,不使用函数的方式去调用。对于这一点,我没有反编译过VB的程序,不知道微软是否会作这种优化。
iif和if相比较的话,除了效率的不同、调用原理的不同以外,主要是对未来程序的扩充上,毕竟iif只是一个函数,true和false部分无法写的非常复杂。
但基于楼主的需求,考虑到程序的可读性,我还是建议使用iif来作,原因很简单,用if和iif都是重复类似语句,所不同的是,用if需要成段的重复,而用iif则需要成行的重复,从代码函数来讲,前者比后者长4~5倍左右。
但是可能还存在一个问题,就是拼凑好以后的SQL语句,用if去拼凑好SQL语句没有废语句,而用iif拼凑好的有废语句,但对于这种简单的SQL,这一点点的性能消耗,我觉得已经可以不用考虑了。
  • 打赏
  • 举报
回复
leolan 2003-12-10
我不同意樓上的看法:
在這裡只需要判斷它如果不為空就可以.
在任何情況下,我的觀點是除非非用IIF不可,否則就用IF來判斷.
以上純屬個人看法,請大暇們多指教!
  • 打赏
  • 举报
回复
AresChen 2003-12-10
用iif语句作整合,比如"(name='" & txtName.text & "' or " & iif(txtName.text="",'True','False') 这种方式。
另外,你原先的那种写法看起来太凌乱了,参考类似这样的写法:
sql = "select * from articlebook where "
sql = sql & "aid=" & Val(Text1.Text) & " and "
sql = sql & "Title ='" & Trim(Text2.Text) & "'and "
sql = sql & "author = '" & Trim(Text3) & "' and "
sql = sql & "atype='" & Trim(Text4.Text) & "' and "
sql = sql & "afrom='" & Trim(Text5.Text) & "'"
这样看起来是不是清楚一些,尤其要是使用那些非常大的SQL语句的时候,调整起来比较方便。
  • 打赏
  • 举报
回复
相关推荐
发帖
VB基础类
加入

7595

社区成员

VB 基础类
社区管理员
  • VB基础类社区
申请成为版主
帖子事件
创建了帖子
2003-12-10 12:18
社区公告
暂无公告