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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: НАРОД!Как мне добавить новую строку в QSqlQueryModel??  (Прочитано 14340 раз)
linuxoid
Гость
« : Август 21, 2007, 14:19 »

С QSqlTableModel разобрался,а вот в QSqlQueryModel как мне добавить новую строку с пустыми ячейками и чтобы в строке ставилось не использованный другой строкой id_key?
« Последнее редактирование: Август 21, 2007, 14:46 от linuxoid » Записан
bigirbis
Гость
« Ответ #1 : Август 21, 2007, 14:52 »

QSqlTableModel - только на чтение.
Ты попробуй такую фичу с SELECT проверни...  Подмигивающий

Цитировать
The QSqlQueryModel class provides a read-only data model for SQL result sets.
« Последнее редактирование: Август 21, 2007, 14:53 от bigirbis » Записан
linuxoid
Гость
« Ответ #2 : Август 21, 2007, 14:55 »

да не я свою модель создал!ну там с data и setdata.Как мне быть и что можно придумать с SELECt?
Записан
denka
Гость
« Ответ #3 : Август 21, 2007, 15:06 »

Если у тя своя модель переопредели bool insertRow( int row, const QModelIndex & parent = QModelIndex() ). А в ней уже используй QSqlQuery чтобы добавить новую строку. Вот пример с Assistant'a:
Код:
     QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (:id, :forename, :surname)");
     query.bindValue(":id", 1001);
     query.bindValue(":forename", "Bart");
     query.bindValue(":surname", "Simpson");
     query.exec();
Записан
linuxoid
Гость
« Ответ #4 : Август 21, 2007, 15:24 »

а как на нажатие правой кнопки мыши вызвать событие вставки ячейки?и как обратиться к bool?
Записан
bigirbis
Гость
« Ответ #5 : Август 21, 2007, 15:33 »

Цитировать
а как на нажатие правой кнопки мыши вызвать событие вставки ячейки?
setContextMenuPolicy ( Qt::CustomContextMenu )
QWidget::customContextMenuRequested ( const QPoint & pos )  [signal]
Код:
и как обратиться к bool?
Что имелось в виду?
Записан
denka
Гость
« Ответ #6 : Август 21, 2007, 15:37 »

Я так понимаю "ячейка" - строка Улыбающийся.
Есть такой вариант. Ловиш сигнал customContextMenuRequested( const QPoint& ) от отображения, а в слоте создаеш меню с пунктами: добавить, удалить строку. То есть если выберут добавить строку у тя должно вызываться insertRow твоей модели.
Про bool не понял  В замешательстве.
Записан
linuxoid
Гость
« Ответ #7 : Август 21, 2007, 15:38 »

лана спасибо Веселый
Записан
denka
Гость
« Ответ #8 : Август 21, 2007, 15:39 »

Если ты имел ввиду bool возвращаемый insertRow...  Так это ты должен возвращать признак того добавлена ли реально новая строка или нет
Записан
linuxoid
Гость
« Ответ #9 : Август 21, 2007, 16:11 »

чё то не добавляется нифига
Записан
bigirbis
Гость
« Ответ #10 : Август 21, 2007, 16:18 »

Проверь, что за ошибка:
QSqlError QSqlDatabase::lastError() const
Записан
linuxoid
Гость
« Ответ #11 : Август 22, 2007, 09:41 »

как мне сделать чтобы на нажатие кнопки у меня создавалась новая стока с id_key увеличенным на один самого большого id_key'я а все остальные поля должны быть пустыми???
p.s.:у меня qsqlquerymodel с определёнными data и setdata и я использую QTableView    Qt 4.2.3
« Последнее редактирование: Август 22, 2007, 09:50 от linuxoid » Записан
denka
Гость
« Ответ #12 : Август 22, 2007, 09:57 »

Делаеш запрос SELECT MAX(id_key) FROM YourTable. Получаеш текущий максимальный id_key. В insertRow используеш это значение добавив 1.
Записан
c00ker
Гость
« Ответ #13 : Август 22, 2007, 10:34 »

Делаеш запрос SELECT MAX(id_key) FROM YourTable. Получаеш текущий максимальный id_key. В insertRow используеш это значение добавив 1.

В многопользовательской базе такое не прокатит - возможен такой вариант что два пользователя одновременно будут вносить строки и будут одинаковые id. Лучше использовать возможности самой субд (например, в firebird использую генератор, либо триггер)
Записан
linuxoid
Гость
« Ответ #14 : Август 23, 2007, 09:53 »

bool MyModel::insertRows(int position, int rows, const QModelIndex &parent)
 {
     beginInsertRows(QModelIndex(), position, position+rows-1);

     for (int row = 0; row < rows; ++row) {
         stringList.insert(position, "");
     }

     endInsertRows();
     return true;
 }

stringList - это должна быть моя модель или переменный список QStringList???
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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