Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [SQLite, Qt4] SELECT отображает удаленные данные


Автор: Nikys 17.5.2013, 09:55
Программирую базу данных под управлением Qt на SQLite. Внезапно обнаружил, что если я удаляю некоторые данные с помощью DELETE, то они обнаруживаются с помощью SELECT. Выявил при построении таблицы QTableView на основе модели QSqlQueryModel.
Создание таблицы:

Код

CREATE TABLE watch ( number INTEGER PRIMARY KEY NOT NULL, name VARCHAR(30), 
team VARCHAR(30), tallent VARCHAR(5), experience VARCHAR(5) );


Добавление элемента:
Код

INSERT INTO watch (number, name, team, tallent, experience) 
VALUES (%1, '%2', '%3', '%4', '%5');


Разумеется, на месте %1 и других идут конкретные строки.
Удаление элемента:
Код

DELETE FROM watch WHERE name = '%1';


Выполнение команды происходит успешно (.exec() возвращает true).
Зато, если добавить элемент с ранее существовавшим name, то SELECT будет находить оба значения.
Проблема ли в моей реализации, или надо по-другому удалять/искать неудаленные значения?
Заранее благодарен, всем спасибо!

Автор: Fortop 17.5.2013, 11:43
Цитата(Nikys @  17.5.2013,  09:55 Найти цитируемый пост)
Проблема ли в моей реализации, или надо по-другому удалять/искать неудаленные значения?

подключись к БД через какую-нибудь админку/консоль и проверь свои запросы ручками

может у тебя что-то кешируется?

Автор: Zloxa 17.5.2013, 14:30
Цитата(Fortop @  17.5.2013,  12:43 Найти цитируемый пост)
может у тебя что-то кешируется? 

а меня смущает что вставляется в name строка '%2', а удаляется по критерию равенству на  '%1'

Автор: Fortop 17.5.2013, 16:04
Цитата(Zloxa @  17.5.2013,  14:30 Найти цитируемый пост)
а меня смущает что вставляется в name строка '%2', а удаляется по критерию равенству на  '%1'

Ну, я, надеюсь, %2 из 1го запроса и %1 из 2го это просто порядковый номер аргумента smile

Если это не так, то забавно smile

Автор: Nikys 18.5.2013, 00:01
%1 - это для аргумента строки QString. Аргумент сначала указывается,а потом строка передается на исполнение к нужному query.
Хм,а как можно с SQLite через админку работать?Это разве не встраиваемая система?
А вообще,не совсем понял,что дает комманда СОММIT, можете мне объяснить?То есть,выделенная транзакция выполняется сразу же?Мне просто предлагали добавить,но это проблему не решило

Автор: Nikys 18.5.2013, 13:34
Все работает. Просто я дурак. Удалял не по тому критерию (по имени, а не комманде). Прошу прощения за тревогу smile Переклинило)

Автор: Fortop 19.5.2013, 11:31
Цитата(Nikys @  18.5.2013,  00:01 Найти цитируемый пост)
Хм,а как можно с SQLite через админку работать?Это разве не встраиваемая система?

хранилище БД для него это обычный файл сохраняемый на диске.
Поэтому его можно открыть и смотреть

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)