以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多表关联遇到问题,请教一下  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=20913)

--  作者:kmzb56
--  发布时间:2012/6/23 9:50:00
--  多表关联遇到问题,请教一下

 


我建立了三个表:结构如下:想达到的目的没达到,发上来请狐爸及各位高手说明一下没达到目的的原因。
业务登记

业务登记

登记日期() ----> 日期型
长() ----> 字符型(5)
宽() ----> 字符型(5)
高() ----> 字符型(5)
装货地() ----> 字符型(16)
目的地() ----> 字符型(16)
付款方式() ----> 字符型(8)
发票() ----> 逻辑型
备注() ----> 字符型(30)
货物描述() ----> 字符型(20)
要求车型() ----> 字符型(16)
发货日期() ----> 日期型
重量(重量(吨)) ----> 单精度小数
客户编号() ----> 整数
客户名称() ----> 字符型(16) ----> Parent(客户资料_业务登记).客户名称
办公电话() ----> 字符型(13) ----> Parent(客户资料_业务登记).办公电话
运货名称() ----> 字符型(16) ----> Parent(客户资料_业务登记).货物名称
联系人() ----> 字符型(6) ----> Parent(客户资料_业务登记).主联系人
手机() ----> 字符型(11) ----> Parent(客户资料_业务登记).手机

客户联系人

手机() ----> 字符型(11)
职务() ----> 字符型(8)
客户编号() ----> 整数
备注() ----> 字符型(16)
联系人() ----> 字符型(6)
客户名称() ----> 字符型(16) ----> Parent(客户资料_客户联系人).客户名称
电话() ----> 字符型(16) ----> Parent(客户资料_客户联系人).办公电话

客户资料

客户名称() ----> 字符型(16)
主联系人() ----> 字符型(6)
办公电话() ----> 字符型(13)
手机() ----> 字符型(11)
地址() ----> 字符型(40)
传真() ----> 字符型(13)
货物名称() ----> 字符型(16)
备注() ----> 字符型(20)
客户编号() ----> 字符型(16)

关联 客户资料_客户联系人

客户资料._Identify ----> 客户联系人.客户编号

关联 客户资料_业务登记

客户资料._Identify ----> 业务登记.客户编号

 


问题1
   建立了关连表,其中两列调用父表的值。问题是现在子表想修改自己那两例的值修改不了,像锁定了一样,另外就是如果父表修改了值子表也会跟着改。
    我想达到子表又能取值于父表的初始值,但改子表的值和改父表的相互不影响,但最初始子表可以默认取值父表,只是其中两例。并不是所有哟。
问题2

我想把联系人这例设计成,如果我下拉例表值是主联系人时,要以直接调用父表中的主联系人为“客户联系人”表中联系人的值,同时手机号也为此人的手机号。我在本表的datacolchanging设置代码为:If e.DataCol.Name = "职务" Then
    If e.NewValue ="主联系人" Then
        If e.DataCol.name="联系人"then
        e.Newvalue="parent(客户资料_客户联系人).主联系人"
      End If
   End If
 End If
不起作用。请问是什么原因?

问题3
请问我的列顺序是好的,怎么关联了后了顺序变了,有什么方法方便改回顺序没?


--  作者:mr725
--  发布时间:2012/6/23 11:54:00
--  
这么长的描述,最好配上实例。  要不多数狐友只能图片点击可在新窗口打开查看
--  作者:xongyijd
--  发布时间:2012/6/23 14:53:00
--  

问题1:你这个情况父子表不应该关联或者不要用表达试列,使用find查找行来阈值,

问题2:你是表达试列不能用代码,用iif吧,如果不是用表达试,在表DataColChanged中

If e.DataCol.Name =="联系人"
If e.NewValue ="主联系人" Then
Dim w As DataRow = DataTables("父表").Find("联系人 = \'主联系人\'")
e.DataRow("客户联系入") = w("主联系人")
e.DataRow("手机号码") = w("手机号码")
End If
End If

问题3:列顺序是要变的,可以用代码设计比如SetColVisibleWidth直接设置列位置和宽或者视图设计

[此贴子已经被作者于2012-6-23 15:00:04编辑过]

--  作者:kmzb56
--  发布时间:2012/6/24 19:33:00
--  你说的问题2的问题

我试过iff了,当成立时返值,当条件不成立时返回另一值,而我的另一值是我输入的的新值,在这iff里输入的新值用什么表示?谢谢!


--  作者:kmzb56
--  发布时间:2012/6/24 22:47:00
--  
以下是引用xongyijd在2012-6-23 14:53:00的发言:

问题1:你这个情况父子表不应该关联或者不要用表达试列,使用find查找行来阈值,

问题2:你是表达试列不能用代码,用iif吧,如果不是用表达试,在表DataColChanged中

If e.DataCol.Name =="联系人"
If e.NewValue ="主联系人" Then
Dim w As DataRow = DataTables("父表").Find("联系人 = \'主联系人\'")
e.DataRow("客户联系入") = w("主联系人")
e.DataRow("手机号码") = w("手机号码")
End If
End If

问题3:列顺序是要变的,可以用代码设计比如SetColVisibleWidth直接设置列位置和宽或者视图设计

受这个思路启发,我把业务登记表这个的客户名称这个列改了下,不用表达试列了,直接在DataColChanged中改了代码,但我的查找条件是根据客户编号来查找到,感觉客户编号又不好记,不好弄,同时我的客户名称有可能重复,比如,李老板,另一个也是李老板,这个怎么操作?查找哪列好些?

[此贴子已经被作者于2012-6-23 15:00:04编辑过]