以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于重复和条件AB表自动写入  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=131935)

--  作者:工匠
--  发布时间:2019/3/9 15:49:00
--  [求助]关于重复和条件AB表自动写入
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:重复及写入.foxdb


老师好:
       请教下,关于不允许重复和表A根据条件,点击检查写入将部分列写入到表B,请帮看看怎么实现,谢谢!

1.在编辑表A时,是将1.2.3.4列文本合并到第六列的,如果第六列内容在表B的第六列没有相同的内容,在点击“检查写入”时,把表A1.2.3.4列内容写入到表B的1.2.3.4列,并保持表A表B,否则不写入。
2.在编辑表B时,是将1.2.3.4列文本合并到第六列的,如果第六列内容在表B的第六列已经有相同的内容了,提示“第六列内容已经存在,请重新录入新的不重复内容”。(原表事件判断对编辑第六列有用,编辑1.2.3.4列没用)

谢谢!


[此贴子已经被作者于2019/3/9 16:23:19编辑过]

--  作者:有点蓝
--  发布时间:2019/3/9 16:35:00
--  
1、自己补充完整

For Each r As Row In Tables("表A").Rows
    Dim dr As DataRow = DataTables("表B").Find("第一列=\'" & r("第一列") & "\' and 第二列 =\'" & r("第二列") & "\'")
    If dr Is Nothing Then
        dr = DataTables("表B").AddNew
        dr("第一列") = r("第一列")
    End If
Next
DataTables("表A").Save()
DataTables("表B").Save()

2、去掉表B的DataColChanging事件代码

DataColChanged事件改为

Dim dr As DataRow = e.DataRow

Select Case e.DataCol.Name

    Case "第一列","第二列","第三列","第四列"

        If dr.IsNull("第一列") = False AndAlso dr.IsNull("第一列") = False AndAlso dr.IsNull("第三列") = False AndAlso dr.IsNull("第四列") = False Then

            If e.DataTable.Compute("Count([_Identify])","第一列 = \'" & dr("第一列") & "\' And 第二列 = \'" & dr("第二列") & "\' And 第三列 = \'" & dr("第三列") & "\' And 第四列 = \'" & dr("第四列") & "\'") > 1 Then

                MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

                e.DataRow(e.DataCol.Name) = e.OldValue \'取消输入

            Else

                dr("第六列") = dr("第一列") & "" & dr("第二列") & "" & dr("第三列") & "" & dr("第四列")

            End If

        End If

        

End Select