Название: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: yanis от Июнь 23, 2010, 16:33 Собственно сабж. Получаю пустой cmdUsers и 0 ошибок.
Код: QSqlError dbError; В табличке lstUsers содержится 4 записи. Если приведенный запрос исполнять из pgAdmin'a - все работает. Из qt соединение с БД устанавливается правильно, pgAdmin его показывает. Включил в postgresql.conf log_statement=all - все вроде бы правильно Цитировать 2010-06-23 10:46:38 GMTLOG: statement: select version() 2010-06-23 10:46:38 GMTLOG: statement: SET CLIENT_ENCODING TO 'UNICODE' 2010-06-23 10:46:38 GMTLOG: statement: SET DATESTYLE TO 'ISO' 2010-06-23 10:46:38 GMTLOG: statement: SELECT "lstUsers"."ID", "lstUsers"."UserName", "lstUsers"."RealName" FROM public."lstUsers" ORDER BY "lstUsers"."RealName" ASC; Получается, программа вроде как запрос к серверу шлет, но не обрабатывает. Какие причины могут быть, что комбобокс не заполняется? Или сервер как-то может возвращать пустой результат? Запустил C:\Qt\2010.02.1\qt\demos\sqlbrowser\release\sqlbrowser.exe Драйвер в выпадающем списке отображается, соединение с БД устанавливается нормально, список таблиц отображается. Однако: 1. При даблклике по таблице он говорит "Unable to find table "lstUsers"" (как и другие таблицы). 2. При щелчке правой кнопкой - Show schema - без ошибок, но таблица пустая. 3. Но! SELECT "lstUsers"."ID", "lstUsers"."UserName", "lstUsers"."RealName" FROM public."lstUsers" ORDER BY "lstUsers"."RealName" ASC; Корректный результат... "На всякий случай" снес кьют, постгрес. Поставил Постгрес, потом Кьют, откомпилировал плагин для PSQL. Ничего не изменилось... Куда дальше копать? Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: asvil от Июнь 23, 2010, 16:54 Немного не в тему. Если comboBox не редактируемые лучше сделать так:
Код: model = new QSqlQueryModel; Может пользователь из под которого производиться подключение не имеет доступа к таблице users. Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: yanis от Июнь 23, 2010, 17:10 Немного не в тему. Если comboBox не редактируемые Отлично работает, спасибо!... Может это связано с использованием схемы. Может постгрес не настроен подставлять public если схема не указана. Может пользователь из под которого производиться подключение не имеет доступа к таблице users. Теперь встречные вопросы: А если комбо редактируемые (или другой контрол?) Как настроить постгрес по-любому подставлять паблик? А как сделать многоколоночный комбобокс? Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: lit-uriy от Июнь 23, 2010, 17:19 Цитировать Однако: это известный касяк, в Qt 4.3.x это работало, а потом исправили Qt и работать перестало :)1. При даблклике по таблице он говорит "Unable to find table "lstUsers"" (как и другие таблицы). 2. При щелчке правой кнопкой - Show schema - без ошибок, но таблица пустая. 3. Но! SELECT "lstUsers"."ID", "lstUsers"."UserName", "lstUsers"."RealName" FROM public."lstUsers" ORDER BY "lstUsers"."RealName" ASC; Корректный результат... Т.е. имена в разных регистрах перестали работать эту демку можно исправить так: Код
Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: yanis от Июнь 23, 2010, 17:52 это известный касяк, в Qt 4.3.x это работало, а потом исправили Qt и работать перестало :) Спасибо! Сейчас поковыряю демку. Если поправлю - может что и понимать начну :)Т.е. имена в разных регистрах перестали работать эту демку можно исправить так: Код
Шайтанама, теперь и тут работает! Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: asvil от Июнь 23, 2010, 18:23 Цитировать А если комбо редактируемые (или другой контрол?) Для этого подойдет QSqlTableModel. Но далеко не сразу подойдет.Цитировать А как сделать многоколоночный комбобокс? Код: view = new QTableView(this); Все вышеперечисленное имеет некоторое количество подводных камней. Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: yanis от Июнь 23, 2010, 21:35 Цитировать А как сделать многоколоночный комбобокс? Код: ... Все вышеперечисленное имеет некоторое количество подводных камней. Что такое d в коде? Неужели нет более простого решения? Пока достаточно иметь колонку из БД в комбике и скрытую колонку (ИД строки) из таблицы в базе. Хоть городи второй невидимый комбик рядом, типа Код: ui->cmb1->setModel(model); Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: asvil от Июнь 23, 2010, 22:37 Прошу прощенья за копипаст из исходных текстов. d-> можно удалить. Вот псевдокод, чтобы увидеть результат.
Код: view->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); Но лучше назовите задачу очень конкретно, потому что я в свое время заморочившись: "а что если комбобокс редактируемый", - потратил многовато времени, но не достиг нужного ГУИ результата. Если я правильно понял, вы делаете будущее "окно входа"? Сделайте как в *nix или win: QListView и по QListView::onClick показывайте QInputDialog::getString() QListView выгоднее QComboBox ровно на один клик. Если вы хотите сделать форму для редактирования списка пользователей/назначения прав и т.д. Название: Re: Qt + Postgresql (все под Windows) - SELECT не селектится... Отправлено: yanis от Июнь 25, 2010, 08:26 d-> можно удалить... Повоевал немного с утра, хотел было завопить, что опять не работает - потом допер, что зря комментируюКод: combo.setModel(model); Но лучше назовите задачу очень конкретно... Задач с комбобоксами 100500, в данном случае - это будет ридонли комбо со списком пользователей, для фильтрации таблицы со списком некоторых записей.Если я правильно понял, вы делаете будущее "окно входа"? А вообще - хочу комбобокс как в МС Акцессах. Прямо в редакторе свойств накликать запрос, указать кол-во и размер колонок - и все работает :) |