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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlQuery & bindValue()  (Прочитано 4725 раз)
-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)) )
 

Это так и нужно или я гдето прогнал ?
Записан
Karl-Philipp
Гость
« Ответ #1 : Апрель 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. 
а так как имя таблицы с помощью этого запроса мы не помещаем и не извлекаем, возможно из-за этого происходит конфликт.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #2 : Апрель 03, 2009, 16:53 »

1. Какая ошибка?
2. Попробуй вместо ? использовать :table_name и :id.
3. Попробуй имя таблицы указывать, а id биндить.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
-QT-
Гость
« Ответ #3 : Апрель 06, 2009, 08:14 »

1. Какая ошибка?
2. Попробуй вместо ? использовать :table_name и :id.
3. Попробуй имя таблицы указывать, а id биндить.

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


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