excel导入,智慧提交前先备份将要更新的资料至另一个资料库表接着点击提交之后再将资料更新或新增

目前已经可以做到excel导入,并且智慧提交更新及新增资料

但现在还需要做一个功能就是将有更新的更新前资料备份到另一个表上

那么FR有办法做到点击提交时

判断此次提交相同主key的资料先行备份至另一个资料表,再将此次的资料提交上去吗

若是新增的资料则不需要备份

FineReport 帆软用户AUrhSUV0k1 发布于 2024-10-21 09:35
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
帆软用户AUrhSUV0k1Lv2见习互助
发布于2024-10-23 13:24

设了两个SQL,一个提交A表,一个提交B表,将B表的主key与A表的主KEY做相等判断就行了

最佳回答
0
华莉星宸Lv7资深互助
发布于2024-10-21 09:45

这个标准不支持哦

可以增加一个版本控制,每次导入一个版本的数据

查询的时候 可以直接对比版本

  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 这样确实方便,但我不是要对比,只是想要自动化留存资料 只有更新过的资料才要进行留存
    2024-10-21 10:13 
  • 华莉星宸 华莉星宸 回复 帆软用户AUrhSUV0k1(提问者) 要实现 自动留存资料 ,实现有点困难哦。在做一个历史记录表,只要是提交的数据都往里面保存,在用存储过程来判断那些是更新的 那些是插入的
    2024-10-21 10:22 
  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 回复 华莉星宸 也就是说做另一个报表,将同一份excel汇入,以人工的方式来筛选哪几笔是更新资料是吗
    2024-10-21 10:36 
  • 华莉星宸 华莉星宸 回复 帆软用户AUrhSUV0k1(提问者) 不是哈 可以同时设置两个填报属性,一个是正常的智能提交 一个只做插入
    2024-10-21 10:42 
  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 回复 华莉星宸 我要备份到另一张表的数据一直找不到办法可以提取出来,感觉FR上的条件框或是SQL框的限制比较大
    2024-10-21 15:57 
最佳回答
0
shirokoLv6资深互助
发布于2024-10-21 09:55

数据放两份,导入的时候只会覆盖左边的一份,也就只会智能提交左边的部分,右边还是旧的数据,可以多添加一个提交,专门提交右边的部分到备份数据库

image.png

  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 因为备份的资料并不是全部备份,而是只备份更新过的资料,这边用主KEY做判断的话是使用过滤还是SQL来做呢 另外,多添加一个提交是透过JS来做吗
    2024-10-21 10:06 
  • shiroko shiroko 回复 帆软用户AUrhSUV0k1(提问者) 提交属性那边,左边不是可以加吗,加一个提交就行了。 判断你可以在提交条件里判断,或者在单元格加一列计算出"是否新增"的标识
    2024-10-21 11:02 
  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 回复 shiroko 如果是这样的话,那麽我右边代入的资料有办法自动代入吗
    2024-10-21 15:14 
  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 回复 shiroko 我有一版是照你说的做成两边的表格,我需要的是假设excel导入后,提交时,提交的数据主key与数据库里主key相同的资料时,将数据库里原本的数据备份到另一张表,同时将数据更新,而原本就没有的数据则直接新增插入,但不管我怎麽设定条件,或是因为FR本身的限制,右边的表格一直跑不出值
    2024-10-21 15:56 
最佳回答
0
CD20160914Lv8专家互助
发布于2024-10-21 10:54

你在数据库里面操作吧,写一个触发器,当有数据更新的时候,数据库会按你设置的先备份到另一个表,再把当前表的数据对应更新过的数据删除掉,然后你的新插入数据不会影响也不会重复

具体使用触发器,你可以自己百度找教程,很多的。

一假设已有表结构和测试数据

假设有一个表名为OriginalTable,包含字段id(主键)、column1、column2等。先插入一些测试数据:

