各位老师晚上好,
我在窗口的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编辑过]