Foxtable(狐表)用户栏目专家坐堂 → fill 加载表后,用LoadFilter 和Load 加载同表数据 遇到的问题


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

主题:fill 加载表后,用LoadFilter 和Load 加载同表数据 遇到的问题

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
fill 加载表后,用LoadFilter 和Load 加载同表数据 遇到的问题  发帖心情 Post By:2014/3/23 20:12:00 [只看该作者]

各位老师晚上好,

 

我在窗口的after load 用fill加载表,代码如下:

Dim sql,ex1,ex2 As String
ex1 = "Round(DateDiff( m,MAX(消费日期),GetDate()),0)"
ex2 = vbcrlf  & "(Case" & vbcrlf
ex2+ ="When " & ex1 & ">= 13  Then '一星活跃'"  & vbcrlf
ex2+ ="When " & ex1 & ">= 10 and " & ex1 & " < 13 Then '二星活跃'" & vbcrlf
ex2+ ="When " & ex1 & ">= 6 and " & ex1 & " < 10 Then '三星活跃'" & vbcrlf
ex2+ ="When " & ex1 & ">= 3 and " & ex1 & " < 6 Then '四星活跃'" & vbcrlf
ex2+ = "Else  '五星活跃'" & vbcrlf
ex2+ ="End) As 活跃级别  "

 

 sql = "select  * from (Select {rjsytVIP基本信息}.归属门店代号 As 归属门店代号 , {rjsytVIP消费信息}.VIP卡号, MAX(消费日期) As 最后购买日, " & ex1 & " As 几个月没来买, " & ex2 & "   FROM "
 sql+ = "( rjsytVIP基本信息  RIGHT JOIN rjsytVIP消费信息 ON 卡号 = {rjsytVIP消费信息}.VIP卡号 ) where {rjsytVIP消费信息}.[_Identify] Is Null  GROUP BY  {rjsytVIP消费信息}.VIP卡号, {rjsytVIP基本信息}.归属门店代号) As a  "   

 DataTables("VIP行为信息_VIP行为信息").Fill(sql,"VIP数据", True)

 

然后在窗口的 一个名为 【查询】的按钮写下如下代码:

 

Dim filter As String

 

With e.Form.Controls("归属门店代号")
    If .Value IsNot Nothing Then
        Filter = "归属门店代号 = '" & .Value & "'"
    End If
End With

 

With e.Form.Controls("VIP卡号")
    If .Value IsNot Nothing Then
        Filter = "VIP卡号 = '" & .Value & "'"
    End If
End With

 

If Filter > "" Then

With DataTables("VIP行为信息_VIP行为信息")
    .LoadFilter = "" '一定要清除加载条件
    .LoadFilter = Filter
    .Load()
End With

 

应用窗口后,在“归属门店代号”控件输入 代号,点击 【查询】按钮,出现错误提示:

 

')' 附近有语法错误。

 

 

 

 

之前  【查询】按钮也是用 fill加载表的,但是看到【帮助】这样写:

 

请不要滥用Fill

通过Fill生成的Table,在打开窗口后,如果需要从同一个表加载其它数据进来,请采用LoadFilter和Load,切不可再用Fill(除非需要从另一个表加载数据),因为Fill会重新生成DataTable和Table,不仅效率低,还会导致设置好的绑定失效。

例如窗口中有个“最近七天”按钮,希望单击此按钮,加载最近七天的订单,可以将按钮的代码设置为:

Dim dt As Date = Date.Today.AddDays(-7)
DataTables
("订单").LoadFilter = "日期 > #" & dt & "#"
DataTables
("订单").Load()

总之,只有需要从不同的表中加载数据时,使用Fill方法,如果从同一个表中加载数据,应该使用LoadFilter和Load。

 

才想用这种方式

 

 

不知道是不是我理解错误了。。。。

