(高深问题)FR报表动态获取数据库连接的问题。

楼主
我是社区第36728位番薯,欢迎点我头像关注我哦~
这边是一个财务代理记账的公司,用的某财务软件,每个公司的账务就一个数据库文件。目前有200多个数据库。
我FR分析模板已经做好,想要应用到每个数据库实体中去,感觉特别困难。

虽然有这么200多个(后面还会不定时增加数据库),但每个数据库表都一样,可以共用一个分析模板。所以不想去建立几百个数据库连接和模板。


经过查询,财务软件中有单独的一个数据库名称为AAA的库,下面某张表是记录了公司名称和数据库名称的。类似这样:


sql数据库中,甲有限公司这个数据库对应的数据库名也是A001。

所以我想查询出来这个表,在分析模板中选择不同的公司名称,自动就把不同的数据库名传(A001)递给数据库连接文件中的那个url;

这样数据库连接就自动切换为对应的数据库名称,就用一个模板解决了多个数据库名不用写多个数据库连接和多个分析模板。



但是FR中的数据库链接我没法用参数或者动态获取,想要动态获取数据库名称,并给在该数据名称下查询,不知道应该怎么操作呢?请大神指点。
编辑于 2021-1-11 09:42  
分享扩散:

沙发
发表于 2021-1-5 16:51:21
如果不能在软件中操作的话,我在想,这个数据库链接url中不是也存放了数据库名吗?这个url这一串数值,是不是也是存放在帆软的某个表中?直接对这个进行改造操作,不知道可行不?
因为如果不能这么操作的话,就需要建立几百个链接和模板,太浪费资源了,而且后面还会不断新增,又得重复,实在是太低效了。

编辑于 2021-1-5 17:12  
板凳
发表于 2021-1-6 18:17:11
看的人多,大家都发表的意见啊。
地板
发表于 2021-1-11 09:42:02
看来这个问题,大家都束手无策
5楼
发表于 2021-1-12 09:04:47
有没有一个系统库的表 ,专门存有这些账套的数据库的信息。如果有,可以调用这个表的信息,通过SQL拼接的方式。在SQL 里 FROM 通过IF()函数拼接。没有就自己建立一个关系表。

SELECT
        a.unit,
        a.unitname
FROM
        ${if(len(para_date)=0,"v_cash_"+year(),"v_cash_"+left(para_date,4))}


我上面para_date 是参数栏上一个日期控件,通过日期控件查询对应的年度的视图。

6楼
发表于 2021-1-27 05:49:40 发布于APP客户端
直接用数据集参数就行了,建一张基础表里面存放各个公司的数据库名称,然后通过参数获取数据库名称就行了,大致是这样,具体的要看你具体需求
7楼
发表于 2021-2-2 14:15:50
我遇到过这个问题,是用存储过程解决的。
1、查询参数栏的参数能指定到需要查询的数据库-数据表(选择客户,查询到对应的数据库和表)
2、新建存储过程数据集。其中存储过程中定义的两个变量,一个是数据库一个是数据表,均来源于第一步的参数
3、在存储过程中拼接查询语句
原理类似这样,我也是初学,仅供参考
8楼
发表于 2021-3-8 14:58:01
我就学习了。。。
9楼
发表于 2022-1-28 00:19:08
你可以定义两个数据库连接,login_db:登录用的数据库连接,work_db:各报表数据源所引用的【动态】数据库连接。
1、重点是work_db,定义这个数据连接时,数据库名不要写死,用全局参数定义,如:jdbc:sqlserver://localhost:1433;databaseName=${work_db},最后边的数据库名用全局参数${work_db}。
2、然后定义一个来自login_db的服务器数据集【now_db】用于获取所要连接的数据库名,比如 select no from db where name = '${now_db}',其中'${now_db}'为所选数据库对应的参数。
3、接着定义一个全局参数${work_db},值为公式:VALUE("now_db",1,1)
4、最后是所有报表的数据源代码都指向work_db
10楼
发表于 2022-2-7 20:22:50

我是用kettle解决的,这样可以定期把数据拷贝出来,避免直接在原数据库上操作,我是读取了用友的账套清单表,然后得到各账套的账套号,通过kettle循环从各账套中取数,加到一个凭证总表里,然后就想怎么取数据都可以了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表