标题:求教一条VB 数据库语句
只看楼主
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:0 
以下是引用ictest在2017-8-7 15:24:30的发言:

对不起,我的意思没有表达清楚,我想表达的意思应该是:多条件多种组合查询。
比如数据库的结构是:
日期  、 品种名  、批号   、文件名  、参数名  、Site号 、数值
首先确定的是 日期(between   Text1.Text  和  Text7.Text  之间)是必选条件,
接下来
有可能只筛选满足 日期(between   Text1.Text  和  Text7.Text  之间)的数据,
也可能会筛选满足 品种名(=Text2.Text)、批号 (=Text3.Text)、文件名(=  Text4.Text)、参数名(=  Text5.Text)、Site号(=  Text6.Text)组合条件的数据;
也可能会筛选满足 品种名(=Text2.Text)、参数名(=  Text5.Text)、Site号(=  Text6.Text)组合条件的数据;
也可能会筛选满足 品种名(=Text2.Text)、批号 (=Text3.Text)、Site号(=  Text6.Text)组合条件的数据;

不知道 Adodc1.RecordSource = "select * from pingjunzhi where 语句后如何添加各种筛选条件组合,求教各位大神和版主大大这条语句怎么写?

Adodc1.RecordSource = "select * from pingjunzhi where between>=#" & CDate(Text1.Text) & "# And between<=#" & CDate(Text2.Text) & "# Or 品种名='" & Text2.Text & "' Or 批号='" & Text3.Text & "' Or 文件名='" & Text4.Text & "' Or 参数名='" & Text5.Text & "' Or Site号='" & Text6.Text & "'"
日期(between   Text1.Text  和  Text7.Text  之间)是必选条件,也就是这个条件是必须满足的,而 品种名=Text2.Text、批号=Text3.Text、文件名=Text4.Text、参数名=Text5.Text、Site号=Text6.Text 是有可能满足也有可能不满足,关键字And是与的关系,是必须满足的条件,关键字Or是或的关系,就是可以满足条件,也可能不满足条件
那么在程序执行时,首先查找满足And的条件的记录,然后查找满足Or的条件的记录 品种名=Text2.Text 的记录,如果这个条件存在(即满足),再查找 批号=Text3.Text,以此类推;
如果 品种名=Text2.Text 这个条件不存在(即不满足),程序会停止查找记录,返回前面已经查找到的记录。

[此贴子已经被作者于2017-8-8 03:42编辑过]


请不要选我!!!
2017-08-08 03:39
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
得分:0 
恕我驽钝,我是这样写的:
程序代码:
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim s4 As String
Dim s5 As String

If Len(Trim(Text2.Text)) > 0 Then         
Text11.Text = " 品种名 = '" & Trim(Text2.Text) & "'"  
Else
Text11.Text = " 1=1 "
End If

If Len(Trim(Text3.Text)) > 0 Then      
Text12.Text = " 批号 = '" & Trim(Text3.Text) & "'"     
Else
Text12.Text = " 2=2 "
End If

If Len(Trim(Text4.Text)) > 0 Then    
Text13.Text = " 文件名 = '" & Trim(Text4.Text) & "'"     
Else
Text13.Text = " 3=3 "
End If

If Len(Trim(Text5.Text)) > 0 Then     
Text14.Text = " 参数名 = '" & Trim(Text5.Text) & "'"   
Else
Text14.Text = " 4=4 "
End If

If Len(Trim(Text6.Text)) > 0 Then     
Text15.Text = " Site号 = '" & Trim(Text6.Text) & "'"     
Else
Text15.Text = " 5=5 "
End If

Adodc1.RecordSource = "Select * From pingjunzhi Where 日期>=#" & CDate(Text1.Text) & "# And 日期<= #" & CDate(Text7.Text) & "# 'and " & (Text11.Text) & " and " & (Text12.Text) & " and " & (Text13.Text) & " and " & (Text14.Text) & " and " & (Text15.Text) & ""
  Adodc1.Refresh
  Set DataGrid1.DataSource = Adodc1


