以文本方式查看主题

-  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=130880)

--  作者:裴保民
--  发布时间:2019/2/10 12:18:00
--  关于复制数据行
有两张表其中一张表有A,B,C,D,E字段。怎么设置当修改数据时,只要C,D,C字段任何一个字段的值发生变化时就复制一条该条记录的指定字段到另一张表中作为历史变更记录呢?
--  作者:有点甜
--  发布时间:2019/2/10 13:49:00
--  

参考

 

下载信息  [文件大小:312.0 KB  下载次数:22]
图片点击可在新窗口打开查看点击浏览该文件:操作日志2017.table


--  作者:裴保民
--  发布时间:2019/2/11 12:14:00
--  
甜老师不是我想要的结果:
我的意思是:
在窗体中如果修改数据时,只要数据列C、D、E、F的任何一列的数据发生改变保存数据时才执行一次复制动作来记录历史数据更改记录。
那个实例是只要每一个列的数据发生变化或增加数据后就执行一次,不是我想要的结果

--  作者:有点甜
--  发布时间:2019/2/11 12:58:00
--  

你在datacolchanged事件,判断列名即可,比如

 

select case e.datacol.name

    case "C", "D", "E", "F"

        \'代码

end select


--  作者:裴保民
--  发布时间:2019/2/11 13:39:00
--  

select case e.datacol.name

    case "C", "D", "E", "F"

        \'代码

end select




甜老师还是不行:

假如我修改了某一行数据的C列和D列 ,他会在数据操作日志表中增加两条记录的

我的意思只要指定表不是所有表C", "D", "E", "F"任何一列发生变化时只增加一条记录就可以了,这个动作是在窗体修改数据按钮中完成的。

[此贴子已经被作者于2019/2/11 13:41:15编辑过]

--  作者:有点甜
--  发布时间:2019/2/11 14:43:00
--  

 

那你去编写beforesavedatarow事件或者在你窗口按钮那里写代码,不要编写datacolchanged事件。

 

 


--  作者:裴保民
--  发布时间:2019/2/11 16:05:00
--  
Select Case e.DataCol.name
    Case "第一列", "第二列"
If e.DataTable.Name <> "数据操作日志" Then
    If e.DataRow.RowState = 2 Then
        Return
    Else
        Dim dr As DataRow = DataTables("数据操作日志").AddNew
        dr("ID") = e.DataRow("_Identify")
        dr("用户") = User.Name
        dr("涉及表") = e.DataTable.Name
        dr("涉及列") = e.DataCol.Name
        dr("涉及行") = e.DataRow("_Identify")
        dr("时间") = Date.Now
        dr("操作") = """" & e.OldValue &  """ 改成了 """ & e.NewValue & """"
        Dim str As String = ""
        For Each c As DataCol In e.DataTable.DataCols
            str += c.Name & "=" & e.DataRow(c.Name) & "|"
        Next
        dr("原行数据") = str
    End If
End If
End Select


编写beforesavedatarow事件时无法保存

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20190211161133.png
图片点击可在新窗口打开查看


另外窗口修改按钮的代码怎么写呢? 修改之前的数据和之后的数据怎么取值呢?怎么判断某一个字段是否改变了?

[此贴子已经被作者于2019/2/11 19:16:01编辑过]

--  作者:有点甜
--  发布时间:2019/2/11 19:34:00
--  

If e.DataTable.Name <> "数据操作日志" Then
    Dim dr As DataRow = DataTables("数据操作日志").AddNew
    dr("ID") = e.DataRow("_Identify")
    dr("用户") = User.Name
    dr("涉及表") = e.DataTable.Name
    dr("涉及行") = e.DataRow("_Identify")
    dr("时间") = Date.Now
    Dim str As String = ""
    For Each c As DataCol In e.DataTable.DataCols
        str += c.Name & "=" & e.DataRow(c.Name) & "|"
    Next
    dr("原行数据") = str
End If


--  作者:裴保民
--  发布时间:2019/2/11 19:40:00
--  
田老师是不是写到按钮点击事件上呢?主要是单击修改数据时只要符合条件就做复制动作的
[此贴子已经被作者于2019/2/11 19:42:34编辑过]

--  作者:有点蓝
--  发布时间:2019/2/11 20:24:00
--  
修改之前的数据:http://www.foxtable.com/webhelp/scr/2369.htm