以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于子表有多个父表的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=55184)

--  作者:CBSLULU33
--  发布时间:2014/8/12 13:48:00
--  关于子表有多个父表的问题
老师好,我有一个叫[出库明细表]和TABLE,里面"产品名称","型号规格"等字段有相同值重复出现没问题,但"钢瓶号码"这一字段一出现重复就提示"子行有多个父行",这是为什么呢?
因为我的产品比较特殊,每一件产品都有一个类似ID的编号(钢瓶号码),当一件产品从采购入库到用完出库后,我会将这个瓶号从库存列表中删除,新一轮采购入库时,就有可能出现和以前重复的"钢瓶号码"。
出问题的[出库明细表]TABLE,对应一个叫[出库主表]的TABLE,主表与明细表以"出库单号"相互关联。这样新的出库明细表中出库的钢瓶号码就会和历史记录中拥有别的"出库单号"的钢瓶号码相重复;是不是这个原因导致了系统提示"子行有多个父行",这个问题有办法解决吗?因为长期来看某一个钢瓶号码就算是系统中以前没有出现过的,在以后也是会不断出现的,不解决的话,这个系统就无法继续下去了,谢谢

--  作者:rjh4078
--  发布时间:2014/8/12 14:00:00
--  

你做关联的时候尽量用唯一值来关联  比如自己设计一个出库单号  不要使用产品编号这种重复调用的项来关联


--  作者:CBSLULU33
--  发布时间:2014/8/12 14:16:00
--  
我就是考虑到这个问题,所以用的是出库单号这个唯一值来做的关联
--  作者:有点甜
--  发布时间:2014/8/12 14:26:00
--  
以下是引用CBSLULU33在2014-8-12 14:16:00的发言:
我就是考虑到这个问题,所以用的是出库单号这个唯一值来做的关联

 

你的【钢瓶号码】肯定是关联字段,可能是和别的表设置的关联,父表的关联字段是不能重复的。


--  作者:CBSLULU33
--  发布时间:2014/8/12 14:49:00
--  
按照甜老师的提示我检查了一遍,发现了"出库明细表"和"库存明细表"之间是以[钢瓶号码]做了关联,而"出库明细表"正是这个关联的父表。但因为同一种产品,如:"HCL",会有许多件分别来源于不同的进货批, [钢瓶号码]作为唯一识别码,而不是[产品名称]; 有没有办法做到相同[钢瓶号码]再次入库时,系统自动前置或后置一个代码,既不重复,又有别的含意。如:钢瓶号码为HBK05660的钢瓶号码又一次入库时,系统自动添加后缀为-02,则这个瓶号则变为:HBK05660-02,意为 HBK05660的钢瓶第二次入库,以此类退,请甜老师指导,谢谢了!
--  作者:有点甜
--  发布时间:2014/8/12 14:58:00
--  

 自己参考编号的生成

 

http://www.foxtable.com/help/topics/2403.htm

 


--  作者:CBSLULU33
--  发布时间:2014/8/14 9:21:00
--  
甜老师,我这个编号和由代码规则生成的编号有不同。我的编号是供应商给定的,我要根据收货单在系统中进行录入,而不是由系统自动生成。我的想法是,在录入编号时,将某编号在[入库明细表]中进行检索,如发现有重复出现的现象,即在新录入的编号前(或后)按照代码提示生成识别码,这样即使作为父表的关联词,也是唯一编号,不再出现上述系统提示,请甜老师帮忙指导,谢谢!
--  作者:有点甜
--  发布时间:2014/8/14 9:40:00
--  

 

查找重复,参考 http://www.foxtable.com/help/topics/2481.htm

 

[此贴子已经被作者于2014-8-14 9:40:08编辑过]

--  作者:有点甜
--  发布时间:2014/8/14 9:47:00
--  

Datacolchanging事件,参考代码

 

If e.DataCol.Name = "订单号" AndAlso e.newvalue <> Nothing Then
    Dim dr As DataRow
    dr = e.DataTable.Compute("", "订单号 like \'" & e.NewValue & "%\'")
    If dr IsNot Nothing Then
        Dim max As String = e.DataTable.Compute("max(订单号)", "订单号 like \'" & e.NewValue & "%\'")
        Dim idx As Integer = val(max.SubString(e.newvalue.length)) + 1
        e.newvalue = e.newvalue & format(idx,"000")
    End If
End If

[此贴子已经被作者于2014-8-14 9:47:12编辑过]

--  作者:CBSLULU33
--  发布时间:2014/8/14 10:01:00
--  
甜老师,因为实际中需要检索的列是"钢瓶号码"列,所以把您提供的参考代码中的"订单号"替换成了"钢瓶号码",试了一下,如:13C185150,但没有变成13C185150001,这和我录入时采用批量粘贴有关系吗?因为供应商提供了"钢瓶号码"的EXCEL版,我直接复制粘贴进去的,谢谢!