Russian Qt Forum

Qt => Вопросы новичков => Тема начата: barm12345 от Июль 31, 2020, 15:08



Название: БД в Qt5 (primeInsert(), insert())
Отправлено: barm12345 от Июль 31, 2020, 15:08
Доброго времени суток!

Прошу помощи  - никак не могу разобраться с следующим кодом (Qt3), для примера возьмем из документации:
https://doc.qt.io/archives/3.3/qsqlcursor.html#insert:

QSqlCursor cur( "prices" );
QSqlRecord *buffer = cur.primeInsert();
buffer->setValue( "id",    53981 );
buffer->setValue( "name",  "Thingy" );
buffer->setValue( "price", 105.75 );
cur.insert();

Как это написать в Qt5? (не совсем понял primeInsert(), insert())








Название: Re: БД в Qt5 (primeInsert(), insert())
Отправлено: barm12345 от Июль 31, 2020, 15:57
QSqlQuery query(db);

query.prepare("INSERT INTO prices (id, name, price) "
                "VALUES (:id, :name, :price)");
  query.bindValue(":id", 53981);
  query.bindValue(":name", "Thindy"); 
  query.bindValue(":price", 105.75);
  query.exec();

Так правильно?


Название: Re: БД в Qt5 (primeInsert(), insert())
Отправлено: Hellraiser от Июль 31, 2020, 16:05
В общих чертах, да, правильно. Но не все SQL драйверы поддерживают именованные заполнители. Если поддержки нет, то лучше будет вот так:
Код:
query.prepare("INSERT INTO prices (id, name, price) VALUES (?, ?, ?)");
query.bindValue(0, 53981);
query.bindValue(1, "Thindy");
query.bindValue(2, 105.75);


Название: Re: БД в Qt5 (primeInsert(), insert())
Отправлено: barm12345 от Июль 31, 2020, 16:12
Это как пример, а так база у меня postgresql 9.4.5 (с соединением разобрался, все нормально). Она вроде поддерживает ?


Название: Re: БД в Qt5 (primeInsert(), insert())
Отправлено: Hellraiser от Июль 31, 2020, 16:41
Проверка:
Код:
QSqlDatabase::database().driver().hasFeature(QSqlDriver::NamedPlaceholders)


Название: Re: БД в Qt5 (primeInsert(), insert())
Отправлено: barm12345 от Июль 31, 2020, 16:45
Ок. Спасибо)