Проблема с типом данных таблицы импорта базы libreoffice - PullRequest
1 голос
/ 19 апреля 2020

Я импортирую таблицу из LibreOffice Cal c в новую встроенную базовую базу данных Libreoffice. Я выбираю данные, копирую и вставляю их, появляется мастер, и я выбираю использовать первую строку в качестве имен столбцов.

Затем я выбираю все поля и перехожу к третьему шагу мастера импорта. Я могу щелкнуть правой кнопкой мыши свое поле ID и сделать его первичным ключом, хорошо. Проблема в том, что если я установил типы данных поля на что-либо кроме double или varchar, импорт завершится с ошибкой «неправильный тип для settring». Я хочу использовать целочисленные типы и типы дат - как мне их импортировать?

Если я оставлю все поля в double или varchar и попытаюсь отредактировать таблицу позже, это не позволит мне изменить типы данных. Та же проблема, если я сначала определю таблицу, а затем добавлю записи.

Это было бы легко, если бы я создавал новую базу данных с нуля, но у меня есть много существующих записей для импорта. Мне нужно сохранить ключи, чтобы установить отношения с другими таблицами.

Я пробовал встроить HSQLDB и firebird.

Эта ошибка не позволяет мне отказаться от Microsoft Access в пользу базы libreoffice. Кто-нибудь может предложить обходной путь?


Редактировать

Спасибо, Джим К., за ваш ответ, это решает половину проблемы.

Я нашел два проблемных столбца c - поле даты и логическое поле. Хотя Cal c действительно понимает, что мое поле даты является датой, происходит сбой импорта в Base, как описано. Затем я велел Cal c отображать дату в формате YYYY-MM-DD, и импорт в Base работал отлично.

Следующая проблема - логическое (ДА / НЕТ) поле. Пустая ячейка в Cal c импортирует OK как логическое значение false. Все остальное, что я пробовал - ДА, НЕТ, ИСТИНА, ЛОЖЬ, 1, 0 - все вылетало при импорте в базу с сообщением об ошибке «неверный тип для settring».

1 Ответ

1 голос
/ 25 апреля 2020

При перемещении логических данных из Base обратно в Cal c значения отображаются как TRUE или FALSE, поэтому, похоже, именно этого ожидает базовый импорт. Это работает правильно для движка HSQLDB, но не для Firebird Embedded.

Ошибка уже сообщена , поэтому все, что вам нужно сделать, это дождаться ее исправления.

Между тем, можно написать макрос Cal c для чтения значений из электронной таблицы и выполнить оператор SQL UPDATE, чтобы получить правильные значения в Base. Мой ответ здесь содержит код для начала работы.

Однако есть более простой способ. Создайте временный базовый файл, использующий HSQLDB, и импортируйте в него данные из Cal c. Затем закройте Cal c и откройте файлы Firebird Embedded и HSQLDB Base. Перетащите таблицу из базового окна HSQLDB в другое окно, которое без проблем импортируется.

...