Название: Как подружить linux + Qt + PostgreSQL и разный регистр в названии таблиц? Отправлено: PavelVX от Январь 26, 2011, 06:46 Подскажите, куда дальше двигаться?
Есть alt linux Postgre server 8.3. Есть линуксовая машинка с Qt 4.7. Делаем так: QSqlRelationalTableModel * albumsRelation = new QSqlRelationalTableModel(0); albumsRelation->setTable("\"Temp\".\"Temp\""); qDebug() << albumsRelation->lastError(); //говорит следующее: QSqlError(-1, "Unable to find table "Temp"."Temp"", "") Непонятки. Почитал соседние ветки, возможно это связанно с немного кривоватым драйвером Qt для psql. В src\sql\drivers\psql\qsql_psql.cpp подправляем на следующее: static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection) { qWarning("My PostgreSQL driver."); QPSQLDriver::Protocol serverVersion = QPSQLDriver::Version82; Дальше все как в инструкции: #cd /home/pavel/qtsdk-2010.05/qt/src/plugins/sqldrivers/psql/ #/home/pavel/qtsdk-2010.05/qt/bin/qmake -o Makefile "INCLUDEPATH+=/usr/include/pgsql" "LIBS+=-L/usr/lib -lpq" psql.pro #make Все делается без ошибок. Запускаем проект. но в окно дебага ничего не падает :(. Разный регистр тоже не срабатывает. Что теперь делать? Неужели все кто работают с psql пишут таблицы в нижнем регистре? PS model->setQuery("select * from \"Temp\".\"Temp\""); //работает Название: Re: Как подружить linux + Qt + PostgreSQL и разный регистр в названии таблиц? Отправлено: PavelVX от Январь 26, 2011, 07:11 Если все тоже самое попробочвать сделать через QODBC, то вообще странности начинаются: приложение падает. И пишет:
QODBCDriver::checkHasSQLFetchScroll: Warning - Driver doesn't support scrollable result sets, use forward only mode for queries *** stack smashing detected ***: /home/pavel_v/test1-build-desktop/test1 terminated ======= Backtrace: ========= куча строк... В гугле по этому поводу разъяснения не нашел :(. Какой-то мрак. Название: Re: Как подружить linux + Qt + PostgreSQL и разный регистр в названии таблиц? Отправлено: prometey от Январь 26, 2011, 12:40 идентификаторы можно писать двумя способами:
1. просто указывать идентификатор 2. указывать его в двойных кавычках. (в мсскл-ле используются вроде квадратные скобки для полей) В случае 1 постгря автоматом приводит имена идентификаторов в нижний регистр (например оракл - в верхний). В случае 2 - она не приводит идентификаторы в нижний регистр а использует именно в таком регистре как написано. Драйвер постгри не кривоват, а делает всё вполне закономерно - он дает возможность программисту самому решать как писать идентификаторы - с двойными кавычками или без них. Что касается вопроса "Неужели все кто работают с psql пишут таблицы в нижнем регистре?" - позволю себе ответить уж сильно категорично: все АДЕКВАТНЫЕ люди (по крайней мере то большое количество которое я знаю) программирующие для СУБД пишут идентификаторы в одном регистре и без кавычек, дабы не было путаниц с Temp и temp. Т.о конкретная СУБД приведет их в нужный регистр (постгря - в нижний, оракл - в верхний). Но если уж кто-то решил в силу религиозных причин иметь возможность лицезреть в БД именно Temp, то пусть будет любезен писать "Temp" во всех программах, общающихся с этой таблицей. Название: Re: Как подружить linux + Qt + PostgreSQL и разный регистр в названии таблиц? Отправлено: PavelVX от Январь 27, 2011, 06:53 Ну с регистром понятно, что желательно делать все однообразно и просто. Как раз таки "Temp" меня написать-то не напрягает, читать код, лично мне, потом удобнее. Но последующие движения постараюсь делать в ключе: регистр по умолчанию.
По теме топика: мож кому пригодится: снес linux, поставил все с нуля, установил Qt с сайта разрабов из под пользователя и все заработало. Таблицы с разным регистром открываются на ура. Что было, непонятно. Может при установке каких-то обновлений что-то съехало или нехватало прав на выполнение какой-либо операции. Тему можно закрывать. |