QSqlQuery oQuery;
//...
oQuery.exec("CREATE TABLE PIPES (id INTEGER, PipeType varchar(50), D_outside varchar(20), d_inside varchar(20), "
"Roughness varchar(20), Lamda varchar(20))");
oQuery.prepare("INSERT INTO %1 VALUES(:id, :PipeType, :D_outside, :d_inside, :Roughness, :Lamda)");
char szBuf[128];
while (!file.eof())
{
file.getline(szBuf, 128, ';');
file.getline(szBuf, 128, ';'); oQuery.bindValue(":PipeType", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":D_outside", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":d_inside", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":Roughness", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":Lamda", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":id", szBuf);
oQuery.exec();
}
Таблица создана. Затем нужно сделать ее редактирование, и при этом вставлять записи в нужное место (не обязательно в конец). Вставку делаю так:
QModelIndex oInsertIndex = m_pDataTableView->currentIndex();
int nRow = oInsertIndex.row() == -1 ? 0 : oInsertIndex.row();
m_pModel->insertRow(nRow);
//и после вставки перенумеровываю все id по порядку (id - это столбец сортировки)
const int nRowNum = m_pModel->rowCount();
for (int i = 0; i < nRowNum; ++i) //цикл по строкам таблицы
{
QSqlRecord oSqlRecord = m_pModel->record(i);
oSqlRecord.setValue("id", i + 1);
m_pModel->setRecord(i, oSqlRecord);
}
После этого m_pModel->submitAll() возвращает false, т.е. ничего не сохраняется... Если цикл по строкам убрать, и оставить только саму вставку строки, то submitAll возвращает true (только вставленная строка перемещается в другое место). Пробовал через setRecord менять другие столбцы (не id), результат тот же. Пробовал менять данные через индексы и setData, результат тот же...
m_pDataTableView - это QTableView. Модель устанавливается в конструкторе класса через setModel(pModel); Сама модель:
QSqlTableModel *pModel = new QSqlTableModel();
if (!pModel) return;
pModel->setTable("PIPES");
pModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
pModel->select();
В чем могут быть грабли? Никто не пробовал менять данные таким образом? Как можно обойти это? QT 4.3.4. Заранее большое спасибо!
-----Добавлено------
Блин, удалите пожалуйста эту тему, инет сглючил, 2 темы создал случайно