以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  Relations是否不能对通过SQLCommand生成的表使用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=176884)

--  作者:wgqcool
--  发布时间:2022/4/29 17:49:00
--  Relations是否不能对通过SQLCommand生成的表使用
Dim dt As DataTable = args(0)
Dim str() As String = args(1)
Dim pgl As String = dt.name & "yl"   
    If Relations.Contains(pgl) = True Then \'如果已经存在关联
        Relations.Delete(pgl)
    End If
    Dim cmd As new SQLCommand
    cmd.ConnectionName = vars("maindata")
    cmd.CommandText = "s elect [_Identify],物料号,品名,规格参数,工序,封装,品牌,误差 fro m {sf_raw} where [_Identify] is not null"
    Dim ds As DataTable = cmd.ExecuteReader(True)
    If dt.DataCols.Contains("编码") And ds.DataCols.Contains("物料号") Then
       
        Relations.Add(pgl,ds.DataCols("物料号"),dt.DataCols("编码"),False,RelationPathEnum.none)

运行到这里报错:如果父列或子列不在 DataSet 中,则无法创建 DataRelation。
是否是因为ds作为一个通过cmd.ExecuteReader生成的datatable无法用Relations.add?

        msgbox(pgl)
    Else
        msgbox("父表或子表找不到关键列!")
    End If

--  作者:有点酸
--  发布时间:2022/4/30 5:56:00
--  
临时生成的表无法创建和原来的表创建关联,你可以改用queryBuilder或OuterBuilder:

这样就可以增加关联了。

不同的是有,先删除关联,再删除增加的表