Russian Qt Forum

Qt => Базы данных => Тема начата: GraninDm от Сентябрь 07, 2012, 08:46



Название: psql коды ошибок
Отправлено: GraninDm от Сентябрь 07, 2012, 08:46
Добрый день!

Смотрел пару дней на код драйвера. Оказалось, что он не возвращает коды ошибок postgresql.
Порылся в инете, нашел http://www.dfndr.org.ua/qt4-qpsql-%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80-%D0%BA%D0%BE%D0%B4%D1%8B-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA.html (http://www.dfndr.org.ua/qt4-qpsql-%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80-%D0%BA%D0%BE%D0%B4%D1%8B-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA.html)
Но там тоже коды возвращаются только в одном случае - только при выполнении команды.

Дополнил возврат кодов при выполнении всех действий.
Не получилось получить коды только непосредственно при коннекте.

Код:
    d->connection = PQconnectdb(connectString.toLocal8Bit().constData());
    PGresult* result = PQgetResult(d->connection);
PQgetResult не возвращает код при неудачном соединении.
Порылся в коде postresql ничего не нашел.

Может у кого-нибудь есть мысли, как получить код ошибки при подключении?

Если кому нужен исправленный драйвер выложу.

И еще так код postgresql переводится в число
Код:
bool ok;
const static int latin_base = 29;
errnum = QString::fromAscii(_sql_state).toInt(&ok,latin_base);
Может кто подскажет как грамотно из этого числа строку получить?

Вопрос снимается

Код:
qDebug() << QString::number(errnum, latin_base);
Еще косяк в драйвере обнаружил при возврате кодов ошибок- буду копать :(

Не косяк :)

Вроде работает
Код:
Это после prepare
----------------------------------
true
2898928
"42p01"
2
"ERROR:  relation "management.usefrlog" does not exist
LINE 1: PREPARE qpsqlpstmt_1 AS insert into management.usefrlog (rec...
                                            ^
QPSQL: Unable to prepare statement"
"ERROR:  relation "management.usefrlog" does not exist
LINE 1: PREPARE qpsqlpstmt_1 AS insert into management.usefrlog (rec...
                                            ^
"
"QPSQL: Unable to prepare statement"
----------------------------------
Это после exec
----------------------------------
true
2882949
"42601"
2
"ERROR:  syntax error at or near "("
LINE 1: EXECUTE  ('2012-9-7 10:14:32.945', 1, 'User start the cuttin...
                 ^
QPSQL: Unable to create query"
"ERROR:  syntax error at or near "("
LINE 1: EXECUTE  ('2012-9-7 10:14:32.945', 1, 'User start the cuttin...
                 ^
"
"QPSQL: Unable to create query"
----------------------------------


Название: Re: psql коды ошибок
Отправлено: trot от Сентябрь 07, 2012, 09:54
А зачем этот код ошибки нужен, чтобы по коду получить текст ошибки, так он сразу и выдается.


Название: Re: psql коды ошибок
Отправлено: GraninDm от Сентябрь 07, 2012, 10:08
С кодами работать удобнее и правильнее.
Логика программы может изменяться в зависимости от кода ошибка.
А что хорошего в том, что код ошибки всегда равен -1?

В частности по ссылке написано зачем...
Мне лично нужно знать эти коды, после выполнения prepare и exec.