以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何判断某列是表达式列?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=68986)

--  作者:whyfoxtable
--  发布时间: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

 


--  作者:大红袍
--  发布时间: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
--  发布时间:2015/5/28 16:40:00
--  [求助]没有表达式的表达式列,不会被排除。

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


--  作者:大红袍
--  发布时间:2015/5/28 16:44:00
--  
 看另一帖,用try catch
--  作者:狐狸爸爸
--  发布时间: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
--  发布时间: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
--  发布时间:2015/5/28 22:51:00
--  

 

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


--  作者:大红袍
--  发布时间: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