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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Подключение к БД и вывод в TableView  (Прочитано 15152 раз)
wildcat
Гость
« : Январь 31, 2012, 10:24 »

Здравствуйте.
Есть проблема.
Имеется программа которая создает свою БД sqlete, как можно вывести данную БД в имеющийся TableView для дальнейшего ее редактирования.

вот подключаюсь к БД.
Код
C++ (Qt)
bool createConnection()
{
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName("/var/db/ddb.sl3");
   if (!db.open()) {
       QMessageBox::warning(0, QObject::tr("Database Error"),
                            db.lastError().text());
       return false;
   }
   return true;
}

все подключается, ошибок нет. А как вывести ее в TableView?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Январь 31, 2012, 10:27 »

QSqlTableModel или QSqlQueryModel.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
wildcat
Гость
« Ответ #2 : Январь 31, 2012, 15:45 »

Перечитал документацию QSqlTableModel и QSqlQueryModel.
Не могу разобраться, как отобразить существующую БД в созданом TableView.
Есть у кого нибудь источник где можно это посмотреть?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Январь 31, 2012, 15:49 »

Перечитал документацию QSqlTableModel и QSqlQueryModel.
Не заметно. http://doc.qt.nokia.com/4.8-snapshot/sql-tablemodel.html - тут что не понятно?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
wildcat
Гость
« Ответ #4 : Январь 31, 2012, 16:44 »

для меня, это какой-то темный лес. Стараюсь его осветлить))
Мне там не понятно, где эта БД подключается, т.е. где там указывается путь к БД которую необходимо отобразить.
Записан
wildcat
Гость
« Ответ #5 : Февраль 01, 2012, 12:11 »

Все получилось... Я не правильно указывал название таблицы SQL, по этому мне ничего не заполнялось данными. Теперь все заработало.
Записан
wildcat
Гость
« Ответ #6 : Февраль 01, 2012, 15:43 »

Не пойму почему, когда запускаю программу, таблица sql отображается и сразу исчезает. Не подскажете, что не так делаю?
Код
C++ (Qt)
 
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName("/var/db/surd/ddb.sl3");
   if (!db.open())
       {
           qDebug() << QObject::trUtf8("не могу открыть БД") << db.lastError().text();
 
       }
 
    QSqlTableModel model;
    model.setTable("UsbProperties");
    model.select();
    tableView->setModel(&model);
 
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Февраль 01, 2012, 15:50 »

Ты создаешь модель на стеке и она уничтожается при выходе из области видимости. Создавай в куче.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
wildcat
Гость
« Ответ #8 : Февраль 01, 2012, 16:10 »

спасибо, все исправил

Код
C++ (Qt)
    QSqlTableModel *model;
    model = new QSqlTableModel();
    model->setTable("UsbProperties");
    model->select();
    tableView->setModel(model);
Записан
wildcat
Гость
« Ответ #9 : Февраль 01, 2012, 20:49 »

С отображением таблицы все разрешилось. Но проблема осталась. Дело в том что таблицы в SQL не совсем правильная, изменить ее там нельзя. Не подскажете, возможно изменить ее отображение в TableView'ре подобным обрзазом? Примеры таблиц во влажении.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Февраль 02, 2012, 07:24 »

Можно сделать вьюху в базе и ее открывать, а можно заюзать QSqlRelationalTableModel.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
wildcat
Гость
« Ответ #11 : Февраль 02, 2012, 11:05 »

решил реализовать это с помощью нескольких запросов. Вот только не получается сделать сортировку.
Код
C++ (Qt)
QSqlQueryModel* query;
     query = new QSqlQueryModel();
     query->setQuery("SELECT KEY, Value FROM UsbProperties");
     query->sort(1);
 
          tableView->setModel(query);

Хочу что бы получилось user к user, group к group. т.е сначала шли одни, потом другие.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Февраль 02, 2012, 11:06 »

Дык в запросе и сортируй - ORDER BY.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
wildcat
Гость
« Ответ #13 : Февраль 02, 2012, 11:47 »

Спасибо. Все сортируется.

Не подскажете, как можно реализовать, так что бы получилось:
Пробовал QSqlRelationalTableModel, нашел примеры замены ключа и наследование комбобокса.
Записан
wildcat
Гость
« Ответ #14 : Февраль 02, 2012, 15:01 »

Делаю два запроса.

Код
C++ (Qt)
//________________________________первый запрос________________
     QSqlQueryModel *model = new QSqlQueryModel;
     model->setQuery("SELECT DISTINCT KEY FROM( SELECT KEY,  Value FROM UsbProperties)");
     QTableView *table_sort = new QTableView();
     table_sort->setModel(model);
     table_sort->show();
 
//________________________________второй запрос________________
     QSqlQueryModel *query= new QSqlQueryModel;
     query->setQuery("SELECT Value FROM( SELECT KEY,  Value FROM UsbProperties)");
     QTableView *table_sort_1 = new QTableView();
     table_sort_1->setModel(query);
     table_sort_1->show();

Получается 2ве таблицы вида во вложении. Первая таблица это название колонок, а вторая это данные. Можно из двух таблиц склеить одну?
« Последнее редактирование: Февраль 02, 2012, 15:03 от wildcat » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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