Название: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 21, 2007, 14:19 С QSqlTableModel разобрался,а вот в QSqlQueryModel как мне добавить новую строку с пустыми ячейками и чтобы в строке ставилось не использованный другой строкой id_key?
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: bigirbis от Август 21, 2007, 14:52 QSqlTableModel - только на чтение.
Ты попробуй такую фичу с SELECT проверни... ;) Цитировать The QSqlQueryModel class provides a read-only data model for SQL result sets. Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 21, 2007, 14:55 да не я свою модель создал!ну там с data и setdata.Как мне быть и что можно придумать с SELECt?
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: denka от Август 21, 2007, 15:06 Если у тя своя модель переопредели bool insertRow( int row, const QModelIndex & parent = QModelIndex() ). А в ней уже используй QSqlQuery чтобы добавить новую строку. Вот пример с Assistant'a:
Код: QSqlQuery query; Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 21, 2007, 15:24 а как на нажатие правой кнопки мыши вызвать событие вставки ячейки?и как обратиться к bool?
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: bigirbis от Август 21, 2007, 15:33 Цитировать а как на нажатие правой кнопки мыши вызвать событие вставки ячейки? setContextMenuPolicy ( Qt::CustomContextMenu )QWidget::customContextMenuRequested ( const QPoint & pos ) [signal] Код: и как обратиться к bool? Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: denka от Август 21, 2007, 15:37 Я так понимаю "ячейка" - строка :).
Есть такой вариант. Ловиш сигнал customContextMenuRequested( const QPoint& ) от отображения, а в слоте создаеш меню с пунктами: добавить, удалить строку. То есть если выберут добавить строку у тя должно вызываться insertRow твоей модели. Про bool не понял :-\. Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 21, 2007, 15:38 лана спасибо :D
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: denka от Август 21, 2007, 15:39 Если ты имел ввиду bool возвращаемый insertRow... Так это ты должен возвращать признак того добавлена ли реально новая строка или нет
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 21, 2007, 16:11 чё то не добавляется нифига
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: bigirbis от Август 21, 2007, 16:18 Проверь, что за ошибка:
QSqlError QSqlDatabase::lastError() const Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 22, 2007, 09:41 как мне сделать чтобы на нажатие кнопки у меня создавалась новая стока с id_key увеличенным на один самого большого id_key'я а все остальные поля должны быть пустыми???
p.s.:у меня qsqlquerymodel с определёнными data и setdata и я использую QTableView Qt 4.2.3 Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: denka от Август 22, 2007, 09:57 Делаеш запрос SELECT MAX(id_key) FROM YourTable. Получаеш текущий максимальный id_key. В insertRow используеш это значение добавив 1.
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: c00ker от Август 22, 2007, 10:34 Делаеш запрос SELECT MAX(id_key) FROM YourTable. Получаеш текущий максимальный id_key. В insertRow используеш это значение добавив 1. В многопользовательской базе такое не прокатит - возможен такой вариант что два пользователя одновременно будут вносить строки и будут одинаковые id. Лучше использовать возможности самой субд (например, в firebird использую генератор, либо триггер) Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 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??? Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 24, 2007, 09:27 ПОМОГИТЕ с добавлением новой строки с ячейками в QSqlQueryModel с setData и Data пожалуйста!!!
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: stealth от Август 24, 2007, 12:31 Делаеш запрос SELECT MAX(id_key) FROM YourTable. Получаеш текущий максимальный id_key. В insertRow используеш это значение добавив 1. В многопользовательской базе такое не прокатит - возможен такой вариант что два пользователя одновременно будут вносить строки и будут одинаковые id. Лучше использовать возможности самой субд (например, в firebird использую генератор, либо триггер) c00ker, опиши поподробнее как это сделать? Желательно чтобы прокатывало и на mysql :) Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 24, 2007, 13:05 ДА-ДА!Как сделать для многопользовательского использования???
Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: c00ker от Август 24, 2007, 13:56 Если субд поддерживает autoincrement, то наподобии
Код: CREATE TABLE pk_Table ( f1 ULONG AUTOINCREMENT) PRIMARY KEY ( f1 ) Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: stealth от Август 24, 2007, 14:52 Если субд поддерживает autoincrement, то наподобии с автоинкриментом понятно всё, а как же быть, если запись вставляется одновременно двумя пользователями и нужно точно знать какой id будет у неё, ведь опять же возможно, что будут получены неверные id.Код: CREATE TABLE pk_Table ( f1 ULONG AUTOINCREMENT) PRIMARY KEY ( f1 ) пример нормальной работы в хронологическом порядке: 1)INSERT ... - пользователь Вася 2)MAX(id)... - пользователь Вася 3)INSERT... - пользователь Петя 4)MAX(id)... - пользователь Петя а ведь возможно такое 1)INSERT ... - пользователь Вася 2)INSERT... - пользователь Петя 3)MAX(id)... - пользователь Вася 4)MAX(id)... - пользователь Петя как с этим бороться? транзакции??? Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: WW от Август 24, 2007, 15:06 что-то вы намудрили... ???
Код: QVariant QSqlQuery::lastInsertId () const Название: Re: НАРОД!Как мне добавить новую строку в QSqlQueryModel?? Отправлено: linuxoid от Август 28, 2007, 11:16 Люди помогите плз!Чё то не добавляет и ошибок не выдаёт!
QSqlQuery query; QVariant last = query.lastInsertId().toInt() + 1; query.prepare("INSERT INTO sales (id_key, s_key, t_key, kol_vo, dat) " "VALUES (:id_key, :s_key, :t_key, :kol_vo, :dat)"); query.bindValue(":id_key",last); query.bindValue(":skey", 0); query.bindValue(":t_key", 0 ); query.bindValue(":kol_vo", 0); query.bindValue(":dat", 0); query.exec(); if(!query.exec()){ QMessageBox::critical(0,"",query.lastError().text()); } Чё я делаю не правильно?? |