#include "PowerCompensateDao.h" #include PowerCompensateDao::PowerCompensateDao(SQLite::Database* pdb) :BaseDao(pdb) { } PowerCompensateDao::~PowerCompensateDao() { } void PowerCompensateDao::CreateTable() { if (m_pDB->tableExists(PowerCompensate::TABLE_NAME))return; char buffer[1024]; memset(buffer, '\0', sizeof(buffer)); string createsql = "CREATE TABLE %s(%s INTEGER,%s INTEGER,%s FLOAT,%s FLOAT,%s FLOAT,PRIMARY KEY(%s,%s))"; sprintf_s(buffer, sizeof(buffer), createsql.c_str(), PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str(), PowerCompensate::FIELD_VALUE.c_str(), PowerCompensate::FIELD_VALUE_MIN.c_str(), PowerCompensate::FIELD_VALUE_MAX.c_str(), PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str() ); m_pDB->exec(buffer); } void PowerCompensateDao::Find(int cno,PowerCompensateCfg& cfg) { char buffer[1024]; string strsql = "SELECT %s,%s,%s,%s,%s FROM %s WHERE %s=%d ORDER BY %s"; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str(), PowerCompensate::FIELD_VALUE.c_str(), PowerCompensate::FIELD_VALUE_MIN.c_str(), PowerCompensate::FIELD_VALUE_MAX.c_str(), PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), cno, PowerCompensate::FIELD_PERCENT.c_str()); SQLite::Statement query(*m_pDB, buffer); while (query.executeStep()) { PowerCompensate* ppc = new PowerCompensate(); ppc->m_cno = query.getColumn(PowerCompensate::FIELD_CNO.c_str()).getInt(); ppc->m_percent = query.getColumn(PowerCompensate::FIELD_PERCENT.c_str()).getUInt(); ppc->m_value =(float) query.getColumn(PowerCompensate::FIELD_VALUE.c_str()).getDouble(); ppc->m_value_min =(float) query.getColumn(PowerCompensate::FIELD_VALUE_MIN.c_str()).getDouble(); ppc->m_value_max =(float) query.getColumn(PowerCompensate::FIELD_VALUE_MAX.c_str()).getDouble(); cfg.m_pcs.push_back(ppc); } } void PowerCompensateDao::Add(int cno, PowerCompensate* cfg) { char buffer[512]; string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES("; sprintf_s(buffer, sizeof(buffer), strtemp.c_str(), PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str(), PowerCompensate::FIELD_VALUE.c_str(), PowerCompensate::FIELD_VALUE_MIN.c_str(), PowerCompensate::FIELD_VALUE_MAX.c_str() ); string strsql = string(buffer) + "%d,%d,%f,%f,%f)"; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), cno, cfg->m_percent, cfg->m_value, cfg->m_value_min, cfg->m_value_max); m_pDB->exec(buffer); } void PowerCompensateDao::Save(int cno,PowerCompensateCfg& cfg) { char buffer[512]; map existMap; sprintf_s(buffer, sizeof(buffer), "SELECT %s,%s,%s,%s,%s FROM %s WHERE %s=%d ORDER BY %s", PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str(), PowerCompensate::FIELD_VALUE.c_str(), PowerCompensate::FIELD_VALUE_MIN.c_str(), PowerCompensate::FIELD_VALUE_MAX.c_str(), PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), cno, PowerCompensate::FIELD_PERCENT.c_str()); SQLite::Statement query(*m_pDB, buffer); while (query.executeStep()) { PowerCompensate* ppc = new PowerCompensate(); ppc->m_cno = query.getColumn(PowerCompensate::FIELD_CNO.c_str()).getInt(); ppc->m_percent = query.getColumn(PowerCompensate::FIELD_PERCENT.c_str()).getUInt(); ppc->m_value = (float)query.getColumn(PowerCompensate::FIELD_VALUE.c_str()).getDouble(); ppc->m_value_min = (float)query.getColumn(PowerCompensate::FIELD_VALUE_MIN.c_str()).getDouble(); ppc->m_value_max = (float)query.getColumn(PowerCompensate::FIELD_VALUE_MAX.c_str()).getDouble(); existMap[ppc->m_percent] = ppc; } vector ins; vector dels; vector ups; for (size_t i = 0; i < cfg.m_pcs.size(); ++i) { PowerCompensate* pc = cfg.m_pcs[i]; if (existMap.find(pc->m_percent) != existMap.end()) { ups.push_back(pc); } else { ins.push_back(pc); } } for (auto pc : existMap) { bool isFind = false; for (size_t i = 0; i < ups.size(); ++i) { if (pc.second->m_percent == ups[i]->m_percent) { isFind = true; break; } } if (!isFind) { dels.push_back(pc.second); } } if (!dels.empty()) { for (size_t i = 0; i < dels.size(); ++i) { PowerCompensate* pc = dels[i]; sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s WHERE %s=%d AND %s=%u", PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), cno, PowerCompensate::FIELD_PERCENT.c_str(), pc->m_percent); m_pDB->exec(string(buffer)); } } if (!ups.empty()) { for (size_t i = 0; i < ups.size(); ++i) { PowerCompensate* pc = ups[i]; sprintf_s(buffer, sizeof(buffer), "UPDATE %s SET %s=%.3f WHERE %s=%d AND %s=%u", PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_VALUE.c_str(), pc->m_value, PowerCompensate::FIELD_CNO.c_str(), cno, PowerCompensate::FIELD_PERCENT.c_str(), pc->m_percent); m_pDB->exec(string(buffer)); } } string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES("; sprintf_s(buffer, sizeof(buffer), strtemp.c_str(), PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str(), PowerCompensate::FIELD_VALUE.c_str(), PowerCompensate::FIELD_VALUE_MIN.c_str(), PowerCompensate::FIELD_VALUE_MAX.c_str() ); string strsql = string(buffer) + "%d,%d,%.3f,%.3f,%.3f)"; if (!ins.empty()) { for (size_t i = 0; i < ins.size(); ++i) { PowerCompensate* pc = ins[i]; sprintf_s(buffer, sizeof(buffer), strsql.c_str(), cno, pc->m_percent, pc->m_value, pc->m_value_min, pc->m_value_max); m_pDB->exec(string(buffer)); } } } void PowerCompensateDao::Export(int cno,PowerCompensateCfg& cfg, std::stringstream &sql) { char buffer[512]; sprintf_s(buffer, sizeof(buffer), "DELETE FROM %s WHERE %s=%d", PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), cno); sql << string(buffer) + "\n"; string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES("; sprintf_s(buffer, sizeof(buffer), strtemp.c_str(), PowerCompensate::TABLE_NAME.c_str(), PowerCompensate::FIELD_CNO.c_str(), PowerCompensate::FIELD_PERCENT.c_str(), PowerCompensate::FIELD_VALUE.c_str(), PowerCompensate::FIELD_VALUE_MIN.c_str(), PowerCompensate::FIELD_VALUE_MAX.c_str() ); string strsql = string(buffer) + "%d,%d,%f,%f,%f)"; for (size_t i = 0; i < cfg.m_pcs.size(); ++i) { sprintf_s(buffer, sizeof(buffer), strsql.c_str(),cno, cfg.m_pcs[i]->m_percent, cfg.m_pcs[i]->m_value, cfg.m_pcs[i]->m_value_min, cfg.m_pcs[i]->m_value_max); sql << string(buffer) + "\n"; } } void PowerCompensateDao::Import(std::string &sql) { std::stringstream ss(sql); string cmd; getline(ss, cmd); if (cmd.find(PowerCompensate::TABLE_NAME) == string::npos) return; do { m_pDB->exec(cmd); } while (getline(ss, cmd)); }