以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  试用版 动态增加列有问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=46961)

--  作者:fubblyc
--  发布时间:2014/3/2 9:10:00
--  试用版 动态增加列有问题?
各位老师好,
为什么已经动态增加列了:

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("近度级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("多久没来_月").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("近度级别").RaiseDataColChanged

但是应用窗口是却提示      列“近度级别”不属于表 VIP行为信息_VIP行为信息  呢?
代码如下:

Select Case e.DataCol.Name
    Case "多久没来_月"
        If e.DataRow.IsNull("多久没来_月") = False AndAlso e.DataRow("多久没来_月") >= 0 Then
            Select Case e.DataRow("多久没来_月")
                Case 0 To 2
                    e.DataRow("近度级别") ="活跃"
                Case 3 To 5
                    e.DataRow("近度级别") ="浅睡"
                Case 6 To 8
                    e.DataRow("近度级别") ="休眠"
                Case 9 To 11
                    e.DataRow("近度级别") ="沉睡"
                Case Else
                    e.DataRow("近度级别") ="死卡"
            End Select
        End If
End Select
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:动态增加列有问题?.rar



--  作者:y2287958
--  发布时间:2014/3/2 11:47:00
--  
窗口表为“SQLQuery”
但sql语句中并未包含你新增的列

--  作者:fubblyc
--  发布时间:2014/3/2 12:27:00
--  
不过我新增的其他列也都是这样设置的,为什么其他的可以,就是这个不行呢?

打开窗口后执行的代码:
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("结缘多久",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("首次购买日").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("多久没来_月",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("最后购买日期").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("近度级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("多久没来_月").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("次数级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("累计购买次数_次").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("实力级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("每次购买金额_元").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("客群类别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("近度级别").RaiseDataColChanged
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("次数级别").RaiseDataColChanged
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("实力级别").RaiseDataColChanged


然后DataColChanged的代码如下:

If e.DataCol.name="最后购买日期" Then
    Dim y,m,d As Integer
    Dim dt1 As Date = e.DataRow("最后购买日期")
    Dim dt2 As Date = Date.Today
    DateYMD(dt1,dt2,y,m,d)
    e.DataRow("多久没来_月")=y*12+m
End If

If e.DataCol.name="首次购买日" Then
    Dim y,m,d As Integer
    Dim dt1 As Date = e.DataRow("首次购买日")
    Dim dt2 As Date = Date.Today
    DateYMD(dt1,dt2,y,m,d)
    e.DataRow("结缘多久")=y & "年" & m & "月" & d & "天"
End If

Select Case e.DataCol.Name
    Case "多久没来_月"
        If e.DataRow.IsNull("多久没来_月") = False AndAlso e.DataRow("多久没来_月") >= 0 Then
            Select Case e.DataRow("多久没来_月")
                Case 0 To 2
                    e.DataRow("近度级别") ="活跃"
                Case 3 To 5
                    e.DataRow("近度级别") ="浅睡"
                Case 6 To 8
                    e.DataRow("近度级别") ="休眠"
                Case 9 To 11
                    e.DataRow("近度级别") ="沉睡"
                Case Else
                    e.DataRow("近度级别") ="死卡"
            End Select
        End If
End Select

Select Case e.DataCol.Name
    Case "累计购买次数_次"
        If e.DataRow.IsNull("累计购买次数_次") = False AndAlso e.DataRow("累计购买次数_次") >= 0 Then
            Select Case e.DataRow("累计购买次数_次")
                Case 0 To 2
                    e.DataRow("次数级别") ="认可"
                Case 3 To 5
                    e.DataRow("次数级别") ="喜欢"
                Case Else
                    e.DataRow("次数级别") ="忠诚"
            End Select
        End If
End Select

Select Case e.DataCol.Name
    Case "每次购买金额_元"
        If e.DataRow.IsNull("每次购买金额_元") = False AndAlso e.DataRow("每次购买金额_元") >= 0 Then
            Select Case e.DataRow("每次购买金额_元")
                Case 0 To 500
                    e.DataRow("实力级别") ="潜龙"
                Case 501 To 1000
                    e.DataRow("实力级别") ="现龙"
                Case Else
                    e.DataRow("实力级别") ="飞龙"
            End Select
        End If
End Select

\'e.DataRow("客群类别")=e.DataRow("近度级别") & e.DataRow("次数级别") & e.DataRow("实力级别")


为什么其他动态增加的列的可以(如:次数级别、实力级别等),就是这个  近度级别   不可以呢?

--  作者:有点甜
--  发布时间:2014/3/2 20:41:00
--  
 因为修改值的时候,近度级别还没有添加进去,改成这样

Select Case e.DataCol.Name
    Case "多久没来_月"
        If e.DataTable.DataCols.Contains("近度级别") AndAlso e.DataRow.IsNull("多久没来_月") = False AndAlso e.DataRow("多久没来_月") >= 0 Then
            Select Case e.DataRow("多久没来_月")
                Case 0 To 2
                    e.DataRow("近度级别") ="活跃"
                Case 3 To 5
                    e.DataRow("近度级别") ="浅睡"
                Case 6 To 8
                    e.DataRow("近度级别") ="休眠"
                Case 9 To 11
                    e.DataRow("近度级别") ="沉睡"
                Case Else
                    e.DataRow("近度级别") ="死卡"
            End Select
        End If
End Select


--  作者:fubblyc
--  发布时间:2014/3/2 21:16:00
--  
有点甜老师,你的这条代码有效。

不过有一个类似的问题:
e.DataRow("客群类别")=e.DataTable.DataCols.Contains("近度级别") & e.DataTable.DataCols.Contains("次数级别") & e.DataTable.DataCols.Contains("实力级别")

客群类别  这一列要怎么加进去呢?之前也是和近度级别 一样的做法。

--  作者:有点甜
--  发布时间:2014/3/2 21:22:00
--  
 你是要加入一列 表达式列 ?类似

DataTables("订单").DataCols.Add("金额", GetType(Double), "[数量] * [单价] * (1 - [折扣])")


--  作者:fubblyc
--  发布时间:2014/3/2 22:44:00
--  
有点甜老师,不是表达式,是这样子,你看能否看清:

图片点击可在新窗口打开查看此主题相关图片如下:字段组合.png
图片点击可在新窗口打开查看


--  作者:fubblyc
--  发布时间:2014/3/2 22:46:00
--  
已经在窗口的after load写上:
DataTables("VIP行为信息_VIP行为信息").DataCols.Add("客群类别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("近度级别").RaiseDataColChanged
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("次数级别").RaiseDataColChanged
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("实力级别").RaiseDataColChanged

--  作者:有点甜
--  发布时间:2014/3/2 22:48:00
--  
 这就是表达式吖

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("客群类别",Gettype(String),32,"近度级别+次数级别+实力级别")

--  作者:fubblyc
--  发布时间:2014/3/2 22:56:00
--  
有点甜老师你看:

图片点击可在新窗口打开查看此主题相关图片如下:无法找到近度级别列.jpg
图片点击可在新窗口打开查看

然后提示:

图片点击可在新窗口打开查看此主题相关图片如下:客群类别 已经存在.jpg
图片点击可在新窗口打开查看


我里面的代码是这样的:
If e.DataCol.name="最后购买日期" Then
    Dim y,m,d As Integer
    Dim dt1 As Date = e.DataRow("最后购买日期")
    Dim dt2 As Date = Date.Today
    DateYMD(dt1,dt2,y,m,d)
    e.DataRow("多久没来_月")=y*12+m
End If

If e.DataCol.name="首次购买日" Then
    Dim y,m,d As Integer
    Dim dt1 As Date = e.DataRow("首次购买日")
    Dim dt2 As Date = Date.Today
    DateYMD(dt1,dt2,y,m,d)
    e.DataRow("结缘多久")=y & "年" & m & "月" & d & "天"
End If

Select Case e.DataCol.Name
    Case "多久没来_月"
        If e.DataTable.DataCols.Contains("近度级别") AndAlso e.DataRow.IsNull("多久没来_月") = False AndAlso e.DataRow("多久没来_月") >= 0 Then
            Select Case e.DataRow("多久没来_月")
                Case 0 To 2
                    e.DataRow("近度级别") ="活跃"
                Case 3 To 5
                    e.DataRow("近度级别") ="浅睡"
                Case 6 To 8
                    e.DataRow("近度级别") ="休眠"
                Case 9 To 11
                    e.DataRow("近度级别") ="沉睡"
                Case Else
                    e.DataRow("近度级别") ="死卡"
            End Select
        End If
End Select

Select Case e.DataCol.Name
    Case "累计购买次数_次"
        If e.DataTable.DataCols.Contains("次数级别") AndAlso e.DataRow.IsNull("累计购买次数_次") = False AndAlso e.DataRow("累计购买次数_次") >= 0 Then
            Select Case e.DataRow("累计购买次数_次")
                Case 0 To 2
                    e.DataRow("次数级别") ="认可"
                Case 3 To 5
                    e.DataRow("次数级别") ="喜欢"
                Case Else
                    e.DataRow("次数级别") ="忠诚"
            End Select
        End If
End Select

Select Case e.DataCol.Name
    Case "每次购买金额_元"
        If e.DataTable.DataCols.Contains("实力级别") AndAlso e.DataRow.IsNull("每次购买金额_元") = False AndAlso e.DataRow("每次购买金额_元") >= 0 Then
            Select Case e.DataRow("每次购买金额_元")
                Case 0 To 500
                    e.DataRow("实力级别") ="潜龙"
                Case 501 To 1000
                    e.DataRow("实力级别") ="现龙"
                Case Else
                    e.DataRow("实力级别") ="飞龙"
            End Select
        End If
End Select

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("客群类别",Gettype(String),32,"近度级别+次数级别+实力级别")

\'DataTables("VIP行为信息_VIP行为信息").DataCols.Add("客群类别", Gettype(String), "[近度级别] & [次数级别] & [实力级别])")

\'e.DataRow("客群类别") = e.DataRow("近度级别")  &  e.DataRow("次数级别")  &  e.DataRow("实力级别")

\'e.DataRow("客群类别")=e.DataTable.DataCols.Contains("近度级别") & e.DataTable.DataCols.Contains("次数级别") & e.DataTable.DataCols.Contains("实力级别")

你看,都试了好几种方法,都不行。 注释掉了

我在窗口的after load代码这样写:
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("结缘多久",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("首次购买日").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("多久没来_月",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("最后购买日期").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("近度级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("多久没来_月").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("次数级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("累计购买次数_次").RaiseDataColChanged

Tables("VIP行为信息_VIP行为信息").DataTable.DataCols.Add("实力级别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("每次购买金额_元").RaiseDataColChanged

DataTables("VIP行为信息_VIP行为信息").DataCols.Add("客群类别",Gettype(String))
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("近度级别").RaiseDataColChanged
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("次数级别").RaiseDataColChanged
Tables("VIP行为信息_VIP行为信息").DataTable.DataCols("实力级别").RaiseDataColChanged