Foxtable(狐表)用户栏目专家坐堂 → [求助]如何判断某列是表达式列?


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

主题:[求助]如何判断某列是表达式列?

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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
[求助]如何判断某列是表达式列?  发帖心情 Post By:2015/5/28 16:30:00 [只看该作者]

示意代码如下:

 

dim dc as DataCol

For each dc In DataTables("表A").DataCols

    If dc.Expression Exist then

       output.show("此列是表达式列")

     else

       output.show("不是表达式列")

NEXT

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/28 16:35:00 [只看该作者]

dim dc as DataCol

For each dc In DataTables("表A").DataCols

    If dc.Expression > "" then

       output.show("此列是表达式列")

     else

       output.show("不是表达式列")

NEXT

 


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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
[求助]没有表达式的表达式列,不会被排除。  发帖心情 Post By:2015/5/28 16:40:00 [只看该作者]

靠表达式的内容来区分,只能区分出一部分,另一部分“表达式为空”的表达式列还是不能排除。。。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/28 16:44:00 [只看该作者]

 看另一帖,用try catch

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2015/5/28 16:55:00 [只看该作者]

或者:

 

Dim dc As DataCol  = DataTables("总表").DataCols("c")
Dim pi As System.Reflection.PropertyInfo = dc.Gettype.getproperty("IsTemporary",Reflection.BindingFlags.nonpublic Or Reflection.BindingFlags.Instance)
output.show( pi.getvalue(dc,Nothing))

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


加好友 发短信
等级:幼狐 帖子:134 积分:1047 威望:0 精华:0 注册:2014/11/24 11:07:00
[分享]谢谢,看过另一贴,解决完毕!  发帖心情 Post By:2015/5/28 16:56:00 [只看该作者]

真诚感谢!

狐狸爸爸的是正路,我下面的是旁路(旁路也是大红袍、BIN大师提供的)

 

 

Dim Builder As New ADOXBuilder
Dim dc As Col
Dim NewName As String
Dim OLDname As String
Builder.Open()
For Each dc  In Tables("表A").Cols
    If dc.DataCol.Expression = "" Then
        NewName =  "ttt"+dc.name
        OLDname = dc.name
        Try
            Builder.Tables("表A").RenameColumn(OLDname,NewName)
        Catch ex As Exception
           
        End Try
    End If
Next
Builder.Close()


If DataTables.Contains("表A")  Then '如果表已经加载
    DataTables.Unload("表A") '卸载表
End If

If (DataTables.Contains("表A") = False)  Then '如果未加载
    DataTables.load("表A") '加载表
End If

[此贴子已经被作者于2015/5/28 16:57:43编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2015/5/28 22:51:00 [只看该作者]

 

其实,设计表的时候,用一个全局变量记录一下各表的“表达式列”就可以了。这样更简单且实用。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/5/28 23:33:00 [只看该作者]

以下是引用狐狸爸爸在2015/5/28 16:55:00的发言:

或者:

 

Dim dc As DataCol  = DataTables("总表").DataCols("c")
Dim pi As System.Reflection.PropertyInfo = dc.Gettype.getproperty("IsTemporary",Reflection.BindingFlags.nonpublic Or Reflection.BindingFlags.Instance)
output.show( pi.getvalue(dc,Nothing))

 

mark


 回到顶部