Hallo,
mein Java-Programm soll mir die Ergebnisse einer SELECT-Abfrage visualisieren. Die Visualisierung funktioniert. Nun möchte ich zusätzlich verschiedene Werte gezählt bekommen (Anzahl der verschiedenen Fehlerarten, Fehlerorte, Mitarbeiter etc.). Die Datenbank ist eine MS Access DB. Das entsprechende Coding zur Abfrage sieht wiefolgt aus:
Sobald die erste Berechnung (also Block 2) ausgeführt werden soll, wird eine Fehlermeldung generiert. Die Berechnung der Anzahl (also die letzten beiden Blöcke) habe ich bereits im Einsatz an anderer Stelle und dort funktioniert das auch. Nun sagt mir mein Programm jedes Mal an dieser oben genannten Stelle, dass er O_ID und A_ID nicht finden kann. Verstehe ich nicht, denn ich sage doch jeweils als SELECT: SELECT DISTINCT Fehler.O_ID bzw. SELECT DISTINCT Fehler.A_ID.
Ich habe mir die query auch schon ausdrucken lassen und wenn ich die SELECT-Abfrage direkt in Access ausführe, dann erhalte ich auch das Ergebnis. Hat jmd eine Idee, wo das Problem liegen kann?
Vielen Dank im Voraus!
mein Java-Programm soll mir die Ergebnisse einer SELECT-Abfrage visualisieren. Die Visualisierung funktioniert. Nun möchte ich zusätzlich verschiedene Werte gezählt bekommen (Anzahl der verschiedenen Fehlerarten, Fehlerorte, Mitarbeiter etc.). Die Datenbank ist eine MS Access DB. Das entsprechende Coding zur Abfrage sieht wiefolgt aus:
Java:
// BLOCK 1 zur Anzeige der Ergebnisse
query = "SELECT Fehler.F_ID AS Fehlernummer, Fehler.O_ID AS Fehlerortnummer, Fehlerort.O_Bezeichnung AS Fehlerortbezeichnung, Fehlerort.O_Lage_X AS [Fehlerort Lage X], Fehlerort.O_Lage_Y AS [Fehlerort Lage Y], Quadrant.Q_ID AS Quadrant, Fehler.A_ID AS Fehlerartnummer, Fehlerart.A_Art AS Fehlerart, Fehler.F_Lage_X AS [Fehler Lage X], Fehler.F_Lage_Y AS [Fehler Lage Y], Fehler.B_ID AS Baureihe, Fehler.F_Produktionsnummer AS Produktionsnummer, Fehler.F_Erfassung AS Erfassung, Fehler.M_ID AS Primärverursacher"
+ " FROM ((Fehlerart INNER JOIN (Fehlerort INNER JOIN Fehler ON Fehlerort.O_ID = Fehler.O_ID) ON Fehlerart.A_ID = Fehler.A_ID) INNER JOIN Risikoset ON (Fehlerort.O_ID = Risikoset.O_ID) AND (Fehlerart.A_ID = Risikoset.A_ID)) INNER JOIN (Quadrant INNER JOIN Risiko ON Quadrant.Q_ID = Risiko.Q_ID) ON Risikoset.S_ID = Risiko.S_ID"
+ " WHERE (((Fehler.O_ID)=[Risikoset].[O_ID]) AND ((Fehler.A_ID)=[Risikoset].[A_ID]) AND ((Fehler.F_Lage_X)>=[Quadrant].[Q_Von_X] And (Fehler.F_Lage_X)<=[Quadrant].[Q_Bis_X]) AND ((Fehler.F_Lage_Y)>=[Quadrant].[Q_Von_Y] And (Fehler.F_Lage_Y)<=[Quadrant].[Q_Bis_Y]))"
+ " AND Fehler.F_Erfassung BETWEEN #" + vonMonat + "/" + vonTag + "/" + vonJahr + "# AND #" + bisMonat + "/" + bisTag + "/" + bisJahr + "#"
+ " GROUP BY Fehler.F_ID, Fehler.O_ID, Fehlerort.O_Bezeichnung, Fehlerort.O_Lage_X, Fehlerort.O_Lage_Y, Quadrant.Q_ID, Fehler.A_ID, Fehlerart.A_Art, Fehler.F_Lage_X, Fehler.F_Lage_Y, Fehler.B_ID, Fehler.F_Produktionsnummer, Fehler.F_Erfassung, Fehler.M_ID"
+ " ORDER BY Fehler.F_ID;";
db = new Datenbankschnittstelle();
table = db.baueTabelle(query);
scrollPane.setViewportView(table);
ergebnisL.setText("Ergebnis: Fehlerliste im Zeitraum " + formatter.format(vonDatumD) + " - " + formatter.format(bisDatumD) + meisterL.getText());
// BLOCK 2 zur ersten Berechnung (Fehlerorte)
query = "SELECT COUNT(*)"
+ " FROM (SELECT DISTINCT Fehler.O_ID AS Fehlerort"
+ " FROM ((Fehlerart INNER JOIN (Fehlerort INNER JOIN Fehler ON Fehlerort.O_ID = Fehler.O_ID) ON Fehlerart.A_ID = Fehler.A_ID) INNER JOIN Risikoset ON (Fehlerort.O_ID = Risikoset.O_ID) AND (Fehlerart.A_ID = Risikoset.A_ID)) INNER JOIN (Quadrant INNER JOIN Risiko ON Quadrant.Q_ID = Risiko.Q_ID) ON Risikoset.S_ID = Risiko.S_ID"
+ " WHERE (((Fehler.O_ID)=[Risikoset].[O_ID]) AND ((Fehler.A_ID)=[Risikoset].[A_ID]) AND ((Fehler.F_Lage_X)>=[Quadrant].[Q_Von_X] And (Fehler.F_Lage_X)<=[Quadrant].[Q_Bis_X]) AND ((Fehler.F_Lage_Y)>=[Quadrant].[Q_Von_Y] And (Fehler.F_Lage_Y)<=[Quadrant].[Q_Bis_Y]))"
+ " AND Fehler.F_Erfassung BETWEEN #" + vonMonat + "/" + vonTag + "/" + vonJahr + "# AND #" + bisMonat + "/" + bisTag + "/" + bisJahr + "#);";
db = new Datenbankschnittstelle();
sumOrtF.setText(db.getStatistik(query));
// BLOCK 3 zur zweiten Berechnung (Fehlerarten)
query = "SELECT COUNT(*)"
+ " FROM (SELECT DISTINCT Fehler.A_ID AS Fehlerart"
+ " FROM ((Fehlerart INNER JOIN (Fehlerort INNER JOIN Fehler ON Fehlerort.O_ID = Fehler.O_ID) ON Fehlerart.A_ID = Fehler.A_ID) INNER JOIN Risikoset ON (Fehlerort.O_ID = Risikoset.O_ID) AND (Fehlerart.A_ID = Risikoset.A_ID)) INNER JOIN (Quadrant INNER JOIN Risiko ON Quadrant.Q_ID = Risiko.Q_ID) ON Risikoset.S_ID = Risiko.S_ID"
+ " WHERE (((Fehler.O_ID)=[Risikoset].[O_ID]) AND ((Fehler.A_ID)=[Risikoset].[A_ID]) AND ((Fehler.F_Lage_X)>=[Quadrant].[Q_Von_X] And (Fehler.F_Lage_X)<=[Quadrant].[Q_Bis_X]) AND ((Fehler.F_Lage_Y)>=[Quadrant].[Q_Von_Y] And (Fehler.F_Lage_Y)<=[Quadrant].[Q_Bis_Y]))"
+ " AND Fehler.F_Erfassung BETWEEN #" + vonMonat + "/" + vonTag + "/" + vonJahr + "# AND #" + bisMonat + "/" + bisTag + "/" + bisJahr + "#);";
db = new Datenbankschnittstelle();
sumArtF.setText(db.getStatistik(query));
Sobald die erste Berechnung (also Block 2) ausgeführt werden soll, wird eine Fehlermeldung generiert. Die Berechnung der Anzahl (also die letzten beiden Blöcke) habe ich bereits im Einsatz an anderer Stelle und dort funktioniert das auch. Nun sagt mir mein Programm jedes Mal an dieser oben genannten Stelle, dass er O_ID und A_ID nicht finden kann. Verstehe ich nicht, denn ich sage doch jeweils als SELECT: SELECT DISTINCT Fehler.O_ID bzw. SELECT DISTINCT Fehler.A_ID.
Code:
net.ucanaccess.jdbc.UcanaccessSQLException: user lacks privilege or object not found: O_ID
at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:200)
at risikoverwaltung.control.Datenbankschnittstelle.getStatistik(Datenbankschnittstelle.java:227)
at risikoverwaltung.view.AuswertungGUI.actionPerformed(AuswertungGUI.java:1714)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: O_ID
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:197)
... 38 more
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: O_ID
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.Table.getColumnIndex(Unknown Source)
at org.hsqldb.Table.getColumnIndexes(Unknown Source)
at org.hsqldb.QuerySpecification.setDistinctConditions(Unknown Source)
at org.hsqldb.QuerySpecification.resolveTypesPartTwo(Unknown Source)
at org.hsqldb.QuerySpecification.resolveTypes(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableSubqueryOrNull(Unknown Source)
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 41 more
net.ucanaccess.jdbc.UcanaccessSQLException: user lacks privilege or object not found: A_ID
at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:200)
at risikoverwaltung.control.Datenbankschnittstelle.getStatistik(Datenbankschnittstelle.java:227)
at risikoverwaltung.view.AuswertungGUI.actionPerformed(AuswertungGUI.java:1722)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: A_ID
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:197)
... 38 more
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: A_ID
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.Table.getColumnIndex(Unknown Source)
at org.hsqldb.Table.getColumnIndexes(Unknown Source)
at org.hsqldb.QuerySpecification.setDistinctConditions(Unknown Source)
at org.hsqldb.QuerySpecification.resolveTypesPartTwo(Unknown Source)
at org.hsqldb.QuerySpecification.resolveTypes(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableSubqueryOrNull(Unknown Source)
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryPrimary(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryTerm(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpressionBody(Unknown Source)
at org.hsqldb.ParserDQL.XreadQueryExpression(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 41 more
Ich habe mir die query auch schon ausdrucken lassen und wenn ich die SELECT-Abfrage direkt in Access ausführe, dann erhalte ich auch das Ergebnis. Hat jmd eine Idee, wo das Problem liegen kann?
Vielen Dank im Voraus!
Zuletzt bearbeitet: