以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于sql表达式列的保存问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=98074)

--  作者:luodang2050
--  发布时间:2017/3/23 16:32:00
--  关于sql表达式列的保存问题?
如下,引用了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

--  作者:有点色
--  发布时间:2017/3/23 17:32:00
--  
For Each dc As DataCol In edt.DataCols
    If dc.Expression = "" Then
        If edr.RowState = DataRowState.Added Then
            \'新增额外处理
        ElseIf edr.OriginalValue(dc.Name)<> edr(dc.Name)
            edr(dc.Name) = edr.OriginalValue(dc.Name)
            msgbox(dc.Name)            
        End If
    End If
Next

--  作者:luodang2050
--  发布时间:2017/3/23 17:43:00
--  
\'新增额外处理
这里需要怎么处理?因默认空置也会保存,一样会报错

--  作者:有点色
--  发布时间:2017/3/23 17:52:00
--  

不明白你这样做的意图,你要做什么?

 

如果你想撤销保存,直接rejectchanges http://www.foxtable.com/webhelp/scr/1538.htm

 

如果你根本就不需要保存,你可以用sqlQuery查询表。


--  作者:luodang2050
--  发布时间:2017/3/23 17:57:00
--  
我是为了方便数据的分析,如sql增加了表达式列exp_姓首字母,如此能够根据此列生成筛选树,这样能够快速检索人员。
([dbo].[fn_GetPy]([姓名]))

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

--  作者:有点色
--  发布时间:2017/3/23 18:37:00
--  

试试

 

If edr.RowState = DataRowState.Added Then
    edr(dc.Name) = DBNull.Value
End If

 

如果不行,就是不支持了。你用foxtable的代码处理拼音 http://www.foxtable.com/webhelp/scr/1270.htm

 


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

--  作者:有点色
--  发布时间:2017/3/23 21:06:00
--  

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


--  作者:luodang2050
--  发布时间:2017/3/23 21:13:00
--  
以下是引用有点色在2017/3/23 21:06:00的发言:

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


是临时表达式列么?

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

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

--  作者:有点色
--  发布时间:2017/3/23 22:01:00
--  

添加列,参考

 

http://www.foxtable.com/webhelp/scr/1428.htm

 

 

一次性赋值,不能写到drawcell事件。比如可以写到窗口的AfterLoad、AfterLoadTableSetting