Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSqlQuery + DELETE
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Egormilo
При выполении запроса в БД выдает ошибку.

Запрос:
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
Какую ошибку выдает то?
Типа:
qDebug() << query.lastError().text();
qDebug() << query.lastQuery();


Через:
M1->qryClearNotifWithErrDeviceId->bindValue(0, devId);
// или
M1->qryClearNotifWithErrDeviceId->addBindValue(devId);
работает?
Egormilo
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
по 2-й ошибке видно что не изменилась переменная

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


Да и логичней было бы:
DELETE FROM Notifications WHERE DeviceId=':var';
Egormilo
QSqlQuery выдавал ошибку при отсутсвии данных для удаления. Добавил запрос для проверки наличия данных для удаления, ошибка более не появляется.
Странно конечно, что он ошибку выдает. Запрос то successfully должен быть не зависимо от кол-ва удаляемых строк.
Тему можно закрывать.

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

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


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

DELETE FROM Notifications WHERE DeviceId=':var';

Тут 100% не принципиально.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.