Ан нет, рано обрадовался.
Не обратил внимания на то что забивал и прочитал то, что уже существовало.
Та же канитель с кракозябрами, только теперь еще почему-то часть запросов отвалилась, при этом если меняю тип соединения - все работает. Соединение поднимается в единственном сырце и работает на все приложение.
#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;
}
потом этот запрос присваивается к другому в вызывающей функции, добиндиваются ключевые поля в случае необходимости и выполняется.