Foxtable(狐表)用户栏目专家坐堂 → 求:SQL语句筛选,如何用变量代替查询列,查询符,查询值


  共有11519人关注过本帖树形打印复制链接

主题:求:SQL语句筛选,如何用变量代替查询列,查询符,查询值

帅哥哟,离线,有人找我吗?
老有所乐
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
求:SQL语句筛选,如何用变量代替查询列,查询符,查询值  发帖心情 Post By:2011/12/15 20:10:00 [只看该作者]

                求“查询”按钮代码。SQL语句筛选,如何用变量代替查询列,查询符,查询值
如果筛选结果要达到上面按钮1的效果,就用在查询列框中输入“产品”,在查询符框中选择“like” ,在查询值中输入“pd05”,点击“查询”。有哪位SQL高手给指点。
谢谢!具体见窗口

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计演示1.table


 回到顶部
帅哥哟,离线,有人找我吗?
don
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2011/12/15 23:37:00 [只看该作者]

大概如此:

Dim t As Table=Tables( e.Form.name & "_table1")
Dim ct1,ct2,ct3,sql,str1, str2 As String

With e.Form
    ct1 = .Controls("ComboBox1").value
    ct2 = .Controls("ComboBox2").value
    ct3 = .Controls("ComboBox3").value
End With

For Each dc As DataCol In DataTables("订单").DataCols
    If dc.IsString Then
        str1+="," & dc.Name
    ElseIf dc.IsDate Then
        str2+="," & dc.Name
    End If
Next


If Str1.Contains(ct1) Then
    if  ct2.Contains("like") Then
        sql = " ' %" & ct3 & "%'"
    else
         sql = " '" & ct3 & "'"
     End if
ElseIf Str2.Contains(ct1) Then
     sql = " #" & ct3 & "#"
Else
      sql = " " & ct3 
End If

sql= ct1 & " " & ct2 &  sql & " group by 产品,客户,雇员,单价,数量"
sql = "Select distinct Max(日期) As 日期,产品,客户,雇员  ,单价,数量 from {订单} where " & sql


Dim cmd As New SQLCommand
cmd.CommandText = sql
t.DataSource = cmd.ExecuteReader
[此贴子已经被作者于2011-12-16 13:10:45编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2011/12/16 10:27:00 [只看该作者]

直接引用系统的“高级筛选”--Syscmd.Filter.Advanced()

 

不是更方便?


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/12/16 12:02:00 [只看该作者]

谢谢don大师,基本可以,只是不能执行like 和not like 命令,不知是否还可以改进?

 

也谢谢kylin大师的关注,系统高级筛选是可以,做点练习,好进一步使用SQL语句


 回到顶部
帅哥哟,离线,有人找我吗?
don
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2011/12/16 12:28:00 [只看该作者]

加個判斷就是了:
...........
If Str1.Contains(ct1) Then
    if  ct2.Contains("like") Then
        sql = " ' %" & ct3 & "%'"
    else
         sql = " '" & ct3 & "'"
     End if
ElseIf Str2.Contains(ct1) Then
     sql = " #" & ct3 & "#"
Else
      sql = " " & ct3 
End If

............

注:如"%"不行請自行換為"*",我是"*"不行才換為"%"

 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/12/16 14:29:00 [只看该作者]

don 老师真乃高手,谢谢!

我来仔细拜读


 回到顶部
帅哥哟,离线,有人找我吗?
don
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2011/12/16 16:23:00 [只看该作者]

利用DataType.Name还可以简化:

Dim t As Table=Tables( e.Form.name & "_table1")
Dim Lm,Bjf,Bjz,sql,str As String

With e.Form
    Lm= .Controls("ComboBox1").value
    Bjf= .Controls("ComboBox2").value
    Bjz = .Controls("ComboBox3").value
End With

str = DataTables("订单").DataCols(Lm).DataType.Name
If Str =  "String" Then
    if  Bjf.Contains("like") Then
        sql = " ' %" & Bjz & "%'"
    else
         sql = " '" & Bjz & "'"
     End if
ElseIf Str = "DateTime" Then
      sql = " #" & Bjz & "#"
Else
      sql = " " & Bjz
End If

sql= Lm & " " & Bjf &  sql & " group by 产品,客户,雇员,单价,数量"
sql = "Select distinct Max(日期) As 日期,产品,客户,雇员  ,单价,数量 from {订单} where " & sql


Dim cmd As New SQLCommand
cmd.CommandText = sql
t.DataSource = cmd.ExecuteReader


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/12/16 20:01:00 [只看该作者]

谢谢don 老师!

不过like 和not like 还没有达到预期的效果,like 现在的效果同 = 一样 ,not like 同<>的效果


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/12/17 13:12:00 [只看该作者]

SQL 语句查询窗口,基本做出来了,这主要是dom老师的手笔,再次谢谢don老师!现将他分享给大家,这种查询的最大特点是可以模糊查询数值型记录。具体见窗口下面的说明。

现在还有一个难题,如何将【包含】、【首含】、【尾含】三个按钮合并为一个,还有待于大师的辛劳。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计演示2.table

[此贴子已经被作者于2011-12-17 13:14:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/12/17 14:26:00 [只看该作者]

这个合并没有意思的。首含、尾含都在包含之中呀。

 回到顶部
总数 11 1 2 下一页