UCanAccess异常UCAExc ::: 3.0.0需要列或不能删除表

时间:2015-08-07 20:57:55

标签: ucanaccess

我正在尝试使用UCanAccess构建一个程序来帮助我编写一些Access数据库查询的脚本。最终,我想要从cron作业生成的每日报告。我连接到所述数据库的几个测试用例给出了以下异常:UCAExc ::: 3.0.0需要列或不能删除表的唯一列。

我是数据库中的笨蛋,这个数据库由公司组织的其他部分维护。

getConnection调用抛出异常。

  

紧凑和修复后输出console.sh:无法执行:CREATE   CACHED TABLE EMPL()需要列或不能删除表的唯一列   加载表:

     

已加载的查询:

     

已加载的索引:

     

net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.0需要   列或不能删除表的唯一列   net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:258)     在java.sql.DriverManager.getConnection(DriverManager.java:571)at   java.sql.DriverManager.getConnection(DriverManager.java:187)at   net.ucanaccess.console.Main.main(Main.java:145)引起:   java.sql.SQLSyntaxErrorException:需要列或不能删除sole   org.hsqldb.jdbc.JDBCUtil.sqlException(未知   来源)org.hsqldb.jdbc.JDBCUtil.sqlException(未知来源)at at   org.hsqldb.jdbc.JDBCStatement.fetchResult(未知来源)at   org.hsqldb.jdbc.JDBCStatement.executeUpdate(未知来源)at   net.ucanaccess.converters.LoadJet.exec(LoadJet.java:1416)at at   net.ucanaccess.converters.LoadJet.access $ 000(LoadJet.java:71)at at   net.ucanaccess.converters.LoadJet $ TablesLoader.createSyncrTable(LoadJet.java:481)     在   net.ucanaccess.converters.LoadJet $ TablesLoader.createSyncrTable(LoadJet.java:411)     在   net.ucanaccess.converters.LoadJet $ TablesLoader.createTable(LoadJet.java:807)     在   net.ucanaccess.converters.LoadJet $ TablesLoader.createTable(LoadJet.java:761)     在   net.ucanaccess.converters.LoadJet $ TablesLoader.createTables(LoadJet.java:942)     在   net.ucanaccess.converters.LoadJet $ TablesLoader.loadTables(LoadJet.java:1036)     在   net.ucanaccess.converters.LoadJet $ TablesLoader.access $ 2900(LoadJet.java:273)     在net.ucanaccess.converters.LoadJet.loadDB(LoadJet.java:1479)at   net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:243)     ... 3更多引起:org.hsqldb.HsqlException:需要列或   不能放下桌子的唯一一列   org.hsqldb.error.Error.error(未知来源)at   org.hsqldb.error.Error.error(未知来源)at   org.hsqldb.ParserDDL.compileCreateTableBody(未知来源)at   org.hsqldb.ParserDDL.compileCreateTable(未知来源)at   org.hsqldb.ParserDDL.compileCreate(未知来源)at   org.hsqldb.ParserCommand.compilePart(未知来源)at   org.hsqldb.ParserCommand.compileStatements(未知来源)at   org.hsqldb.Session.executeDirectStatement(未知来源)at   org.hsqldb.Session.execute(未知来源)... 16更多UCAExc ::: 3.0.0   需要列或不能删除表的唯一列

1 个答案:

答案 0 :(得分:0)

如果UCanAccess包含未定义列的表,则在打开数据库时将抛出异常。

没有列的表不是有效表。访问本身不允许我们保存这样的表...

NoSave.png

...但是可以使用DDL创建这样的表,如下面的VBScript

Option Explicit
Dim con
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\__tmp\31886535.accdb"
On Error Resume Next
con.Execute "DROP TABLE BadTable"
On Error Goto 0
con.Execute "CREATE TABLE BadTable (foo INT)"
con.Execute "ALTER TABLE BadTable DROP COLUMN foo"
con.Close

要在使用UCanAccess打开数据库时避免错误,只需在Access中打开数据库并删除没有定义列的表。