阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 2195|回复: 1

[原创] FineReport报表填报主键空值问题

[复制链接]
  • TA的每日心情
    郁闷
    2012-8-20 14:41
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    发表于 2013-5-2 23:01:18 | 显示全部楼层 |阅读模式
            
    - d$ u, t; J' J3 h1. 问题描述 5 L( h4 L. Z' X) \. h: v  ?
    在使用Web报表软件FineReport制作填报模板时可能会遇到以下问题:数据库中的A字段为主键,在定义报表填报属性时设置别的字段为主键,数据库中有一条记录是某个报表主键对应的字段值为空,当对这条记录进行更新时,却进行了插入提交。 3 I& a- G/ ^. O6 t' Z! E+ J& L, p
    注:在Java报表软件FineReport中,报表填报属性设置主键,即判断单元格中的值与数据库中是否相同,若有相同的则进行更新,若没有则进行插入。 3 I: t8 w) C% U9 x; C. F: ^/ r5 I
    2. 原因
    6 l- R# _: N! q当有空值时,那么在执行update语句时则where条件后面是“某字段=null”,而在填报属性中若where 某字段=null时,update语句会失效然后便会转向insert语句,这样就造成了插入重复数据的现象。 2 z- c  d, ~  C% C/ ^: G. r
    3. 解决方案 / {; s4 ]. n+ x- M2 l
    首先要知道可能为空的报表主键对应数据库中的数据类型,然后在报表填报属性设置里面给对应的字段的值设置公式:以字符串为例,字符串对应的空值就是空字符串”",则公式为if(单元格=null,”",单元格)。
    2 J+ T, `0 d" y; e5 S3 _下面以一个实例看一下问题。
    ! _) X3 `8 x/ M$ U3 N3.1 实例 . A2 T  ], C9 o4 k: }" J
    新建工作簿,将A1,B1,C1,D1单元格的控件类型定义成文本型。
    2 P; l7 Z! g. h1 m6 x" r3 `$ ]1 H以Employee表为例,此表中的EmpID为主键,然后在报表填报属性处设置EmpName和Sex为主键,最后的填报属性界面如下:
    & B7 W. F6 S5 U. B  f- S: Z' n7 W
    . _! Z; H, w/ s# R7 U2 }" i
    填报预览,在A1,B1,D1分别输入1,Jack,团员,C1不输入值,点击提交,提示提交成功。然后同样再在这几个单元格中分别插入A1,B1,D1中分别输入2,Jack,党员,C1同样不输入值,本来应该只剩一条后输入的记录的,但是两条都存在,如下图所示:
    3 e: J% u1 I8 x- d+ y   D9 A9 z9 g$ W

    # I3 i) ]& f% |: g, n  X9 I' S将有可能为空的字段即Sex字段对应的值改成if(C1=null,”",C1),然后将数据库中的这两个值删除掉,将这两条记录重新插入,数据库中只剩一条记录了即对第一条数据进行了更新操作,如下图所示: : W6 y+ ?/ O  w2 X# ]

    : E6 a* ]( i- Y
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    无聊
    昨天 19:20
  • 签到天数: 2105 天

    [LV.Master]伴坛终老

    发表于 2016-10-29 17:59:16 | 显示全部楼层
    支持一下
    # |7 V5 `& i0 H. v5 H' b, i2 A& R6 q- 本文出自阳光网驿--企业信息化专家,原文地址:http://bbs.sunwy.org/thread-220819-1-1.html
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表