Russian Qt Forum

Qt => Базы данных => Тема начата: nsa.qt от Июнь 19, 2020, 11:54



Название: PostgreSql и передача параметра в
Отправлено: nsa.qt от Июнь 19, 2020, 11:54
Добрый день, всем.
Уважаемые коллеги, прошу помощи разобраться с ошибкой:

File: ../mysqldatabase.cpp Line: 89 Function: bool mySqlDatabase::sqlCreateDatabase(const QString&)
QSqlError("42601", "QPSQL: Невозможно создать запрос", "ERROR:  syntax error at or near "("LINE 1: EXECUTE  ('mybase') ^(42601)")

Код:
   // Создаем новую базу.
    QSqlQuery createbase;
    createbase.prepare("CREATE DATABASE ? "
                       "ENCODING = 'UTF8' "
                       "LC_COLLATE = 'ru_RU.UTF-8' "
                       "LC_CTYPE = 'ru_RU.UTF-8' "
                       "TABLESPACE = pg_default "
                       "OWNER = postgres;");
    createbase.bindValue(0, name.toLower());

    if (!createbase.exec()) {
        qCritical() << createbase.lastError();
        base.close();
        return false;
    }

Из pgAdmin отрабатывает нормально:
Код:
CREATE DATABASE "mybase"
                       ENCODING = 'UTF8'
                       LC_COLLATE = 'ru_RU.UTF-8'
                       LC_CTYPE = 'ru_RU.UTF-8'
                       TABLESPACE = pg_default
                       OWNER = postgres;

Нашел костыль:
Код:
    // Создаем новую базу.
    QString mStrSql = QString("CREATE DATABASE %1 "
                              "ENCODING = 'UTF8' "
                              "LC_COLLATE = 'ru_RU.UTF-8' "
                              "LC_CTYPE = 'ru_RU.UTF-8' "
                              "TABLESPACE = pg_default "
                              "OWNER = postgres;").arg('"'+name.toLower()+'"');
    QSqlQuery createbase;
    if (!createbase.exec(mStrSql)) {
        qCritical() << createbase.lastError();
        base.close();
        return false;
    }

Но может есть другие варианты?
Буду рад обсудить.


Название: Re: PostgreSql и передача параметра в
Отправлено: Пантер от Июнь 19, 2020, 14:39
Имя таблицы или базы нельзя биндить. Так что, юзай arg