Foxtable(狐表)用户栏目专家坐堂 → 关于sql表达式列的保存问题?


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

主题:关于sql表达式列的保存问题?

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
关于sql表达式列的保存问题?  发帖心情 Post By:2017/3/23 16:32:00 [显示全部帖子]

如下,引用了sql的数据表,其内含有表达式列,方便数据分析,但保存时会提示表达式列无法保存,现通过如下语句将表达式列的数据还原来避免对应列保存事件的发生,但新增行仍然无效报错,请问应该怎么解决?
For Each dc As DataCol In edt.DataCols
    If dc.Name.StartsWith("exp_") '撤销表达式列修改
        msgbox(edr(dc.Name))
        msgbox(edr.OriginalValue(dc.Name))
        If edr.OriginalValue(dc.Name)<> edr(dc.Name)
            edr(dc.Name) = edr.OriginalValue(dc.Name)
            msgbox(dc.Name)
        
        End If
    End If
Next

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/23 17:43:00 [显示全部帖子]

'新增额外处理
这里需要怎么处理?因默认空置也会保存,一样会报错

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/23 17:57:00 [显示全部帖子]

我是为了方便数据的分析,如sql增加了表达式列exp_姓首字母,如此能够根据此列生成筛选树,这样能够快速检索人员。
([dbo].[fn_GetPy]([姓名]))

采用rejectchanges ,会整行撤销,我的目的是指定该表达式列不保存,防止报错

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/23 18:56:00 [显示全部帖子]

哎,还是不行,拼音是可用代码处理,但是我需要后台跨表调用其他数据。
比如人员归类登记在一张表,学历登记表会增加计算列“exp_人员归类”,其通过sql函数自动计算引用,这样我在处理毕业证表时,可方便的知道其人员性质,且能够对此进行数据筛选。
现计划如下替代方案:
1、后台计算列不加载,表临时增加表达式列,其值引用后台计算列?
2、后台不需要计算列,表临时增加表达式列,直接后台调用其他表的数据?
以上两种方案都要引用后台数据列,应该怎么设置表达式列呢?

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/23 21:13:00 [显示全部帖子]

以下是引用有点色在2017/3/23 21:06:00的发言:

 数据表不要加载你那些列,单独查一个临时表。添加临时列,把临时表的值填写进去。


是临时表达式列么?

还是通过代码批量更新临时普通列?一般设置在哪个事件好?draw事件可行?

[此贴子已经被作者于2017/3/23 21:14:16编辑过]

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/23 22:44:00 [显示全部帖子]

已经解决了,采用如下方案,谢谢指导
1、sql建立计算列,命名规范为"exp_*",该列不加载
2、添加临时列,命名与对应的后台计算列一致
3、表load后执行如下事件,更新后台列值到临时列。
优点:后台计算列exp_能够参与后台筛选,及信息快速检索,且无需额外数据提取规则代码,即能够展示到狐表数据表中,可与sql计算列完美结合

    If dt.Type = 3  '外部数据表
        For Each dr As DataRow In dt.DataRows
            For Each dc As DataCol In dt.DataCols
                If dc.Name.StartsWith("exp_")
                    dr(dc.Name) = dr.SQLGetValue(dc.Name)
                    If dr(dc.Name)  = nothing
                        dr(dc.Name) = "NULL"
                    End If
                End If
            Next      
        Next
    End If
[此贴子已经被作者于2017/3/23 22:44:03编辑过]

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


加好友 发短信
等级:二尾狐 帖子:586 积分:5685 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/24 8:52:00 [显示全部帖子]

哦,目前数据小看不出来,是有这个隐患,谢谢

 回到顶部