Ошибка создания связи

Автор rna, 24 марта 2018, 07:32

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

rna

Здравствуйте!
Только приступил к изучению LibreOffice Calck Base, решил потренироваться на примере с сайта: https://libreoffice.su/base/sozdanie-bazyi-dannyih-base.html, но... на этапе создания связей тормоз: связь не создаётся - ошибка

Состояние SQL: 23000
Код ошибки: -177
Integrity constraint violation - no parent 0, table: Дисконтные карты in statement [ALTER TABLE "Дисконтные карты" ADD  FOREIGN KEY ("НомерДисконтнойКарты") REFERENCES "Клиенты" ("НомерДисконтнойКарты ") ON UPDATE CASCADE  ON DELETE SET NULL]

Преодолеть не могу, пробовал свою простенькую по аналогии из двух таблиц - таже ошибка!
OS Win7-64, LibreOffice Версия: 5.4.3.2 (x64)

PS. В WicrosofOffice Exel работал, но только на уровне таблиц - с БД опыта работы нет. Сейчас пенсионер, хочу сделать для себя БД учета расхода эл.энергии и услуг ЖКХ

rami

Давайте начнём с исходных данных. Создайте в Calc документ с одной или двумя таблицами с заголовками и тремя строками данных в каждой таблице. Выложите в вашем следующем ответе.

economist

rna - ваша локальная задача (по учету ЖКХ) - гораздо проще решается в самой простой электронной таблице Calc. Нужно продумать структуру таблицы, чтобы в ней было всё что нужно, прежде всего для внесения "сырых" данных из счетов на оплату - именно в них кроется максимальное количество "брехни" и ошибок со стороны поставщиков, ТСЖ, УК итп.

В случае с ЖКХ даже трудно придумать более одной таблицы (Счета и Платежи на разных листах неоптимальны, в одной -
проще), поэтому тех самых отношений (реляций) в этом случае нет. Base как реляционная база данных для этого избыточна.

Не хочу вас отговаривать от изучения Base. Но в обучении базам данных команды вида ALTER TABLE и ON UPDATE CASCADE ON DELETE SET NULL могут встретиться только на очень продвинутом уровне. С методической точки зрения - выбранный вами сайт для обучения, на мой взгляд, неудачен. Вот здесь http://myooo.ru/content/blogsection/13/97/ гораздо лучше.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rna

Цитата: rami от 24 марта 2018, 10:31
Давайте начнём с исходных данных. Создайте в Calc документ с одной или двумя таблицами с заголовками и тремя строками данных в каждой таблице. Выложите в вашем следующем ответе.
Вот то, что я сделал, вроде как, в точности согласно описанию по указанной ссылке

rna

#4
Цитата: economist от 24 марта 2018, 13:00
... С методической точки зрения - выбранный вами сайт для обучения, на мой взгляд, неудачен. Вот здесь http://myooo.ru/content/blogsection/13/97/ гораздо лучше.
Спасибо, я посмотрю

Посмотрел и... тут OpenOffice и 2009 год! А у меня LibreOffice. Пойдёт ли в LO всё, что там предлагается?

rami

Цитата: rna от 24 марта 2018, 11:22Посмотрел и... тут OpenOffice и 2009 год! А у меня LibreOffice. Пойдёт ли в LO всё, что там предлагается?
Это хороший сайт, всё что там написано должно быть актуально и сейчас на LibreOffice, но если найдёте какие-нибудь проблемы, сообщайте здесь, наши администраторы могут поправить.

Замечание по базе:
1. вы не обязаны назначать первичный ключ, но в этом случае невозможно будет вводить данные в таблицу
2. в качестве первичного ключа можно выбрать любой столбец с любым типом данных, лишь бы данные в этом столбце были уникальными
3. в большинстве случаев предпочтительно создавать столбец id с автозаполнением в качестве первичного ключа

rna

Да уж! Пытался понять, но... на данном этапе познания тонкостей БД для меня это как труды Эйнштейна! Берём тайм-аут на неопределённое время, как что-то получится - напишу тут.

По сколько OffTop не нашёл, то вопрос не по теме прямо тут:
Т.к. с БД пока откладывается, а эл.энергию, воду и ТБО всё же мне надо на ПК сделать, то вот мой вариант - просто в LO Calck
Конечно, так можно и вести, но хочется форму ввода сделать, а как это сделать в LO - не нашёл. Вообще: можно ли это сделать в LO без Base?

