0

このコードは、コードがインストールされているサーバーマシンでは正常に機能しますが、クライアントマシンからレポートを印刷しようとすると、機能しません。

この問題を解決するのを手伝ってください。

CrystalDecisions.CrystalReports.Engine.ReportDocument doc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
            string crptpath;
            crptpath = Server.MapPath("rpt_Water_FO_Gas_Consumption.rpt");
            doc.Load(crptpath);

            //For Local Server
            doc.SetDatabaseLogon("user_name", "password", "localhost", "ktem");

            //For Online Server
            //doc.SetDatabaseLogon("user_name", "password", "ip_address", "ktem");

            da = new SqlDataAdapter(cmd);
            dt = dbcon.filldataset(cmd);

            doc.Database.Tables[0].SetDataSource(dt.Tables[0]);
            CrystalReportViewer1.ReportSource = doc;

            //For Print Report
            CrystalReportViewer1.PrintMode.Equals(true);
4

2 に答える 2

0

あなたが提示したコードには答えがあります:

     //For Local Server
        doc.SetDatabaseLogon("user_name", "password", "localhost", "ktem");

データベースはサーバーで実行されています。サーバーで動作します。とった?OK、上記のコードでは、コードが実行されているときのlocalhostはサーバーマシンを表します。したがって、レポートはデータベースがどこに存在するかを知っています。

クライアントマシンで同じコードを実行すると、ローカルホストはクライアントマシンを表し、レポートはデータベースがないと文句を言います。

ローカルホストをサーバーのIPアドレスに置き換えます。[コメントされたコードから取得]

        //For Online Server
        //doc.SetDatabaseLogon("user_name", "password", "12.121.114.220", "ktem");
于 2013-01-02T12:28:52.273 に答える
0

クライアントに crptpath をロードするときにパスを確認し、パスが正しい場合は、サーバーが rpt へのアクセスを許可していることを確認します。

于 2013-01-02T12:02:16.773 に答える