oleja1ee7
@oleja1ee7

Удаление и редактирование строки mysql из tableView?

Здравствуйте, есть таблица в бд mysql, 19 колонок.
Ведется её заполнение через QTableView.
можно ли:
1) выделить строку в tableView и нажать кнопку удалить, и чтобы она удалилась и в отображении и из таблицы.
2) выделить строку в tableView и нажать кнопку редактировать, и чтобы выделенные ячейки поместились каждая в соответствующее поле, lineEdit, dateEdit?
и как это осуществить?
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
oleja1ee7
@oleja1ee7 Автор вопроса

Удаление
void MainWindow::on_del_butt_clicked()
{
    QSqlQueryModel *setquery1 = new QSqlQueryModel;
    QSqlTableModel *model = new QSqlTableModel;
    QItemSelectionModel *selectModel = ui->tableView->selectionModel();
    if(!selectModel->selectedRows().isEmpty())   //проверяем выделили ли строку (не пустая ли)
    {
       int nr = selectModel->selectedRows().first().row();  //вписываем номер строки
       if (QMessageBox::Yes == QMessageBox::question(this, "Удалить?",
                             "Уверены?",
                             QMessageBox::Yes|QMessageBox::No))
       {
            //ui->dir_excel->setText(ui->tableView->model()->data(ui->tableView->model()->index(nr,0)).toString());
            QString indid = ui->tableView->model()->data(ui->tableView->model()->index(nr,0)).toString();
            setquery1->setQuery("DELETE FROM ships WHERE id="+indid+";");
            model->setTable("ships");
            model->select();
            ui->tableView->setModel(model);
            setquery1->setHeaderData(1, Qt::Horizontal, "№ судо-потока");
            setquery1->setHeaderData(2, Qt::Horizontal, "Наименование судна");
            setquery1->setHeaderData(3, Qt::Horizontal, "Флаг");
            setquery1->setHeaderData(4, Qt::Horizontal, "Проект судна");
            setquery1->setHeaderData(5, Qt::Horizontal, "Состав судна");
            setquery1->setHeaderData(6, Qt::Horizontal, "Проект состава");
            setquery1->setHeaderData(7, Qt::Horizontal, "Судовладелец");
            setquery1->setHeaderData(8, Qt::Horizontal, "Груз (пассажиры)");
            setquery1->setHeaderData(9, Qt::Horizontal, "Тоннаж (балласт)");
            setquery1->setHeaderData(10, Qt::Horizontal, "Осадка (см)");
            setquery1->setHeaderData(11, Qt::Horizontal, "Пункт отправления");
            setquery1->setHeaderData(12, Qt::Horizontal, "Местоположение\n(река, км с.х.)");
            setquery1->setHeaderData(13, Qt::Horizontal, "Дата выхода из\n пункта отправления");
            setquery1->setHeaderData(14, Qt::Horizontal, "Пункт назначения");
            setquery1->setHeaderData(15, Qt::Horizontal, "Местоположение\n(река, км с.х.)2");
            setquery1->setHeaderData(16, Qt::Horizontal, "Дата прибытия в\n пункт назначения");
            setquery1->setHeaderData(17, Qt::Horizontal, "Дата отметки судна\n при пересечении\n границы бассейна");
            setquery1->setHeaderData(18, Qt::Horizontal, "Наименование бассейна");
            setquery1->setHeaderData(19, Qt::Horizontal, "Диспетчер ");
            ui->tableView->setModel(setquery1);
            ui->tableView->setColumnHidden(0, true);
            ui->tableView->horizontalHeader()->setStyleSheet("QHeaderView::section { background-color:silver }");
       }
    }
    else
    {
        //сообщение о том, что строка пуста
        QMessageBox::information(0, "Ошибка", "Строка не выделена.");
    }

}

а редактирование через UPDATE
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kkmspb
@kkmspb
хобби C++, Qt, десктоп, микроконтроллеры STM32
У QTableView вроде removeRows метод есть
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы