以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求大神帮忙改代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146327) |
||||
-- 作者:profit -- 发布时间:2020/2/21 14:34:00 -- 求大神帮忙改代码 我这样写的代码在表A增加行时。表A第一列内容是表B,就会在表B同时增加行;表A第一列内容是表C,就会在表C同时也会增加行(之后的表D、表E和表F都会和前面表B、C一样要同时增加行),但是我这个项目的第二列和第三列怎么不会同时添加内容,请大神帮忙改下代码,谢谢
|
||||
-- 作者:有点蓝 -- 发布时间:2020/2/21 14:50:00 -- Select Case e.DataCol.name Case "第一列" If DataTables.Contains(e.NewValue) Then Dim dr As DataRow = DataTables(e.NewValue).Find("第一列 = \'" & e.NewValue & "\'") If dr Is Nothing Then dr = DataTables(e.NewValue).AddNew dr("第一列") = e.NewValue End If dr("第二列") = e.DataRow("第二列") dr("第三列") = e.DataRow("第三列") End If Case "第二列","第三列" If DataTables.Contains(e.DataRow("第一列")) Then Dim dr As DataRow = DataTables(e.DataRow("第一列")).Find("第一列 = \'" & e.DataRow("第一列") & "\'") If dr Is Nothing Then dr = DataTables(e.DataRow("第一列")).AddNew dr("第一列") = e.DataRow("第一列") End If dr(e.DataCol.name) = e.DataRow(e.DataCol.name) End If End Select
|
||||
-- 作者:profit -- 发布时间:2020/2/21 14:56:00 -- Select Case e.DataCol.name Case "第一列" Dim dr As DataRow = DataTables("表C").Find("第一列 = \'" & e.OldValue & "\'") If dr Is Nothing Then dr = DataTables("表C").AddNew() dr("第一列") = e.DataRow("第一列") dr("第二列") = e.DataRow("第二列") dr("第三列") = e.DataRow("第三列") Else dr("第一列") = e.DataRow("第一列") End If Case "第二列","第三列" Dim dr As DataRow = DataTables("表C").Find("第一列 = \'" & e.DataRow("第一列") & "\'") If dr IsNot Nothing Then dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name) End If End Select 是不是把这段代码改成你那个?
|
||||
-- 作者:profit -- 发布时间:2020/2/21 14:58:00 -- 改成你写的这个代码,我在表A增加行,表B都没有增加行呢 |
||||
-- 作者:有点蓝 -- 发布时间:2020/2/21 15:12:00 -- 您原来的逻辑有问题,其它表和表A通过什么数据查询关联?假如表A增加2行,第一列都是“表B”,那么表B是无条件增加2行?还是查询表B第一列有没有“表B”,有才增加? |
||||
-- 作者:profit -- 发布时间:2020/2/21 15:42:00 -- 这些表都没有关联,如果关联,那么就是第一列进行关联,也就是分类进行关联。毕竟,如果用物品名称进行关联的话,在其他表中没有出现的物品名称,那么表A里面第一次录入时也找不到对应的表。 现在表A就相当于一个入库表,第一列就相当于分类列,其他表(如:表B,表C,表D,表E和表F)就是这一列里面的分类。 这样,我在物品需要入库时,就只用在表A增加一行,在添加这个物品的相关信息时,如果这个物品的分类为表B,那么这个物品的信息就自动在表B中增加,如果这个物品分类为表C,那么这个物品也能在表C中自动增加该物品的相关信息。 还有就是表A在增加两行时,第一列、第二列和第三列内容都一样是表B,那么表B里面就只增加一行,同时在数量列的数量求和。 我翻来覆去的看了帮助的跨表引用、同步输入和辅助录入这些,但还是没能知道怎么写这个代码,但是我现在一点头绪都没有。
|
||||
-- 作者:有点蓝 -- 发布时间:2020/2/21 16:07:00 -- 我不懂您的具体业务。不过一般情况下没有必要一个类别建一个表单独保存吧,要是有要是有几万的类别,还要建几万个表? 表Adatacolchanged Select Case e.DataCol.name Case "第一列","第二列","第三列","数量" If e.DataRow.IsNull("第一列") OrElse e.DataRow.IsNull("第二列") OrElse e.DataRow.IsNull("第三列") Then Else If DataTables.Contains(e.DataRow("第一列")) Then Dim dr As DataRow = DataTables(e.DataRow("第一列")).Find("第一列 = \'" & e.DataRow("第一列") & "\' and 第二列 = \'" & e.DataRow("第二列") & "\' and 第三列 = \'" & e.DataRow("第三列") & "\'") If dr Is Nothing Then dr = DataTables(e.DataRow("第一列")).AddNew dr("第一列") = e.DataRow("第一列") dr("第二列") = e.DataRow("第二列") dr("第三列") = e.DataRow("第三列") End If DataTables(e.DataRow("第一列")).DataCols("第一列").RaiseDataColChanged(dr) End If End If End Select 表B,datacolchanged Select Case e.DataCol.name Case "第一列","第二列","第三列" Dim kc As String = "第一列 = \'" & e.DataRow("第一列") & "\' and 第二列 = \'" & e.DataRow("第二列") & "\' and 第三列 = \'" & e.DataRow("第三列") & "\'" e.DataRow("数量") = DataTables("表A").Compute("sum(数量)", kc) End Select |
||||
-- 作者:profit -- 发布时间:2020/2/21 16:42:00 -- 你也知道,单位有固定资产,还经常要统计车辆啊,家具啊,办公电脑这些的,所以我就想弄个这样的项目好管理这些东西。其实像家具、办公电脑和一些易耗品还好弄,因为这些只要名称一样只要加数量就好,但是车辆和通信设备就不一样了,每辆车的车架号和发动机号都不一样,通信设备也是这样,ID号不一样使用人也不一样。而且分类也不可能有那么多,我只分了几类。我还是重新发个项目给您看看吧。
[此贴子已经被作者于2020/2/21 16:43:42编辑过]
|
||||
-- 作者:profit -- 发布时间:2020/2/21 16:49:00 -- 这个代码我知道,原来我也是用的这个。你也知道,单位上叫报这些的时候多,不能每次需要的时候在去统计,所以我才想了这个办法这样统一管理。如果我需要上报车辆信息的时候,我只需要打印车辆管理那个表,单位领导需要看单位物资的时候我就把库存打印出来,这不是要方便很多吗? |
||||
-- 作者:profit -- 发布时间:2020/2/21 16:53:00 -- 再说我分类也就是把办公桌和电脑这些固定资产分到一起为办公家电,就分了办公家电、低值易耗、车辆管理、通信设备、警用装备这五类,也不多啊。如果我把车辆放到库存里,那么车辆的信息跟其他物品的信息也不一样,那么我的库存表得需要弄多少列呢?你说是吧。 |