如果只选择两个日期范围,其他的(Text2.Text~Text6.Text)为空,则报如下错误:

如果(Text1.Text~Text7.Text)全有内容,且这些数据在数据库中确实存在,则报如下错误:


实在不知哪里错了,恳求各位教教我!谢谢!
2017-08-08 17:11
xyxcc177
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:197
专家分:1249
注 册:2017-7-8
得分:0 
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim s4 As String
Dim s5 As String
Dim sql As String
If Text1.Text="" or Text7.Text="" Then
  msgbox( "请填写日期!",16)
  Exit sub
End If

sql="Select * From pingjunzhi Where 日期>=#" & CDate(Text1.Text) & "# And 日期<= #" & CDate(Text7.Text) & "# "
If Len(Trim(Text2.Text)) > 0 Then         
sql= sql & "  and 品种名 = '" & Trim(Text2.Text) & "'"  
End If

If Len(Trim(Text3.Text)) > 0 Then      
sql= sql & " and  批号 = '" & Trim(Text3.Text) & "'"     
End If

If Len(Trim(Text4.Text)) > 0 Then   
sql= sql & " 文件名 = '" & Trim(Text4.Text) & "'"     
End If

If Len(Trim(Text5.Text)) > 0 Then     
sql =sql & "  and 参数名 = '" & Trim(Text5.Text) & "'"   
End If

If Len(Trim(Text6.Text)) > 0 Then     
sql = sql & " and  Site号 = '" & Trim(Text6.Text) & "'"     
End If

Adodc1.RecordSource = sql
  Adodc1.Refresh
  Set DataGrid1.DataSource = Adodc1
2017-08-08 17:41
xyxcc177
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:197
专家分:1249
注 册:2017-7-8
得分:0 
发完有个错误,,在文件名前加and
2017-08-08 18:08
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:0 
回复 12楼 ictest
你的这些判断根本不是SQL语句,因此产生错误是不可避免的。稍稍给你修改一下:
程序代码:
Dim SQL1 AS String
SQL1= " Select * From pingjunzhi Where 日期>=#" & CDate(Text1.Text) & "# And 日期<= #" & CDate(Text7.Text) & "#" '这个语句是检测日期范围的
If Len(Trim(Text2.Text)) > 0 Then         
SQL1 = SQL1 & = " And 品种名 = '" & Trim(Text2.Text) & "'"  '如果Text2.Text不为空,检测 “品种名” 字段的值
End If
If Len(Trim(Text3.Text)) > 0 Then      
SQL1 = SQL1 & = " And  批号 = '" & Trim(Text3.Text) & "'"   '如果Text3.Text不为空,检测 “批号” 字段的值    
End If
If Len(Trim(Text4.Text)) > 0 Then    
SQL1 = SQL1 & = " And  文件名 = '" & Trim(Text4.Text) & "'"     '如果Text4.Text不为空,检测 “文件名” 字段的值   
End If
If Len(Trim(Text5.Text)) > 0 Then     
SQL1 = SQL1 & = " And  参数名 = '" & Trim(Text5.Text) & "'"        '如果Text5.Text不为空,检测 “参数名” 字段的值
End If
If Len(Trim(Text6.Text)) > 0 Then     
SQL1 = SQL1 & = " And  Site号 = '" & Trim(Text6.Text) & "'"      '如果Text6.Text不为空,检测 “Site号” 字段的值    
End If
'以上判断可以是一个文本框有值,也可以是二个文本框有值.......,同样可以是全部文本框有值,有值按条件查询,
'如果没有值,就会跳过这个文本框的查询SQL语句
Adodc1.RecordSource = SQL1    '这才是Adodc1控件连接的SQL语句,不会再出错,除非文本框填写的内容在数据表中找不到,这样就没有记录显示在 DataGrid1 控件中。
  Adodc1.Refresh
  Set DataGrid1.DataSource = Adodc1

请不要选我!!!
2017-08-09 08:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479832-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.209244 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved