已保存查询的用户缺少权限或找不到对象错误
Posted
技术标签:
【中文标题】已保存查询的用户缺少权限或找不到对象错误【英文标题】:User lacks privilege or Object not found error for saved query 【发布时间】:2015-02-05 01:26:48 【问题描述】:由于 Java 8 不支持 JDBC,我正在尝试修改我的程序,以便它仍然可以从 Microsoft Access 数据库中提取和修改数据。
它不断抛出 SQLException。目前,这是我的代码在打开与数据库的连接并进入查询时的样子:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
con = DriverManager.getConnection("jdbc:ucanaccess://C:/Users/Andrew/Dropbox/Public/Schoolwork/IRC/BBFBL/BBFBLMasterVersion3.accdb"); //name of ODBC driver
Statement stmt = con.createStatement();
stmt.executeQuery("SELECT * FROM DraftNightQuery");
因为我看到了一个类似的问题,其中解决方案必须确保正确键入查询,这是它尝试访问的表的名称:
DraftNightQuery SQL:
SELECT Players.ID, Players.Last, Players.First, TotalStats.team, Players.DraftStatus, TotalStats.pos, Players.OwnerID, Owners.TeamName, Salaries! [Salary] AS Salary, [TotalStats]![games_DH] AS DH, [TotalStats]![games_C] AS C, [TotalStats]![games_1B] AS 1B, [TotalStats]![games_2B] AS 2B, [TotalStats]![games_3B] AS 3B, [TotalStats]![games_SS] AS SS, [TotalStats]![games_LF]+[TotalStats]![games_CF]+[TotalStats]![games_RF] AS [OF], TotalStats.PG, TotalStats.GS, Players.PositionType
FROM Salaries INNER JOIN (Owners RIGHT JOIN (Players LEFT JOIN TotalStats ON Players.ID = TotalStats.ID) ON Owners.OwnerID = Players.OwnerID) ON Salaries.ID = Players.ID
WHERE (((Players.OwnerID) Is Null))
ORDER BY Players.Last, Players.First;
【问题讨论】:
问题不在于查询的名称,而在于其内容,可能无法通过 ucanaccess 进行转换。这种情况很少发生,但可能会发生。您可以使用发行版中的控制台(.bat 或 .sh)查看 ucanaccess 当前可以加载的数据库查询。此外,如果您发布了查询 sql,我将能够建议如何以兼容的方式对其进行转换。可以发一下吗? @jamadei 如果您正在寻找 DraftNightQuery 的 SQL,我已经更新了原始帖子以包含它。请记住,我没有设计此查询,我相信它最初是通过使用 Access 中的设计视图生成的。 【参考方案1】:查询最初可能不是通过使用 Access 中的设计视图生成的,因为在特定情况下会使用感叹号(而不是简单的点)。无论如何,问题在于使用了 ucanaccess 尚不支持的感叹号。 更换!和 。应该可以解决问题(并且它与 ms 访问兼容)。
【讨论】:
谢谢!这似乎已经消除了该错误(尽管在程序运行之前仍在解决其他问题。)奇怪的是它不接受感叹号。以上是关于已保存查询的用户缺少权限或找不到对象错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 ucanaccess 控制台出现错误:UCAExc:::3.0.2 用户缺少权限或找不到对象:DBO_TBLMATERIALS