Russian Qt Forum
Июнь 16, 2024, 07:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение и отображение данных  (Прочитано 6651 раз)
LEO
Гость
« : Апрель 03, 2013, 09:05 »

Господа, столкнулся с очень очень неприятной для себя проблемой и зашел в тупик в поиске решений, в двух словах о самой программе,человек вводит определенные данные они сохраняются в БД(SQLite) чтобы в последующем была возможность к ним обращаться при надобности, некоторые данные берутся из справочников, в данном случае их 2, данные из справочника вывожу в комбобокс, система работает следующим образом: при выборе определенного параметра в комбобоксе соответствующие данные подтягиваются в соответствующие поля лайнедита. Отображение идет с помощью датавиджетмэппера. Проблема в следующем,данные сохраняются в виде индексов что по идее верно, и при замене значения в справочнике, например фамилии оно поменяется во всей таблице где хранятся все общие сведения, чего бы не хотелось, как бы сделать так чтобы при замене данных в справочнике данные в общей таблице где хранятся все введенные данные не изменялись, для наглядности прикладываю то что удалось сделать на теперешний момент, запутался окончательно... В замешательстве
« Последнее редактирование: Апрель 03, 2013, 13:23 от LEO » Записан
Bepec
Гость
« Ответ #1 : Апрель 03, 2013, 09:21 »

Не смотрел проект, но это уже вторая тема про dataWidgetMapper. Наиболее простой вариант - используйте самописный обработчик и сохраняйте не индекс, а фамилию или что-там у вас Улыбающийся

PS это проблема архитектуры если честно. В справочнике должна храниться статическая информация. Если же в какой то момент времени информация из справочника может измениться, значит следует либо создавать снапшоты справочника и привязывать значения таблицы ко времени, или же отказаться от справочника.

this моё мнение Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Апрель 03, 2013, 10:02 »

Если все связи делать через ROWID (http://www.sqlite.org/autoinc.html), то никаких проблем не должно быть.
Записан

Qt 5.11/4.8.7 (X11/Win)
LEO
Гость
« Ответ #3 : Апрель 03, 2013, 13:37 »

в общем решил пойти простым путем и записывать текстовые данные в основную таблицу,а не индексы, однако как сделать это через комбобокс не очень понял и решил сделать с помощью лайнедит+комплитер, но не могу понять почему сохраняются только данные которые я ввожу в комплитер, а данные которые подтягиваются и отображаются в других лайнедитах и привязаны в datawidgetmapper не сохраняются в базе...  Грустный
Цитировать
Если все связи делать через ROWID (http://www.sqlite.org/autoinc.html), то никаких проблем не должно быть.
если завязать все на айдишнике, то изменив запись 123|директор|иванов| на 123|слесарь|иванов| должности везде поменяются, или я не так понял...
« Последнее редактирование: Апрель 03, 2013, 21:23 от LEO » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Апрель 03, 2013, 17:14 »

если завязать все на айдишнике, то изменив запись 123|директор|иванов| на 123|слесарь|иванов| должности везде поменяются, или я не так понял...
запись должна быть типа
123|id_для_директор|иванов| на 123|id_для_слесарь|иванов|
id_для_директор и id_для_слесарь держать в отдельной таблице position
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #5 : Апрель 03, 2013, 18:22 »

GreatSnake - тут дело не в связях, а в том, что если таблица с идентификаторами изменится, то значения верные для более ранних записей будут неверными.

Аналогия - подключенные устройства в текущий момент:
101 - USB DVD
202 - USB HDD

Делаем запись в таблицу другую:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD

Вроде всё верно, но...

Меняем подключенное устройство с DVD на 3D принтер и получаем.
Таблица 1:
101 - 3D принтер
202 - USB HDD

Таблица 2:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD
3 | 101 | MODEL_PRINTER

В итоге первая запись ложная Улыбающийся Ибо данные могут изменяться в первой таблице.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #6 : Апрель 03, 2013, 21:03 »

Да уж. Я уже сам запутался.
То ли у вас проблема с формализацией объекта (выделение постоянных свойств объекта в отдельную таблицу), то ли проблема логирования и отображения смены постоянных (идентификационных) свойств объекта. И с той и с другой проблемой сталкивался, но которая у вас с первой читки не понял (((
На всякий вам бы курс пройти по моделированию баз данных.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #7 : Апрель 03, 2013, 21:08 »

как бы сделать так чтобы при замене данных в справочнике данные в общей таблице где хранятся все введенные данные не изменялись, для наглядности прикладываю то что удалось сделать на теперешний момент, запутался окончательно...
Была такая проблема.
Предметная область - ремонт. Телефон в ремонте идентифициируется по имею. НО при замене платы меняется и имей. Вышел из положения введя понятие партии ремента с кодом, где имеи пишутся рядышком. Т.е. заменил строку на элемент из таблицы в которой есть история.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
LEO
Гость
« Ответ #8 : Апрель 03, 2013, 21:22 »

Вот Верес все пояснил на примере впринципе так как и я понимаю, впринципе так и есть так работает система связи и на мой взгляд, дело в том что там не такая уж и сложная база, там всего навсего 3 таблицы одна в которой все данные хранятся, остальные 2 справочники с которых берется инфа для заполнения большой таблицы где хранятся все данные, таким образом осуществляется хранение информации, в БД не асс не спорю , дело в другом, темы похожей не нашел, возможно где то и есть такая.
Приложил компиляберный вариант того что есть на сегодняшний день,буду думать завтра дальше... Грустный
Записан
Bepec
Гость
« Ответ #9 : Апрель 03, 2013, 22:43 »

Я б предложил - повторюсь, не тормозить и сделать одной таблицей. Ибо меняющиеся данные в качестве справочных ох как не подходят Веселый
Записан
LEO
Гость
« Ответ #10 : Апрель 04, 2013, 07:56 »

 Грустный Грустный :(Это не вариант, нужны справочники, они необходимы, сохранять в тексте надо просто научится в основную таблицу и отображать все как надо, с этим проблемы сейчас  Грустный Грустный  Грустный
« Последнее редактирование: Апрель 04, 2013, 08:03 от LEO » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Апрель 04, 2013, 08:06 »

GreatSnake - тут дело не в связях, а в том, что если таблица с идентификаторами изменится, то значения верные для более ранних записей будут неверными.
С чего это вдруг Непонимающий
Разговор идёт про отдельный справочник. В данном примере про USB устройства.
При его изменении уникальный ID не должен меняться. Разве что может быть удалена вся запись.

Цитировать
Аналогия - подключенные устройства в текущий момент:
101 - USB DVD
202 - USB HDD

Делаем запись в таблицу другую:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD

Вроде всё верно, но...

Меняем подключенное устройство с DVD на 3D принтер и получаем.
Таблица 1:
101 - 3D принтер
202 - USB HDD

Таблица 2:
1 | 101 | METKA_DVD
2 | 202 | METKA_HDD
3 | 101 | MODEL_PRINTER

В итоге первая запись ложная Улыбающийся Ибо данные могут изменяться в первой таблице.
Полная чушь ибо совершенно дикая организация данных.
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #12 : Апрель 04, 2013, 08:14 »

Да я о чем и толкую. У него справочник не статичный. Он вообще по теории справочником являться не может Веселый
Записан
LEO
Гость
« Ответ #13 : Апрель 04, 2013, 08:58 »

 Злой в данной ситуации нужна именно дикая организация данных
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.157 секунд. Запросов: 22.