#include "..\stdafx.h" #include "EarThwormDef.h" #include "THVacCfgDataBase.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #define SYSTEM_KEY -2 // 所属系统 THVacCfgDataBase::THVacCfgDataBase() { } THVacCfgDataBase::~THVacCfgDataBase() { } AcDbObjectId THVacCfgDataBase::GetLayId(LPCTSTR pszTab, LPCTSTR pszLayKey, LPCTSTR pszSysName) { if (NULL == pszTab || NULL == pszLayKey || NULL == pszSysName) return FALSE; // 遍历数据库表,获取对应的图层名 CString strLayName = _T(""); if (!GetLayName(pszTab, pszLayKey, pszSysName, strLayName)) return FALSE; // 根据图层名获取图层Id, 图层不存在,则创建新的图层 // 获得图层 AcDbObjectId idLayer = AcDbObjectId::kNull; AcDbLayerTable* pLayerTab = NULL; AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase(); if(Acad::eOk == pDb->getLayerTable(pLayerTab, AcDb::kForWrite)) { if(pLayerTab->has(strLayName)) { // 图层已经存在 pLayerTab->getAt(strLayName, idLayer); pLayerTab->close(); return idLayer; } else { // 创建图层 // 创建新的层表记录 AcDbLayerTableRecord* pLayerTabRec = NULL; pLayerTabRec = new AcDbLayerTableRecord(); if(NULL == pLayerTabRec) { DELETE_PTR(pLayerTabRec); pLayerTab->close(); return FALSE; } pLayerTabRec->setName(strLayName); // 将新建的层表记录添加到层表中 if(Acad::eOk != pLayerTab->add(idLayer, pLayerTabRec)) { pLayerTabRec->close(); pLayerTab->close(); return FALSE; } // 设置图层的颜色 AcCmColor color; color.setColorIndex(3); pLayerTabRec->setColor(color); // 关闭图层和图层记录 pLayerTabRec->close(); pLayerTab->close(); return idLayer; } } return FALSE; } BOOL THVacCfgDataBase::GetLayName(LPCTSTR pszTab, LPCTSTR pszLayKey, LPCTSTR pszSysName, CString& strLayName) { if (NULL == pszTab || NULL == pszLayKey || NULL == pszSysName) return FALSE; CString strLayKey, strSys, strTemp; strTemp = pszLayKey; strLayKey.Format(_T("\'%s\'"), strTemp); strTemp = pszSysName; strSys.Format(_T("\'%s\'"), strTemp); CString strSQL; strTemp = pszTab; strSQL.Format(_T("Select [LAYNAME] From [%s] Where [LAYKEY]='%s' And [SYSTEM]='%s'"), strTemp, strLayKey, strLayName); int iFlag = GetSelData(strSQL, strLayName); BOOL bValue = iFlag == 1 ? TRUE : FALSE; return bValue; } // 获取系统设置的模板 int THVacCfgDataBase::GetSystemModel(LPCTSTR pszTabName, CUIIValueTable &vSelTab) { return 1; } BOOL THVacCfgDataBase::SelectTableFromDMB(LPCTSTR pszSysName, LPCTSTR pszTab, CUIIValueTable& vSelTable) { if (NULL == pszSysName || NULL == pszTab) return FALSE; // 确保数据库是打开的 if (!IsDatabaseOpen()) return FALSE; // 写入查询SQL语句 (从表中查询指定系统名称的记录) CString strSQL, strSys, strTab; strSys = pszSysName; strTab = pszTab; strSQL.Format(_T("Select * From [%s] Where [SYSTEM]='%s'"), strTab, strSys); if (0 == strSys.CompareNoCase( _T(""))) { strSQL.Format(_T("Select * From [%s] Where [SYSTEM] is null"), strTab); } int iFlag = GetSelData(strSQL, vSelTable); BOOL bValue = iFlag > 0 ? TRUE : FALSE; return bValue; } // 获取指定行记录 BOOL THVacCfgDataBase::SelRowFromDB(LPCTSTR pszTab, LPCTSTR pszLayKey, LPCTSTR pszSysName, CMapStringToString& strMap) { if (NULL == pszTab || NULL == pszLayKey || NULL == pszSysName) return FALSE; // 获取表的字段 Ttable tField; //GetTableStructInfoEx(BLOWPIPE_SETTING, tField); CUIIValueTable table; CString sSQL; sSQL = _T("select from Wpipecfg limit 0,1"); GetSelData(sSQL, table); CStringArray arField; table.GetLableRecord(arField); for (int j = 0; j < arField.GetSize(); j++) { CUIITableField strufield; strufield.m_sFieldName = arField.GetAt(j); tField.Add(strufield); } // 遍历字段,获取每个字段的值 CString strSQL, strField, strKey, strValue; for (int i = 0; i < tField.GetSize(); i++) { strField = tField.GetAt(i).m_sFieldName; strSQL.Format(_T("Select [%s] Form %s Where [SYSTEM]='%s' And [LAYKEY]='%s'"), strField, pszTab, pszSysName, pszLayKey); GetSelData(strSQL, strValue); if (1 == GetSelData(strSQL, strValue)) strMap.SetAt(strField, strValue); else strMap.SetAt(strField, _T("")); } return TRUE; } // 获取指定列的不为空的值 BOOL THVacCfgDataBase::SelColFromDB(LPCTSTR pszTab, LPCTSTR pszColKey, CStringArray& arSysTem) { if (NULL == pszTab || NULL == pszColKey) return FALSE; // 确保表有效 if (!IsTableValue(pszTab)) return FALSE; CString strSQL; CString strSys = _T("SYSTEM"); strSQL.Format(_T("Select [%s] From %s where [%s]<>'' ORDER BY [ID] ASC"), pszColKey, pszTab, pszColKey); int iFlag = GetSelData(strSQL, arSysTem); BOOL bValue = iFlag > 0 ? TRUE : FALSE; return bValue; } // 查询线型表中线型的信息 int THVacCfgDataBase::SelLineFromDB(LPCTSTR pszTab, CUIIValueTable& vSelTab) { if (NULL == pszTab) return -1; // 获取表字段 Ttable arField; //GetTableStructInfoEx(pszTab, arField); CUIIValueTable table; CString sSQL; sSQL.Format(_T("select * from %s limit 0,1"), pszTab); GetSelData(sSQL, table); CStringArray arFieldName; table.GetLableRecord(arFieldName); for (int j = 0; j < arFieldName.GetSize(); j++) { CUIITableField strufield; strufield.m_sFieldName = arFieldName.GetAt(j); arField.Add(strufield); } // 设置SQL语句 查询这个行的信息 CString strSQL, strSet, strName, strKey; for (int i = 0; i < arField.GetSize(); i++) { strName = arField.GetAt(i).m_sFieldName; strSet.Format(_T("[%s]"), strName); if (0 == strKey.CompareNoCase(_T(""))) strKey = strSet; else strKey += _T(",") + strSet; } strSQL.Format(_T("Select %s From %s"), strKey, pszTab); int iLen = GetSelData(strSQL, vSelTab); return iLen; } BOOL THVacCfgDataBase::IsTableValue(LPCTSTR pszTable) { if (NULL == pszTable) return FALSE; // 判断数据库是否打开 if (!IsDatabaseOpen()) return FALSE; // 遍历数据库中的表,判断指定表是否存在 CStringArray arTabName; GetDbTableNameArray(arTabName); CString strName; for (int i = 0; i < arTabName.GetSize(); i++) { strName = arTabName.GetAt(i); if (0 == strName.CompareNoCase(pszTable)) return TRUE; } return FALSE; } BOOL THVacCfgDataBase::IsRowExistInDB(LPCTSTR pszLayKey, LPCTSTR pszSystem, LPCTSTR pszTab) { CString strSQL, strKey = _T("LAYKEY"), strValue; strSQL.Format(_T("Select distinct [%s] From %s where [LAYKEY] = '%s' And [SYSTEM] = '%s'"), strKey, pszTab, pszLayKey, pszSystem); if (GetSelData(strSQL, strValue) > 0) return TRUE; return FALSE; } BOOL THVacCfgDataBase::IsTextExist(LPCTSTR pszDbKey, LPCTSTR pszCurText, LPCTSTR pszTab) { // 确保数据库有效且被打开 if (!IsTableValue(pszTab) || NULL == pszDbKey|| NULL == pszCurText) return FALSE; // 获取表的结构 Ttable tField; //GetTableStructInfoEx(pszTab, tField); CUIIValueTable table; CString sSQL; sSQL.Format(_T("select * from %s limit 0,1"), pszTab); GetSelData(sSQL, table); CStringArray arFieldName; table.GetLableRecord(arFieldName); for (int j = 0; j < arFieldName.GetSize(); j++) { CUIITableField strufield; strufield.m_sFieldName = arFieldName.GetAt(j); tField.Add(strufield); } // 遍历数据库,判断是否存在指定值 BOOL bHas = FALSE; CString strSQL, strValue; CString strTemp = pszCurText; strValue.Format(_T("\'%s\'"), strTemp); strSQL.Format(_T("Select [%s] From %s where [%s] = %s"), pszDbKey, pszTab, pszDbKey, strValue); if (GetSelData(strSQL, strValue) > 0) bHas |= TRUE; return bHas; } // 判断MDB数据库是裎?不包含模板) BOOL THVacCfgDataBase::IsDBNull(LPCTSTR pszTab) { if (NULL == pszTab) return FALSE; // 确保数据库中的表有效 BOOL bNULL = FALSE; if (!IsTableValue(pszTab)) return bNULL; // 写入查询SQL语句 CString strSQL, strTemp; strTemp = pszTab; strSQL.Format(_T("Select distinct [SYSTEM] From %s Where [SYSTEM]<>'' "), strTemp); if (IsSelEmpty(strSQL)) bNULL = TRUE; return bNULL; }