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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qt + PostgreSQL + UTF-8  (Прочитано 16570 раз)
Disaron
Гость
« Ответ #15 : Июль 16, 2009, 13:28 »

Ан нет, рано обрадовался.
Не обратил внимания на то что забивал и прочитал то, что уже существовало.
Та же канитель с кракозябрами, только теперь еще почему-то часть запросов отвалилась, при этом если меняю тип соединения - все работает. Соединение поднимается в единственном сырце и работает на все приложение.
Код:
#include "connection.h"


bool dbconnected()
{
  QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
  db.setDatabaseName("DRIVER=PostgreSQL Unicode;PORT=5432;SERVER=127.0.0.1;DATABASE=ASU;UID=asu;PWD=111");
  return db.open();
}

bool dbconnectedlnx()
{
  QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
  db.setHostName("127.0.0.1");
  db.setDatabaseName("ASU");
  db.setUserName("asu");
  db.setPassword("111");
  return db.open();
}
Два запроса в одной форме такого рода
select * from fn_pred_list(); //отрабатывает всегда
select * from fn_pred_insert(:name_pred, :name_pred_s) //не отрабатывает, хотя отрабатывает если я в форме использую dbconnected(), а не dbconnectedlnx()

Может есть какие-то нюансы в использовании QPSQL?
UP: Опаньки, executedQuery возвращает select * from fn_pred_insert(?, ?) оно плейсхолдеры что-ли не поддерживает? В случае с одбц запрос нормальный возвращается.

Вот такой код биндит все нужные значения:
Код:
QSqlQuery wBaseList::FillQueryFields(QString query, QStringList params)
{
    QSqlQuery *sqlQuery = new QSqlQuery();
    sqlQuery->prepare(query);
    QStringList::const_iterator paramsIterator;
    for (paramsIterator = params.begin(); paramsIterator != params.end(); ++paramsIterator)
    {
        QWidget *obj;
        obj = fmDialog->findChild<QWidget*>("fld"+*paramsIterator);
        if (fmDialog->findChild<QWidget*>("fld"+*paramsIterator))
        {
            if (obj->inherits("QLineEdit"))
                sqlQuery->bindValue(":"+*paramsIterator,obj->property("text"));
        }
    }
    return *sqlQuery;
}
потом этот запрос присваивается к другому в вызывающей функции, добиндиваются ключевые поля в случае необходимости и выполняется.
« Последнее редактирование: Июль 16, 2009, 15:27 от Disaron » Записан
BaltikS
Гость
« Ответ #16 : Июль 16, 2009, 15:49 »

Погоди, так вопрос в кодировке или не выполнении запроса? Какой PostgreSQL? По-поводу кодировки всё должно быть в норме.... Потому как лет 5 уже под него пишу и каких то отклонений существенных не наблюдаю...
Записан
Disaron
Гость
« Ответ #17 : Июль 16, 2009, 15:55 »

вопроса теперь оба Улыбающийся
postgre 8.3
причем boundvalue("") возвращает прибинденное значение, но результат запроса - пустой.
среда - QtCreator, Qt 4.5.2
Конечно нет пока возможности проверить на никсах - это когда домой приду.

UP: вопрос с неотработкой запроса снимается - нашел свой косяк, спасибо
qDebug() << sqlQuery.boundValues() Улыбающийся
кодировка пока на той-же стадии... Грустный

UP2: с кодировкой вопрос тоже снят, теперь точно - можно закрывать.  Строит глазки

UP3: кстати чтобы уж завершить: в одбц все равно кракозябры. Улыбающийся так что не зря повозился.
« Последнее редактирование: Июль 16, 2009, 16:13 от Disaron » Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #18 : Июль 21, 2009, 10:37 »

При выполнении все пунктов можно и со static. Только заново Qt собирать надо. В этом случае дравер у тебя будет включен в исполняемый файл. И не забывай, что за собой всегда надо таскать libpq.dll.
Как показывает мой опыт, нужно еще таскать
comerr32.dll
krb5_32.dll
libeay32.dll
libiconv-2.dll
libintl-2.dll
ssleay32.dll

Только тогда наличие PostgreSQL на компе не нужно
Записан

Как мало времени и как много нужно узнать
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #19 : Июль 21, 2009, 11:42 »

Можно самому собрать постгрес и тогда нужно будет только libpq.dll
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
BaltikS
Гость
« Ответ #20 : Июль 21, 2009, 13:36 »

Можно самому собрать постгрес и тогда нужно будет только libpq.dll
+1
Примерный ученик, твой опыт видимо ещё достаточно мал Улыбающийся.... Без обид....
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #21 : Июль 21, 2009, 16:38 »

Можно самому собрать постгрес и тогда нужно будет только libpq.dll
+1
Примерный ученик, твой опыт видимо ещё достаточно мал Улыбающийся.... Без обид....
А чего обижаться. Просто я не вижу смысла собирать PostgreSQL, если есть великолепный инсталятор. А одна dll или несколько особого значения не имеет...
Записан

Как мало времени и как много нужно узнать
BaltikS
Гость
« Ответ #22 : Июль 21, 2009, 17:41 »

Примерный ученик, так то оно так, только вот из за этой великолепной пятёрки DLL, в NT 4, libpq - не пашет Подмигивающий... 
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #23 : Июль 22, 2009, 13:05 »

Примерный ученик, так то оно так, только вот из за этой великолепной пятёрки DLL, в NT 4, libpq - не пашет Подмигивающий... 
К счастью, мои проги будут работать начиная с WINDOWS 2000. Там проблем нет.
А за инфу спасибо. Зарекаться от чего либо глупо. Сделаю зарубку на память...
Записан

Как мало времени и как много нужно узнать
Khs
Гость
« Ответ #24 : Июль 22, 2009, 13:48 »

Можно самому собрать постгрес и тогда нужно будет только libpq.dll
+1
Примерный ученик, твой опыт видимо ещё достаточно мал Улыбающийся.... Без обид....
А чего обижаться. Просто я не вижу смысла собирать PostgreSQL, если есть великолепный инсталятор. А одна dll или несколько особого значения не имеет...

а зачем пересобирать весь postgresql, можно собрать libpq отдельно, секундное дело..
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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