Russian Qt Forum

Qt => Базы данных => Тема начата: crossly от Апрель 01, 2008, 15:48



Название: вставка новой записи
Отправлено: crossly от Апрель 01, 2008, 15:48
подскажите плиз... как грамотно переопределить insertRow у QSqlQueryModel для вставки новой записи...


Название: Re: вставка новой записи
Отправлено: Mikhail от Апрель 01, 2008, 19:25
подскажите плиз... как грамотно переопределить insertRow у QSqlQueryModel для вставки новой записи...

Ну для начала у QSqlQueryModel нет функции insertRow. А insertRows  не предназначена для вставки новой записи.

Как работать с моделью написано в ассистенте:

     QSqlQueryModel *model = new QSqlQueryModel;
     model->setQuery("SELECT name, salary FROM employee");
     model->setHeaderData(0, Qt::Horizontal, tr("Name"));
     model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

     QTableView *view = new QTableView;
     view->setModel(model);
     view->show();

Работать надо через SQL запросы, типа

model->setQuery("insert into employee( name, salary ) values ('Petrov', 'sss')");


Название: Re: вставка новой записи
Отправлено: crossly от Апрель 02, 2008, 13:47
подскажите плиз... как грамотно переопределить insertRow у QSqlQueryModel для вставки новой записи...

Ну для начала у QSqlQueryModel нет функции insertRow. А insertRows  не предназначена для вставки новой записи.

Как работать с моделью написано в ассистенте:

     QSqlQueryModel *model = new QSqlQueryModel;
     model->setQuery("SELECT name, salary FROM employee");
     model->setHeaderData(0, Qt::Horizontal, tr("Name"));
     model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

     QTableView *view = new QTableView;
     view->setModel(model);
     view->show();

Работать надо через SQL запросы, типа

model->setQuery("insert into employee( name, salary ) values ('Petrov', 'sss')");
insertRows я и имел ввиду, звиняюсь за описку... знаю что не предназанчена для вставки....
я же и спрашиваю как переобпределить...
у меня получилось следующее
Код:
bool Model::insertRows(int row,int count, const QModelIndex & parent )
{

beginInsertRows(parent,row,row+count-1);
QSqlQuery q;
bool ok;
ok=q.exec("insert into debit (d_date,col) values(current_date,0)");
endInsertRows();
refresh();
return ok;
 
}
все бы ничего.... да только при этом добавляется ещё и левая строка в конец... и сбрасываеются все настройки модели (размеры колонок, столбцов и т.д.)... кто подскажет где грабли...?? плиз...


Название: Re: вставка новой записи
Отправлено: ритт от Апрель 02, 2008, 16:07
"левая" строка добавляется, т.к. ты сам её и добавляешь (beginInsertRows/endInsertRows)
размеры столбцов НЕ хранятся в модели - это задача вьюхи


Название: Re: вставка новой записи
Отправлено: crossly от Апрель 02, 2008, 16:55
"левая" строка добавляется, т.к. ты сам её и добавляешь (beginInsertRows/endInsertRows)
размеры столбцов НЕ хранятся в модели - это задача вьюхи
я по этому и спрашиваю как правильно сделать.... :)