以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  列不属于表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169664)

--  作者:tld
--  发布时间:2021/6/25 9:19:00
--  列不属于表
老师好 我希望查找所有的表,如果列包含委托单位 、委托编号,当委托编号为 20210607 、且委托单位是 上海ABC时,将委托单位更改为 上海。下面代码出现错误,请 您帮我看看下错在哪里。谢谢!
For Each dt As DataTable In DataTables
    If dt.DataCols.Contains("委托编号") AndAlso dt.DataCols.Contains("委托单位")
        If dt.DataCols("委托单位").Expression = "" AndAlso dt.Type = 3 Then
            Dim d As DataRow = dt.SQLFind("委托编号 = \'20210607\' ")
            If d IsNot Nothing AndAlso d("委托单位") = "上海ABC" Then
                d("委托单位") = "上海"
            End  If
        End If
    End If
Next

图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/6/25 9:48:00
--  
委托单位是表达式列?
--  作者:tld
--  发布时间:2021/6/25 13:13:00
--  
dt.DataCols("委托单位").Expression = ""  我想用这个代码来排除表达式列。还有其他的方法吗?


--  作者:有点蓝
--  发布时间:2021/6/25 13:31:00
--  
表达式列也有可能没有表达式的。检查一下表结构,如果不需要使用表达式的,建议还是改为数据列
--  作者:tld
--  发布时间:2021/6/25 14:50:00
--  
老师,如何判断一个列是否是表达式列呢?


--  作者:有点蓝
--  发布时间:2021/6/25 15:02:00
--  
正常就是3楼的方法。

如果也会有表达式列里没有表达式的情况,可以使用SQLCommand到数据库里提取表格判断:http://www.foxtable.com/webhelp/topics/0696.htm

Dim cmd As New SQLCommand
cmd.ConnectionName = "数据源名称"
Dim
 dt As DataTable
cmd.CommandText = "SELECT * From {订单} where 1=2"
dt = cmd.ExecuteReader()
if dt.DataCols.Contains("委托单位")

--  作者:tld
--  发布时间:2021/6/25 23:42:00
--  
谢谢。