#include "StdAfx.h" #include "initools.h" #include "EquipManaOperator.h" #include "UserDataDlg.h" #include "ModiRemDlg.h" #include "Base64.h" #include "AecDbEwEquipment.h" #include "coretools.h" #ifndef IMG_FOLDER #define IMG_FOLDER 0 #endif #ifndef IMG_CLASS #define IMG_CLASS 1 #endif #ifndef EQU_COMPANY #define EQU_COMPANY "Beijing shanghua equipment design file" #endif namespace { enum TBLType { eClass = 0, eFolder, ePackage, eBims, eNone, }; CString getTableName(LPCTSTR prefix, const TBLType &tblType) { CString suffix(_T("")); switch (tblType) { case eClass: suffix = _T("Class"); break; case eFolder: suffix = _T("Folder"); break; case ePackage: suffix = _T("Package"); break; case eBims: suffix = _T("Bims"); break; case eNone: default: return _T(""); } return CString(prefix) + suffix; } } CEquipManaOperator::CEquipManaOperator(LPCTSTR prefix) : m_pEquipTree(NULL) , m_pDb(NULL) , m_sPrefix(prefix) { } CEquipManaOperator::CEquipManaOperator(LPCTSTR prefix, CUIISQLiteServer * pDb, CTreeCtrl* pTree) : m_pEquipTree(pTree) , m_pDb(pDb) , m_sPrefix(prefix) { } CEquipManaOperator::~CEquipManaOperator(void) { } void CEquipManaOperator::SetAdoDb(CUIISQLiteServer* pDb) { m_pDb = pDb; } void CEquipManaOperator::SetEquipTree(CTreeCtrl* pTree) { m_pEquipTree = pTree; } //目录分类操作 void CEquipManaOperator::NewFolder(CMapStringToString& mapItem2Folder) { CStringList lstFolders; CString sSQL(_T("")); //sSQL = _T("select folder from Aec_folder"); sSQL.Format(_T("select folder from %s"), getTableName(m_sPrefix, eFolder)); m_pDb->GetSelData(sSQL,lstFolders); while(TRUE) { CString sName(_T("")); if (CoreTools::getNameByDialog(_T("请输入名称"), _T("名称:"), sName)) { if (lstFolders.Find(sName) != NULL) { AfxMessageBox(_T("输入的目录名已经存在!请重新输入!")); continue; } //sSQL.Format(_T("insert into aec_folder (folder) values ('%s')"),nameDlg.m_sName); sSQL.Format(_T("insert into %s (folder) values ('%s')"), getTableName(m_sPrefix, eFolder), sName); m_pDb->ExecuteSQL(sSQL); //插入 HTREEITEM hItem = m_pEquipTree->InsertItem(sName,IMG_FOLDER,IMG_FOLDER); //sSQL.Format(_T("select id from aec_folder where folder='%s'"),nameDlg.m_sName); sSQL.Format(_T("select id from %s where folder='%s'"), getTableName(m_sPrefix, eFolder),sName); CString sID,sKey; m_pDb->GetSelData(sSQL,sID); sKey.Format(_T("%p"),hItem); mapItem2Folder.SetAt(sKey,sID); break; } else { break; } } } void CEquipManaOperator::OnNewclass(HTREEITEM hItem,CMapStringToString& mapItem2Folder) { CString sFolder = m_pEquipTree->GetItemText(hItem); CString sSQL,sFolderID; //sSQL.Format(_T("select ID from aec_folder where folder='%s'"),sFolder); sSQL.Format(_T("select ID from %s where folder='%s'"), getTableName(m_sPrefix, eFolder),sFolder); m_pDb->GetSelData(sSQL,sFolderID); //sSQL.Format(_T("select class from aec_class where idfolder='%s'"),sFolderID); sSQL.Format(_T("select class from %s where idfolder='%s'"), getTableName(m_sPrefix, eClass),sFolderID); CStringList lstClass; m_pDb->GetSelData(sSQL,lstClass); while(TRUE) { CString sName(_T("")); if (CoreTools::getNameByDialog(_T("请输入名称"), _T("名称:"), sName)) { if (lstClass.Find(sName) != NULL) { AfxMessageBox(_T("输入的分类名已经存在!请重新输入!")); continue; } //sSQL.Format(_T("insert into aec_class (class,idfolder) values ('%s','%s')"),nameDlg.m_sName,sFolderID); sSQL.Format(_T("insert into %s (class,idfolder) values ('%s','%s')"), getTableName(m_sPrefix, eClass),sName,sFolderID); BOOL bSuccess = m_pDb->ExecuteSQL(sSQL); if (bSuccess) { CString sID,sKey; //id //sSQL.Format(_T("select id from aec_class where class='%s' and idfolder='%s'"),nameDlg.m_sName,sFolderID); sSQL.Format(_T("select id from %s where class='%s' and idfolder='%s'"), getTableName(m_sPrefix, eClass),sName,sFolderID); m_pDb->GetSelData(sSQL,sID); HTREEITEM hClass = m_pEquipTree->InsertItem(sName,IMG_CLASS,IMG_CLASS,hItem); sKey.Format(_T("%p"),hClass); mapItem2Folder.SetAt(sKey,sID); } break; } else { break; } } } void CEquipManaOperator::OnRename(HTREEITEM hItem,CString& sID) { int nImage = 0,nImagSel = 0; m_pEquipTree->GetItemImage(hItem,nImage,nImagSel); CString sName = m_pEquipTree->GetItemText(hItem); CString sSQL; if (CoreTools::getNameByDialog(_T("请输入名称"), _T("名称:"), sName)) { if (nImage == IMG_FOLDER ) { CStringList lstFolders; //sSQL = _T("select folder from Aec_folder"); sSQL.Format(_T("select folder from %s"), getTableName(m_sPrefix, eFolder)); m_pDb->GetSelData(sSQL,lstFolders); if (lstFolders.Find(sName) != NULL) { AfxMessageBox(_T("目录名已经存在,不能重名!")); return; } //sSQL.Format(_T("update Aec_folder set folder='%s' where id=%d"),nameDlg.m_sName,_ttoi(sID)); sSQL.Format(_T("update %s set folder='%s' where id=%d"), getTableName(m_sPrefix, eFolder),sName,_ttoi(sID)); m_pDb->ExecuteSQL(sSQL); m_pEquipTree->SetItemText(hItem,sName); return; } if ( nImage == IMG_CLASS) { CStringList lstClass; //sSQL = _T("select folder from aec_class"); sSQL.Format(_T("select folder from %s"), getTableName(m_sPrefix, eClass)); m_pDb->GetSelData(sSQL,lstClass); if (lstClass.Find(sName) != NULL) { AfxMessageBox(_T("分类名已经存在,不能重名!")); return; } //sSQL.Format(_T("update aec_class set class='%s' where id=%d"),nameDlg.m_sName,_ttoi(sID)); sSQL.Format(_T("update %s set class='%s' where id=%d"), getTableName(m_sPrefix, eClass),sName,_ttoi(sID)); m_pDb->ExecuteSQL(sSQL); m_pEquipTree->SetItemText(hItem,sName); return; } } } void CEquipManaOperator::OnDelete(HTREEITEM hItem,CString& sID) { int nImage = 0,nImagSel = 0; m_pEquipTree->GetItemImage(hItem,nImage,nImagSel); CString sText,sSQL; if (nImage == IMG_FOLDER ) { //判断目录下没有分类 sText = m_pEquipTree->GetItemText(hItem); //sSQL.Format(_T("select id from aec_class where idfolder='%s'"),sID); sSQL.Format(_T("select id from %s where idfolder='%s'"), getTableName(m_sPrefix, eClass),sID); if ( !m_pDb->IsSelEmpty(sSQL) ) { AfxMessageBox(_T("选择的目录下含有分类名,不能删除!请先删除其下分类再删除目录!")); return; } CString sTip; sTip.Format(_T("删除为永久性删除!确实要删除目录 [%s]吗?"),sText); if ( IDYES == AfxMessageBox(sTip,MB_YESNO) ) { //sSQL.Format(_T("delete from aec_folder where id=%d"),_ttoi(sID)); sSQL.Format(_T("delete from %s where id=%d"), getTableName(m_sPrefix, eFolder),_ttoi(sID)); m_pDb->ExecuteSQL(sSQL); m_pEquipTree->DeleteItem(hItem); } } if ( nImage == IMG_CLASS) { //判断分类下没有设备元件 sText = m_pEquipTree->GetItemText(hItem); //sSQL.Format(_T("select id from aec_package where idclass='%s'"),sID); sSQL.Format(_T("select id from %s where idclass='%s'"), getTableName(m_sPrefix, ePackage),sID); if ( !m_pDb->IsSelEmpty(sSQL) ) { AfxMessageBox(_T("选择的分类下含有设备元件,不能删除!请先删除其下设备元件再删除分类!")); return; } CString sTip; sTip.Format(_T("删除为永久性删除!确实要删除分类 [%s]吗?"),sText); if ( IDYES == AfxMessageBox(sTip,MB_YESNO) ) { //sSQL.Format(_T("delete from aec_class where id=%d"),_ttoi(sID)); sSQL.Format(_T("delete from %s where id=%d"), getTableName(m_sPrefix, eClass),_ttoi(sID)); m_pDb->ExecuteSQL(sSQL); m_pEquipTree->DeleteItem(hItem); } } } //设备元件操作 void CEquipManaOperator::OnAddequ(HTREEITEM hItem) { //目录,分类 CString sFolder,sCLass; sCLass = m_pEquipTree->GetItemText(hItem); HTREEITEM hFolder = m_pEquipTree->GetParentItem(hItem); sFolder = m_pEquipTree->GetItemText(hFolder); //选择equ文件 CString sEquFile; CFileDialog dlg( TRUE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, _T("通用设备元件设计文件(*.equ)|*.equ|All Files (*.*)|*.*||")); int nRes = dlg.DoModal(); if (nRes != IDOK) return; int inputType = AfxMessageBox(_T("是否通过配置文件来进行BIM数据导入?"), MB_YESNO); CString bimFile(_T("")); if (inputType == IDYES) { CFileDialog dg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("bim配置文件(*.ini)|*.ini||")); if (dg.DoModal() == IDOK) bimFile = dg.GetPathName(); else inputType = IDNO; } int iSuc(0), iAll(0); POSITION pos = dlg.GetStartPosition(); while ( NULL != pos ) { sEquFile = dlg.GetNextPathName(pos); iAll++; //提取名称 AecDbEwEquipment* pEqu = new AecDbEwEquipment; if (pEqu->ReadFromFile(sEquFile)) { CString sName(_T("")), sRem = _T(""); sName.Format(_T("NoName%d"), iAll); pEqu->GetSpecialtyData()->GetAt(KEY_NAME, sName); SH_BIM_BLOCK bims; if (inputType == IDYES) // 读配置文件 { IniTools::getSectionContent(bimFile, sEquFile, bims); } else // 读equ文件内的xdata数据 { AecDbObjXDataMap *pXData = pEqu->GetSpecialtyData(AcDb::kForRead); if (pXData) { CoreTools::getBimDatas(*pXData, bims); } } // 文件内的bim数据,插入时再删除 if (PutPackageToDb(sFolder , sCLass , sName , sRem , sEquFile , NULL , bims.empty() ? NULL : &bims)) { iSuc++; } else AfxMessageBox(sEquFile + _T("入库失败。")); DELETE_PTR(pEqu); } else AfxMessageBox(sEquFile + _T("入库失败。")); } CString s(_T("")); s.Format(_T("共选择%d个文件,成功入库%d个。"), iAll, iSuc); AfxMessageBox(s); } void CEquipManaOperator::OnDelequ(LPCTSTR pszID,LPCTSTR pszName) { CString sTip; sTip.Format(_T("删除为永久性删除!确实要删除设备元件 [%s]吗?"),pszName); if (IDYES != AfxMessageBox(sTip, MB_YESNO)) return; int equid(_ttoi(pszID)); CString sSQL; sSQL.Format(_T("delete from %s where [id]='%d'"), getTableName(m_sPrefix, ePackage), equid); if (m_pDb->ExecuteSQL(sSQL)) { sSQL.Format(_T("DELETE FROM %s WHERE [equid]='%d'"), getTableName(m_sPrefix, eBims), equid); m_pDb->ExecuteSQL(sSQL); } } void CEquipManaOperator::OnProperty(AecDbEwEquipment* pEquSel) { AecDbObjXDataMap* pXDataMap = pEquSel->GetSpecialtyData(); //用户数据USER0~999 SH_BIM_BLOCK bims; CoreTools::getBimDatas(*pXDataMap, bims); //仅仅只读? CUserDataDlg userDlg(1); userDlg.SetUserData(bims); //userDlg.SetReadOnly(TRUE); int nRes = userDlg.DoModal(); if (nRes == IDOK && userDlg.m_bModified) { bims.clear(); userDlg.GetUserData(bims); CoreTools::setBimDatas(*pXDataMap, bims); //XString sTmplFile = GetTempFileName(_T(".tmp")); CString sTmplFile = FilePath::getSystemTemporaryFolder(); sTmplFile += _T("\\eq_.tmp"); if (!SaveEquFile(pEquSel,(LPCTSTR)sTmplFile) ) { AfxMessageBox(_T("意外保存中间临时文件失败!请重新执行命令!")); return; } CString sTmpFile = (LPCTSTR)sTmplFile; CString sID,sPackageField; pEquSel->GetSpecialtyData()->GetAt(KEY_ID,sID); //update CString sSQL; //sSQL.Format(_T("update aec_package set package=? where id=%d"),_ttoi(sID)); sSQL.Format(_T("update %s set package=? where id=%d"), getTableName(m_sPrefix, ePackage),_ttoi(sID)); if (m_pDb->UpdateBlob(sSQL, sTmplFile)) { AfxMessageBox(_T("更新数据库成功!请选择设备元件查看属性验证!")); } // CUIIPackageDbOper packageDb; // packageDb.SetDbSrv(m_pDb); // // sPackageField = _T("Package"); // if ( packageDb.UpdatePackage(sSQL,sPackageField,sTmpFile) ) // { // AfxMessageBox(_T("更新数据库成功!请选择设备元件查看属性验证!")); // } } } void CEquipManaOperator::OnCloneEqu(LPCTSTR pszID, LPCTSTR pszName) { if (!pszName || !pszID) return; CString sSQL, sTable(getTableName(m_sPrefix, ePackage)); sSQL.Format( _T("INSERT INTO %s ([name],[idclass],[rem],[package]) SELECT [name],[idclass],[rem],[package] FROM %s WHERE [id]='%s'") , sTable , sTable , pszID); if (!m_pDb->ExecuteSQL(sSQL)) return; // 得到clone出的设备的ID CString s; sSQL.Format(_T("SELECT id FROM %s ORDER BY id DESC LIMIT 1"), sTable); if (!m_pDb->GetSelData(sSQL, s)) return; // 为新设备改名 sSQL.Format(_T("UPDATE %s SET [name]='%s' WHERE [id]='%s'"), sTable, pszName, s); if (!m_pDb->ExecuteSQL(sSQL)) return; // clone aec_bims表内数据 sTable = getTableName(m_sPrefix, eBims); sSQL.Format(_T("INSERT INTO %s ([name],[value],[readonly]) SELECT [name],[value],[readonly] FROM %s WHERE [equid]='%s'") , sTable, sTable, pszID); if (!m_pDb->ExecuteSQL(sSQL)) return; // 将新bim数据的equid指向新设备的ID sSQL.Format(_T("UPDATE %s SET [equid]='%s' WHERE [equid]='-1'"), sTable, s); if (!m_pDb->ExecuteSQL(sSQL)) return; } void CEquipManaOperator::OnModiRem(AecDbEwEquipment* pEquSel) { CString sID,sRem; pEquSel->GetSpecialtyData()->GetAt(KEY_ID,sID); CString sSQL; //sSQL.Format(_T("select rem from aec_package where id=%d"),_ttoi(sID)); sSQL.Format(_T("select rem from %s where id=%d"), getTableName(m_sPrefix, ePackage),_ttoi(sID)); m_pDb->GetSelData(sSQL,sRem); CModiRemDlg remDlg; remDlg.m_sRem = sRem; if ( IDOK == remDlg.DoModal()) { //sSQL.Format(_T("update aec_package set rem='%s' where id=%d"),remDlg.m_sRem,_ttoi(sID)); sSQL.Format(_T("update %s set rem='%s' where id=%d"), getTableName(m_sPrefix, ePackage),remDlg.m_sRem,_ttoi(sID)); m_pDb->ExecuteSQL(sSQL); } } void CEquipManaOperator::GetBimDatas(LPCTSTR pszID, std::vector> &bims, bool &bReadOnly) { if (!pszID) return; CString sSql(_T("")); sSql.Format(_T("SELECT [readonly] FROM %s WHERE [id]='%s'"), getTableName(m_sPrefix, ePackage), pszID); CString readonly(_T("0")); m_pDb->GetSelData(sSql, readonly); bReadOnly = readonly == _T("0") ? false : true; sSql.Format(_T("SELECT [id],[name],[value] FROM %s WHERE [equid]='%s'"), getTableName(m_sPrefix, eBims), pszID); m_pDb->GetSelDataEx(sSql, bims); } BOOL CEquipManaOperator::SaveEquFile(AecDbEwEquipment* pWEqu,LPCTSTR pszFile) { BOOL bSuccess = FALSE; CFile file; if (file.Open(pszFile,CFile::modeCreate | CFile::modeWrite)) { if (pWEqu != NULL) { AecDbObjXDataMap* pXDataMap = pWEqu->GetSpecialtyData(); //0.写入文件标识 std::string str1,str2; str1.append(EQU_COMPANY); str2 = Base64::Encode(str1); file.Write(str2.c_str(),sizeof(char)* ( str2.length() ) ); //1.写入名称 char szName[MAX_PATH]; memset(szName,0,sizeof(szName)); CString sText; pXDataMap->GetAt(KEY_NAME,sText); _bstr_t bst((LPCTSTR)sText); strcpy(szName,(const char*)bst); file.Write(szName,MAX_PATH); //2.版本 int nVer = 1; file.Write(&nVer,sizeof(int)); //4.写入定义数据 AcGeMatrix3d xform; int nCount = pWEqu->GetSubPrimObjCount(); //4.写入数量 file.Write(&nCount,sizeof(int)); int nLen = 0; for (int i = 0;i < nCount;i++) { AecEqui::XPrimData* pData = pWEqu->GetSubPrimObj(i); if (pData != NULL) { //通用数据 file.Write(&pData->m_eType,sizeof(short)); file.Write(&pData->m_nActiveInf,sizeof(short)); file.Write(&pData->m_nID,sizeof(long)); file.Write(&pData->m_vtMove.x,sizeof(double)); file.Write(&pData->m_vtMove.y,sizeof(double)); file.Write(&pData->m_vtMove.z,sizeof(double)); file.Write(&pData->m_ptRotation.x,sizeof(double)); file.Write(&pData->m_ptRotation.y,sizeof(double)); file.Write(&pData->m_ptRotation.z,sizeof(double)); //矩阵 nLen = pData->m_arMatrix.length(); file.Write(&nLen,sizeof(int)); int nnn = sizeof(AcGeMatrix3d); for (int j = 0;j < pData->m_arMatrix.length();j++) { xform = pData->m_arMatrix.at(j); for (int n = 0;n < 4;n++) { for (int k = 0;k < 4;k++) { file.Write(&xform.entry[n][k],sizeof(double)); } } } //data file.Write(&pData->m_nSize,sizeof(int)); if (pData->m_nSize > 0) { file.Write(pData->m_pData,pData->m_nSize); } } bSuccess = TRUE; } //5.写入用户数据 pXDataMap->Write(&file,TRUE); //写出用户数据USER0~999 } file.Close(); } return bSuccess; } bool CEquipManaOperator::IsReadOnlyEqu(LPCTSTR pszID) { if (!pszID) return false; CString sSQL, s(_T("0")); sSQL.Format(_T("SELECT [readonly] FROM %s WHERE [id]='%s'"), getTableName(m_sPrefix, ePackage), pszID); m_pDb->GetSelData(sSQL, s); if (s == _T("0")) return false; else return true; } int CEquipManaOperator::AddBimForEqu(LPCTSTR pszName, LPCTSTR pszValue, LPCTSTR pszEquID) { if (!pszName || !pszValue || !pszEquID) return -1; CString sSql(_T("")), sTable(getTableName(m_sPrefix, eBims)); sSql.Format(_T("INSERT INTO %s ([Name],[Value],[EquID],[ReadOnly]) VALUES ('%s','%s','%s','0')") , sTable , pszName , pszValue , pszEquID); if (!m_pDb->ExecuteSQL(sSql)) return -1; CString s; sSql.Format(_T("SELECT id FROM %s ORDER BY id DESC LIMIT 1"), sTable); if (!m_pDb->GetSelData(sSql, s)) return -1; return _ttoi(s); } bool CEquipManaOperator::ModBimForEqu(LPCTSTR pszName, LPCTSTR pszValue, int BimID) { if (!pszName || !pszValue) return false; CString sSql(_T("")), sTable(getTableName(m_sPrefix, eBims)); sSql.Format(_T("UPDATE %s SET [Name]='%s',[Value]='%s' WHERE [id]='%d'") , sTable , pszName , pszValue , BimID); if (!m_pDb->ExecuteSQL(sSql)) return false; return true; } bool CEquipManaOperator::DelBimForEqu(int BimID) { CString sSql(_T("")); sSql.Format(_T("DELETE FROM %s WHERE [id]='%d'"), getTableName(m_sPrefix, eBims), BimID); if (!m_pDb->ExecuteSQL(sSql)) return false; return true; } BOOL CEquipManaOperator::PutPackageToDb(const CString& sFolder , const CString& sClass , const CString& sName , const CString& sRem , const CString& sEquTmplFile , CString *pIDPackage , SH_BIM_BLOCK *pBims) { CString sSQL; //检查 Folder 是否数据库中有 sSQL.Format(_T("SELECT [id] FROM %s WHERE [folder]='%s'"), getTableName(m_sPrefix, eFolder),sFolder); if ( m_pDb->IsSelEmpty(sSQL) ) //数据库中没有 { sSQL.Format(_T("INSERT INTO %s ([folder]) VALUES ('%s')"), getTableName(m_sPrefix, eFolder),sFolder); m_pDb->ExecuteSQL(sSQL); } CString sID; sSQL.Format(_T("SELECT [id] FROM %s WHERE [folder]='%s'"), getTableName(m_sPrefix, eFolder),sFolder); m_pDb->GetSelData(sSQL,sID); //检查 Class sSQL.Format(_T("SELECT [class] FROM %s WHERE [idfolder]='%s' AND [class]='%s'"), getTableName(m_sPrefix, eClass),sID,sClass); if (m_pDb->IsSelEmpty(sSQL)) { sSQL.Format(_T("INSERT INTO %s ([class],[idfolder]) VALUES ('%s','%s')"), getTableName(m_sPrefix, eClass),sClass,sID); m_pDb->ExecuteSQL(sSQL); } sSQL.Format(_T("SELECT [id] FROM %s WHERE [idfolder]='%s' AND [class]='%s'"), getTableName(m_sPrefix, eClass),sID,sClass); CString sClassID; m_pDb->GetSelData(sSQL,sClassID); // 在入库前,检查一下有没有同样的设备存在,如果有,则删除 if (m_sPrefix.CompareNoCase(_T("aec_")) == 0) sSQL.Format(_T("SELECT aec_package.[id]") _T(" FROM aec_package") _T(" INNER JOIN aec_class, aec_folder") _T(" ON (aec_class.[idfolder] = aec_folder.[id] AND aec_package.[IDClass] = aec_class.[ID])") _T(" WHERE (aec_package.[idclass] = '%s' AND aec_package.[name] = '%s')"), sClassID, sName); else sSQL.Format(_T("SELECT dwg_package.[id]") _T(" FROM dwg_package") _T(" INNER JOIN dwg_class, dwg_folder") _T(" ON (dwg_class.[idfolder] = dwg_folder.[id] AND dwg_package.[IDClass] = dwg_class.[ID])") _T(" WHERE (dwg_package.[idclass] = '%s' AND dwg_package.[name] = '%s')"), sClassID, sName); std::vector ss; m_pDb->GetSelData(sSQL, ss); for (size_t i = 0; i < ss.size(); ++i) { sSQL.Format(_T("DELETE FROM %s WHERE [id]='%s'"), getTableName(m_sPrefix, ePackage), ss[i]); m_pDb->ExecuteSQL(sSQL); if (m_sPrefix.CompareNoCase(_T("aec_")) == 0) { sSQL.Format(_T("DELETE FROM aec_bims WHERE [equid]='%s'"), ss[i]); m_pDb->ExecuteSQL(sSQL); } } //压包入库 sSQL.Format(_T("INSERT INTO %s ([name], [rem], [idclass], [package]) VALUES ('%s', '%s', '%s', ?)") , getTableName(m_sPrefix, ePackage) , sName , sRem , sClassID); BOOL bSuccess = m_pDb->InsertBlob(sSQL, sEquTmplFile); if (!bSuccess) { AfxMessageBox(_T("设备元件入库失败!")); return FALSE; } CString equid(_T("")); sSQL.Format(_T("SELECT id FROM %s WHERE [name] = '%s'"), getTableName(m_sPrefix, ePackage), sName); m_pDb->GetSelData(sSQL, equid); if (pIDPackage) *pIDPackage = equid; // 设备 if (m_sPrefix.CompareNoCase(_T("Aec_")) == 0 && pBims && !pBims->empty()) { std::vector>::const_iterator it(pBims->begin()); for (; it != pBims->end(); ++it) { sSQL.Format(_T("INSERT INTO %s ([name],[value],[equid]) VALUES ('%s','%s','%s')") , getTableName(m_sPrefix, eBims) , it->first , it->second , equid); m_pDb->ExecuteSQL(sSQL); } } return TRUE; }