Foxtable(狐表)用户栏目专家坐堂 → 关于复制数据行


  共有2463人关注过本帖树形打印复制链接

主题:关于复制数据行

帅哥哟,离线,有人找我吗?
裴保民
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:8301 威望:0 精华:0 注册:2017/4/3 15:01:00
关于复制数据行  发帖心情 Post By:2019/2/10 12:18:00 [只看该作者]

有两张表其中一张表有A,B,C,D,E字段。怎么设置当修改数据时,只要C,D,C字段任何一个字段的值发生变化时就复制一条该条记录的指定字段到另一张表中作为历史变更记录呢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85329 积分:427820 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/10 13:49:00 [只看该作者]

参考

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
裴保民
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:8301 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/2/11 12:14:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85329 积分:427820 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/11 12:58:00 [只看该作者]

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

 

select case e.datacol.name

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

        '代码

end select


 回到顶部
帅哥哟,离线,有人找我吗?
裴保民
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:8301 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85329 积分:427820 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/11 14:43:00 [只看该作者]

 

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

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
裴保民
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:8301 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85329 积分:427820 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
裴保民
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1303 积分:8301 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/2/11 19:40:00 [只看该作者]

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

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:33537 积分:170797 威望:0 精华:8 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/11 20:24:00 [只看该作者]


 回到顶部
总数 12 1 2 下一页