Russian Qt Forum
Сентябрь 08, 2010, 17:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2]
  Печать  
Автор Тема: QSqlTreeModel всем миром...  (Прочитано 4119 раз)
crossly
Гипер активный житель
*****
Offline Offline

Сообщений: 894


Просмотр профиля
« Ответ #15 : Ноябрь 12, 2008, 14:02 »

товарищ Zmeishe !!... сделай доброе дело для сообщества... !! Улыбающийся (пиво прилогается...)
Записан

нет препятствий патриотам... нет преград энтузиастам...
Zmeishe
Самовар
**
Offline Offline

Сообщений: 155



Просмотр профиля
« Ответ #16 : Ноябрь 12, 2008, 16:27 »

Излишков свободного времени у меня нет совсем, поэтому пинать бесполезно.
То, что у меня быстро получается, чего у других медленно получается - ну извините не моя вина.
Может у меня мозги на другой частоте работают ?  Подмигивающий

С сообществом поделюсь.
Предлагаю так же, как с многоуровневыми заголовками - делаю выжимку и выкладываю, а дальше вопрос-ответ, т.к. нет времени подробные комментарии расписывать в исходниках.

>> можно пива ему пообещать
- Барыня, водочку пить будешь?
- Ах, оставьте.
Смеющийся
« Последнее редактирование: Ноябрь 12, 2008, 16:39 от Zmeishe » Записан
Sergeich
Moderator
Супер активный житель
*****
Offline Offline

Сообщений: 783


Сферический писец в вакууме


Просмотр профиля
« Ответ #17 : Ноябрь 16, 2008, 15:40 »

Я же уже вроде постил редактируемую tree-модель с кэшем, основанную на QAbstractItemModel, правда для одной таблицы. Хотя не помню, что за вариант выкладывал. Вобщем, см. аттач.
Записан
terlan
Бывалый
*****
Offline Offline

Сообщений: 462


matrix resident


Просмотр профиля
« Ответ #18 : Январь 08, 2009, 22:47 »

спасибо за модель.

Только вот никак не пойму, какой должна быть структура таблицы? Пробовал сделать так:
Код:
"CREATE TABLE Object (id INTEGER PRIMARY KEY, parentName INTEGER, value1 INTEGER, value2 INTEGER)"
Базу конектит, таблицу видит, а данные не выводит. Подскажите, пожалуйста, что я мог не так сделать?
Записан

Qt 4.6.1
lit-uriy
Джедай : наставник для всех
*******
Online Online

Сообщений: 2773


Просмотр профиля WWW
« Ответ #19 : Январь 08, 2009, 23:10 »

2 terlan, может внешний ключ надо на родителя?
Записан

Юра.
terlan
Бывалый
*****
Offline Offline

Сообщений: 462


matrix resident


Просмотр профиля
« Ответ #20 : Январь 08, 2009, 23:26 »

Сделал так (добавил внешний ключ на родителя):
           
Цитировать
QSqlQuery query;
   query.exec("CREATE TABLE Object (id INTEGER PRIMARY KEY, parentName INTEGER  FOREIGN KEY, value1 INTEGER, value2 INTEGER)");

   query.exec("insert into Object values(NULL,1,1,0)");
   query.exec("insert into Object values(NULL,1,3,0)");
   query.exec("insert into Object values(NULL,1,5,0)");
   query.exec("insert into Object values(NULL,2,2,0)");
   query.exec("insert into Object values(NULL,2,3,0)");

перестала заполняться таблица Грустный
Разве не могут внешние ключи для нескольких записей быть одинаковыми?
Записан

Qt 4.6.1
lit-uriy
Джедай : наставник для всех
*******
Online Online

Сообщений: 2773


Просмотр профиля WWW
« Ответ #21 : Январь 09, 2009, 00:41 »

Могут, а вот NULL в первичном ключе это зачем?
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Online Online

Сообщений: 2773


Просмотр профиля WWW
« Ответ #22 : Январь 09, 2009, 00:43 »

и зачем ты это мучаешь через Query, ведь о том пляска с моделью и была, чтобы в представлении ее использовать.
Создай таблицу, к модели прицепи вьюху, и через неё пользуй. Я так идею понимаю.
Записан

Юра.
terlan
Бывалый
*****
Offline Offline

Сообщений: 462


matrix resident


Просмотр профиля
« Ответ #23 : Январь 09, 2009, 09:34 »

