crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSqlQuery + DELETE, QODBC
Egormilo
  опции профиля:
сообщение 22.2.2013, 14:28
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 22.2.2013
Пользователь №: 3723

Спасибо сказали: 0 раз(а)




Репутация:   0  


При выполении запроса в БД выдает ошибку.

Запрос:
qryClearNotifWithErrDeviceId = new QSqlQuery(db);
    qryClearNotifWithErrDeviceId->prepare("DELETE FROM Notifications "
                                          "WHERE (DeviceId=:DeviceId)");


Вызов запроса

void AvarsSharing::clearAvarsWithErrDeviceId(void)
{
    int devId = INVALID_ID;
    DM1->qryClearNotifWithErrDeviceId->finish();
    DM1->qryClearNotifWithErrDeviceId->bindValue(":DeviceId", devId);
    DM1->qryClearNotifWithErrDeviceId->exec();
}


Подключение БД:
db = QSqlDatabase::addDatabase("QODBC");
    db.setConnectOptions("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3");
    db.setDatabaseName(connectionString);
    if (db.open())
    {
        display->toDisplay("DB open");
    }
    else
    {
        display->toDisplay("Error open DB");
        display->toDisplay(db.lastError().databaseText());
    }


Приложение консольное. Подключение делается, и в общем все работает и САМ ЗАПРОС ВЫПОЛНЯЕТСЯ, только вот при каждом выполнении этого запроса выдает ошибку в консоль:
QODBCResult::exec: Unable to execute statement: ""


Что бы не было лишних вопросов :
#define INVALID_ID -1



Суть вопроса, подскажите почему она возникает и как избежать её вывода?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 22.2.2013, 15:02
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Какую ошибку выдает то?
Типа:
qDebug() << query.lastError().text();
qDebug() << query.lastQuery();


Через:
M1->qryClearNotifWithErrDeviceId->bindValue(0, devId);
// или
M1->qryClearNotifWithErrDeviceId->addBindValue(devId);
работает?

Сообщение отредактировал RazrFalcon - 22.2.2013, 15:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Egormilo
  опции профиля:
сообщение 22.2.2013, 15:43
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 22.2.2013
Пользователь №: 3723

Спасибо сказали: 0 раз(а)




Репутация:   0  


qDebug() << query.lastError().text();

QODBC3: Unable to execute statement

qDebug() << query.lastQuery();

DELETE FROM Notifications WHERE (DeviceId=:DeviceId)



Цитата(RazrFalcon @ 22.2.2013, 14:02) *
Через:

M1->qryClearNotifWithErrDeviceId->bindValue(0, devId);
// или
M1->qryClearNotifWithErrDeviceId->addBindValue(devId);

работает?


Оба варианта работают аналогично моему. Запрос выполняется, данные удаляются, но ошибка выводится в консоль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 22.2.2013, 17:19
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


по 2-й ошибке видно что не изменилась переменная

думаю не стоит использовать имя переменной как и имя колонки.


Да и логичней было бы:
DELETE FROM Notifications WHERE DeviceId=':var';


Сообщение отредактировал RazrFalcon - 22.2.2013, 17:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Egormilo
  опции профиля:
сообщение 22.2.2013, 17:38
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 22.2.2013
Пользователь №: 3723

Спасибо сказали: 0 раз(а)




Репутация:   0  


QSqlQuery выдавал ошибку при отсутсвии данных для удаления. Добавил запрос для проверки наличия данных для удаления, ошибка более не появляется.
Странно конечно, что он ошибку выдает. Запрос то successfully должен быть не зависимо от кол-ва удаляемых строк.
Тему можно закрывать.

Цитата(RazrFalcon @ 22.2.2013, 16:19) *
по 2-й ошибке видно что не изменилась переменная

думаю не стоит использовать имя переменной как и имя колонки.


Да и логичней было бы:

DELETE FROM Notifications WHERE DeviceId=':var';

Тут 100% не принципиально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 16:48