Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

28 Апрель 2017, 17:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Несколько вопросов по работе с базой.  (Прочитано 2878 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kildor
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Новосибирск.
Сообщений: 5


« Стартовое сообщение: 1 Сентябрь 2011, 17:46 »

Сабж. LibreOffice 3.4.3


1. Хранение файлов в базе. Насколько hsqldb устойчива к работе с тяжёлыми файлами? То есть, какой размер базы ещё позволяет нормально с ней работать?

2. есть две таблицы. Table1 {t1_id, …}, Table2 {t2_id, field1, field2}
Пытаюсь настроить связи между таблицами, хочу связать t1_id и field1, а также t1_id (естественно другую строку) с field2. Сервис » Связи позволяет это сделать, даже отображает, но при сохранении теряет одну из связей. Что я делаю не так?

3. Запросы и представления. Тут уже явно не base, а SQL чистой воды.
Есть структура из следующих таблиц:

t_marker {m_id, m_name}
t_example {e_id, e_name}
t_seq {s_id, s_m_id, s_e_id, s_seq}
Где соответственно s_m_id и s_e_id связи с соответствующими ключами.
Нужно сделать следующую таблицу:
m_name | s_seq (s_m_id==m_id && m_name=="1") |  s_seq (s_m_id==m_id && m_name=="2") |

То есть, одну ячейку поместить в два столбца, в зависимости от имени m_name. При этом, s_seq может и не быть, но нужно показать все строки из t_example, вне зависимости от этого факта.

Понимаю, что нужно работать через outer join, но
Код:
SELECT "DNA-s"."Number", "Snails"."SnailStringID", CASE WHEN "COI"."Sequence" IS NULL THEN '' ELSE '+' END AS "COI", CASE WHEN "ITS"."Sequence" IS NULL THEN '' ELSE '+' END AS "ITS-S" FROM "DNA-s", "Snails", "Markers"
LEFT JOIN "Sequences" AS "COI" ON "COI"."DNAID" = "DNA-s"."DNAID" AND "COI"."MarkerID"="Markers"."MarkerID" AND "Markers"."MarkerName"='COI'
LEFT JOIN "Sequences" AS "ITS" ON "ITS"."DNAID" = "DNA-s"."DNAID" AND "ITS"."MarkerID"="Markers"."MarkerID" AND "Markers"."MarkerName"='ITS-S'
WHERE "DNA-s"."SnailID" = "Snails"."SnailID" ORDER by "DNA-s"."Number" ASC;
Выдаёт пустую таблицу, хотя по отдельности работает корректно. (запрос взят из рабочей базы, но надеюсь что идея понятна).

5. Можно ли расширить следующий пример, но задавать столбцы не вручную, а пройтись по тому, что есть в таблице marker автоматически?
Записан
RFJ
Постоялец
***
Offline Offline

Сообщений: 220


« Ответ #1: 1 Сентябрь 2011, 18:42 »

1. hsqldb на "тяжелых" файлах я бы использовать не стал, лучше PostgreSQL или что-то подобное.

2. Составлять по вашему описанию таблицы с данными нет ни времени ни желания. Приложите пример вашей БД и конкретно  покажите, что вам нужно.
Записан

Kildor
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Новосибирск.
Сообщений: 5


« Ответ #2: 1 Сентябрь 2011, 19:43 »

1. Понял. А сконвертировать с hsqldb в PostgreSQL насколько сложно?
Ок. Таблица во вложении.

2. Таблица Sequences, поля PrimerForwardID и PrimerReverseID. Хотелось бы чтоб они связывались с таблицей Primers.
3. Собственно код описывает что хочется получить. Запрос «test_1»

[вложение удалено Администратором]
Записан
RFJ
Постоялец
***
Offline Offline

Сообщений: 220


« Ответ #3: 2 Сентябрь 2011, 02:05 »

Все равно ничего не понятно, что вы хотите.

Что-то вроде этого?

[вложение удалено Администратором]
Записан

Kildor
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Новосибирск.
Сообщений: 5


« Ответ #4: 2 Сентябрь 2011, 08:30 »

Да, почти.
Хочется получить подобное вот этому:
Код:
SnailStringIG as name
name    | COI | ITS |
nenk-01 |  +  |  +  |
nenk-02 |     |  +  |
nenk-03 |  +  |     |
nenk-04 |     |     |
Отображены все SnailStringID, вне зависимости от того, есть ли соответствующие им записи в таблице Sequences.
Записан
RFJ
Постоялец
***
Offline Offline

Сообщений: 220


« Ответ #5: 2 Сентябрь 2011, 08:59 »

Приложенный вами пример не соответствует вашим требованиям, например, отсутствуют nenk-03 и nenk-04, или, непонятно, откуда эта строка
name    | COI | ITS |
nenk-01 |  +  |  +  |
Записан

Alexandr Polbin
Новичок
*
Offline Offline

Сообщений: 5


« Ответ #6: 12 Февраль 2017, 15:15 »

Возможно ли выполнение запросов на обновление в BASE? Пишу запрос SQL:
Обновить пустое поле DATEADD в таблице REGISTR текущей датой

UPDATE REGISTR SET DATEADD = NOW WHERE DATEADD IS EMPTY
А комп выдает, что возможно только выполнение инструкции на выборку SELECT...
Как по другому можно решить эту проблему?
Задать значение текущей даты в самой таблице по умолчанию тоже не получается.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 055


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #7: 12 Февраль 2017, 15:49 »

UPDATE REGISTR SET DATED = NOW WHERE DATED IS EMPTY
Где вы берёте такой код? Из Access? Ищите ответы на ваши вопросы на нашем форуме (но не в ошибках новичков, а в правильных ответах), читайте документацию по соответствующей базе.
Задать значение текущей даты в самой таблице по умолчанию тоже не получается.
Попробуйте (названия таблиц и полей надо брать в кавычки):
Код:
ALTER TABLE "REGISTR" ALTER COLUMN "DATEADD" SET DEFAULT TODAY
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 502


« Ответ #8: 12 Февраль 2017, 15:52 »

Kildor - забудьте про HSQL - это нерабочий вариант. Для себя давно решил что только SQLite через ODBC. А на вырост - встроенная FireBird3 или PostgreSQL через ODBC.

Alexandr Polbin - в Base есть 3 варианта запуска SQL-запросов:
1) Конструктор запросов с отжатой SQL
2) Конструктор запросов с нажатой SQL
3) Сервис - SQL