Могут, а вот NULL в первичном ключе это зачем?
Прочитал такое на сайте SQLITE, раздел FAQ
Цитировать
If you declare a column of a table to be INTEGER PRIMARY KEY, then whenever you insert a NULL into that column of the table, the NULL is automatically converted into an integer which is one greater than the largest value of that column over all other rows in the table, or 1 if the table is empty

и зачем ты это мучаешь через Query, ведь о том пляска с моделью и была, чтобы в представлении ее использовать.
Создай таблицу, к модели прицепи вьюху, и через неё пользуй. Я так идею понимаю.
я не мучаю через Query, просто написал небольшую программку, в которой создал базу с таблицей.
Саму SqlTreeModel не трогал, а просто подсоединяю к ней созданную базу.
Только не отображается таблица. У меня подозрение, что в таблице что-то не так, а вот что Непонимающий
Записан

Qt 4.6.1
lit-uriy
Джедай : наставник для всех
*******
Online Online

Сообщений: 2773


Просмотр профиля WWW
« Ответ #24 : Январь 09, 2009, 11:55 »

Только не отображается таблица. У меня подозрение, что в таблице что-то не так, а вот что Непонимающий
дак посмотри ее с помощью %QTDIR%/demos/sqlbrowser, что там реально записалось
Записан

Юра.
terlan
Бывалый
*****
Offline Offline

Сообщений: 462


matrix resident


Просмотр профиля
« Ответ #25 : Январь 09, 2009, 12:15 »

Только не отображается таблица. У меня подозрение, что в таблице что-то не так, а вот что Непонимающий
дак посмотри ее с помощью %QTDIR%/demos/sqlbrowser, что там реально записалось
Подозрение касается структуры таблицы в базе - почему то модель (SqlTreemodel) не подгребает данные из созданной мною таблицы.
Ps А данные в таблицу вставляются, правда без FOREIGN KEY

-----------------------
хотя, если судить по коду sqltreemodel, то FOREIGN KEY в данной ситуации для родителя не нужен.
« Последнее редактирование: Январь 09, 2009, 12:33 от terlan » Записан

Qt 4.6.1
terlan
Бывалый
*****
Offline Offline

Сообщений: 462


matrix resident


Просмотр профиля
« Ответ #26 : Январь 09, 2009, 23:50 »

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

Т.о.
1) создаем таблицу
Цитировать
CREATE TABLE Object (ObjID INTEGER PRIMARY KEY, ParentID INTEGER, ObjName TEXT, ObjType TEXT, Created TEXT);
2) создаем записи:
Цитировать
   QSqlQuery query;
   query.exec("insert into Object values(NULL,0,'Object1','Some type', 'yes')");
   query.exec("insert into Object values(NULL,1,'Object2','Some type', 'yes')");
   query.exec("insert into Object values(NULL,1,'Object3','Some type', 'yes')");
Зы: спасибо Константину за наводки Улыбающийся
Записан

Qt 4.6.1
vpara
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #27 : Июль 29, 2010, 14:49 »

Я же уже вроде постил редактируемую tree-модель с кэшем, основанную на QAbstractItemModel, правда для одной таблицы. Хотя не помню, что за вариант выкладывал. Вобщем, см. аттач.

По вашему примеру я сделал себе трее только с выбором из 2 таблиц (структура на рисунке) ...
А дальше возникли 2 вопроса:
 1. Хочу сделать выборку еще из 2 таблиц (итого будут 4 ... структура в рисунке2) ... что посоветуете сделать в те же запросы или создавать новые ниже
 2. Как установить иконки для итемов? (пока не разобрался .... но сильно не капал)
Записан
vpara
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #28 : Июль 29, 2010, 16:10 »

Я же уже вроде постил редактируемую tree-модель с кэшем, основанную на QAbstractItemModel, правда для одной таблицы. Хотя не помню, что за вариант выкладывал. Вобщем, см. аттач.

Пытаюсь грубо (временно) дописать запрос ... по идее должен быть как то так:

       query.exec( QString("SELECT %1 FROM %2, %3 WHERE %4 = %5 AND %6 = %7 "
                        "UNION ALL "
                        "SELECT product.product_id FROM product, product_category_xref "
                        "WHERE product.product_id = product_category_xref.product_id AND category_id = %5")
                .arg(idName)
      .arg(tableName)
                .arg(tableRelated)
      .arg(parentName)
      .arg(id)
                .arg(idName)
                .arg(relatedId)
                .arg(orderByField));

Но результат не радует ...
« Последнее редактирование: Июль 29, 2010, 16:15 от vpara » Записан
Страниц: 1 [2]
  Печать  
 
Перейти в:  

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