economist

#7
Общие советы :

1) все данные (и виды платежей) - в одной плоской таблице (без каких-либо объединений ячеек) на одном(!) листе. Разделы "по счету", "по счетчику(по факту)" и "контроль" - это просто дополнительные столбцы справа.

2) вверху оставьте 10 строк для формул "итого", они всегда видны, т.к. область с формулами" закреплена"  

3) Долг и переплата - это всегда одна строка,  переплату можно ставить красным (формат ячейки - Отрицательное красным)

4) Из-за перерасчетов задним числом и смены тарифов - "помесячные итоги" не так полезны для анализа, как "нарастающий с начала года" или вообще "с начала времен". Я бы внес все квитки с начала года, добавил к январскому сумму долга/переплаты.  

5) Т.к. квитанция состоит всегда из 5 строк (Эл.Д, Эл.Н, ХВС, Вывоз ТКО, Утилизация ТКО) - то сразу их скопировать на 2 года вперед. Т.к. тариф меняется условного говоря "раз в полгода" и долго действует - сослаться формулами апреля - на март итд. И когда тариф эл. энергии станет не 2,83 а 4 - просто в том месяце перебиваем формулу на значение 4.

6) Нужно освоить функцию =СУММЕСЛИ(). Формула, которая суммирует все Дн. киловатты (по счету, счетчику и разницу) с начала года будет выглядеть так: =СУММЕСЛИ(Вид;'ЭлДень';ПоСчету)
=СУММЕСЛИ(Вид;'ЭлДень';ПоСчетчику)
=СУММЕСЛИ(Вид;'ЭлДень';Отклон)
Чтобы можно было так легко писать и понимать формулы - нужно дать имена столбцам (точнее их диапазонам с 11-й по, скажем, по 71-строку, вперед на 5 лет). Для этой цели часто делают "официальную" шапку таблицы и ниже, через 1 пустую строку - дублируют её же краткой одной строкой "полей", в ней все слова без пробелов "Электроэнергия День кВт.ч" -> "ЭлДень". Понятности это не уменьшит, а вот скорость написания формулы вырастет пятикратно. Имена диапазонов можно тогда не создавать - Calc сам поймет где находится столбец "ЭлДень", с какой ячейки начинается и где заканчивается.

7) Самым левым столбцом делают "Период", вводят дату, скажем 31.01.18, 28.02.18. а в формате ячейки - Январь 18, Февраль 18 итд. После включения автофильтра на строке "полей", отделенной от "шапки" пустой строкой - появятся значки Автофильтра и возможность легко отбирать нужный период или нужный вид платежа в Автофильтре.

8) Чтобы автосуммировать видимое (прошедшее фильтр) - нужно освоить функцию =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СЧЕТ)

Полученная плоская таблица обладает громадным плюсом, она все-в-одном, логически целостна. Если захочется сделать по ней отчет - изучаем Сводные таблицы и диаграммы и делаем их на 2-м листе. Но даже просто =ПРОМЕЖУТОЧНЫЕ.ИТОГИ() даст вам информацию о среднем, максимальном, минимальном значении чего угодно за любой период, который выбирается Автофильтром.

Я плачу раз в полгода (ненавижу этот процесс и очереди, т.к. УК до сих пор работает только через ГРЦ-кассы, безнал никак, руководы УК по доброй российской традиции в федеральном розыске), - то оплату я ввожу одной строкой "между" квитанций (заплатил 10/03 - 45 тыс. руб.) Формула у меняя сама делит сумму одного платежа (45 тыс. руб.) на 108 отдельных чисел (по видам платежей). Это достигается суммированием накопленного долга с остатками долга и пени, пропорциональным делением. УК делает все точно так же, и когда с ними спорю - нахожу понимание. Разбивать 45 тр. на 6 квитанций х 6 видов платежей х 3 вида (недоимка/пеня/перерасчет) = 108 цифр - считаю пустой тратой времени. Учетные программы в УК и ТСЖ делают точно так же.

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

rna

Огромное Вам спасибо economist! И извините за молчание - я уж было решил, что мне больше никто не ответит, поэтому и не заглядывал сюда