Название: Вывод результата запроса в QTableView Отправлено: hank от Февраль 07, 2011, 10:32 Здравствуйте.
Необходимо написать программу, которая выводит результаты запроса в компонент QTableView. Для начала я поглядел на пример из книги Макса Шлее. Там это сделано примерно так: Код: createConnection(); Я всё делаю аналогично, но у меня в QTableView ничего не показывается. При этом если я делаю вот такой вот финт, то данные в табличке некоторое время отображаются: Код: for(int i=0; i<100000; ++i) Как решить проблему? Название: Re: Вывод результата запроса в QTableView Отправлено: Пантер от Февраль 07, 2011, 10:45 Модель и вьюха созданы на стеке, при выходе из функции они удалятся.
Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 07, 2011, 10:56 Мда, действительно :)
Спасибо, заработало. Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 07, 2011, 12:20 Спрошу здесь ещё кое-что.
Как из модели вывести содержимое конкретной ячейки таблицы или например одной строки или столбца? То есть содержимое одной конкретной ячейки вывести на лейбл или что-то подобное, а содержимое столбца - в какой-нибудь комбобокс? Название: Re: Вывод результата запроса в QTableView Отправлено: Пантер от Февраль 07, 2011, 12:25 void QComboBox::setModel ( QAbstractItemModel * model )
Не нужно поднимать по несколько вопросов в одной теме, потом будет тяжело что-то найти. Один вопрос - одна тема. Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 07, 2011, 13:40 Тогда ещё один вопрос по выводу в QTableView.
На одной кнопке у меня висит вывод данных из таблицы БД в QTableView: Код: model.setQuery("SELECT * FROM test", DB); На другую кнопку я вешаю добавление новой строки в таблицу: Код: model.setQuery("INSERT INTO test VALUES (1,2,3,4); Значения успешно добавляются в БД, но вот содержимое QTableView исчезает, даже если я после добавления строки второй раз пишу Код: ui->tableView->setModel(&model); Как быть? Название: Re: Вывод результата запроса в QTableView Отправлено: Пантер от Февраль 07, 2011, 13:43 Ты неверно делаешь. INSERT нужно делать через QSqlQuery. И после этого model.setQuery("SELECT * FROM test", DB);
Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 09, 2011, 12:58 Снова возникли трудности.
Попытался сделать вывод содержимого таблицы на QTableView как в примере их хелпа "Cached Table Example". Там используется класс QSqlTableModel, а не QSqlQueryModel, который я пробовал раньше. Делаю вот так: Код: QSqlTableModel model; Соединение с базой проходит успешно, переменная model объявлена глобально, но на tableView ничего не показывается. Что я делаю не так? Название: Re: Вывод результата запроса в QTableView Отправлено: Пантер от Февраль 09, 2011, 13:04 qDebug () << model.lastError ().text () что говорит?
Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 09, 2011, 13:18 Хмм. Выдает вот что:
" Unable to find table tab1" Однако если я использую QSqlQueryModel, то всё работает: Код: QSqlQueryModel m1; То есть таблица tab1 таки существует. Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 09, 2011, 15:40 Порылся в интернете и пришёл к неутешительным выводам.
Собственно аналогичную ошибку "Unable to find table" выдаёт и sqlbrowser из папки \demos в Qt. После прочтения некоторых материалов (раз (http://www.prog.org.ru/topic_7957_0.html), два (http://www.litovchenko.com/blog/2008/07/qt4_postgresql_wtf/)) я понял, что проблема кроется в драйверах для подключения к серверу Postgres. У меня стоит сервер версии 9.0, но из-за ошибки в исходниках драйверов версия определяется как шестая, и из-за этого возникают какие-то косяки с определением названий таблиц. В общем, надо либо откатываться на более ранню версию Postgres, либо самому пересобирать драйвера, либо как в хелпе вместо класса QSqlTableModel использовать самодельного потомка от класса QSqlQueryModel :-[ Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 09, 2011, 16:32 Хмм.
А вот сейчас попробовал подключиться к другому серверу версии 7.4. sqlbrowser из \demos работает, а я вот всё равно при использовании QSqlTableModel получаю "Unable to find table". Какие идеи? Название: Re: Вывод результата запроса в QTableView Отправлено: sadhu от Февраль 09, 2011, 20:45 Версия Qt? Уверен что этого бага нет, если я правильно все понял, в версии 4.6.0, так как исправлял его (драйвер не правильно определял список доступных таблиц, точнее приводил все таблицы содержащие цыфры к верхнему регистру) в 4.5.1 на работе а потом выяснилось что в более поздних версиях оно исправлено.
Если версия одна из последних, то отпишись о баге тут bugreports.qt.nokia.com (http://bugreports.qt.nokia.com) Название: Re: Вывод результата запроса в QTableView Отправлено: hank от Февраль 10, 2011, 09:37 Версия Qt? Уверен что этого бага нет, если я правильно все понял, в версии 4.6.0, так как исправлял его (драйвер не правильно определял список доступных таблиц, точнее приводил все таблицы содержащие цыфры к верхнему регистру) в 4.5.1 на работе а потом выяснилось что в более поздних версиях оно исправлено. Версия Qt - 4.5.3 и работать я должен именно на ней.Если версия одна из последних, то отпишись о баге тут bugreports.qt.nokia.com (http://bugreports.qt.nokia.com) Что касается названия таблиц, то вот так их названия выводятся правильно: Код: QStringList DBTables=DB.tables(QSql::Tables); Более того, название интересующей меня таблицы я пытался выбрать вот так: Код: QString tableName = "Foo"; // исходное имя |