DDL-запросы "просятся" в третий вар-т или во второй.

Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Alexandr Polbin
Новичок
*
Offline Offline

Сообщений: 5


« Ответ #9: 12 Февраль 2017, 16:07 »

Вообще, информацию брал в "Синтаксисе языка SGL".
На "ALTER TABLE "REGISTR" ALTER COLUMN "DATEADD" SET DEFAULT TODAY" тоже выдает синтаксическую ошибку.
А в режиме дизайна запросов я функции обновления что-то не нашел, может она называется как-то по-другому...
Записан
Alexandr Polbin
Новичок
*
Offline Offline

Сообщений: 5


« Ответ #10: 12 Февраль 2017, 16:43 »

При запуске последней команды через сервис SQL пишет "Команда выполнена успешно", но поля в таблице не обновляются...
И как потом сделать, чтобы эта команда выполнялась каждый раз при добавлении в таблицу новой записи?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 055


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #11: 12 Февраль 2017, 16:50 »

При запуске последней команды через сервис SQL пишет "Команда выполнена успешно", но поля в таблице не обновляются...
И как потом сделать, чтобы эта команда выполнялась каждый раз при добавлении в таблицу новой записи?
Эта команда устанавливает текущую дату по умолчанию, если в поле ничего не записано. Я дефолтные поля в форме ввода не отображаю.

Каждый раз не надо выполнять.
Записан

economist
Ветеран
*****
Offline Offline

Сообщений: 502


« Ответ #12: 13 Февраль 2017, 09:31 »

Alexandr Polbin - чтобы увидеть изменения в Таблицах - нужно их обновить вручную: Вид - Обновить таблицы.  

Чтобы "команда выполнялась каждый раз при добавлении в таблицу новой записи" - курите триггеры. Но искренне надеюсь что вы это делаете не в HSQLDB. Иначе число проблем будет расти в геометрической прогрессии и всё равно приведет к отказу от HSQL в пользу чего угодно другого.

За SQLite ч/з ODBC/unixODBC - скажу что это самая быстрая база из всех RDBMS при работе с нею до 3-х человек по сети 100/1000 Гбит, да-да, в режиме файлового доступа. Плюс не нужны кавычки, как в примерах выше, и работает кириллица в таблицах, полях, псевдонимах.

OpenOffice|LibreOffice - разработчики могли бы использовать SQLite как основную RDBMS в Base. Но тогда из BASE получится 99% "убийца" Microsoft Access (12 тыс. руб.). А это, по теории заговора, кому-то не очень чтобы и нужно.
« Последнее редактирование: 13 Февраль 2017, 09:37 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
mikekaganski
Старожил
****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 405


« Ответ #13: 13 Февраль 2017, 10:21 »

OpenOffice|LibreOffice - разработчики могли бы использовать SQLite как основную RDBMS в Base. Но тогда из BASE получится 99% "убийца" Microsoft Access (12 тыс. руб.). А это, по теории заговора, кому-то не очень чтобы и нужно.

Здесь описана история вопроса (причины заговора указаны начиная с комментария 19).
Записан

С уважением,
Михаил Каганский
economist
Ветеран
*****
Offline Offline

Сообщений: 502


« Ответ #14: 13 Февраль 2017, 12:23 »

mikekaganski - спасибо за ссыль, с удовольствием прочитал и воспрял духом.

Во-первых, FireBird3 - это хорошо, если даже не сказать прекрасно. Есть и документация на русском, и IDE от InterBase итд. FB быстрее HSQL в 3-5 раз, могу поискать пруф. Но всё это не повторит успеха "малопользовательского" MS Access, который основан на его безсерверной (читай - простой) природе. Именно это есть и у SQLite. "No admin", что называется.

Во-вторых, в тот треде - наглая ложь про сопоставимую скорость HSQLDB и SQLite. Предлагаю просто поверить мне на слово. У HSQLDB скорость в 3-4 раза ниже, чем у SQLite.  

В-третьих, динамическая, а если точнее "утиная", "предлагаемая" типизация, применяемая в SQLite, Python, LUA итд - это как раз неимоверное благо. Вcё равно в коде люди реализуют проверки, CAST в SQL быстр, а сохранение всего как текст - вовсе не так уж плохо. Главное - что оно всегда работает и не вызывает никаких сбоев.

Вот такая фирма как 1С в своем продукте Предприятие 7.7 (1995-2018 гг) - все числовые коды хранит как текст, и ничо.

  
« Последнее редактирование: 13 Февраль 2017, 12:28 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!