Russian Qt Forum
Сентябрь 30, 2024, 08:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Удаление поля из QTableview,QSqlTableModel  (Прочитано 8554 раз)
pro100skif
Гость
« : Июнь 09, 2014, 20:23 »

Доброго времени суток, для курсовой работы(работа с БД) необходимо написать функцию которая удаляла б выделенную колонку.Нашел запрос alter tabla table_name delete column column_name но не могу получить название выделенного поля.Заранее прошу прощения за возможно не очень корректно поставленный вопрос просто с Qt и Gui вообщем только начинаю работать.Заранее спасибо за помощь)
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Июнь 09, 2014, 20:29 »

Что бы получить номер текущей колонки:
QModelIndex QAbstractItemView::currentIndex() const
int QModelIndex::column() const

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

Записан
pro100skif
Гость
« Ответ #2 : Июнь 09, 2014, 20:48 »

Все решил проблему огромное спасибо
Записан
pro100skif
Гость
« Ответ #3 : Июнь 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);
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Июнь 09, 2014, 21:09 »

Проверяйте ошибки.
Что возвращает exec и QSqlQuery::lastError.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Июнь 09, 2014, 21:18 »

Что у вас за база?
Записан
pro100skif
Гость
« Ответ #6 : Июнь 09, 2014, 21:19 »

Что у вас за база?
QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(dbName);
    db.open();
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Июнь 09, 2014, 21:20 »

Sqlite не поддерживает удаление столбцов.
http://stackoverflow.com/questions/8442147/how-to-delete-or-add-column-in-sqlite
Записан
pro100skif
Гость
« Ответ #8 : Июнь 09, 2014, 21:23 »

Sqlite не поддерживает удаление столбцов.
http://stackoverflow.com/questions/8442147/how-to-delete-or-add-column-in-sqlite
Ок я понял, а через QSqltablemodel удалить колонку никак нельзя?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Июнь 09, 2014, 21:28 »

http://qt-project.org/doc/qt-5/qsqltablemodel.html#removeColumns
Записан
pro100skif
Гость
« Ответ #10 : Июнь 09, 2014, 21:35 »

model->removeColumns(cnumber,1,index);
возвращает false
также пробовал
model->removeColumn(cnumber,index);
тот же результат.
Я так понял единственный выход это создавать новую таблицу копировать всю инфу из старой кроме указанного поля и переименовывать ее?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Июнь 09, 2014, 21:41 »

А так?
model->removeColumn( cnumber, QModelIndex() );
Записан
pro100skif
Гость
« Ответ #12 : Июнь 09, 2014, 21:44 »

А так?
model->removeColumn( cnumber, QModelIndex() );
все равно false возвращает(
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Июнь 09, 2014, 21:58 »

все равно false возвращает(
Скорее всего он пытается честно удалить столбец в таблице и получает отлуп от sqlite.
Ещё можно скрывать столбец в QTableView::hideColumn
Записан
pro100skif
Гость
« Ответ #14 : Июнь 09, 2014, 22:03 »

все равно false возвращает(
Скорее всего он пытается честно удалить столбец в таблице и получает отлуп от sqlite.
Ещё можно скрывать столбец в QTableView::hideColumn
ну вроде как работает но когда создаешь новое поле с названием которое "было удалено" бд его не создает, поскольку такое поле уже есть...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 22.