找回密码
 立即注册

QQ登录

只需一步,快速开始

lyz880524 讲师达人认证

高级会员

153

主题

458

帖子

1167

积分

高级会员

积分
1167

微信认证勋章元老葡萄讲师达人

lyz880524 讲师达人认证
高级会员   /  发表于:2020-8-24 15:05  /   查看:4333  /  回复:13
目前我们用的是ar11版本,基于H5展示报表
现在的场景是这样的:
我在IIS部署了一个ar server站点,绑定了N多个域名(比如:a.ar.website.com 和 b.ar.website.com 以及 c.ar.website.com)
并添加了一个配置文件 config.properties 文件,文件内容是
a.website.com.datatype=mysql
a.website.com.serverip=192.168.1.1
a.website.com.user=sa
a.website.com.pwd=saa

b.website.com.datatype=postgresql
b.website.com.serverip=192.168.1.2
b.website.com.user=sa
b.website.com.pwd=sab


c.website.com.datatype=mysql
c.website.com.serverip=192.168.1.3
c.website.com.user=sa
c.website.com.pwd=sac


当a.website.com 请求 a.ar.website.com 的时候,我会读取a站点的配置,得到数据库连接的IP和账号密码进行数据查询
b.website.com ->b.ar.website.com
c.website.com ->c.ar.website.com
同理a

现在我所有的sql都是写在程序的业务逻辑中,我现在要将所有的sql逻辑写到报表文件中,
那么报表设计器中如何动态的设置报表数据源的类型?
和动态的设置连库的字符串?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

13 个回复

倒序浏览
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-8-24 15:49:48
沙发
您好,这个你可以参考这个博客,后端通过代码进行数据源的修改:https://gcdn.grapecity.com.cn/fo ... &extra=page%3D6

你使用的是H5的方式进行报表的加载,那么你这个方法需要写到对应的报表服务的方法中,进行数据源的修改
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-8-24 16:09:00
板凳
写这里
public class ReportWebService : GrapeCity.ActiveReports.Web.ReportService
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-8-24 16:53:26
地板
我电话不是给你说了,自己默认的服务是没办法写写这个方法的,需要自己新建一个新的报表服务,在这个报表服务的.cs文件下进行数据源的代码修改
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-8-24 17:10:43
5#
按照这个配置
https://www.grapecity.com.cn/blogs/activereportsmysql
提示“当前建松模式信息时error;odbc驱动管理器未发现数据源名称并且未指定默认驱动程序”数据提供器引发异常,我安装的是
mysql-connector-odbc-8.0.17-winx64.msi


连接字符串为:
Driver={MySQL ODBC 8.0.17 UNICODE Driver};Server=IPort=3306;Database=dba;User=rootassword=123456;Option=3;
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-8-24 18:02:15
6#
这个问题就是说没,你后端代码写的方法有问题。你把你的后端代码的写法发过来我看看。
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-8-24 18:15:32
7#
我现在就是新建个报表,里边直接连msql8就报错,提示找不到驱动;

我现在web服务代码如下

public class ReportWebService : GrapeCity.ActiveReports.Web.ReportService
    {
        PageReport pageReport;
        PageDocument _pageDocument;
        string domainName;
        [WebMethod]
        protected override object OnCreateReportHandler(string reportPath)
        {
            try
            {
                if (AppTools.Tools.CheckValue(reportPath))
                {
                    //domainName = HttpContext.Current.Request.Url.Host.Replace(".ar","");
                    var pname = reportPath;
                    pageReport = (PageReport)base.OnCreateReportHandler("report/" + pname + ".rdlx");
                    pageReport.Report.Name = pname;
                    _pageDocument = new PageDocument(pageReport);

                    pageReport.Report.DataSources[0].ConnectionProperties.ConnectString = "Driver={MySQL ODBC 8.0.17 UNICODE Driver};Server=192.168.1.1ort=3306;Database=db;User=rootassword=123456;Option=3;";

                    //pageReport.Document.LocateDataSource += Document_LocateDataSource;

                    return pageReport;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception e)
            {
                AppTools.LogServer.WriteTextLog(AppTools.LogType.Error, "ReportWebService.asmx-OnCreateReportHandler", e.Message, DateTime.Now);
                return null;
            }
        }
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-8-24 18:46:47
8#
提示“odbc驱动管理器未发现数据源名称并且未指定默认驱动程序”的问题我解决了,我安装了一下32位的odbc驱动。忽略ar是32位的了。我系统是64位的
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-8-25 09:22:54
9#
好的,问题解决 了就好
回复 使用道具 举报
lyz880524讲师达人认证
高级会员   /  发表于:2020-8-25 09:34:54
10#
目前是实现了后台切换数据源;但是有个新问题我再请教一下:
比如A表我之前用的是dataset数据源,也就是说我后台执行sql后返回dataset到报表,进行展示,
现在我改成odbc直连数据库就有个这个问题:
比如A表,我后台写了8,9个sql,我后台执行完8,9个sql以后,最终用程序拼装成一个datatable返回到报表;
现在我改成odbc直连,要在一个数据源下新建8,9个数据集,这时我没法拼装整理我这8,9个数据集,将这8,9个数据集展示到一张矩表上,这8,9个数据集是是需要交叉处理的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部