以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 关联问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=86145)

--  作者:sjx71
--  发布时间:2016/6/11 22:22:00
--  [求助] 关联问题

各位老师,我有个程序 今天运行出了问题,加载表的时候提示如下错误信息,然后就退出程序了

 


此主题相关图片如下:错误.jpg
按此在新窗口浏览图片

 

程序中 公服用户单位名称和公服用户表信息之间建立了关联, 


 


此主题相关图片如下:关联.jpg
按此在新窗口浏览图片

 

出现问题前我做了如下操作

 

我在外部表设置中(公服用户单位名称和公服用户表信息)设置过滤条件为 [_Identify] Is Null

 

然后再 AfterOpenProject 里 写过

Tables("公服用户表单位名称").OpenLoadTree("公服用户单位名称",150,30,True)

 

后又改写成分页加载

 

With DataTables("公服用户单位名称")
    .LoadFilter = "" \'一定要清除加载条件
    .LoadTop = 20
    .LoadPage = 0
    .Load()

End
With

 

最后我把 AfterOpenProject 事件和外部表设置的过滤条件都删除之后 就出现了上述问题。

 

老师帮我分析一下什么问题,怎么改

 

谢谢


--  作者:大红袍
--  发布时间:2016/6/12 0:46:00
--  
是不是你列【公服用户单位名称】有重复的值?这一列的值,不能有重复值。
--  作者:sjx71
--  发布时间:2016/6/12 8:33:00
--  
谢谢老师,确实是有重复值,删除重复值就好了。

再问一个问题,怎么会出现重复值了呢,我程序里也写了防止重复的代码了,哪个操作可能会导致重复值?

Select e.DataCol.name
    Case "公服用户单位名称"
        
        If e.DataRow.IsNull("公服用户单位名称") = False Then
            If e.DataTable.Compute("Count([_Identify])","公服用户单位名称 = \'" & e.NewValue  & "\'") > 1 Then
                MessageBox.Show(e.DataRow("公服用户单位名称") & "在本表中已经存在!")
                e.DataRow("公服用户单位名称") = e.OldValue
            ElseIf DataTables("销户公服用户单位名称").Compute("Count([_Identify])","公服用户单位名称 = \'" & e.NewValue  & "\'") > 0 Then
                MessageBox.Show(e.DataRow("公服用户单位名称") & "在销户公服用户单位名称表中已经存在!")
                e.DataRow("公服用户单位名称") = e.OldValue
            End If
        End If
 
谢谢


--  作者:Hyphen
--  发布时间:2016/6/12 8:53:00
--  
如果是多用户环境,就有可能出现重复,如果是这样,Compute可以改成SQLCompute
--  作者:sjx71
--  发布时间:2016/6/12 8:59:00
--  
谢谢!