#ifndef DATAACCESS_H
#define DATAACCESS_H
#include <QStandardItemModel>
#include <QSqlDatabase>
class QDac
{
public:
QDac();
~QDac();
void InitDatabase();
void UninitDataBase();
void exec(const QString &request,QAbstractItemModel &model,bool isCmd = true);
void submit(const QString &request,const QAbstractItemModel &model,int effictRow,bool isCmd = true);
//int genId(const QString &tableName);
protected:
void Load(const QString &sql, QAbstractItemModel &model);
};
int genId(const QString &tableName);
#endif // DATAACCESS_H
#include "dataaccess.h"
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QDebug>
#include <QApplication>
#include <QSqlTableModel>
#include "qdam.h"
QDac::QDac()
{
}
QDac::~QDac()
{
}
void QDac::InitDatabase()
{
QString path = QApplication::applicationDirPath();
path += "/posionData.s3db";
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(path);
if(!db.open())
{
qDebug() << "open db error!";
}
}
void QDac::UninitDataBase()
{
}
void QDac::Load(const QString &sql, QAbstractItemModel &model)
{
model.removeRows(0,model.rowCount());
model.removeColumns(0,model.columnCount());
//model.r
QSqlQuery query(sql);
if(query.exec())
{
int n = query.record().count();
model.insertColumns(0,n);
int row = 0;
while(query.next())
{
model.insertRow(row);
for(int col=0; col<n; col++)
{
model.setData(model.index(row,col),query.value(col));
}
row++;
}
}
else qDebug() << query.lastError().text();
}
void QDac::exec(const QString & request, QAbstractItemModel &model, bool isCmd)
{
QDam * dam = QDam::getInstance();
if(dam)
{
if(isCmd)
{
QString str = dam->mapCmd(request);
Load(str,model);
}
else
{
QString str = dam->mapAction(request);
Load(str,model);
}
}
}
void QDac::submit(const QString &request,const QAbstractItemModel &model,int effictRow,bool isCmd)
{
QDam * dam = QDam::getInstance();
if(dam)
{
QString sql;
if(isCmd)sql = dam->mapCmd(request);
else sql = dam->mapAction(request);
int n = model.columnCount();
QSqlQuery query;
query.prepare(sql);
for(int i=0; i<n; i++)
{
QModelIndex idx = model.index(effictRow,i);
query.bindValue(i,idx.data());
}
if(!query.exec())qDebug() << "submit error : " << query.lastError().text();
}
}
int genId(const QString &tableName)
{
/*
QString sql = QString("select maxId from TableIndex where namne = %0").arg(tableName);
QSqlQuery query(sql);
if(query.exec())
{
if(query.size() > 0)
{
query.next();
int id = query.value(0).toInt();
id++;
sql = QString("update TableIndex set maxId = %0 where name = %1").arg(id).arg(tableName);
QSqlQuery update(sql);
update.exec();
return id;
}
}
else qDebug() << query.lastError().text();
//else
{
sql = QString("insert into TableIndex values(%0,%1)").arg(tableName).arg(100);
QSqlQuery insert(sql);
if(insert.exec())return 100;
qDebug() << insert.lastError().text();
}
*/
QSqlTableModel model;
model.setTable("RecordIndex");
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.select();
for(int i=0; i<model.rowCount(); i++)
{
QModelIndex idx = model.index(i,0);
if(idx.data().toString() == tableName)
{
idx = model.index(i,1);
int id = idx.data().toInt();
id++;
model.setData(idx,id);
model.submitAll();
return id;
}
}
int n = model.rowCount();
model.insertRow(n);
model.setData(model.index(n,0),tableName);
model.setData(model.index(n,1),100);
model.submitAll();
return 100;
}