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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: PostgreSql и передача параметра в  (Прочитано 3871 раз)
nsa.qt
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« : Июнь 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;
    }

Но может есть другие варианты?
Буду рад обсудить.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Июнь 19, 2020, 14:39 »

Имя таблицы или базы нельзя биндить. Так что, юзай arg
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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