INSERT INTO OriginalTable (id, column1, column2) VALUES (1, 'value1', 'value2'), (2, 'value3', 'value4'), (3, 'value5', 'value6'), (4, 'value7', 'value8'), (5, 'value9', 'value10'), (15, 'value11', 'value12'), (28, 'value13', 'value14'), (30, 'value15', 'value16');

二创建备份表

创建一个名为BackupTable的表,结构与OriginalTable相同

SELECT TOP 0 * INTO BackupTable FROM OriginalTable;

三创建触发器

创建一个AFTER UPDATE触发器,当满足条件的数据被更新时,将这些数据备份到BackupTable,然后从OriginalTable中删除,并重新插入新数据

CREATE TRIGGER trg_BackupAndDeleteOnCondition ON OriginalTable AFTER UPDATE AS BEGIN    -- 将满足条件的数据插入到备份表    INSERT INTO BackupTable SELECT * FROM deleted WHERE id IN (5, 15, 28);        -- 从原表中删除满足条件的数据    DELETE FROM OriginalTable WHERE id IN (5, 15, 28); END;

  • 帆软用户AUrhSUV0k1 帆软用户AUrhSUV0k1(提问者) 刚才问了,目前这个触发器已经有作用了,似乎是无法再新增新的,我有想了另一个办法,但好像也无法使用 // 假设已经从Excel导入数据,取得所有行数据 var rows = widget.getAllRowData(); for (var i = 0; i 0) { // 若存在,执行备份操作 var backupSql = "INSERT INTO SSSGCN (SSSGCN01,SSSGCN02,SSSGCN03,SSSGCN04,SSSGCN05,SSSGCN06,SSSGCN07,SSSGCN08,SSSGCN09,SSSGCN10,SSSGCN11,SSSGCN12,SSSGCN13,SSSGCN14,SSSGCN15,SSSGCN16,SSSGCN17,SSSGCN18,SSSGCN19,SSSGCN20,SSSGCN21,SSSGCN22,SSSGCN23,SSSGCN24,SSSGCN25,SSSGCN26,SSSGCN27,SSSGCN28,SSSGCN29,SSSGCN30,SSSGCN31,SSSGCN32,SSSGCN33,SSSGCN34,SSSGCN35,SSSGCN36,SSSGCN37,SSSGCN38,SSSGCN39,SSSGCN40,SSSGCN41,SSSGCN42,SSSGCN43,SSSGCN44,SSSGCN45,SSSGCN46,SSSGCN47) " + "SELECT SSSGCN01,SSSGCN02,SSSGCN03,SSSGCN04,SSSGCN05,SSSGCN06,SSSGCN07,SSSGCN08,SSSGCN09,SSSGCN10,SSSGCN11,SSSGCN12,SSSGCN13,SSSGCN14,SSSGCN15,SSSGCN16,SSSGCN17,SSSGCN18,SSSGCN19,SSSGCN20,SSSGCN21,SSSGCN22,SSSGCN23,SSSGCN24,SSSGCN25,SSSGCN26,SSSGCN27,SSSGCN28,SSSGCN29,SSSGCN30,SSSGCN31,SSSGCN32,SSSGCN33,SSSGCN34,SSSGCN35,SSSGCN36,SSSGCN37,SSSGCN38,SSSGCN39,SSSGCN40,SSSGCN41,SSSGCN42,SSSGCN43,SSSGCN44,SSSGCN45,SSSGCN46,SSSGCN47 FROM SSSGCM " + "WHERE SSSGCM01 = '" + primaryKey + "'"; executeSQL(backupSql); } } FR里好像没有var rows = widget.getAllRowData()和executeSQL(backupSql)的用法
    2024-10-21 15:13 
  • CD20160914 CD20160914 回复 帆软用户AUrhSUV0k1(提问者) 这个一二句说不清楚。得找一个懂这方面的,在你电脑上面调试,我只是提供这个方法
    2024-10-21 15:15 
  • 3关注人数
  • 149浏览人数
  • 最后回答于:2024-10-23 13:24
    请选择关闭问题的原因
    确定 取消
    返回顶部