2016-04-26 36 views
0

私はAccessデータベースを持っています。このデータベースには、テーブルとストアドクエリも含まれています。私の目標は、Java Ucanaccess(JDBCコネクタ)を使用してAccessファイルに格納されたデータを使用し、Jaspersoftでレポートを作成することです。Java Ucanaccessを使用してms-Accessでデータとストアドクエリを回復する

Connection conn = ConnexionUtils.getConnection(); 
     Statement stmt = conn.createStatement(); 
     String query = "select * from Tab_BOUT"; 
     ResultSet rs = stmt.executeQuery(query); 
     int cpt = 0; 
     while (rs.next()) { 
      int numColumns = rs.getMetaData().getColumnCount(); 
      for (int i = 1 ; i <= numColumns ; i++) { 
       if (i > 1) System.out.print(", "); 
       String columnValue = rs.getString(i); 
       System.out.print(columnValue + " " + rs.getMetaData().getColumnName(i)); 
      } 
     } 

しかし、問題は、私はAccessで他のクエリを使用するオブジェクトを持っているということである。通常のテーブル上のクエリ

が働きます。私は、クエリを呼び出すしようとするので、それは動作しません:

「RQT_STORED」を、例えば、含まれています

"SELECT Tab_STO_livraisons.[LIV-TIE_num], Req_BOUT_articles_tous.ART_code_EAN FROM (Tab_STO_livraisons INNER JOIN Tab_STO_détails ON (Tab_STO_livraisons.LIV_num = Tab_STO_détails.[STO-LIV_num]) AND (Tab_STO_livraisons.[LIV-TIE_num] = Tab_STO_détails.[STO-TIE_num])) INNER JOIN Req_BOUT_articles_tous ON Tab_STO_détails.[STO-ART_id] = Req_BOUT_articles_tous.ART_code ORDER BY Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_détails.[STO-ART_id]"; 

クエリは、Accessで動作しますが、ないJavaで。誰かがこれを行う方法を知っているか、より良い解決策を持っていますか?

EDIT:Select * from Req_VENT_librairie_nouvelles_pages_analyse

アクセスにおける実際のクエリ:

SELECT Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_livraisons.LIV_date_livraison, Tab_STO_livraisons.LIV_type_facturation, Tab_STO_détails.[STO-ART_id], Req_BOUT_articles_tous.ART_code_EAN, Tab_STO_détails.STO_nombre, Tab_STO_livraisons.LIV_bdc, Tab_STO_livraisons.LIV_fact_51, Tab_STO_livraisons.LIV_fact_31 
FROM (Tab_STO_livraisons INNER JOIN Tab_STO_détails ON (Tab_STO_livraisons.LIV_num = Tab_STO_détails.[STO-LIV_num]) AND (Tab_STO_livraisons.[LIV-TIE_num] = Tab_STO_détails.[STO-TIE_num])) INNER JOIN Req_BOUT_articles_tous ON Tab_STO_détails.[STO-ART_id] = Req_BOUT_articles_tous.ART_code 
ORDER BY Tab_STO_livraisons.[LIV-TIE_num], Tab_STO_livraisons.LIV_num, Tab_STO_détails.[STO-ART_id]; 

と、エラーメッセージ:

net.ucanaccess.jdbcここ は、クエリの例です。 UcanaccessSQLException:UCAExc ::: 3.0.4ユーザーに特権がないかオブジェクトが見つかりません:REQ_VENT_LIBRAIRIE_NOUVELLES_PAGES_ANALYSEjava.sql.SQLSyntaxErrorException:ユーザーに権限がないか、オブジェクトが見つかりません:java.sql.SQLSyntaxErrorException:ユーザーが特権を持っていないか、またはオブジェクトが見つかりません:Query.java.UnicaccessStatement.executeQuery(UcanaccessStatement.java:211)at view.QueryData.main(QueryData.java:32)原因:組織でorg.hsqldb.jdbc.JDBCStatement.fetchResult(不明なソース) でorg.hsqldb.jdbc.JDBCUtil.sqlException(不明なソース) でorg.hsqldb.jdbc.JDBCUtil.sqlException(不明なソース) でREQ_VENT_LIBRAIRIE_NOUVELLES_PAGES_ANALYSE 。 org.hsqldb.HsqlException:によって引き起こさhsqldb.jdbc.JDBCStatement.executeQuery net.ucanaccess.jdbc.UcanaccessStatement.executeQueryで(不明なソース) (UcanaccessStatement.java:208) ... 1もっと ユーザーが権限またはオブジェクトを欠い見つからない:REQ_VENT_LIBRAIRIE org.hsqldb.SchemaManager.getTableでorg.hsqldb.error.Error.error(不明なソース) でorg.hsqldb.error.Error.error(不明なソース) で_NOUVELLES_PAGES_ANALYSE (不明なソース)org.hsqldbで 。組織でParserDQL.readTableName(不明なソース)org.hsqldb.ParserDQL.readTableOrSubqueryで (不明なソース)org.hsqldb.ParserDQL.XreadTableReferenceで (不明なソース)org.hsqldb.ParserDQL.XreadFromClauseで (不明なソース) 。 org.hsqldb.ParserDQL.XreadQueryPrimaryでorg.hsqldb.ParserDQL.XreadSimpleTable(不明なソース) でorg.hsqldb.ParserDQL.XreadQuerySpecification(不明なソース) でhsqldb.ParserDQL.XreadTableExpression(不明なソース) (不明なS ource)org.hsqldb.ParserDQL.XreadQueryExpressionでorg.hsqldb.ParserDQL.XreadQueryExpressionBody(不明なソース) でorg.hsqldb.ParserDQL.XreadQueryTerm(不明なソース) (不明なソース) で org.hsqldb.ParserDQL.compileCursorSpecificationで(不明なソース) (org.hsqldb.ParserCommand.compilePart)org.hsqldb.Session.execute(不明なソース) ... 4もっと

+0

私の英語はあまりよくなく、 "RequêteAccess"をQueryに翻訳しようとしましたが、実際には "RQT_STORED"が "View"と呼ばれていると思います – pathat0r

+1

質問を編集して実際のSQL文を表示してください(例えば、 'SELECT * FROM RQT_STORED' ...?)と実行しようとしたときに受け取ったエラーメッセージ(またはより良い、完全なスタックトレース)を使用しています。 UCanAccessは(大部分の)保存されたSELECTクエリをサポートしようとしているので、あなたのことに特有のものがあるかもしれません。また、UCanAccessの最新バージョン(現在はバージョン3.0.4)を使用していることを確認してください。 –

+1

それは価値がありますが、私はちょうど質問からコピーされたクエリを使用して 'SELECT * FROM RQT_STORED'を試みました。そしてUCanAccess 3.0.4は苦情を受けませんでした。 –

答えて

2

でexecuteDirectStatement(不明なソース) は私の意見のいくつかは、MySQLデータベースを照会しています。それは大きな問題だろうか?

はい。 UCanAccessは、Accessリンクテーブル(別のAccessデータベースのテーブルを指すリンクテーブル)で動作しますが、ODBCリンクテーブル(MySQLまたはSQL ServerのようなODBCデータソース内のテーブルを指すリンクテーブル)では機能しません。

関連する問題