SABROG, хитро, но в крайнемм случае придется делать так, спасибо ))
Litkevich Yuriy
//создаю таблицу (соединение с базой уже установлено)
void CMaterialDatabase::CreateInitialDatabase()
{
QSqlQuery oQuery;
std::ifstream file("E:\\Valtec_MSVC\\Modules\\ValtecDatabase\\materials.txt");
if (!file) return;
oQuery.exec(QString("DELETE FROM %1").arg(m_sInternalDatabaseName));
oQuery.exec(QString("CREATE TABLE %1 (MaterialGroup varchar(200), MaterialName varchar(200), K1 varchar(20), K2 varchar(20))").arg(m_sInternalDatabaseName));
char szBuf[128];
while (!file.eof())
{
oQuery.prepare(QString("INSERT INTO %1 VALUES(:MaterialGroup, :MaterialName, :K1, :K2)").arg(m_sInternalDatabaseName));
file.getline(szBuf, 128, ';');
file.getline(szBuf, 128, ';'); oQuery.bindValue(":MaterialGroup", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":MaterialName", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":K1", szBuf);
file.getline(szBuf, 128, ';'); oQuery.bindValue(":K2", szBuf);
file.getline(szBuf, 128, ';');
if (!oQuery.exec())
{
QString s = oQuery.lastQuery();
s;
}
}
file.close();
}
//показываю таблицу
void CMaterialDatabase::ShowContent()
{
QSqlTableModel *pModel = new QSqlTableModel();
if (!pModel) return;
pModel->setTable(m_sInternalDatabaseName);
pModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
pModel->select();
pModel->setHeaderData(0, Qt::Horizontal, qApp->tr("1"));
pModel->setHeaderData(1, Qt::Horizontal, qApp->tr("2"));
pModel->setHeaderData(2, Qt::Horizontal, qApp->tr("3"));
pModel->setHeaderData(3, Qt::Horizontal, qApp->tr("4"));
ValtecCommonDatabase::CDataBrowserDialog *pDataBrowserDialog = new ValtecCommonDatabase::CDataBrowserDialog(pModel);
pDataBrowserDialog->exec();
}
//сам диалог с таблицей (конструктор и пара функций)
CDataBrowserDialog::CDataBrowserDialog(QSqlTableModel *pModel, QWidget* pParent) : QDialog(pParent)
{
setupUi(this);
m_pModel = pModel;
m_pDataTableView->setModel(pModel);
.......................
QDialog::connect(m_pAddABtn, SIGNAL(clicked()), this, SLOT(OnAddRowAfter()));
QDialog::connect(m_pAddBBtn, SIGNAL(clicked()), this, SLOT(OnAddRowBefore()));
QDialog::connect(m_pDelBtn, SIGNAL(clicked()), this, SLOT(OnDelRow()));
............................
}
void CDataBrowserDialog::OnAddRowAfter()
{
QModelIndex oInsertIndex = m_pDataTableView->currentIndex();
int nRow = oInsertIndex.row() == -1 ? 0 : oInsertIndex.row() + 1;
bool bRetVal = m_pModel->insertRow(nRow);
oInsertIndex = m_pModel->index(nRow, 0);
m_pDataTableView->setCurrentIndex(oInsertIndex);
m_pDataTableView->edit(oInsertIndex);
}
void CDataBrowserDialog::OnAddRowBefore()
{
QModelIndex oInsertIndex = m_pDataTableView->currentIndex();
int nRow = oInsertIndex.row() == -1 ? 0 : oInsertIndex.row();
bool bRetVal = m_pModel->insertRow(nRow);
oInsertIndex = m_pModel->index(nRow, 0);
m_pDataTableView->setCurrentIndex(oInsertIndex);
m_pDataTableView->edit(oInsertIndex);
}
Удаление строки работает.. А вставку делаю вот так..