Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
1

QSqlTableModel и QTableView, удаление строк

16.12.2015, 20:45. Показов 4861. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, уважаемые программисты. Столкнулся с непонятным поведением удаления строк. Помогите пожалуйста разобраться с проблемой.
Имеется: БД, в ней таблица (tt1 , например), в таблице есть записи с одинаковыми данными. Вывожу таблицу на view. Далее по нажатию на кнопку, хочу удалить текущую выделенную запись, но Qt, удаляет все записи с таким значением.
Например в таблице есть столбцы "A" (int) и "B" (string), есть 3 записи,
1 запись - "A" = 55 , "B" = 'Hi' ;
2 запись - "A" = 55 , "B" = 'Hi' ;
3 запись - "A" = 1 , "B" = 'Hello' ;
Если я например хочу удалить запись под индексом 1, т.е. 2 запись, то Qt удалит и первую, почему так ?
Вот код, конструктор и функция удаления.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
testWidget::testWidget(QWidget *parent):QWidget(parent)
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("C:\\ex7.db");
    db.open();
 
    button=new QPushButton;
 
    model=new QSqlTableModel(this,db);
    model->setTable("tt1");
    model->select();
 
    view=new QTableView;
    view->setModel(model);
 
    QHBoxLayout *mainLayout=new QHBoxLayout;
    mainLayout->addWidget(view);
    mainLayout->addWidget(button);
 
    setLayout(mainLayout);
    connect(button,SIGNAL(clicked()),this,SLOT(newMacro()));
}
 
void testWidget::newMacro()     // Функция удаления
{
    if(view->currentIndex().isValid())
    {
    int row=view->currentIndex().row();
    int column=view->currentIndex().column();
 
    QSqlTableModel models;
    models.setTable("tt1");
    models.select();
 
    qDebug()<<models.record(row).value(column)<<"X";
 
    models.removeRows(row,1);
    models.submitAll();
 
    model->select();      // обновляем модель
 
    return;
    }
 
    return;
}
В чем может быть проблема ?
СПАСИБО!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2015, 20:45
Ответы с готовыми решениями:

QTableView и QSqlTableModel
Пытаюсь вывести в QTableView модель из QSqlTableModel. Буквально на пол секунды в TableView...

Отображение QSqlTableModel в QTableView
Всем привет. Знатоки, поделитесь опытом) Есть такая ф-я, которая отображает в QTableView объект...

завсисимость полей в QtableView + QSqlTableModel
Товарищи суть такая. Работаю с использованиеем связки QtableView + QSqlTableModel. Подскажите...

QSqlTableModel + QTableView + кастомный делегат QComboBox
Пытаюсь реализовать кастомного делегата на основе QComboBox. Получилось отчасти. 1) При щелчке на...

5
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
16.12.2015, 21:36 2
Тут по ходу дела фигня. Вы в таблице отображаете одну модель - model=new QSqlTableModel(this,db); а удаляете из другой - QSqlTableModel models;
0
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
16.12.2015, 23:01  [ТС] 3
ldir82, нет, скорее всего проблема не в этом. Во-первых, созданный объект QSqlTableModel models работает с той же таблицей, что и объект model.
А во-вторых, строки то удаляются. И представление отображает все корректно.
0
60 / 56 / 21
Регистрация: 31.03.2014
Сообщений: 234
16.12.2015, 23:07 4
Хорошо, пусть будет не в этом. Если это как-то утешит. Но все равно в этом. В любом случае бред написан.
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
17.12.2015, 09:27 5
Лучший ответ Сообщение было отмечено TheThe как решение

Решение

Добавьте id (primary key) в таблицу и должно стать ок Если нет ключа, removeRow формирует запрос на удаление простым сравнением всех полей записи.
1
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
17.12.2015, 11:40  [ТС] 6
OneMoreGres, спасибо, проблема была в этом.
0
17.12.2015, 11:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 11:40
Помогаю со студенческими работами здесь

QSqlTableModel фильтр строк таблицы
Доброй ночи! Собственно вопрос,имеется подключение к БД и ее представление, в частности...

QTableView удаление строки
Привет! Как правильно реализовать удаление строки из QTableView ? Есть QSqlQueryModel. Результат...

Удаление строки QTableView
Привет. Есть бд, данные которой отображаются в QTableView, в пределах 200 записей, в основном. ...

Удаление поля из QTableview
Доброго времени суток, необходимо написать слот который удалял бы поля из QSqlTableModel пробовал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru