MS Access:INNER JOIN 的问题
MS Access: The issue with INNER JOIN
SELECT
Incoming.`Incoming_ItemNumber` AS ItemNumber,
Incoming.`Date_Incoming` AS 'Date',
allItems.`Description` , Incoming.`Quantity` ,
Incoming.`Supplier` , Incoming.`Invoice_Number` ,
Incoming.`Price` , Incoming.`JO`
FROM
allItems
INNER JOIN
Incoming ON allItems.Item_Number = Incoming.Item_Number;
我已经在 MS access 2013 中尝试过此代码并且它正在运行,但是如果我使用相同的代码在 Ireport 中为我的报告创建查询,我会收到以下错误:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too
few parameters. Expected 1.
查询有效如果我只使用一个 table 但如果我尝试加入两个 table 这就是我得到的:
Query error
Message:
net.sf.jasperreports.engine.JRException: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Level:
SEVERE
Stack Trace:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider.getFields(SQLFieldsProvider.java:174)
com.jaspersoft.ireport.designer.connection.JDBCConnection.readFields(JDBCConnection.java:472)
com.jaspersoft.ireport.designer.wizards.ConnectionSelectionWizardPanel.validate(ConnectionSelectionWizardPanel.java:146)
org.openide.WizardDescriptor.run(WizardDescriptor.java:1357)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3156)
sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:215)
sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:90)
net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233)
com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider.getFields(SQLFieldsProvider.java:126)
com.jaspersoft.ireport.designer.connection.JDBCConnection.readFields(JDBCConnection.java:472)
com.jaspersoft.ireport.designer.wizards.ConnectionSelectionWizardPanel.validate(ConnectionSelectionWizardPanel.java:146)
org.openide.WizardDescriptor.run(WizardDescriptor.java:1357)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
编辑:我想做的是从表 Incoming 和 allItems 中获取值
这是我的 table 的内容:
所有项目:Item_Number[主要],描述
Incoming:Incoming_ItemNumber[Primary],Item_Number[foreign],Date_Incoming,Quantity,Supplier,Invoice_Number,Price,Amount,JO
请注意,我使用的查询在 MS ACCESS 2013 中运行良好
在我的代码中进行了大量试验后,我想出了自己的解决方案:
1.) 我重新 "linked" 我的 table 关系
2.) 我使用 MS Access 使用查询设计工具创建了一个新查询
其中:我选择了我需要的 table 和数据列,并按日期
排序
3.) 我保存了查询设计并转到 'SQL View'
4.) 我复制了 sql 查询。
5.) 转到我的 IReport 的报告查询并将其粘贴到那里
然后我点击了'Read Query'按钮
并且成功了。
这是 Access 生成的代码:
SELECT
allItems.Item_Number,
Incoming.Date_Incoming,
allItems.Description,
Incoming.Quantity,
Incoming.Supplier,
Incoming.Invoice_Number,
Incoming.Price,
Incoming.Amount,
Incoming.JO
FROM
allItems
RIGHT JOIN
Incoming
ON
allItems.Item_Number = Incoming.Item_Number
ORDER BY
Incoming.Date_Incoming ASC;
SELECT
Incoming.`Incoming_ItemNumber` AS ItemNumber,
Incoming.`Date_Incoming` AS 'Date',
allItems.`Description` , Incoming.`Quantity` ,
Incoming.`Supplier` , Incoming.`Invoice_Number` ,
Incoming.`Price` , Incoming.`JO`
FROM
allItems
INNER JOIN
Incoming ON allItems.Item_Number = Incoming.Item_Number;
我已经在 MS access 2013 中尝试过此代码并且它正在运行,但是如果我使用相同的代码在 Ireport 中为我的报告创建查询,我会收到以下错误:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
查询有效如果我只使用一个 table 但如果我尝试加入两个 table 这就是我得到的:
Query error
Message:
net.sf.jasperreports.engine.JRException: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Level:
SEVERE
Stack Trace:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider.getFields(SQLFieldsProvider.java:174)
com.jaspersoft.ireport.designer.connection.JDBCConnection.readFields(JDBCConnection.java:472)
com.jaspersoft.ireport.designer.wizards.ConnectionSelectionWizardPanel.validate(ConnectionSelectionWizardPanel.java:146)
org.openide.WizardDescriptor.run(WizardDescriptor.java:1357)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3156)
sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:215)
sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:90)
net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233)
com.jaspersoft.ireport.designer.data.fieldsproviders.SQLFieldsProvider.getFields(SQLFieldsProvider.java:126)
com.jaspersoft.ireport.designer.connection.JDBCConnection.readFields(JDBCConnection.java:472)
com.jaspersoft.ireport.designer.wizards.ConnectionSelectionWizardPanel.validate(ConnectionSelectionWizardPanel.java:146)
org.openide.WizardDescriptor.run(WizardDescriptor.java:1357)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
编辑:我想做的是从表 Incoming 和 allItems 中获取值
这是我的 table 的内容:
所有项目:Item_Number[主要],描述 Incoming:Incoming_ItemNumber[Primary],Item_Number[foreign],Date_Incoming,Quantity,Supplier,Invoice_Number,Price,Amount,JO
请注意,我使用的查询在 MS ACCESS 2013 中运行良好
在我的代码中进行了大量试验后,我想出了自己的解决方案:
1.) 我重新 "linked" 我的 table 关系
2.) 我使用 MS Access 使用查询设计工具创建了一个新查询 其中:我选择了我需要的 table 和数据列,并按日期
排序3.) 我保存了查询设计并转到 'SQL View'
4.) 我复制了 sql 查询。
5.) 转到我的 IReport 的报告查询并将其粘贴到那里
然后我点击了'Read Query'按钮
并且成功了。 这是 Access 生成的代码:
SELECT
allItems.Item_Number,
Incoming.Date_Incoming,
allItems.Description,
Incoming.Quantity,
Incoming.Supplier,
Incoming.Invoice_Number,
Incoming.Price,
Incoming.Amount,
Incoming.JO
FROM
allItems
RIGHT JOIN
Incoming
ON
allItems.Item_Number = Incoming.Item_Number
ORDER BY
Incoming.Date_Incoming ASC;