2012-05-21 2 views
1

도와주세요. Crystal Reports xi를 사용하여 만든 보고서를 열 수있는 스윙 응용 프로그램을 개발 중입니다. 내가하려고하는 것은 보고서를 열고 보고서의 연결 정보를 전달하여 보고서의 데이터베이스를 동적으로 변경할 수 있도록하는 것입니다. 그러나 어떤 이유로 그것은 작동하지 않으며 보고서는 처음에 설정된 데이터베이스에서 정보를 생성합니다. 누군가 내가 뭘 잘못했는지 말해 줄 수 있습니까? Btw 내가 com.crystaldecisions.sdk.occa.report.application.ReportClientDocument를 사용하려고하면 서버를 찾을 수 없다는 오류가 발생합니다. 하지만 import com.crystaldecisions.reports.sdk.ReportClientDocument를 사용하려고 할 때; 작동하지 않습니다. 나는 보고서 서버가 무엇인지 모르며 컴퓨터에서 설정했다고 생각하지 않습니다. 도와주세요. 여기 내 코드는 다음과 같습니다.자바 스윙을 사용하여 크리스탈 보고서에서 런타임시 데이터베이스 연결을 전환하는 방법

import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument; 

ReportClientDocument rpt = new ReportClientDocument(); 
    rpt.open(reportPath+fileName, 0); 
    Fields fields = null; 

    IConnectionInfo connInfo = rpt.getDatabaseController().getConnectionInfos(null).getConnectionInfo(0); 

    PropertyBag innerProp = connInfo.getAttributes(); 
     innerProp.clear(); 

     PropertyBag propertyBag = new PropertyBag(); 
     propertyBag.put("Server Type", "JDBC (JNDI)"); 
     propertyBag.put("Database DLL", "crdb_jdbc.dll"); 
     propertyBag.put("Database Class Name", "com.mysql.jdbc.Driver"); 
     propertyBag.put("Use JDBC", "true"); 
     propertyBag.put("Server Name", DBConnect.getServer()); 
     propertyBag.put("Generic JDBC Driver Behavior", "No"); 
     propertyBag.put("URI", "!com.mysql.jdbc.Driver!jdbc:mysql://"+DBConnect.getServer()+":"+DBConnect.getPort()+"/"+DBConnect.getDatabase()+"!ServerType=29!QuoteChar=`"); 

     connInfo.setAttributes(innerProp); 
     connInfo.setPassword(DBConnect.getPassword()); 
     connInfo.setUserName(DBConnect.getUsername()); 




    int replaceParams = DBOptions._ignoreCurrentTableQualifiers + DBOptions._doNotVerifyDB; 
    rpt.getDatabaseController().replaceConnection(rpt.getDatabaseController().getConnectionInfos(null).getConnectionInfo(0), connInfo, fields, replaceParams); 

답변

1

propertyBag에 추가 된 속성을 사용하고 있지 않습니다. innerProp에 속성을 추가하거나 propertyBag.put (...)을 innerProp.put (...)으로 바꾸거나 connInfo.setAttributes (innerProp)를 connInfo.setAttributes (propertyBag)로 변경해야합니다. 나는 첫 번째 접근법을 제안한다.

+0

내 실수. 그러나 실제로이 코드를 수정 된 propertyBag와 함께 사용하면 serverNotFound 오류가 발생합니다. 그것에 대한 도움이 필요하십니까? – John

+0

아마도 DBConnect에 문제가있을 수 있습니다. – tibtof

+0

제 DBConnect가 정상적으로 작동합니다. 나는 그것에 의존하는 다른 클래스들을 가지고있다. 이 정확한 오류 메시지는 다음과 같습니다. com.crystaldecisions.sdk.occa.report.lib.ReportSDKServerException : 서버가 지정되지 않았습니다. 오류 코드 : -2147217390 오류 코드 이름 : serverNotFound. 내가 com.crystaldecisions.sdk.occa.report.application.ReportClientDocument com.crystaldecisions.reports.sdk.ReportClientDocument 대신 가져 오기를 사용할 때마다 항상 오류가 발생합니다. – John

관련 문제