Создание базы данных из существующей таблицы .ods

Автор AlexWorkStream, 16 июня 2016, 11:24

0 Пользователи и 1 гость просматривают эту тему.

AlexWorkStream

Столкнулся с проблемой создания базы данных libreoffice из существующей таблицы .ods (libreoffice calc).
А именно, не получается изменить тип полей базы после портирования. Как я понял он выставляется автоматически по данным с calc, но практически везде определяется тип неправильно. А в самой базе уже невозможно поменять вручную.
Подскажите, каким образом можно изменить тип полей (число, текст и т.д.)?

rami

Скорей всего вы не правильно что-то делаете. Если не создать первичный ключ, то базу нельзя редактировать.

Напишите подробней как вы создаёте базу, а заодно выложите образец этой базы. Какая ось и версия LibreOffice?

AlexWorkStream

Цитата: rami от 16 июня 2016, 11:45
Скорей всего вы не правильно что-то делаете. Если не создать первичный ключ, то базу нельзя редактировать.

Напишите подробней как вы создаёте базу, а заодно выложите образец этой базы. Какая ось и версия LibreOffice?

Может немного не ясно выразился... Опишу поподробнее.

1. Есть файл *.ods (Libre Office Calc) на основе которого делаю динамическую базу (обновляемую, при внесении изменений в файл).
2. Запускаю мастера баз и нажимаю "соединится с существующей базой данных" - "электронная таблица". Выбираю мой файл с таблицей *.ods.
3. Таблица портируется, после чего - сохраняю файл базы.

А вот проблема как раз в том, что тип полей при портировании определяется неверно (т.е. там где надо ЧИСЛО ставится ТЕКСТ). И поменять это в самой базе невозможно так как база динамическая (зависящая от первоначального файла с таблицей .ods).

Возможно есть какой-то способ указать тип поля в начальной таблице? Хотя пробовал менять формат ячеек, но все бес толку...

rami

Цитата: AlexWorkStream от 16 июня 2016, 10:10А вот проблема как раз в том, что тип полей при портировании определяется неверно (т.е. там где надо ЧИСЛО ставится ТЕКСТ). И поменять это в самой базе невозможно так как база динамическая (зависящая от первоначального файла с таблицей .ods).
Тип поля определяется по второй строке таблицы данных, если у вас заголовки многострочные (или состоят из объединённых ячеек), то тип полей будет текстовый.

P.S. проверил, — тип определяется правильно.

AlexWorkStream

#4
Цитата: rami от 16 июня 2016, 12:40
Цитата: AlexWorkStream от 16 июня 2016, 10:10А вот проблема как раз в том, что тип полей при портировании определяется неверно (т.е. там где надо ЧИСЛО ставится ТЕКСТ). И поменять это в самой базе невозможно так как база динамическая (зависящая от первоначального файла с таблицей .ods).
Тип поля определяется по второй строке таблицы данных, если у вас заголовки многострочные (или состоят из объединённых ячеек), то тип полей будет текстовый.

Так в том то и проблема, вторая строка таблицы - это формула, результат которой - число, а определяется как текст(((.

P.S. Формула такого типа - "=IF(COUNTIF(E$1:E2;E2)=1;MAX(B$1:B1)+1;"")" результатом которой является нумерация от 1-го и до ...

rami

Цитата: AlexWorkStream от 16 июня 2016, 10:42Так в том то и проблема, вторая строка таблицы - это формула, результат которой - число, а определяется как текст(((.
Действительно проблема, сколько ни пытаюсь, всегда получается правильно — числа как числа, даты как даты, во второй строке формулы.

rami

#6
Цитата: AlexWorkStream от 16 июня 2016, 10:42P.S. Формула такого типа - "=IF(COUNTIF(E$1:E2;E2)=1;MAX(B$1:B1)+1;"")" результатом которой является нумерация от 1-го и до ...
Эта формула может создавать проблему. Если "правда" — результат может быть числом, но если "ложь" — результат всегда пустая строка (текстовый тип)

P.S. Попробуйте изменить формулу, чтобы она гарантированно давала числовой результат (ноль вместо пустой строки):=IF(COUNTIF(E$1:E2;E2)=1;MAX(B$1:B1)+1;0)

AlexWorkStream

Цитата: rami от 16 июня 2016, 13:18
Цитата: AlexWorkStream от 16 июня 2016, 10:42P.S. Формула такого типа - "=IF(COUNTIF(E$1:E2;E2)=1;MAX(B$1:B1)+1;"")" результатом которой является нумерация от 1-го и до ...
Эта формула может создавать проблему. Если "правда" — результат может быть числом, но если "ложь" — результат всегда пустая строка (текстовый тип)

P.S. Попробуйте изменить формулу, чтобы она гарантированно давала числовой результат (ноль вместо пустой строки):=IF(COUNTIF(E$1:E2;E2)=1;MAX(B$1:B1)+1;0)

Спасибо большое! Помогло! Не думал, что пустота - это текст...