Russian Qt Forum

Qt => Базы данных => Тема начата: pro100skif от Июнь 09, 2014, 20:23



Название: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 20:23
Доброго времени суток, для курсовой работы(работа с БД) необходимо написать функцию которая удаляла б выделенную колонку.Нашел запрос alter tabla table_name delete column column_name но не могу получить название выделенного поля.Заранее прошу прощения за возможно не очень корректно поставленный вопрос просто с Qt и Gui вообщем только начинаю работать.Заранее спасибо за помощь)


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 20:29
Что бы получить номер текущей колонки:
QModelIndex QAbstractItemView::currentIndex() const
int QModelIndex::column() const

Что бы получить имя по номеру колонки:
QSqlRecord QSqlTableModel::record() const
QString QSqlRecord::fieldName(int index) const



Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 20:48
Все решил проблему огромное спасибо


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 21:05
Что бы получить номер текущей колонки:
QModelIndex QAbstractItemView::currentIndex() const
int QModelIndex::column() const

Что бы получить имя по номеру колонки:
QSqlRecord QSqlTableModel::record() const
QString QSqlRecord::fieldName(int index) const


попробовал удалить поле но оно по прежнему на месте не могу понять в чем проблема...
QSqlRecord record;
    int cnumber;
    QString fieldName;
    QSqlQuery query;
    QModelIndex index=ui->sqlTable->currentIndex();
    qDebug()<<index;

    cnumber=index.column();


    record=model->record();
    fieldName=record.fieldName(cnumber);

    query.exec("alter table "+tableName+" drop column "+fieldName);
    model->setTable(tableName);
    model->select();
    ui->sqlTable->setModel(model);


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 21:09
Проверяйте ошибки.
Что возвращает exec и QSqlQuery::lastError.


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 21:18
Что у вас за база?


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 21:19
Что у вас за база?
QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(dbName);
    db.open();


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 21:20
Sqlite не поддерживает удаление столбцов.
http://stackoverflow.com/questions/8442147/how-to-delete-or-add-column-in-sqlite


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 21:23
Sqlite не поддерживает удаление столбцов.
http://stackoverflow.com/questions/8442147/how-to-delete-or-add-column-in-sqlite
Ок я понял, а через QSqltablemodel удалить колонку никак нельзя?


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 21:28
http://qt-project.org/doc/qt-5/qsqltablemodel.html#removeColumns


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 21:35
model->removeColumns(cnumber,1,index);
возвращает false
также пробовал
model->removeColumn(cnumber,index);
тот же результат.
Я так понял единственный выход это создавать новую таблицу копировать всю инфу из старой кроме указанного поля и переименовывать ее?


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 21:41
А так?
model->removeColumn( cnumber, QModelIndex() );


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 21:44
А так?
model->removeColumn( cnumber, QModelIndex() );
все равно false возвращает(


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 21:58
все равно false возвращает(
Скорее всего он пытается честно удалить столбец в таблице и получает отлуп от sqlite.
Ещё можно скрывать столбец в QTableView::hideColumn


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 22:03
все равно false возвращает(
Скорее всего он пытается честно удалить столбец в таблице и получает отлуп от sqlite.
Ещё можно скрывать столбец в QTableView::hideColumn
ну вроде как работает но когда создаешь новое поле с названием которое "было удалено" бд его не создает, поскольку такое поле уже есть...


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: Old от Июнь 09, 2014, 22:05
Либо меняйте базу, либо манипулируйте столбцами, через создание новой таблицы.


Название: Re: Удаление поля из QTableview,QSqlTableModel
Отправлено: pro100skif от Июнь 09, 2014, 22:22
спасибо за помощь