[此贴子已经被作者于2014-3-23 21:28:48编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/3/23 21:31:00 [只看该作者]

帮助文档上写的:

 

 


图片点击可在新窗口打开查看此主题相关图片如下:帮助文档.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By:2014/3/23 22:17:00 [只看该作者]


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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/3/23 22:39:00 [只看该作者]

你有几个错误,
1.这次长的SQL应该直接写成视图放在数据库中,调用的时候调用视图就可以了,你有错误都能自动帮你检查出来,你现在是少了括号了。
2.datatable 有Fill方法吗?只有table才有
3.学会用别名,但不是滥用别名
4.vbcrlf 是换行,你用在SQL语句中没有意义。
5. 谁跟你说的,在设置loadfilter时候要先 = “” 然后再设置条件?完全不需要,只要在load前设置好了就行了
6.两个条件查询无法同时进行,是有意为之吗?

如果你吧SQL语句写成视图,那么你调用的时候就非常方便了,select * from a 



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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/3/23 23:22:00 [只看该作者]

原来如此,谢谢 有点酸 老师。搞定了!!


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/3/24 16:06:00 [只看该作者]

啊,我现在才看到jspta老师的帖子。。。对自己无语了。。。

 

我现在是用SQLLoad()方法。

Dim sql,ex1,ex2,filter As String

 

With e.Form.Controls("归属门店代号")
    If .Value IsNot Nothing Then
        Filter = "归属门店代号 = '" & .Value & "'"
    End If
End With

 

With e.Form.Controls("VIP卡号")
    If .Value IsNot Nothing Then
        Filter = "VIP卡号 = '" & .Value & "'"
    End If
End With


ex1 = "Round(DateDiff( m,MAX(消费日期),GetDate()),0)"
ex2 = vbcrlf  & "(Case" & vbcrlf
ex2+ ="When " & ex1 & ">= 13  Then '一星活跃'"  & vbcrlf
ex2+ ="When " & ex1 & ">= 10 and " & ex1 & " < 13 Then '二星活跃'" & vbcrlf
ex2+ ="When " & ex1 & ">= 6 and " & ex1 & " < 10 Then '三星活跃'" & vbcrlf
ex2+ ="When " & ex1 & ">= 3 and " & ex1 & " < 6 Then '四星活跃'" & vbcrlf
ex2+ = "Else  '五星活跃'" & vbcrlf
ex2+ ="End) As 活跃级别  "

 If Filter > "" Then

 sql = "select  * from (Select {rjsytVIP基本信息}.归属门店代号 As 归属门店代号 , {rjsytVIP消费信息}.VIP卡号, MAX(消费日期) As 最后购买日, " & ex1 & " As 几个月没来买, " & ex2 & "   FROM "
 sql+ = "( rjsytVIP基本信息  RIGHT JOIN rjsytVIP消费信息 ON 卡号 = {rjsytVIP消费信息}.VIP卡号 ) where {rjsytVIP消费信息}.[_Identify] Is Null  GROUP BY  {rjsytVIP消费信息}.VIP卡号, {rjsytVIP基本信息}.归属门店代号) As a  "   

DataTables("VIP行为信息_VIP行为信息").SQLLoad(sql)

 

两个问题:

1.确实两个条件无法同时查询,但不是有意为之,是希望能同时查询,但是不知道是怎么回事,问题出在哪里。。。

2.长的SQL应该直接写成视图放在数据库中,调用的时候调用视图就可以了   具体要怎么做呢?

 

我看了帮助里的表视图以及论坛里的表视图有关的帖子,还是没怎么弄明白。。。

 

是不是这样就是写成了表视图了:?

Dim sql,ex1,ex2 As String
ex1 = "Round(DateDiff( m,MAX(消费日期),GetDate()),0)"
ex2 = vbcrlf  & "(Case" & vbcrlf
ex2+ ="When " & ex1 & ">= 13  Then '一星活跃'"  & vbcrlf
ex2+ ="When " & ex1 & ">= 10 and " & ex1 & " < 13 Then '二星活跃'" & vbcrlf
ex2+ ="When " & ex1 & ">= 6 and " & ex1 & " < 10 Then '三星活跃'" & vbcrlf
ex2+ ="When " & ex1 & ">= 3 and " & ex1 & " < 6 Then '四星活跃'" & vbcrlf
ex2+ = "Else  '五星活跃'" & vbcrlf
ex2+ ="End) As 活跃级别  "

 

 sql = "select  * from (Select {rjsytVIP基本信息}.归属门店代号 As 归属门店代号 , {rjsytVIP消费信息}.VIP卡号, MAX(消费日期) As 最后购买日, " & ex1 & " As 几个月没来买, " & ex2 & "   FROM "
 sql+ = "( rjsytVIP基本信息  RIGHT JOIN rjsytVIP消费信息 ON 卡号 = {rjsytVIP消费信息}.VIP卡号 ) where {rjsytVIP消费信息}.[_Identify] Is Null  GROUP BY  {rjsytVIP消费信息}.VIP卡号, {rjsytVIP基本信息}.归属门店代号) As a  "   

 

调用的时候要怎么调用呢?

 

 

 


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


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/3/24 16:15:00 [只看该作者]

外部数据源的话,直接在数据库中创建视图,用SQL语句调用。
狐表内部表就要用SQL查询表生成,但是没办法用SQL语句调用,可以当做普通表进行处理。


With e.Form.Controls("归属门店代号")
    If .Value IsNot Nothing Then
        Filter = "归属门店代号 = '" & .Value & "' and "
    End If
End With

 

With e.Form.Controls("VIP卡号")
    If .Value IsNot Nothing Then
        Filter+ = "VIP卡号 = '" & .Value & "'"
    End If
End With

Filter = Filter.TrimEnd(" ", "d", "n", "a")


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/3/24 17:02:00 [只看该作者]

jspta老师,如何在数据库创建视图,我百度了下,需要这样:

 


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20140324170125.jpg
图片点击可在新窗口打开查看

 

能不能直接在狐表创建呢。。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/3/24 17:05:00 [只看该作者]

不可以

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/3/24 17:07:00 [只看该作者]

用SQLCOMMAND 执行 T-SQL语句来创建视图倒是可以的.

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