Страница 1 из 1

Ошибка: меняю св-во базового класса в производном классе

Добавлено: Ср апр 02, 2014 2:37 pm
krasnov
Добрый день!

Сообщение скорее к автору проекта - sergejey, но и другим будет полезно, вдруг у кого такое же поведение наблюдается.
Пока не до конца вник в проблему, чтобы самому поправить, да и не знаю, возможно ли простому с улицы править в гитхабе. :)
Опишу на словах и картинках.
На основе базового класса tempSensors создал новый класс THSensors с новым св-вом humidity.
Все работало: в меню отображалась температура, в графиках - график температуры.
В процессе разных правок перестало обновляться значение температуры в меню, хотя в графике меняется.
В меню прописано стандартно объект.св-во: firstTHSensor.temp (где temp св-во класса tempSensors).
Залез в базу и обнаружил такую вещь, оказалось я уменьшил в классе THSensors у св-ва temp кол-во дней для хранения истории с базовых 7 до 2.
В таблице properties добавилась новая запись с новым св-вом temp производного класса THSensors.
В таблице pvalues так же добавилась запись, но без значения в поле property_name. Запись со ссылкой на св-во из базового класса не удалилась.
В итоге в phistory данные для новой записи без property_name, а в меню указано firstTHSensor.temp - так понимаю берется из старой записи со старым значением где в property_name указано это значение.
Удалил в THSensors св-во temp - все нормализовалось. Снова перебил с 7 на 2 - ошибка вернулась.
Перечитал сообщение, что-то скомкано написал, думаю по скринам таблиц будет понятнее.
db_classes.jpg
классы
db_classes.jpg (199.72 КБ) 8023 просмотра
db_base_class_prop.jpg
св-ва базового класса
db_base_class_prop.jpg (93.48 КБ) 8023 просмотра
db_class_prop.jpg
св-ва производного класса
db_class_prop.jpg (59.37 КБ) 8023 просмотра
db1.jpg
значения объекта
db1.jpg (137.45 КБ) 8023 просмотра
db2.jpg
история значений объекта
db2.jpg (115.46 КБ) 8023 просмотра

Re: Ошибка: меняю св-во базового класса в производном классе

Добавлено: Пн апр 07, 2014 11:06 am
krasnov
Сергей, Сергей, как слышно, прием, отзовитесь пожалуйста :)

Re: Ошибка: меняю св-во базового класса в производном классе

Добавлено: Пн апр 07, 2014 1:28 pm
sergejey
krasnov писал(а):Сергей, Сергей, как слышно, прием, отзовитесь пожалуйста :)
Т.е. изменение срока хранения истории в родительском классе приводит к созданию новой записи в таблице properties?

Видимо что-то с целостностью связей свойств в иерархии классов. Пометил, что надо разобраться.

Re: Ошибка: меняю св-во базового класса в производном классе

Добавлено: Пн апр 07, 2014 2:00 pm
krasnov
sergejey писал(а):Т.е. изменение срока хранения истории в родительском классе приводит к созданию новой записи в таблице properties?
Нет, изменил срок в производном (THSensors) классе, т.к. не устраивал срок в родительском (tempSensors).
То, что создалась новая запись св-ва в таблице properties для производного класса на мой взгляд нормально, т.к. если не создавать, то изменяя в родительском классе получится что сменим для всех производных классов.
По моему ошибка где-то в изменении таблицы pvalues. Среди выделенных строк первая (ID=102) лишняя, вторая (ID=110) нормальная, только не хватает PROPERTY_NAME.
Повторюсь что не знаю всей стуктуры БД и тонкостей работы, так что могу ошибаться в выводах.

Re: Ошибка: меняю св-во базового класса в производном классе

Добавлено: Пн апр 07, 2014 2:59 pm
sergejey
в производном классе THSensors было добавлено свойство с таким же именем как в tempSensors, но с другим сроком хранения?
тогда да, скорее ошибка в том, что неправильно определяется ID-шник родительского свойства -- я не тестировал как поведёт себя объект, у которого в родительских классах есть свойства с одинаковыми именами.

Re: Ошибка: меняю св-во базового класса в производном классе

Добавлено: Пн апр 07, 2014 3:33 pm
krasnov
sergejey писал(а):в производном классе THSensors было добавлено свойство с таким же именем как в tempSensors, но с другим сроком хранения?
тогда да, скорее ошибка в том, что неправильно определяется ID-шник родительского свойства -- я не тестировал как поведёт себя объект, у которого в родительских классах есть свойства с одинаковыми именами.
Приведу скриншоты. Я нажал на "Переписать" у св-ва temp. И во втором окне заменил срок.
interface1.jpg
interface1.jpg (44 КБ) 7925 просмотров
interface2.jpg
interface2.jpg (38.56 КБ) 7925 просмотров

Re: Ошибка: меняю св-во базового класса в производном классе

Добавлено: Вт апр 29, 2014 3:17 pm
dopos
спасибо за ответы

_______________
Кукурузные палочки я люблю больше, чем всякие сухарики и чипсы.