Russian Qt Forum

Qt => Базы данных => Тема начата: -QT- от Апрель 03, 2009, 16:02



Название: QSqlQuery & bindValue()
Отправлено: -QT- от Апрель 03, 2009, 16:02
Всем привет !

Нужно было сделать метод удаления записи из таблицы SQLite

написал:
Код
C++ (Qt)
query.prepare("DELETE FROM ? WHERE id =?");
query.bindValue(0, "tablename");
query.bindValue(1, 1);
query.exec();
 
Выдается ошибка.

поборол только так:
Код
C++ (Qt)
query.exec(QString("DELETE FROM %1 WHERE id = %2").arg(tableName).arg(id)) )
 

Это так и нужно или я гдето прогнал ?


Название: Re: QSqlQuery & bindValue()
Отправлено: Karl-Philipp от Апрель 03, 2009, 16:51
ты используешь метод
Цитировать
void QSqlQuery::bindValue ( int pos, const QVariant & val, QSql::ParamType paramType = QSql::In )
Последний параметр (флаг) используется для того чтобы указать поместить данные в базу или извлечь их.
Цитировать
QSql::In   The bind parameter is used to put data into the database.
QSql::Out   The bind parameter is used to receive data from the database. 
а так как имя таблицы с помощью этого запроса мы не помещаем и не извлекаем, возможно из-за этого происходит конфликт.


Название: Re: QSqlQuery & bindValue()
Отправлено: Пантер от Апрель 03, 2009, 16:53
1. Какая ошибка?
2. Попробуй вместо ? использовать :table_name и :id.
3. Попробуй имя таблицы указывать, а id биндить.


Название: Re: QSqlQuery & bindValue()
Отправлено: -QT- от Апрель 06, 2009, 08:14
1. Какая ошибка?
2. Попробуй вместо ? использовать :table_name и :id.
3. Попробуй имя таблицы указывать, а id биндить.

Вариант с использованием :table_name и :id не прокатил.
А вот имя таблицы у меня изначально неизвестно и указать я это не могу.
Поэтому terlan, я думаю прав.
И использование переменного значения в имени таблицы с методом bindValue() невозможно.