UCanAccess Exception UCAExc:::3.0.0 нуждается в столбце или не может удалить единственный столбец таблицы
Я пытаюсь использовать 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) в java.sql.DriverManager.getConnection(DriverManager.java:187) в net.ucanaccess.console.Main.main(Main.java:145) Вызывается: java.sql.SQLSyntaxErrorException: нужен столбец или не может удалить единственный столбец таблицы в org.hsqldb.jdbc.JDBCUtil.sqlException(неизвестный источник) в org.hsqldb.jdbc.JDBCUtil.sqlException(неизвестный источник) в org.hsqldb.jdbc.JDBCStatement.fetchResult(неизвестный источник в).hsqldb.jdbc.JDBCStatement.executeUpdate(Неизвестный источник) на net.ucanaccess.converters.LoadJet.exec(LoadJet.java:1416) на net.ucanaccess.converters.LoadJet.access$000(LoadJet.java:71) в сети.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.LoadJetcate (L $). 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) в net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:243) ... еще 3 Причины: org.hsqldb.HsqlException: нуждается в столбце или не может удалить единственный столбец таблицы в org.hsqldb.error.Error.error(неизвестный источник) в org.hsqldb.error.Error.error(неизвестный источник) в org.hsqldb.ParserDDL.compileCreateTableBody(неизвестный источник) в org.hsqldb.ParserDreTatep Источник) в org.hsqldb.ParserDDL.compileCreate (Неизвестный источник) в org.hsqldb.ParserCommand.compilePart (Неизвестный источник) в org.hsqldb.ParserCommand.compileStatements(Неизвестный источник) в org.hsqldb.Session.executeDirectStatement(Неизвестный источник) в org.hsqldb.Session.execute(Неизвестный источник)... еще 16 UCAExc::: 3.0.0 нуждается в столбце или не может удалить единственный столбец таблицы
1 ответ
UCanAccess вызовет исключение при открытии базы данных, если она содержит таблицу без определенных столбцов.
Таблица без столбцов не является допустимой таблицей. Сам по себе доступ не позволит нам сохранить такую таблицу...
... однако можно создать такую таблицу, используя 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 и удалите таблицу, столбцы которой не определены.