// SptManager.cpp: implementation of the CSptManager class. // ////////////////////////////////////////////////////////////////////// #include "geomative.h" #include "SptManager.h" #include "Markup.h" #include "MediumA.h" #include "MediumB.h" #include "MediumC.h" #include "MediumD.h" #include "MediumE.h" #include "MediumK.h" #include "MediumQ.h" #include "MediumR.h" #include "MediumS.h" #include "MediumT.h" #include "MediumU.h" #include "MediumV.h" #include "MediumW.h" #include "MediumX.h" #include "MediumY.h" #include "MediumZ.h" #include "MediumZA.h" #include "MediumZB.h" #include "MediumZC.h" #include "MediumLogging.h" #include "MediumStrongWenAndSch.h" #include "MediumBasicWenAndSch.h" #include "MediumAM.h" #include "MediumAMN.h" #include "opcreatesptdlg.h" #include "opcreatecesptdlg.h" #include "OpCreate3DSptDlg.h" #include "MediumCustom2D.h" #include "DialCreateNew3DSpt.h" #include "GD10OperCmd.h" #include "MediumUnityProfile.h" #include "MediumEdgeGradient.h" #include "MeidumBipoleUpHole.h" #include "MediumTwoSideAMN.h" #include "MediumMidGardientScan.h" #include "MediumStrongGradient.h" #include "MediumCrossHoleGeomative.h" #include "MediumCrossHoleGeomativeAM.h" #include "MediumLandfillAdjacent.h" #include "MediumLandfillDiagonally.h" #include "MediumS3P.h" #include "OperTxtFile.h" #include "DetcGD10Dev.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif extern HHOOK hHook; extern int g_iTransMode; extern int g_iLanguage; extern void TransDelay(int iTransMode, int iDS0, int iDS1, HWND hWnd = NULL); extern BOOL DoEvent(HWND hWnd); extern BOOL GetSubStringInHeadAndTail(const CString& szSource, CString& szSub, const CString& szHead, const CString& szTail); extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter); extern int g_iTransFileMode; extern int g_iUILanguage; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// extern HHOOK hHook; extern CGeoMativeApp theApp; extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam); CSptManager::CSptManager(_ConnectionPtr& pConnection) { ASSERT(NULL != pConnection); //m_pConnection = pConnection; m_sptLinkList.DeleteAll(); m_pOpCreateCESptDlg = NULL; m_pNewScript = NULL; m_pChannel = NULL; InitialMedLinkList(); } CSptManager::~CSptManager() { int iSptIndex = 0; int iMedIndex = 0; iSptIndex++; while (NULL != m_sptLinkList.Find(iSptIndex)) { delete m_sptLinkList.Find(iSptIndex); iSptIndex++; } m_sptLinkList.DeleteAll(); iMedIndex++; while (NULL != m_medLinkList.Find(iMedIndex)) { delete m_medLinkList.Find(iMedIndex); iMedIndex++; } m_medLinkList.DeleteAll(); if (NULL != m_pOpCreateCESptDlg) { delete m_pOpCreateCESptDlg; m_pOpCreateCESptDlg = NULL; } if (NULL != m_pNewScript) { delete m_pNewScript; m_pNewScript = NULL; } if (NULL != m_pChannel) { delete m_pChannel; m_pChannel = NULL; } } CScript* CSptManager::GetScript(DWORD dwHandle) { CScript* pSpt = NULL; DWORD dwID = (DWORD)VAL_ZERO; int iStype = (DWORD)VAL_ZERO; pSpt = m_sptLinkList.Get(dwHandle); if (NULL == pSpt) { dwID = m_handleProcessor.GetIDFromHandle(dwHandle); switch (m_handleProcessor.GetStyleFromHandle(dwHandle)) { case PZ_STYLE_SCON_CE: pSpt = new CScriptCE(dwID, theApp.m_pConnection); break; case PZ_STYLE_SCON_2D: pSpt = new CScript2D(dwID, theApp.m_pConnection); break; case PZ_STYLE_SCON_3D: pSpt = new CScript3D(dwID, theApp.m_pConnection); break; default: break; } m_sptLinkList.Add(dwHandle, pSpt); } return pSpt; } void CSptManager::DeleteObjInMem(DWORD dwHandle) { delete m_sptLinkList.Find(dwHandle); m_sptLinkList.Delete(dwHandle); } //DEL UINT CSptManager::CreateScriptFileInOffline(DWORD dwDevID) //DEL { //DEL _RecordsetPtr pRecSCon = NULL; //DEL // _RecordsetPtr pRecScript = NULL; //DEL //DEL _CommandPtr pCmdInsSF = NULL; //DEL //DEL UINT uExecCode = (UINT)VAL_ZERO; //DEL INT_PTR lRet = (long)VAL_ZERO; //DEL //DEL DWORD dwSconHandle = (DWORD)VAL_ZERO; //DEL DWORD dwSConID = (DWORD)VAL_ZERO; //DEL //DEL DWORD dwSFRamount = (DWORD)VAL_ZERO; //DEL //DEL int iIndex = (int)VAL_ZERO; //DEL //DEL CString szSql; //DEL CString szSFname; //DEL //DEL COpCreateSFDlg* pOpCreateSFDlg = new COpCreateSFDlg((INT_PTR*)&lRet); //DEL //DEL CListCtrl& sptList = pOpCreateSFDlg->m_sptList; //DEL //DEL pOpCreateSFDlg->Create(IDD_OP_SF_L_C, AfxGetMainWnd()); //DEL //DEL try //DEL { //DEL InitialSptList(pOpCreateSFDlg->m_sptList, dwDevID); //DEL //DEL pOpCreateSFDlg->ShowWindow(SW_SHOW); //DEL //DEL while (!lRet) //DEL { //DEL DoEvent(pOpCreateSFDlg->m_hWnd); //DEL } //DEL //DEL pRecSCon.CreateInstance(_uuidof(Recordset)); //DEL // pRecScript.CreateInstance(_uuidof(Recordset)); //DEL //DEL pCmdInsSF.CreateInstance(_uuidof(Command)); //DEL pCmdInsSF->ActiveConnection = m_pConnection; //DEL //DEL switch (lRet) //DEL { //DEL case RET_OK: //DEL while (iIndex < sptList.GetItemCount()) //DEL { //DEL if (sptList.GetCheck(iIndex)) //DEL { //DEL dwSconHandle = sptList.GetItemData(iIndex); //DEL dwSConID = m_handleProcessor.GetIDFromHandle(dwSconHandle); //DEL //DEL szSql.Empty(); //DEL szSql.Format("select CN from scon where ID = %u", dwSConID); //DEL pRecSCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); //DEL //DEL szSFname.Empty(); //DEL szSFname.Format("%s.scr", (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN"))); //DEL pRecSCon->Close(); //DEL //DEL szSql.Empty(); //DEL szSql.Format(_T("insert into sfile(SFname,SCID,Cdate,DEID) values('%s',%u,Date(),%u)"), szSFname, dwSConID, dwDevID); //DEL //DEL pCmdInsSF->CommandText = szSql.AllocSysString(); //DEL pCmdInsSF->Execute(NULL, NULL, adCmdText); //DEL } //DEL iIndex ++; //DEL } //DEL uExecCode = APP_SUCCESS; //DEL break; //DEL case RET_CANCLE: //DEL uExecCode = APP_CANCLE; //DEL break; //DEL default: //DEL uExecCode = APP_FAIL; //DEL break; //DEL } //DEL //DEL pOpCreateSFDlg->DestroyWindow(); //DEL delete pOpCreateSFDlg; //DEL return uExecCode; //DEL } //DEL catch (_com_error e) //DEL { //DEL pOpCreateSFDlg->DestroyWindow(); //DEL delete pOpCreateSFDlg; //DEL //DEL throw; //DEL } //DEL } UINT CSptManager::Create2DSConInDB(DWORD& dwSConID) { CString szCN = _T(""); CString szSql = _T(""); CString szSName = _T(""); CString szDefiner = _T(""); CString szDeDate = _T(""); CString szScDesc = _T(""); _RecordsetPtr pRecSCID = NULL; _RecordsetPtr pRecCHID = NULL; _CommandPtr pCmdIns = NULL; _CommandPtr pCmdUpd = NULL; int iChCount = (int)VAL_ZERO; int iChIndex = (int)VAL_ZERO; POSITION posCh = NULL; int iRecCount = (int)VAL_ZERO; int iRecIndex = (int)VAL_ZERO; int iTpAmount = (int)VAL_ZERO; int iTsn = (int)VAL_ZERO; // DWORD dwSCID = (DWORD)VAL_ZERO; DWORD dwCHID = (DWORD)VAL_ZERO; UINT uExecCode = (UINT)VAL_ZERO; INT_PTR lRet = (long)VAL_ZERO; INT_PTR lRetBackup = lRet; CScript2D* pNewScript = new CScript2D((DWORD)VAL_ZERO, theApp.m_pConnection); CChannel* pChannel = NULL; CSptRecord* pSptRecord = NULL; CString strPoleStep = _T("0"); int iAR = 0; COpCreateSptDlg* pOpCreateSptDlg = new COpCreateSptDlg(pNewScript, &m_medLinkList, (INT_PTR*)&lRet); pOpCreateSptDlg->Create(IDD_OP_SPT_DB_C, AfxGetMainWnd()); try { this->InitialCreateSConDlg(pOpCreateSptDlg); pOpCreateSptDlg->ShowWindow(SW_SHOW); lRet = pOpCreateSptDlg->RunModalLoop(MLF_SHOWONIDLE); // 开始非模态窗口模态循环 lRetBackup = lRet; switch (lRet) { case RET_OK: theApp.m_pConnection->BeginTrans(); pRecSCID.CreateInstance(_uuidof(Recordset)); pRecCHID.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szCN.Empty(); szCN = this->m_guCodeCreator.GenerateGUIDCode(); szSName.Empty(); ((CEdit*)pOpCreateSptDlg->GetDlgItem(IDC_SPT_SNAME))->GetWindowText(szSName); szSName.TrimLeft(); szSName.TrimRight(); szDefiner.Empty(); ((CEdit*)pOpCreateSptDlg->GetDlgItem(IDC_SPT_DEFINER))->GetWindowText(szDefiner); szScDesc.Empty(); ((CEdit*)pOpCreateSptDlg->GetDlgItem(IDC_SPT_SCDESC))->GetWindowText(szScDesc); pNewScript->m_iSType = 1; //脚本类型 1d,2d iChCount = pNewScript->m_chaList.GetCount();//这个不知道,得到1 /////////////////////////////////检测是否有相同的名称的脚本///////////////////////////////////////// szSql.Empty(); //Stype=1,二维列表 szSql.Format(_T("select * from scon where Sname = '%s' and Stype=1"),szSName); pRecSCID->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("脚本已存在.")); else MessageBoxEx(NULL, _T("Script has been alreay exists."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); pRecSCID->Close(); theApp.m_pConnection->RollbackTrans(); pNewScript->m_chaList.RemoveAll(); delete pNewScript; pOpCreateSptDlg->DestroyWindow(); delete pOpCreateSptDlg; return APP_FAIL; } pRecSCID->Close(); iAR = ((CChannel*)pNewScript->m_chaList.GetAt(pNewScript->m_chaList.FindIndex(iChIndex)))->m_pMedium->m_iAR; if (iAR == AR_DIP_DIP) { strPoleStep.Empty(); strPoleStep.Format(_T("%f"),pOpCreateSptDlg->GetDipoleSpt()); } ////////////////////////////////////////////////////////////////////////// szSql.Empty(); szSql.Format(_T("insert into scon(CN,Sname,Stype,Eamount,CHamount,TPamount,definer,DEdate,SCdesc,Rect,RectLoc,PoleDistance,PoleStep) " "values('%s','%s',%d,%d,%d,%d,'%s',#%s#,'%s','%s','%s','%s','%s')"), szCN, szSName, pNewScript->m_iSType, pNewScript->m_iEAmount,//电极总数 iChCount,//通道数 iTpAmount,//应该是测点数 szDefiner, pOpCreateSptDlg->m_edDeDate.FormatGmt("%Y-%m-%d"), szScDesc, // 1, // 1, // pNewScript->m_iEAmount, "0,0,0,0", "0", "0", strPoleStep); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); //取得scon表中ID最大的ITEM pRecSCID->Open(_T("select max(ID) as ID from scon"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount())//返回1 { dwSConID = (DWORD)pRecSCID->GetCollect(_T("ID")).ulVal;//返回206就是最大的那个ID序号 } pRecSCID->Close(); posCh = NULL; iChIndex = (int)VAL_ZERO; while (iChIndex < iChCount)//iChCount = 1 { posCh = pNewScript->m_chaList.FindIndex(iChIndex); pChannel = (CChannel*)pNewScript->m_chaList.GetAt(posCh); szSql.Empty(); szSql.Format(_T("insert into channel(SCID,CHnumber,AR,MaxLayer) values(%u,%d,%d,%d) "), dwSConID, pChannel->m_iChNumber, pChannel->m_pMedium->m_iAR, pChannel->m_iMaxLevel); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecCHID->Open(_T("select max(ID) as ID from channel"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCHID->GetRecordCount()) { dwCHID = (DWORD)pRecCHID->GetCollect(_T("ID")).ulVal; //dwchid = 195 } pRecCHID->Close(); iRecIndex = (int)VAL_ZERO; iRecCount = (int)VAL_ZERO; iTpAmount = (int)VAL_ZERO; iTsn = (int)VAL_ONE; iRecCount = pChannel->m_sptRecArray.GetSize(); //IREADCOUNT = 84 while (iRecIndex < iRecCount) { pSptRecord = (CSptRecord*)pChannel->m_sptRecArray.GetAt(iRecIndex); if (TRUE == pSptRecord->m_bIsSel) { szSql.Empty(); szSql.Format(_T("insert into script2d(CHID,TSN,C1,C2,P1,P2,K,N,Layer,XPos) values(%u,%d,%d,%d,%d,%d,%f,%d,%d,%f) "), dwCHID, iTsn, //如是多通道,则此处需修改 pSptRecord->m_iC1, pSptRecord->m_iC2, pSptRecord->m_iP1, pSptRecord->m_iP2, pSptRecord->m_fK, pSptRecord->m_iN, pSptRecord->m_iLevel, pSptRecord->m_fSptXPos); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); iTpAmount++; iTsn++; } delete pSptRecord; pSptRecord = NULL; iRecIndex++; } pChannel->m_sptRecArray.RemoveAll(); szSql.Empty(); if (AR_CROSS_HOLE_TYPE == pChannel->m_pMedium->m_iAR || AR_CROSS_HOLE_GEOMATIVE == pChannel->m_pMedium->m_iAR) { float fCrossHole = 0; CString strCrosshole = _T(""); pChannel->m_pMedium->GetParamVal(&fCrossHole); strCrosshole.Format(_T("0,%.2f"),fCrossHole); szSql.Format(_T("update scon set TPamount = %d, PoleDistance = '%s' where ID = %d"), iTpAmount, strCrosshole, dwSConID); } else szSql.Format(_T("update scon set TPamount = %d where ID = %d"), iTpAmount, dwSConID); pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Execute(NULL, NULL, adCmdText); delete pChannel; pChannel = NULL; iChIndex++; } pNewScript->m_chaList.RemoveAll(); uExecCode = APP_SUCCESS; theApp.m_pConnection->CommitTrans(); break; case RET_CANCEL: uExecCode = APP_CANCLE; break; default: uExecCode = APP_FAIL; break; } delete pNewScript; pOpCreateSptDlg->DestroyWindow(); delete pOpCreateSptDlg; return uExecCode; } catch (_com_error e) { //如果返回的是OK,肯定进行了数据库的相关操作,此时需要进行回滚 if (RET_OK == lRetBackup) { theApp.m_pConnection->RollbackTrans(); } pOpCreateSptDlg->DestroyWindow(); AfxMessageBox(e.Description()); delete pOpCreateSptDlg; throw e; } } void CSptManager::Delete2DSConInDB(DWORD dwSConID) { _RecordsetPtr pRecCha = NULL; _CommandPtr pCmdDel; _CommandPtr pCmdUpd; CString szSql = _T(""); pRecCha.CreateInstance(_uuidof(Recordset)); pCmdDel.CreateInstance(_uuidof(Command)); pCmdDel->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szSql.Empty(); szSql.Format(_T("select ID from channel where SCID = %d"), dwSConID); pRecCha->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecCha->adoEOF) { szSql.Empty(); szSql.Format(_T("delete from script2d where CHID = %u"), (DWORD)pRecCha->GetCollect(_T("ID")).ulVal); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); pRecCha->MoveNext(); } //while ((short)VAL_ZERO == pRecCha->adoEOF) pRecCha->Close(); szSql.Empty(); szSql.Format(_T("delete from channel where SCID = %u"), dwSConID); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); szSql.Empty(); szSql.Format(_T("delete from scon where ID = %u"), dwSConID); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); } UINT CSptManager::CreateCESConInDB(DWORD& dwSConID) { INT_PTR lRet = (long)VAL_ZERO; INT_PTR lRetBackup = lRet; UINT uExecCode = (UINT)VAL_ZERO; m_pNewScript = new CScriptCE((DWORD)VAL_ZERO, theApp.m_pConnection); m_pNewScript->m_iEAmount = 4; m_pNewScript->m_iSType = 0; m_pChannel = new CChannel; m_pChannel->m_iChNumber = (int)VAL_ONE; m_pNewScript->m_chaList.AddTail((void*)m_pChannel); m_pOpCreateCESptDlg = new COpCreateCESptDlg(m_pNewScript, &m_medLinkList, (INT_PTR*)&lRet); if (NULL == m_pOpCreateCESptDlg) { return -1; } m_pOpCreateCESptDlg->Create(IDD_OP_SPT_DB_C, AfxGetMainWnd()); try { this->InitialCreateCESConDlg(m_pOpCreateCESptDlg); m_pOpCreateCESptDlg->ShowWindow(SW_SHOW); lRet = m_pOpCreateCESptDlg->RunModalLoop(MLF_SHOWONIDLE); int iChCount = (int)VAL_ZERO; lRetBackup = lRet; lRetBackup = lRet; switch (lRet) { case RET_OK: { CString szCN = _T(""); CString szSql = _T(""); CString szSName = _T(""); CString szDefiner = _T(""); CString szDeDate = _T(""); CString szScDesc = _T(""); _RecordsetPtr pRecSCID = NULL; _RecordsetPtr pRecCHID = NULL; _CommandPtr pCmdIns = NULL; _CommandPtr pCmdUpd = NULL; int iChCount = (int)VAL_ZERO; int iChIndex = (int)VAL_ZERO; POSITION posCh = NULL; int iRecCount = (int)VAL_ZERO; int iRecIndex = (int)VAL_ZERO; int iTpAmount = (int)VAL_ZERO; int iTsn = (int)VAL_ZERO; // DWORD dwSCID = (DWORD)VAL_ZERO; //DWORD dwSConID = (DWORD)VAL_ZERO; DWORD dwCHID = (DWORD)VAL_ZERO; INT_PTR lRet = (long)VAL_ZERO; INT_PTR lRetBackup = lRet; CSptRecord* pSptRecord = NULL; UINT uExecCode = (UINT)VAL_ZERO; try { theApp.m_pConnection->BeginTrans(); pRecSCID.CreateInstance(_uuidof(Recordset)); pRecCHID.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szCN.Empty(); szCN = m_guCodeCreator.GenerateGUIDCode(); szSName.Empty(); ((CEdit*)m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_SNAME))->GetWindowText(szSName); szSName.TrimLeft(); szSName.TrimRight(); szDefiner.Empty(); //CEdit* p = ((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_DEFINER)); CEdit *p = m_pOpCreateCESptDlg->GetEdDefiner(); p->GetWindowText(szDefiner); //((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_DEFINER))->GetWindowText(szDefiner); szScDesc.Empty(); p = m_pOpCreateCESptDlg->GetEdScDesc(); p->GetWindowText(szScDesc); //((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_SCDESC))->GetWindowText(szScDesc); m_pNewScript->m_iSType = 0; iChCount = m_pNewScript->m_chaList.GetCount(); /////////////////////////////////检测是否有相同的名称的脚本///////////////////////////////////////// szSql.Empty(); szSql.Format(_T("select * from scon where Sname = '%s'"), szSName); pRecSCID->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("脚本已存在.")); else MessageBoxEx(NULL, _T("Script has been alreay exists."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); pRecSCID->Close(); theApp.m_pConnection->RollbackTrans(); m_pNewScript->m_chaList.RemoveAll(); if (NULL != m_pNewScript) { delete m_pNewScript; m_pNewScript = NULL; } m_pOpCreateCESptDlg->DestroyWindow(); if (NULL != m_pOpCreateCESptDlg) { delete m_pOpCreateCESptDlg; m_pOpCreateCESptDlg = NULL; } return APP_FAIL; } pRecSCID->Close(); ////////////////////////////////////////////////////////////////////////// szSql.Empty(); szSql.Format(_T("insert into scon(CN,Sname,Stype,Eamount,CHamount,TPamount,definer,DEdate,SCdesc,Rect,RectLoc,PoleDistance,PoleStep) " "values('%s','%s',%d,%d,%d,%d,'%s',#%s#,'%s','%s','%s','%s','%s')"), szCN, szSName, m_pNewScript->m_iSType, m_pNewScript->m_iEAmount, iChCount, iTpAmount, szDefiner, m_pOpCreateCESptDlg->m_edDeDate.FormatGmt("%Y-%m-%d"), szScDesc, "0,0,0,0", "0", "0", "0"); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecSCID->Open(_T("select max(ID) as ID from scon"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { dwSConID = (DWORD)pRecSCID->GetCollect(_T("ID")).ulVal; } pRecSCID->Close(); posCh = NULL; iChIndex = (int)VAL_ZERO; while (iChIndex < iChCount) { posCh = m_pNewScript->m_chaList.FindIndex(iChIndex); m_pChannel = (CChannel*)m_pNewScript->m_chaList.GetAt(posCh); szSql.Empty(); szSql.Format(_T("insert into channel(SCID,CHnumber,AR) values(%u,%d,%d) "), dwSConID, m_pChannel->m_iChNumber, m_pChannel->m_pMedium->m_iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecCHID->Open(_T("select max(ID) as ID from channel"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCHID->GetRecordCount()) { dwCHID = (DWORD)pRecCHID->GetCollect(_T("ID")).ulVal; } pRecCHID->Close(); iRecIndex = (int)VAL_ZERO; iRecCount = (int)VAL_ZERO; iTpAmount = (int)VAL_ZERO; iTpAmount = m_pChannel->m_sptRecArray.GetSize(); while (iRecIndex < iTpAmount) { pSptRecord = (CSptRecord*)m_pChannel->m_sptRecArray.GetAt(iRecIndex); szSql.Empty(); szSql.Format(_T("insert into script1d(CHID,TSN,a,b,x,y,K,N) values(%u,%d,%.2f,%.2f,%.2f,%.2f,%f,%d) "), dwCHID, pSptRecord->m_iTsn, //如是多通道,则此处需修改 pSptRecord->m_fA, pSptRecord->m_fB, pSptRecord->m_fX, pSptRecord->m_fY, pSptRecord->m_fK, pSptRecord->m_iN); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); delete pSptRecord; pSptRecord = NULL; iRecIndex++; } m_pChannel->m_sptRecArray.RemoveAll(); szSql.Empty(); szSql.Format(_T("update scon set TPamount = %d where ID = %d"), iTpAmount, dwSConID); pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Execute(NULL, NULL, adCmdText); if (NULL != m_pChannel) { delete m_pChannel; m_pChannel = NULL; } iChIndex++; } m_pNewScript->m_chaList.RemoveAll(); uExecCode = APP_SUCCESS; theApp.m_pConnection->CommitTrans(); } catch (_com_error e) { if (RET_OK == lRetBackup) { theApp.m_pConnection->RollbackTrans(); } m_pOpCreateCESptDlg->DestroyWindow(); delete m_pOpCreateCESptDlg; AfxMessageBox(e.Description()); throw e; } } break; case RET_CANCEL: uExecCode = APP_CANCLE; break; default: uExecCode = APP_FAIL; break; } //HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SaveTestPointToDBThread, this, 0, NULL); //WaitForSingleObject(handle, INFINITE);//added 20210821 //CloseHandle(handle); if (NULL != m_pNewScript) { delete m_pNewScript; m_pNewScript = NULL; } m_pOpCreateCESptDlg->DestroyWindow(); if (NULL != m_pOpCreateCESptDlg) { delete m_pOpCreateCESptDlg; m_pOpCreateCESptDlg = NULL; } return uExecCode; } catch (_com_error e) { if (RET_OK == lRetBackup) { theApp.m_pConnection->RollbackTrans(); } m_pOpCreateCESptDlg->DestroyWindow(); if (NULL != m_pOpCreateCESptDlg) { delete m_pOpCreateCESptDlg; m_pOpCreateCESptDlg = NULL; } AfxMessageBox(e.Description()); throw e; } } //保存脚本测点到数据库线程 UINT CSptManager::SaveTestPointToDBThread(LPVOID lPrama) { CSptManager* pThis = (CSptManager*)lPrama; if (NULL == pThis) { return -1; } CString szCN = _T(""); CString szSql = _T(""); CString szSName = _T(""); CString szDefiner = _T(""); CString szDeDate = _T(""); CString szScDesc = _T(""); _RecordsetPtr pRecSCID = NULL; _RecordsetPtr pRecCHID = NULL; _CommandPtr pCmdIns = NULL; _CommandPtr pCmdUpd = NULL; int iChCount = (int)VAL_ZERO; int iChIndex = (int)VAL_ZERO; POSITION posCh = NULL; int iRecCount = (int)VAL_ZERO; int iRecIndex = (int)VAL_ZERO; int iTpAmount = (int)VAL_ZERO; int iTsn = (int)VAL_ZERO; // DWORD dwSCID = (DWORD)VAL_ZERO; DWORD dwSConID = (DWORD)VAL_ZERO; DWORD dwCHID = (DWORD)VAL_ZERO; INT_PTR lRet = (long)VAL_ZERO; INT_PTR lRetBackup = lRet; CSptRecord* pSptRecord = NULL; UINT uExecCode = (UINT)VAL_ZERO; try { theApp.m_pConnection->BeginTrans(); pRecSCID.CreateInstance(_uuidof(Recordset)); pRecCHID.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szCN.Empty(); szCN = pThis->m_guCodeCreator.GenerateGUIDCode(); szSName.Empty(); ((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_SNAME))->GetWindowText(szSName); szSName.TrimLeft(); szSName.TrimRight(); szDefiner.Empty(); //CEdit* p = ((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_DEFINER)); CEdit *p = pThis->m_pOpCreateCESptDlg->GetEdDefiner(); p->GetWindowText(szDefiner); //((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_DEFINER))->GetWindowText(szDefiner); szScDesc.Empty(); p = pThis->m_pOpCreateCESptDlg->GetEdScDesc(); p->GetWindowText(szScDesc); //((CEdit*)pThis->m_pOpCreateCESptDlg->GetDlgItem(IDC_SPT_SCDESC))->GetWindowText(szScDesc); pThis->m_pNewScript->m_iSType = 0; iChCount = pThis->m_pNewScript->m_chaList.GetCount(); /////////////////////////////////检测是否有相同的名称的脚本///////////////////////////////////////// szSql.Empty(); szSql.Format(_T("select * from scon where Sname = '%s'"), szSName); pRecSCID->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("脚本已存在.")); else MessageBoxEx(NULL, _T("Script has been alreay exists."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); pRecSCID->Close(); theApp.m_pConnection->RollbackTrans(); pThis->m_pNewScript->m_chaList.RemoveAll(); if (NULL != pThis->m_pNewScript) { delete pThis->m_pNewScript; pThis->m_pNewScript = NULL; } pThis->m_pOpCreateCESptDlg->DestroyWindow(); if (NULL != pThis->m_pOpCreateCESptDlg) { delete pThis->m_pOpCreateCESptDlg; pThis->m_pOpCreateCESptDlg = NULL; } return APP_FAIL; } pRecSCID->Close(); ////////////////////////////////////////////////////////////////////////// szSql.Empty(); szSql.Format(_T("insert into scon(CN,Sname,Stype,Eamount,CHamount,TPamount,definer,DEdate,SCdesc,Rect,RectLoc,PoleDistance,PoleStep) " "values('%s','%s',%d,%d,%d,%d,'%s',#%s#,'%s','%s','%s','%s','%s')"), szCN, szSName, pThis->m_pNewScript->m_iSType, pThis->m_pNewScript->m_iEAmount, iChCount, iTpAmount, szDefiner, pThis->m_pOpCreateCESptDlg->m_edDeDate.FormatGmt("%Y-%m-%d"), szScDesc, "0,0,0,0", "0", "0", "0"); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecSCID->Open(_T("select max(ID) as ID from scon"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { dwSConID = (DWORD)pRecSCID->GetCollect(_T("ID")).ulVal; } pRecSCID->Close(); posCh = NULL; iChIndex = (int)VAL_ZERO; while (iChIndex < iChCount) { posCh = pThis->m_pNewScript->m_chaList.FindIndex(iChIndex); pThis->m_pChannel = (CChannel*)pThis->m_pNewScript->m_chaList.GetAt(posCh); szSql.Empty(); szSql.Format(_T("insert into channel(SCID,CHnumber,AR) values(%u,%d,%d) "), dwSConID, pThis->m_pChannel->m_iChNumber, pThis->m_pChannel->m_pMedium->m_iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecCHID->Open(_T("select max(ID) as ID from channel"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCHID->GetRecordCount()) { dwCHID = (DWORD)pRecCHID->GetCollect(_T("ID")).ulVal; } pRecCHID->Close(); iRecIndex = (int)VAL_ZERO; iRecCount = (int)VAL_ZERO; iTpAmount = (int)VAL_ZERO; iTpAmount = pThis->m_pChannel->m_sptRecArray.GetSize(); while (iRecIndex < iTpAmount) { pSptRecord = (CSptRecord*)pThis->m_pChannel->m_sptRecArray.GetAt(iRecIndex); szSql.Empty(); szSql.Format(_T("insert into script1d(CHID,TSN,a,b,x,y,K,N) values(%u,%d,%.2f,%.2f,%.2f,%.2f,%f,%d) "), dwCHID, pSptRecord->m_iTsn, //如是多通道,则此处需修改 pSptRecord->m_fA, pSptRecord->m_fB, pSptRecord->m_fX, pSptRecord->m_fY, pSptRecord->m_fK, pSptRecord->m_iN); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); delete pSptRecord; pSptRecord = NULL; iRecIndex++; } pThis->m_pChannel->m_sptRecArray.RemoveAll(); szSql.Empty(); szSql.Format(_T("update scon set TPamount = %d where ID = %d"), iTpAmount, dwSConID); pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Execute(NULL, NULL, adCmdText); if (NULL != pThis->m_pChannel) { delete pThis->m_pChannel; pThis->m_pChannel = NULL; } iChIndex++; } pThis->m_pNewScript->m_chaList.RemoveAll(); uExecCode = APP_SUCCESS; theApp.m_pConnection->CommitTrans(); } catch (_com_error e) { if (RET_OK == lRetBackup) { theApp.m_pConnection->RollbackTrans(); } pThis->m_pOpCreateCESptDlg->DestroyWindow(); delete pThis->m_pOpCreateCESptDlg; AfxMessageBox(e.Description()); throw e; } } void CSptManager::DeleteCESConInDB(DWORD dwSConID) { _RecordsetPtr pRecCha = NULL; _CommandPtr pCmdDel; _CommandPtr pCmdUpd; CString szSql = _T(""); pRecCha.CreateInstance(_uuidof(Recordset)); pCmdDel.CreateInstance(_uuidof(Command)); pCmdDel->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szSql.Empty(); szSql.Format(_T("select ID from channel where SCID = %d"), dwSConID); pRecCha->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecCha->adoEOF) { szSql.Empty(); szSql.Format(_T("delete from script1d where CHID = %u"), (DWORD)pRecCha->GetCollect(_T("ID")).ulVal); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); pRecCha->MoveNext(); } //while ((short)VAL_ZERO == pRecCha->adoEOF) pRecCha->Close(); szSql.Empty(); szSql.Format(_T("delete from channel where SCID = %u"), dwSConID); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); szSql.Empty(); szSql.Format(_T("delete from scon where ID = %u"), dwSConID); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); } void CSptManager::Initial2DSptList(CListCtrl &sptList) { _RecordsetPtr pRecSptList = NULL; _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecMed = NULL; DWORD dwSptHandle = (DWORD)VAL_ZERO; int iIndex = (int)VAL_ZERO; CString szSql; CString szLabel; pRecMed.CreateInstance(_uuidof(Recordset)); pRecSptList.CreateInstance(_uuidof(Recordset)); pRecSCon.CreateInstance(_uuidof(Recordset)); pRecSptList->Open(_T("select ID,CN,Sname,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon where Stype = 1"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecSptList->adoEOF) { sptList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CN"))); sptList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Sname"))); sptList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Eamount"))); sptList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("CHamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CHamount"))); sptList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TPamount"))); sptList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("definer"))); sptList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("DEdate"))); sptList.SetItemText(iIndex, 7, pRecSptList->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("SCdesc"))); dwSptHandle = m_handleProcessor.GenerateHandle((DWORD)pRecSptList->GetCollect(_T("ID")).ulVal, PZ_STYLE_SCON_2D); sptList.SetItemData(iIndex, dwSptHandle); iIndex++; pRecSptList->MoveNext(); } //while (VAL_ZERO == pRecProID->adoEOF) pRecSptList->Close(); sptList.SetHotItem((int)VAL_ZERO); } void CSptManager::InitialSptList(CListCtrl &sptList) { _RecordsetPtr pRecSptList = NULL; _RecordsetPtr pRecCm = NULL; DWORD dwSptHandle = (DWORD)VAL_ZERO; int iIndex = (int)VAL_ZERO; CString szSql = _T(""); CString szLabel = _T(""); sptList.DeleteAllItems(); pRecSptList.CreateInstance(_uuidof(Recordset)); pRecCm.CreateInstance(_uuidof(Recordset)); pRecSptList->Open(_T("select ID,CN,Sname,Stype,Eamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecSptList->adoEOF) { //注释原因:去掉CN那一列,直接显示名字 // sptList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CN"))); // sptList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Sname"))); //新增 sptList.InsertItem(iIndex, pRecSptList->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Sname"))); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Stype' and Lang = %d and Cvalue = %s"), g_iLanguage, pRecSptList->GetCollect(_T("Stype")).vt == VT_NULL ? _T("-1") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Stype"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { sptList.SetItemText(iIndex, 1, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } pRecCm->Close(); sptList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Eamount"))); sptList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TPamount"))); sptList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("definer"))); sptList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("DEdate"))); sptList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("SCdesc"))); sptList.SetItemData(iIndex, (DWORD)pRecSptList->GetCollect(_T("ID")).ulVal); iIndex++; pRecSptList->MoveNext(); } pRecSptList->Close(); sptList.SetHotItem((int)VAL_ZERO); } void CSptManager::InitialCreateSConDlg(COpCreateSptDlg* const pOpCreateSptDlg) { _RecordsetPtr pRecAR = NULL; CString szSql = _T(""); CComboBox * pCbAR = NULL; pCbAR = (CComboBox*)pOpCreateSptDlg->GetDlgItem(IDC_SPT_AR); pRecAR.CreateInstance(_uuidof(Recordset)); //获取配置文件 g_iLanguage = GetPrivateProfileInt(_T("UI"), _T("Language"), 0, _T("./config.ini")); szSql.Empty(); szSql.Format(_T("select AR,MEname from medium where AR in (%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d) and LANG = %d"), \ AR_WENNER_ALPHA, AR_WENNER_BETA, AR_WENNER_GAMMA, AR_POLE_DIPOLE_AMN, AR_DIPOLE_POLE_MNB,AR_POLE_POLE_AM,\ AR_DIP_DIP, AR_SCHLUMBERGER, AR_CROSS_HOLE_TYPE, AR_WENNER_SCH_BASIC, AR_WENNER_SCHLUMBERGER, AR_EDGE_GARDIENT, AR_BIPOLE_HOLE_SPT, AR_DOUBLE_SIZE_3P, AR_STRONG_GRADIENT,AR_S3P_MEDIUM, g_iLanguage); //louis add 50 AR_WENNER_SCH_BASIC pRecAR->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecAR->adoEOF) { pCbAR->AddString((LPCTSTR)(_bstr_t)pRecAR->GetCollect(_T("MEname"))); pCbAR->SetItemData(pCbAR->GetCount()-1, pRecAR->GetCollect(_T("AR")).iVal); pRecAR->MoveNext(); } //最后放入自定义装置 if (LANG_ZHCN == g_iLanguage) { pCbAR->AddString(_T("自定义")); pCbAR->SetItemData(pCbAR->GetCount()-1, 40); } else { pCbAR->AddString(_T("Custom")); pCbAR->SetItemData(pCbAR->GetCount()-1, 40); } pRecAR->Close(); } void CSptManager::InitialCreateCESConDlg(COpCreateCESptDlg* const pOpCreateCESptDlg) { } void CSptManager::InitialCreate3DSConDlg(COpCreate3DSptDlg* const pOpCreate3DSptDlg) { } void CSptManager::InitialMedLinkList() { CMedium* pMed = NULL; DWORD dwHandle = (DWORD)VAL_ZERO; int iAR = (int)VAL_ZERO; _RecordsetPtr pRecAR = NULL; m_medLinkList.DeleteAll(); pRecAR.CreateInstance(_uuidof(Recordset)); try { pRecAR->Open(_T("select distinct AR as AR from medium order by AR"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecAR->adoEOF) { pMed = NULL; iAR = pRecAR->GetCollect(_T("AR")).iVal; switch (iAR) { case 1: pMed = new CMediumA(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 2: pMed = new CMediumB(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 3: pMed = new CMediumC(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_POLE_DIPOLE_AMN: pMed = new CMediumD(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_DIPOLE_POLE_MNB: pMed = new CMediumE(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 6: pMed = new CMediumAM(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 7: pMed = new CMediumAMN(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 8: break; case 9: pMed = new CMediumZC(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 10: break; case 11: pMed = new CMediumK(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 12: break; case 13: break; case 14: break; case 15: break; case AR_CROSS_HOLE_TYPE: pMed = new CMediumLogging(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_CROSS_HOLE_GEOMATIVE: { pMed = new CMediumCrossHoleGeomative(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } } break; case AR_CROSS_HOLE_GEOMATIVE_AM: { pMed = new CMediumCrossHoleGeomativeAM(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } } break; case 17: pMed = new CMediumQ(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 18: pMed = new CMediumR(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 19: pMed = new CMediumS(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 20: pMed = new CMediumT(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 21: pMed = new CMediumU(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 22: pMed = new CMediumV(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 23: pMed = new CMediumW(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 24: pMed = new CMediumX(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 25: pMed = new CMediumY(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 26: pMed = new CMediumZ(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 27: pMed = new CMediumZA(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 28: pMed = new CMediumZB(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 29: pMed = new CMediumMidGardientScan(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; //一维的联合剖面,28-32之间预留给三维 case 33: pMed = new CMediumUnityProfile(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_WENNER_SCH_BASIC://louis added pMed = new CMediumBasicWenAndSch(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 39: pMed = new CMediumStrongWenAndSch(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_CUSTOM_2D_TYPE: pMed = new CMediumCustom2D(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 41: pMed = new CMediumEdgeGradient(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_BIPOLE_HOLE_SPT: pMed = new CMediumBipoleUpHole(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case 43: pMed = new CMediumTwoSideAMN(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } break; case AR_STRONG_GRADIENT: { pMed = new CMediumStrongGradient(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } } break; case AR_S3P_MEDIUM: { pMed = new CMediumS3P(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } } break; case AR_LAND_FILL_ONE: { pMed = new CMediumLandfillDiagonally(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } } break; case AR_LAND_FILL_TWO: { pMed = new CMediumLandfillAdjacent(iAR); if (NULL != pMed) { dwHandle = m_handleProcessor.GenerateHandle(iAR, PZ_STYLE_MED_DEF); m_medLinkList.Add(dwHandle, pMed); } } break; default: break; } pRecAR->MoveNext(); } pRecAR->Close(); } catch (_com_error e) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); CString strInfo = _T(""); if (LANG_ZHCN == g_iUILanguage) { strInfo.Format(_T("初始装置链接失败!errormsg = %s, descmsg = %s"), (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description()); AfxMessageBox(strInfo); } else { strInfo.Format(_T("Initial Medium Link failed!errormsg = %s, descmsg = %s"), (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description()); MessageBoxEx(NULL, strInfo, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return ; } } BOOL CSptManager::InitialSptListForDev(CListCtrl &sptList, CString szDeSN) { _RecordsetPtr pRecSpt = NULL; _RecordsetPtr pRecCm = NULL; CString szSql = _T(""); CString szLabel = _T(""); int iIndex = (int)VAL_ZERO; BOOL bIsSyned = FALSE; sptList.DeleteAllItems(); pRecSpt.CreateInstance(_uuidof(Recordset)); pRecCm.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select IsSyned,SCCN,SptName,Stype,SptFileName from dev_syn_spt where DESN = '%s'"), szDeSN); pRecSpt->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); // while ((short)VAL_ZERO == pRecSpt->adoEOF) { CString strSptFileName = (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("SptName")); //如果发现是标准脚本则不显示 if (-1 != strSptFileName.Find(_T("standard script"))) { pRecSpt->MoveNext(); continue; } if (-1 == pRecSpt->GetCollect(_T("IsSyned")).boolVal) { szLabel.Empty(); szLabel.LoadString(IDS_YES); bIsSyned = TRUE; } else { szLabel.Empty(); szLabel.LoadString(IDS_NO); bIsSyned = FALSE; } sptList.InsertItem(iIndex, szLabel); //sptList.SetItemText(iIndex, 1, (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("SCCN"))); sptList.SetItemText(iIndex, 1, (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("SptName"))); szSql.Empty(); szSql.Format(_T("select Clabel from cm where Cname = 'Stype' and Lang = %d and Cvalue = %s"), g_iLanguage, (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("Stype"))); pRecCm->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCm->GetRecordCount()) { sptList.SetItemText(iIndex, 2, (LPCTSTR)(_bstr_t)pRecCm->GetCollect(_T("Clabel"))); } pRecCm->Close(); sptList.SetItemText(iIndex, 3, (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("SptFileName"))); sptList.SetItemData(iIndex, bIsSyned); pRecSpt->MoveNext(); iIndex++; } pRecSpt->Close(); return TRUE; } void CSptManager::InitialCESptListForSyn(CListCtrl &sptList, CString szDeSN) { _RecordsetPtr pRecSptList = NULL; _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecMed = NULL; DWORD dwSptHandle = (DWORD)VAL_ZERO; int iIndex = (int)VAL_ZERO; CString szSql; CString szLabel; pRecMed.CreateInstance(_uuidof(Recordset)); pRecSptList.CreateInstance(_uuidof(Recordset)); pRecSCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select ID,CN,Sname,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon where CN in (select SCCN from dev_syn_spt where DESN = '%s' and Stype = 0) " "and Stype = 0"), szDeSN); pRecSptList->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecSptList->adoEOF) { sptList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CN"))); sptList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Sname"))); sptList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Eamount"))); sptList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TPamount"))); sptList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("definer"))); sptList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("DEdate"))); sptList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("SCdesc"))); dwSptHandle = m_handleProcessor.GenerateHandle((DWORD)pRecSptList->GetCollect(_T("ID")).ulVal, PZ_STYLE_SCON_2D); sptList.SetItemData(iIndex, dwSptHandle); iIndex++; pRecSptList->MoveNext(); } //while (VAL_ZERO == pRecProID->adoEOF) pRecSptList->Close(); sptList.SetHotItem((int)VAL_ZERO); } void CSptManager::Initial2DSptListForSyn(CListCtrl &sptList, CString szDeSN) { _RecordsetPtr pRecSptList = NULL; _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecMed = NULL; DWORD dwSptHandle = (DWORD)VAL_ZERO; int iIndex = (int)VAL_ZERO; CString szSql; CString szLabel; pRecMed.CreateInstance(_uuidof(Recordset)); pRecSptList.CreateInstance(_uuidof(Recordset)); pRecSCon.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format(_T("select ID,CN,Sname,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon where CN in (select SCCN from dev_syn_spt where DESN = '%s' and Stype = 1) " "and Stype = 1"), szDeSN); pRecSptList->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecSptList->adoEOF) { sptList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CN"))); sptList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Sname"))); sptList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Eamount"))); sptList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("CHamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CHamount"))); sptList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TPamount"))); sptList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("definer"))); sptList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("DEdate"))); sptList.SetItemText(iIndex, 7, pRecSptList->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("SCdesc"))); dwSptHandle = m_handleProcessor.GenerateHandle((DWORD)pRecSptList->GetCollect(_T("ID")).ulVal, PZ_STYLE_SCON_2D); sptList.SetItemData(iIndex, dwSptHandle); iIndex++; pRecSptList->MoveNext(); } //while (VAL_ZERO == pRecProID->adoEOF) pRecSptList->Close(); sptList.SetHotItem((int)VAL_ZERO); } UINT CSptManager::PutScriptToDev(DWORD dwSCID, CDevice* const pDev) { int iTsn = 0; CString szOrder = _T(""); CString szResBuff = _T(""); CString szRes = _T(""); int iPollingTime = (int)VAL_ZERO; _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecCha = NULL; _RecordsetPtr pRecSptTsn = NULL; _RecordsetPtr pRecSptChn = NULL; _RecordsetPtr pRecSynSpt = NULL; _RecordsetPtr pRecChannel = NULL; _CommandPtr pCmdIns = NULL; CString szSql = _T(""); CString szSCCN = _T(""); CString szSCName = _T(""); CString szSType = _T(""); CString szMedium = _T(""); CString szHostFilePath = _T(""); CString szFilePath = _T(""); CString szFileName = _T(""); CString szFile = _T(""); // CString szRect = _T(""); // CString szRectLoc = _T(""); // CString szPoleDistance = _T(""); // CString szPoleStep = _T(""); char aResBuff[2048] = {0}; int iResSize = (int)VAL_ZERO; int iSType = (int)VAL_ZERO; int iAR = (int)VAL_ZERO; UINT uExecCode = (UINT)VAL_ZERO; DWORD dwPrID = (DWORD)VAL_ZERO; CMarkup* pXML = new CMarkup; pRecSCon.CreateInstance(_uuidof(Recordset)); pRecSynSpt.CreateInstance(_uuidof(Recordset)); pRecCha.CreateInstance(_uuidof(Recordset)); pRecSptTsn.CreateInstance(_uuidof(Recordset)); pRecSptChn.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pRecChannel.CreateInstance(_uuidof(Recordset)); //取得CHANNEL表中对应脚本的装置类型 szSql.Empty(); szSql.Format(_T("select AR from channel where SCID = %u"), dwSCID); pRecChannel->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecChannel->GetRecordCount()) { szMedium = (LPCTSTR)(_bstr_t)pRecChannel->GetCollect(_T("AR")); } pRecChannel->Close(); szSql.Empty(); szSql.Format(_T("select CN,Sname,Stype,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc, Rect, RectLoc, PoleDistance, PoleStep,AR from scon,channel where channel.SCID=scon.ID and scon.ID = %u"), dwSCID); pRecSCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCon->GetRecordCount()) { szSType = (CString)(LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Stype")); szSCCN = (CString)(LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN")); szSCName = (CString)(LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Sname")); iSType = pRecSCon->GetCollect(_T("Stype")).iVal; iAR = pRecSCon->GetCollect(_T("AR")).iVal; switch (iSType) { case 0: szFileName = _T("VES")+(CString)(LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN"))+_T(".scr"); break; case 1: szFileName = _T("ERI")+(CString)(LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN"))+_T(".scr"); break; case 2: szFileName = _T("ERT")+(CString)(LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN"))+_T(".scr"); break; default: break; } szSql.Empty(); szSql.Format(_T("select * from dev_syn_spt where DESN = '%s' and SCCN = '%s'"), pDev->m_szDevSN, szSCCN); pRecSynSpt->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO == pRecSynSpt->GetRecordCount()) { if (pRecSCon->GetCollect(_T("TPamount")).iVal > 5000) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("由于测试点数量较多,操作需要一些时间,请等待且不要关闭Geomative Studio.")); else MessageBoxEx(NULL, _T("The test point is too much, so it may use several minutes to response, don't close the Geomative Studio."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } uExecCode = this->AddScriptInDev(szFileName.Mid(0, 35),szSCName,szMedium, pDev); if (APP_SUCCESS == uExecCode) { szFilePath.Empty(); szFilePath.GetBufferSetLength(256); ::GetCurrentDirectory(szFilePath.GetLength(), szFilePath.GetBuffer(szFilePath.GetLength())); szFilePath.ReleaseBuffer(); szFilePath = szFilePath + _T("\\CACHE\\scripts\\"); if (!PathFileExistsA(szFilePath)) { ::CreateDirectoryA(szFilePath, nullptr); } szFile = szFilePath + szFileName; pXML->SetDoc("\r\n"); pXML->AddElem("script"); pXML->AddChildElem(_T("cn"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN"))); pXML->AddChildElem(_T("name"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Sname"))); pXML->AddChildElem(_T("type"), pRecSCon->GetCollect(_T("Stype")).iVal); pXML->AddChildElem(_T("description"), pRecSCon->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("SCdesc"))); pXML->AddChildElem(_T("definer"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("definer"))); pXML->AddChildElem(_T("date"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("DEdate"))); switch (iSType) { case 0: //1D,2D脚本rect,rect_loc,pole_distance,pole_step三个字段为空 pXML->AddChildElem(_T("rect"), _T("")); pXML->AddChildElem(_T("rect_loc"), _T("")); pXML->AddChildElem(_T("pole_distance"), _T("")); pXML->AddChildElem(_T("pole_step"), _T("")); pXML->AddChildElem(_T("pole_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Eamount"))); pXML->AddChildElem(_T("point_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("TPamount"))); pXML->AddChildElem(_T("pole_start"), "1"); break; case 1: pXML->AddChildElem(_T("rect"), _T("")); pXML->AddChildElem(_T("rect_loc"), _T("")); //这里由于2D中可能涉及到跨井钻孔,而跨井的距离系数存储在pole_step中,所以需要将PoleDistance的值写入 pXML->AddChildElem(_T("pole_distance"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("PoleDistance"))); pXML->AddChildElem(_T("pole_step"), _T("")); pXML->AddChildElem(_T("pole_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Eamount"))); pXML->AddChildElem(_T("point_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("TPamount"))); pXML->AddChildElem(_T("pole_start"), "1"); break; case 2: pXML->AddChildElem(_T("rect"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Rect"))); pXML->AddChildElem(_T("rect_loc"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("RectLoc"))); pXML->AddChildElem(_T("pole_distance"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("PoleDistance"))); pXML->AddChildElem(_T("pole_step"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("PoleStep"))); if (AR_LAND_FILL_ONE == iAR) { //填埋场装置1,修改电极总数为电极总数+1 int iEamount = pRecSCon->GetCollect(_T("Eamount")).iVal; CString strText; strText.Format(_T("%d"), iEamount+1); pXML->AddChildElem(_T("pole_count"), strText); } else { pXML->AddChildElem(_T("pole_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Eamount"))); } pXML->AddChildElem(_T("point_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("TPamount"))); pXML->AddChildElem(_T("pole_start"), "1"); break; } pXML->AddChildElem(_T("channel_count"), (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CHamount"))); pXML->AddChildElem(_T("channel")); pXML->IntoElem(); szSql.Empty(); szSql.Format(_T("select CHnumber&':'&AR as CA,MaxLayer from channel where SCID = %d order by CHnumber"), dwSCID); pRecCha->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecCha->adoEOF) { pXML->AddChildElem(_T("ar"), (LPCTSTR)(_bstr_t)pRecCha->GetCollect(_T("CA"))); //如果是二维信息的话,则添加通道的最大层数信息 if (1 == iSType) { int iMinLayer =0, iMaxLayer = 0; szSql.Empty(); szSql.Format(_T("select min(Layer) as min_layer, max(Layer) as max_layer from script2d where CHID in (select ID from channel where SCID = %d)"), dwSCID);; pRecSptTsn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if (pRecSptTsn->GetRecordCount() > 0) { iMaxLayer = atoi((LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("max_layer"))); iMinLayer = atoi((LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("min_layer"))); pXML->AddChildAttrib(_T("max_layer"), iMaxLayer); pXML->AddChildAttrib(_T("min_layer"), iMinLayer); } pRecSptTsn->Close(); } pRecCha->MoveNext(); } pRecCha->Close(); pXML->OutOfElem(); //跨孔(Geomative)装置新增一个字段电极坐标文件名,附加坐标文件 if (AR_CROSS_HOLE_GEOMATIVE == atoi(szMedium) || AR_CROSS_HOLE_GEOMATIVE_AM == atoi(szMedium)) { CString strFileName; CTime t = CTime::GetCurrentTime(); strFileName.Format(_T("%s%s.log"), szSCName, t.Format("%Y%m%d%H%M%S")); pXML->AddChildElem(_T("C_H_Script"), strFileName); CString strTempPath, strDestPath; strTempPath.Format(_T("%s\\%s"), szFilePath, strFileName); strDestPath.Format(_T("%sSD\\scripts\\%s"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), strFileName); CFile cf; BOOL bRes = false; CString strRawContent; bRes = cf.Open(strTempPath, CFile::modeCreate | CFile::modeReadWrite); if (bRes) { szSql.Empty(); szSql.Format(_T("select ElectrodeID,X,Y,Z from TCoordinatesInfo where ScriptCN='%s'"), szSCCN); pRecSptTsn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptTsn->adoEOF) { //Addr,x,y,z strRawContent.Empty(); strRawContent.Format(_T("%s,%s,%s,%s\r\n"), \ (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("ElectrodeID")), \ (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("X")), \ (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("Y")), \ (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("Z"))); cf.Write(strRawContent, strRawContent.GetLength()); pRecSptTsn->MoveNext(); } pRecSptTsn->Close(); cf.Close(); BYTE bTimes = 0; bool bRes = false; do { //覆盖已有文件 bRes = CopyFile(strTempPath, strDestPath, FALSE); if (false == bRes) { CFileOperTools::GetInstance()->WriteComLog(_T("zm:CSptManager::PutScriptToDev copy file failed!")); Sleep(5000); } bTimes++; } while (!bRes && (bTimes <= 3)); if (bRes == false && bTimes > 3) { CFileOperTools::GetInstance()->WriteComLog(_T("zm:CSptManager::PutScriptToDev copy file Failed!")); return bRes; } bTimes = 0; do { bRes = DeleteFile(strTempPath); if (false == bRes) { CFileOperTools::GetInstance()->WriteComLog(_T("zm:CSptManager::PutScriptToDev delete file failed!")); Sleep(5000); } bTimes++; } while (!bRes && (bTimes <= 3)); if (bRes == false && bTimes > 3) { CFileOperTools::GetInstance()->WriteComLog(_T("zm:CSptManager::PutScriptToDev delete file Failed!")); } } } pXML->AddChildElem(_T("layout")); pXML->IntoElem(); CString strFullSptCN = _T(""); switch (iSType) { case 0: szSql.Empty(); szSql.Format(_T("select count(*) as CH, TSN, max(a) as a, max(b) as b, max(N) as N from script1d where CHID in (select ID from channel where SCID = %d) group by TSN order by TSN"), dwSCID); pRecSptTsn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptTsn->adoEOF) { iTsn = pRecSptTsn->GetCollect(_T("TSN")).lVal; pXML->AddChildElem(_T("array")); pXML->AddChildAttrib(_T("tsn"), iTsn); pXML->AddChildAttrib(_T("ch"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("CH"))); pXML->AddChildAttrib(_T("c1"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("a"))); pXML->AddChildAttrib(_T("c2"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("b"))); pXML->AddChildAttrib(_T("n"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("N"))); pXML->IntoElem(); szSql.Empty(); szSql.Format(_T("select CHnumber,x&','&y as xy,K from channel a,script1d b where a.ID = b.CHID and a.SCID = %d and b.TSN = %d"), dwSCID, iTsn); pRecSptChn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptChn->adoEOF) { pXML->AddChildElem(_T("ch"), (LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("xy"))); pXML->AddChildAttrib(_T("n"), pRecSptChn->GetCollect(_T("CHnumber")).iVal); pXML->AddChildAttrib(_T("ks"), (LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("K"))); pRecSptChn->MoveNext(); } pRecSptChn->Close(); pXML->OutOfElem(); pRecSptTsn->MoveNext(); } pRecSptTsn->Close(); pXML->OutOfElem(); DeleteFile(szFile); pXML->Save(szFile); szOrder.Empty(); szOrder.Format(_T("script_add(\"VES%s\",\"%s\",\"%s\")\r\n"), szSCCN, szSCName,szMedium); strFullSptCN.Empty(); strFullSptCN.Format(_T("VES%s"),szSCCN); break; case 1: szSql.Empty(); szSql.Format(_T("select count(*) as CH, TSN, max(C1) as C1, max(C2) as C2, max(N) as N from script2d where CHID in (select ID from channel where SCID = %d) group by TSN order by TSN"), dwSCID); pRecSptTsn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptTsn->adoEOF) { iTsn = pRecSptTsn->GetCollect(_T("TSN")).lVal; pXML->AddChildElem(_T("array")); pXML->AddChildAttrib(_T("tsn"), iTsn); pXML->AddChildAttrib(_T("ch"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("CH"))); pXML->AddChildAttrib(_T("c1"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("C1"))); pXML->AddChildAttrib(_T("c2"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("C2"))); pXML->AddChildAttrib(_T("n"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("N"))); pXML->IntoElem(); szSql.Empty(); szSql.Format(_T("select CHnumber,P1&','&P2 as P1P2,K,Layer,XPos from channel a,script2d b where a.ID = b.CHID and a.SCID = %d and b.TSN = %d"), dwSCID, iTsn); pRecSptChn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptChn->adoEOF) { pXML->AddChildElem(_T("ch"), (LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("P1P2"))); pXML->AddChildAttrib(_T("n"), pRecSptChn->GetCollect(_T("CHnumber")).iVal); pXML->AddChildAttrib(_T("ks"), (LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("K"))); pXML->AddChildAttrib(_T("layer"), (VT_NULL==pRecSptChn->GetCollect(_T("Layer")).vt)?_T(""):(LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("Layer"))); pXML->AddChildAttrib(_T("xpos"), (VT_NULL==pRecSptChn->GetCollect(_T("XPos")).vt)?_T(""):(LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("XPos"))); pRecSptChn->MoveNext(); } pRecSptChn->Close(); pXML->OutOfElem(); pRecSptTsn->MoveNext(); } pRecSptTsn->Close(); pXML->OutOfElem(); DeleteFile(szFile); pXML->Save(szFile); szOrder.Empty(); szOrder.Format(_T("script_add(\"ERI%s\",\"%s\",\"%s\")\r\n"), szSCCN, szSCName,szMedium); strFullSptCN.Empty(); strFullSptCN.Format(_T("ERI%s"),szSCCN); break; case 2: szSql.Empty(); szSql.Format(_T("select count(*) as CH, TSN, max(C1) as C1, max(C2) as C2, max(N) as N from script3d where CHID in (select ID from channel where SCID = %d) group by TSN order by TSN"), dwSCID); pRecSptTsn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptTsn->adoEOF) { iTsn = pRecSptTsn->GetCollect(_T("TSN")).lVal; pXML->AddChildElem(_T("array")); pXML->AddChildAttrib(_T("tsn"), iTsn); pXML->AddChildAttrib(_T("ch"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("CH"))); pXML->AddChildAttrib(_T("c1"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("C1"))); pXML->AddChildAttrib(_T("c2"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("C2"))); pXML->AddChildAttrib(_T("n"), (LPCTSTR)(_bstr_t)pRecSptTsn->GetCollect(_T("N"))); pXML->IntoElem(); szSql.Empty(); szSql.Format(_T("select CHnumber,P1&','&P2 as P1P2,K from channel a,script3d b where a.ID = b.CHID and a.SCID = %d and b.TSN = %d"), dwSCID, iTsn); pRecSptChn->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while (0 == pRecSptChn->adoEOF) { pXML->AddChildElem(_T("ch"), (LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("P1P2"))); pXML->AddChildAttrib(_T("n"), pRecSptChn->GetCollect(_T("CHnumber")).iVal); pXML->AddChildAttrib(_T("ks"), (LPCTSTR)(_bstr_t)pRecSptChn->GetCollect(_T("K"))); pRecSptChn->MoveNext(); } pRecSptChn->Close(); pXML->OutOfElem(); pRecSptTsn->MoveNext(); } pRecSptTsn->Close(); pXML->OutOfElem(); DeleteFile(szFile); pXML->Save(szFile); szOrder.Empty(); szOrder.Format(_T("script_add(\"ERT%s\",\"%s\",\"%s\")\r\n"), szSCCN, szSCName,szMedium); strFullSptCN.Empty(); strFullSptCN.Format(_T("ERT%s"),szSCCN); break; default: break; } delete pXML; szHostFilePath.Empty(); szHostFilePath = _T("/SD/scripts/"); TransDelay(g_iTransMode, 10, 50, NULL); if (TRUE == pDev->SendFile(szHostFilePath, szFilePath, szFileName)) { TransDelay(g_iTransMode, 100, 200, NULL); try { //deleted by lsq 20160427 //由于前面的一段已经有增加脚本的代码,这段是重复的,不需要加 /* pDev->m_sComPort.ClearCommReceiveBuff(); pDev->m_sComPort.ClearCommSendBuff(); pDev->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); szOrder.ReleaseBuffer(); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; while ((szResBuff.Find(">") == -1) && (iPollingTime < 500)) { // Sleep(100); while (pDev->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } iPollingTime++; } if (MAX_POLLING_TIME == iPollingTime) { uExecCode = APP_FAIL; } GetSubStringInHeadAndTail(szResBuff, szRes, _T("["), _T("]")); if (_T("1") != szRes) { uExecCode = APP_FAIL; } */ theApp.m_pConnection->BeginTrans(); pCmdIns->ActiveConnection = theApp.m_pConnection; szSql.Empty(); szSql.Format(_T("insert into dev_syn_spt(DESN,SCCN,SptName,Stype,SptFileName,IsSyned) values('%s','%s','%s',%d,'%s',true)"), pDev->m_szDevSN, szSCCN, szSCName, iSType, szFileName); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); theApp.m_pConnection->CommitTrans(); uExecCode = APP_SUCCESS; } catch (_com_error e) { theApp.m_pConnection->RollbackTrans(); uExecCode = APP_FAIL; } } else { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("发送脚本文件失败,请重试.")); else MessageBoxEx(NULL, _T("Send Script file failed! Please Retry"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); uExecCode = APP_FAIL; DeleteSConInDev(szFileName.Mid(0, 35), pDev); } DeleteFile(szFile); } else if (APP_OVERFLOW == uExecCode) { // hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); // AfxMessageBox("TestingZone amount overflow!"); uExecCode = APP_FAIL; } } pRecSynSpt->Close(); } pRecSCon->Close(); return uExecCode; } UINT CSptManager::LoadScriptFromDev(CString szSptFileName, CDevice* const pDev) { CMarkup xml; UINT uExecCode = (UINT)VAL_ZERO; _CommandPtr pCmdIns = NULL; _CommandPtr pCmdUpd = NULL; _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecCha = NULL; _RecordsetPtr pRecSpt = NULL; CString szSql = _T(""); CString szLocFilePath = _T(""); CString szLocFile = _T(""); CString szHostFilePath = _T("/SD/scripts/"); CString szHostFile = _T(""); CString szCN = _T(""); CString szName = _T(""); int iType = (int)VAL_ZERO; CString szDesc = _T(""); CString szDefiner = _T(""); CString szDate = _T(""); CString RectLoc = _T(""); CString szMN = _T(""); CStringArray saMN; int iPoleCount = (int)VAL_ZERO; int iPtCount = (int)VAL_ZERO; int iChCount = (int)VAL_ZERO; CString szAR = _T(""); int iAR = (int)VAL_ZERO; int iTSN = (int)VAL_ZERO; int iChNum = (int)VAL_ZERO; int iC1 = (int)VAL_ZERO; int iC2 = (int)VAL_ZERO; int iP1 = (int)VAL_ZERO; int iP2 = (int)VAL_ZERO; float fC1 = (float)VAL_ZERO; float fC2 = (float)VAL_ZERO; float fP1 = (float)VAL_ZERO; float fP2 = (float)VAL_ZERO; int iN = (int)VAL_ZERO; float fKS = (float)VAL_ZERO; DWORD dwSCID = (DWORD)VAL_ZERO; DWORD dwCHID = (DWORD)VAL_ZERO; CString szRect = _T(""); CString szRectLoc = _T(""); CString szPoleDistance = _T(""); CString szPoleStep = _T(""); // int x0 = 0; // int y0 = 0; // int x1 = 0; // int y1 = 0; //------------------------------------------------------------- _RecordsetPtr pRecSptCheck = NULL; pRecSptCheck.CreateInstance(_uuidof(Recordset)); szSql.Empty(); szSql.Format("select ID from scon where CN = \"%s\"", szSptFileName.Mid(3,32)); pRecSptCheck->Open(szSql.GetBuffer(0), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSptCheck->GetRecordCount()) { //这个脚本已经存在,不需要上传 return APP_FAIL; } pRecSptCheck->Close(); //------------------------------------------------------------- szHostFile = szHostFilePath + szSptFileName; pRecSCon.CreateInstance(_uuidof(Recordset)); pRecCha.CreateInstance(_uuidof(Recordset)); pRecSpt.CreateInstance(_uuidof(Recordset)); pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = theApp.m_pConnection; szLocFilePath.Empty(); szLocFilePath.GetBufferSetLength(256); ::GetCurrentDirectory(szLocFilePath.GetLength(), szLocFilePath.GetBuffer(szLocFilePath.GetLength())); szLocFilePath.ReleaseBuffer(); szLocFilePath = szLocFilePath + _T("\\CACHE\\scripts\\"); if (!PathFileExistsA(szLocFilePath)) { ::CreateDirectoryA(szLocFilePath, nullptr); } szLocFile = szLocFilePath + szSptFileName; if (TRUE == pDev->ReceiveFile(szLocFilePath, szHostFile)) { try { CStringArray sa; sa.RemoveAll(); theApp.m_pConnection->BeginTrans(); xml.Load(szLocFile); xml.FindElem(_T("script")); xml.FindChildElem(_T("cn")); szCN = xml.GetChildData(); xml.FindChildElem(_T("name")); szName = xml.GetChildData(); xml.FindChildElem(_T("type")); iType = atoi(xml.GetChildData()); xml.FindChildElem(_T("description")); szDesc = xml.GetChildData(); xml.FindChildElem(_T("definer")); szDefiner = xml.GetChildData(); xml.FindChildElem(_T("date")); szDate = xml.GetChildData(); xml.FindChildElem(_T("rect"));//取得坐标 szRect = xml.GetChildData(); xml.FindChildElem(_T("rect_loc")); szRectLoc = xml.GetChildData(); xml.FindChildElem(_T("pole_distance")); szPoleDistance = xml.GetChildData(); xml.FindChildElem(_T("pole_step")); szPoleStep = xml.GetChildData(); // SplitterString(sa, szRect, _T(",")); // x0 = atoi(sa.GetAt(0)); // y0 = atoi(sa.GetAt(1)); // x1 = atoi(sa.GetAt(2)); // y1 = atoi(sa.GetAt(3)); xml.FindChildElem(_T("pole_count")); iPoleCount = atoi(xml.GetChildData()); xml.FindChildElem(_T("point_count")); iPtCount = atoi(xml.GetChildData()); xml.FindChildElem(_T("channel_count")); iChCount = atoi(xml.GetChildData()); szSql.Empty(); szSql.Format(_T("insert into scon(CN,Sname,Stype,Eamount,CHamount,TPamount,definer,DEdate,SCdesc,Rect,RectLoc,PoleDistance,PoleStep) " "values('%s','%s',%d,%d,%d,%d,'%s',#%s#,'%s','%s','%s','%s','%s')"), szCN, szName, iType, iPoleCount, iChCount, iPtCount, szDefiner, szDate, szDesc, szRect, szRectLoc, szPoleDistance, szPoleStep); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecSCon->Open(_T("select max(ID) as SCID from scon"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCon->GetRecordCount()) { dwSCID = (int)pRecSCon->GetCollect(_T("SCID")).ulVal; } pRecSCon->Close(); xml.FindChildElem(_T("channel")); xml.IntoElem(); xml.FindChildElem(_T("ar")); szAR = xml.GetChildData(); sa.RemoveAll(); SplitterString(sa, szAR, _T(":")); iChNum = atoi(sa.GetAt(0)); iAR = atoi(sa.GetAt(1)); xml.OutOfElem(); szSql.Empty(); szSql.Format(_T("insert into channel(SCID,CHnumber,AR) values(%u,%d,%d)"), dwSCID, iChNum, iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecCha->Open(_T("select max(ID) as CHID from channel"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCha->GetRecordCount()) { dwCHID = (int)pRecCha->GetCollect(_T("CHID")).ulVal; } pRecCha->Close(); switch (iType) { case 0: xml.FindChildElem(_T("layout")); xml.IntoElem(); while (xml.FindChildElem(_T("array"))) { iTSN = atoi(xml.GetChildAttrib(_T("tsn"))); fC1 = (float)atof(xml.GetChildAttrib(_T("c1"))); fC2 = (float)atof(xml.GetChildAttrib(_T("c2"))); iN = atoi(xml.GetChildAttrib(_T("n"))); xml.IntoElem(); while (xml.FindChildElem(_T("ch"))) { iChNum = atoi(xml.GetChildAttrib(_T("n"))); fKS = (float)atof(xml.GetChildAttrib(_T("ks"))); // fP1 = (float)atof(xml.GetChildData()); // fP2 = (float)atof(xml.GetChildData()); szMN = xml.GetChildData(); SplitterString(saMN, szMN, _T(",")); iP1 = atoi(saMN.GetAt(0)); iP2 = atoi(saMN.GetAt(1)); szSql.Empty(); szSql.Format(_T("insert into script1d(CHID,TSN,a,b,x,y,K,N) values(%u,%d,%f,%f,%f,%f,%f,%d) "), dwCHID, iTSN, fC1, fC2, fP1, fP2, fKS, iN); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); } xml.OutOfElem(); } xml.OutOfElem(); break; case 1: xml.FindChildElem(_T("layout")); xml.IntoElem(); while (xml.FindChildElem(_T("array"))) { iTSN = atoi(xml.GetChildAttrib(_T("tsn"))); iC1 = atoi(xml.GetChildAttrib(_T("c1"))); iC2 = atoi(xml.GetChildAttrib(_T("c2"))); iN = atoi(xml.GetChildAttrib(_T("n"))); xml.IntoElem(); while (xml.FindChildElem(_T("ch"))) { iChNum = atoi(xml.GetChildAttrib(_T("n"))); fKS = (float)atof(xml.GetChildAttrib(_T("ks"))); szMN = xml.GetChildData(); SplitterString(saMN, szMN, _T(",")); iP1 = atoi(saMN.GetAt(0)); iP2 = atoi(saMN.GetAt(1)); szSql.Empty(); szSql.Format(_T("insert into script2d(CHID,TSN,C1,C2,P1,P2,K,N) values(%u,%d,%d,%d,%d,%d,%f,%d) "), dwCHID, iTSN, iC1, iC2, iP1, iP2, fKS, iN); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); } xml.OutOfElem(); } xml.OutOfElem(); break; case 2: xml.FindChildElem(_T("layout")); xml.IntoElem(); while (xml.FindChildElem(_T("array"))) { iTSN = atoi(xml.GetChildAttrib(_T("tsn"))); iC1 = atoi(xml.GetChildAttrib(_T("c1"))); iC2 = atoi(xml.GetChildAttrib(_T("c2"))); iN = atoi(xml.GetChildAttrib(_T("n"))); xml.IntoElem(); while (xml.FindChildElem(_T("ch"))) { iChNum = atoi(xml.GetChildAttrib(_T("n"))); fKS = (float)atof(xml.GetChildAttrib(_T("ks"))); szMN = xml.GetChildData(); SplitterString(saMN, szMN, _T(",")); iP1 = atoi(saMN.GetAt(0)); iP2 = atoi(saMN.GetAt(1)); szSql.Empty(); szSql.Format(_T("insert into script3d(CHID,TSN,C1,C2,P1,P2,K,N) values(%u,%d,%d,%d,%d,%d,%f,%d) "), dwCHID, iTSN, iC1, iC2, iP1, iP2, fKS, iN); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); } xml.OutOfElem(); } xml.OutOfElem(); break; default: break; } szSql.Empty(); szSql.Format(_T("update dev_syn_spt set IsSyned = true where SCCN = '%s' and DESN = '%s'"), szCN, pDev->m_szDevSN); pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Execute(NULL, NULL, adCmdText); //dwSCID szSql.Empty(); szSql.Format(_T("update td set SCID = %u where SCCN = '%s'"), dwSCID, szCN); pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Execute(NULL, NULL, adCmdText); theApp.m_pConnection->CommitTrans(); } catch (_com_error e) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); AfxMessageBox(e.Description()); theApp.m_pConnection->RollbackTrans(); } } else { uExecCode = APP_FAIL; } return uExecCode; } UINT CSptManager::AddScriptInDev(CString szSCCN, CString szSCCName,CString szType,CDevice* const pDev) { CString szOrder = _T(""); CString szResBuff = _T(""); CString szRes = _T(""); int iPollingTime = (int)VAL_ZERO; int iResSize = (int)VAL_ZERO; char aResBuff[2048] = {0}; if (EN_TRANSFER_FILE_BY_USB == g_iTransFileMode) { //在这里由于只操作单个文件,所以失败了也不用进行原子操作的回滚 int iRes = CGD10OperCmd::GetInstance()->script_add(szSCCN, szSCCName, szType); szRes.Empty(); szRes.Format(_T("%d"),iRes); } else { ////////////////////////////////////////////////////////////////////////// szOrder.Format(_T("script_add(\"%s\",\"%s\",\"%s\")\r\n"), szSCCN,szSCCName,szType); if (FALSE == pDev->ExecuteOrder(szOrder, ">" , &szResBuff)) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("下发脚本信息到主机设备失败.")); else MessageBoxEx(NULL, _T("Download script to device failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return APP_FAIL; } ////////////////////////////////////////////////////////////////////////// /////////////////////////在这里注释掉,用ExecuteOrder命令来代替////////// /* pDev->m_sComPort.ClearCommSendBuff(); pDev->m_sComPort.ClearCommReceiveBuff(); szOrder.Empty(); szOrder.Format(_T("\r\n")); pDev->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); Sleep(500); szOrder.ReleaseBuffer(); szOrder.Empty(); pDev->m_sComPort.ClearCommSendBuff(); pDev->m_sComPort.ClearCommReceiveBuff(); szOrder.Empty(); szOrder.Format(_T("script_add(\"%s\",\"%s\",\"%s\")\r\n"), szSCCN,szSCCName,szType); // MessageBox(szOrder); Sleep(100); pDev->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); szOrder.ReleaseBuffer(); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; while ((szResBuff.Find(">") == -1) && (iPollingTime < 500)) { // Sleep(100); while (pDev->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } iPollingTime++; } if (MAX_POLLING_TIME == iPollingTime) { return APP_FAIL; } */ ////////////////////////////////////////////////////////////////////////// GetSubStringInHeadAndTail(szResBuff, szRes, _T("["), _T("]")); } if (_T("-3") == szRes) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("在设备中添加脚本失败,设备中的脚本数量超过允许的最大值.")); else MessageBoxEx(NULL, _T("Add script to device failed, the number of script in device are overflow!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return APP_OVERFLOW; } else if ((_T("0") == szRes) || (_T("-1") == szRes) || (_T("-2") == szRes)) { CString strErr = _T(""); hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); if (LANG_ZHCN == g_iUILanguage) { strErr.Format(_T("添加脚本到设备失败,错误码= %s"), szRes); AfxMessageBox(strErr); } else { strErr.Format(_T("Add script to device failed, errorno = %s"), szRes); MessageBoxEx(NULL, strErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return APP_FAIL; } return APP_SUCCESS; } void CSptManager::InitialCESptList(CListCtrl &sptList) { _RecordsetPtr pRecSptList = NULL; _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecMed = NULL; DWORD dwSptHandle = (DWORD)VAL_ZERO; int iIndex = (int)VAL_ZERO; CString szSql; CString szLabel; pRecMed.CreateInstance(_uuidof(Recordset)); pRecSptList.CreateInstance(_uuidof(Recordset)); pRecSCon.CreateInstance(_uuidof(Recordset)); pRecSptList->Open(_T("select ID,CN,Sname,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon where Stype = 0"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecSptList->adoEOF) { sptList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CN"))); sptList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Sname"))); sptList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("Eamount"))); sptList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TPamount"))); sptList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("definer"))); sptList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("DEdate"))); sptList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("SCdesc"))); dwSptHandle = m_handleProcessor.GenerateHandle((DWORD)pRecSptList->GetCollect(_T("ID")).ulVal, PZ_STYLE_SCON_2D); sptList.SetItemData(iIndex, dwSptHandle); iIndex++; pRecSptList->MoveNext(); } //while (VAL_ZERO == pRecProID->adoEOF) pRecSptList->Close(); sptList.SetHotItem((int)VAL_ZERO); } BOOL CSptManager::DeleteSConInDev(CString szSCCN, CDevice* const pDev) { _CommandPtr pCmdDel = NULL; CString szSql = _T(""); CString szOrder = _T(""); CString szResBuff = _T(""); CString szRes = _T(""); CString strError = _T(""); int iPollingTime = (int)VAL_ZERO; int iResSize = (int)VAL_ZERO; char aResBuff[2048] = {0}; if (EN_TRANSFER_FILE_BY_USB == g_iTransFileMode) { if (CGD10OperCmd::GetInstance()->script_delete(szSCCN)) { szRes = _T("1"); } } else { ////////////////////////////////////////////////////////////////////////// szOrder.Format(_T("script_delete(\"%s\")\r\n"), szSCCN); if (FALSE == pDev->ExecuteOrder(szOrder, ">", &szResBuff)) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("发送删除脚本命令失败.")); else MessageBoxEx(NULL, _T("Send reomve sript command failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return FALSE; } ////////////////////////////////////////////////////////////////////////// GetSubStringInHeadAndTail(szResBuff, szRes, _T("["), _T("]")); } ///////////////////////////用ExcuteOrder命令代替////////////////////////// /* pDev->m_sComPort.ClearCommSendBuff(); pDev->m_sComPort.ClearCommReceiveBuff(); szOrder.Empty(); szOrder.Format(_T("\r\n")); pDev->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); Sleep(500); szOrder.ReleaseBuffer(); szOrder.Empty(); pDev->m_sComPort.ClearCommSendBuff(); pDev->m_sComPort.ClearCommReceiveBuff(); szOrder.Empty(); szOrder.Format(_T("script_delete(\"%s\")\r\n"), szSCCN); // MessageBox(szOrder); Sleep(100); pDev->m_sComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength()); szOrder.ReleaseBuffer(); // TransDelay(g_iTransMode, 20, 50); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); szResBuff.Empty(); iPollingTime = 0; while ((szResBuff.Find(">") == -1) && (iPollingTime < 500)) { // Sleep(100); while (pDev->m_sComPort.ReceiveDataDirectly(aResBuff, &iResSize) == TRUE) { szResBuff.Insert(szResBuff.GetLength(), aResBuff); iResSize = (int)VAL_ZERO; memset(aResBuff, 0, sizeof(aResBuff)); } iPollingTime++; } // hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); // AfxMessageBox(szResBuff); if (MAX_POLLING_TIME == iPollingTime) { return FALSE; } */ ////////////////////////////////////////////////////////////////////////// if (_T("1") != szRes) { if (LANG_ZHCN == g_iUILanguage) { strError.Format(_T("删除脚本失败, 错误 = %s"), szRes); AfxMessageBox(strError); } else { strError.Format(_T("Remove script failed, error = %s"), szRes); MessageBoxEx(NULL, strError, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } return FALSE; } pCmdDel.CreateInstance(_uuidof(Command)); pCmdDel->ActiveConnection = theApp.m_pConnection; try { theApp.m_pConnection->BeginTrans(); szSql.Empty(); szSql.Format(_T("delete from dev_syn_spt where DESN = '%s' and SCCN = '%s'"), pDev->m_szDevSN, szSCCN.Right(32)); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); theApp.m_pConnection->CommitTrans(); } catch (_com_error e) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); AfxMessageBox((LPCTSTR)e.Description()); theApp.m_pConnection->RollbackTrans(); return FALSE; } return TRUE; } UINT CSptManager::Create3DSConInDB(DWORD *dwSConID) { CString szCN = _T(""); CString szSql = _T(""); CString szSName = _T(""); CString szDefiner = _T(""); CString szDeDate = _T(""); CString szScDesc = _T(""); CString szSplittedNum = _T(""); CString szTmp = _T(""); int i = 0; int nSplittedNum = 0; _RecordsetPtr pRecSCID = NULL; _RecordsetPtr pRecCHID = NULL; _CommandPtr pCmdIns = NULL; _CommandPtr pCmdUpd = NULL; int iChCount = (int)VAL_ZERO; int iChIndex = (int)VAL_ZERO; POSITION posCh = NULL; int iRecCount = (int)VAL_ZERO; int iRecIndex = (int)VAL_ZERO; int iTpAmount = (int)VAL_ZERO; int iTsn = (int)VAL_ZERO; DWORD dwCHID = (DWORD)VAL_ZERO; UINT uExecCode = (UINT)VAL_ZERO; INT_PTR lRet = (long)VAL_ZERO; INT_PTR lRetBackup = lRet; CScript3D* pNewScript = new CScript3D((DWORD)VAL_ZERO, theApp.m_pConnection); CChannel* pChannel = NULL; CSptRecord* pSptRecord = NULL; ////////////////////////////test////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// CDialCreateNew3DSpt* pCreate3DSptDlg = new CDialCreateNew3DSpt(pNewScript, &m_medLinkList, (INT_PTR*)&lRet); pCreate3DSptDlg->Create(IDD_DIALOG_NEW_3D_SPT, AfxGetMainWnd());//因为修改了对话框的create函数,所以这里传什么值无所谓 // this->InitialCreate3DSConDlg(pOpCreate3DSptDlg); pCreate3DSptDlg->ShowWindow(SW_SHOW); try { lRet = pCreate3DSptDlg->RunModalLoop(MLF_SHOWONIDLE); // 开始非模态窗口模态循环 lRetBackup = lRet; switch (lRet) { case RET_OK: theApp.m_pConnection->BeginTrans(); nSplittedNum = pCreate3DSptDlg->GetSplitSptNumber(); dwSConID[0] = nSplittedNum;//第一个元素放元素总数 for (i = 0; i < nSplittedNum; i++) { pRecSCID.CreateInstance(_uuidof(Recordset)); pRecCHID.CreateInstance(_uuidof(Recordset)); pCmdIns.CreateInstance(_uuidof(Command)); pCmdIns->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szCN = this->m_guCodeCreator.GenerateGUIDCode(); szSName.Empty(); szTmp = pCreate3DSptDlg->GetSptName(); if (1 == nSplittedNum)//如果该值为1,则标示该脚本不做拆分,命名后面不跟类似"(1)"结尾 { szSName = szTmp; } else { szSName.Format("%s(%d)",szTmp, i + 1); } szDefiner.Empty(); szDefiner = pCreate3DSptDlg->GetSptOperator(); szScDesc.Empty(); szScDesc = pCreate3DSptDlg->GetSptMark(); pNewScript->m_iSType = 2; //脚本类型 3d iChCount = pNewScript->m_chaList.GetCount();//通道列表数 /////////////////////////////////检测是否有相同的名称的脚本///////////////////////////////////////// szSql.Empty(); szSql.Format(_T("select * from scon where Sname = '%s' and Stype=%d"),szSName, pNewScript->m_iSType); pRecSCID->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("脚本已经存在.")); else MessageBoxEx(NULL, _T("Script has been alreay exists"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); pRecSCID->Close(); theApp.m_pConnection->RollbackTrans(); pNewScript->m_chaList.RemoveAll(); delete pNewScript; delete pCreate3DSptDlg; return APP_FAIL; } pRecSCID->Close(); ////////////////////////////////////////////////////////////////////////// szSql.Empty(); szSql.Format(_T("insert into scon(CN,Sname,Stype,Eamount,CHamount,TPamount,definer,DEdate,SCdesc,Rect,RectLoc,PoleDistance,PoleStep,LineDirection) " "values('%s','%s',%d,%d,%d,%d,'%s',#%s#,'%s','%s', '%s', '%s', '%s',%d)"), szCN, szSName, pNewScript->m_iSType, pNewScript->m_iEAmount, iChCount, pNewScript->m_PointNum[i], szDefiner, pCreate3DSptDlg->m_CreateDate.FormatGmt("%Y-%m-%d"), szScDesc, pCreate3DSptDlg->GetRect(), pCreate3DSptDlg->GetPoleStart(), pCreate3DSptDlg->GetPoleDistance(), pCreate3DSptDlg->GetPoleStep(), pCreate3DSptDlg->GetLineDirection()); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); //取得scon表中ID最大的ITEM pRecSCID->Open(_T("select max(ID) as ID from scon"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount())//返回1 { dwSConID[i + 1] = (DWORD)pRecSCID->GetCollect(_T("ID")).ulVal; } pRecSCID->Close(); posCh = NULL; iChIndex = (int)VAL_ZERO; while (iChIndex < iChCount)//iChCount = 1 { posCh = pNewScript->m_chaList.FindIndex(iChIndex); pChannel = (CChannel*)pNewScript->m_chaList.GetAt(posCh); szSql.Empty(); szSql.Format(_T("insert into channel(SCID,CHnumber,AR) values(%u,%d,%d) "), dwSConID[i + 1], pChannel->m_iChNumber, pChannel->m_pMedium->m_iAR); pCmdIns->CommandText = szSql.AllocSysString(); pCmdIns->Execute(NULL, NULL, adCmdText); pRecCHID->Open(_T("select max(ID) as ID from channel"), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCHID->GetRecordCount()) { dwCHID = (DWORD)pRecCHID->GetCollect(_T("ID")).ulVal; } pRecCHID->Close(); iRecIndex = (int)VAL_ZERO; iRecCount = (int)VAL_ZERO; iTsn = (int)VAL_ONE; while (iRecIndex < pChannel->m_sptRecArray.GetSize()) { pSptRecord = (CSptRecord*)pChannel->m_sptRecArray.GetAt(iRecIndex); if (pSptRecord->m_SubScriptIndex == i) { szSql.Empty(); szSql.Format(_T("insert into script3d(CHID,TSN,C1,C2,P1,P2,K,N) values(%u,%d,%d,%d,%d,%d,%f,%d) "), dwCHID, iTsn, //如是多通道,则此处需修改 pSptRecord->m_iC1, pSptRecord->m_iC2, pSptRecord->m_iP1, pSptRecord->m_iP2, pSptRecord->m_fK, pSptRecord->m_iN); pCmdIns->CommandText = szSql.AllocSysString(); try { pCmdIns->Execute(NULL, NULL, adCmdText); } catch (_com_error e) { hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTHookProc,AfxGetInstanceHandle(),NULL); AfxMessageBox((LPCTSTR)e.Description()); } //iTpAmount++; iTsn++; } iRecIndex++; } iTsn = 0; iRecIndex = 0; szSql.Empty(); szSql.Format(_T("update scon set TPamount = %d where ID = %d"), pNewScript->m_PointNum[i]/*iTpAmount*/,dwSConID[i + 1]); pCmdUpd->CommandText = szSql.AllocSysString(); pCmdUpd->Execute(NULL, NULL, adCmdText); iChIndex++; } } pChannel->m_sptRecArray.RemoveAll(); pNewScript->m_chaList.RemoveAll(); delete pChannel; pChannel = NULL; theApp.m_pConnection->CommitTrans(); break; case RET_CANCEL: delete pNewScript; delete pCreate3DSptDlg; return APP_CANCLE; //break; default: break; } delete pNewScript; delete pCreate3DSptDlg; return 0; } catch(_com_error e) { if (RET_OK == lRetBackup) { theApp.m_pConnection->RollbackTrans(); } delete pNewScript; delete pCreate3DSptDlg; throw e; } } void CSptManager::Delete3DSConInDB(DWORD dwSConID) { _RecordsetPtr pRecCha = NULL; _CommandPtr pCmdDel; _CommandPtr pCmdUpd; CString szSql = _T(""); pRecCha.CreateInstance(_uuidof(Recordset)); pCmdDel.CreateInstance(_uuidof(Command)); pCmdDel->ActiveConnection = theApp.m_pConnection; pCmdUpd.CreateInstance(_uuidof(Command)); pCmdUpd->ActiveConnection = theApp.m_pConnection; szSql.Empty(); szSql.Format(_T("select ID from channel where SCID = %d"), dwSConID); pRecCha->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecCha->adoEOF) { szSql.Empty(); szSql.Format(_T("delete from script3d where CHID = %u"), (DWORD)pRecCha->GetCollect(_T("ID")).ulVal); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); pRecCha->MoveNext(); } //while ((short)VAL_ZERO == pRecCha->adoEOF) pRecCha->Close(); szSql.Empty(); szSql.Format(_T("delete from channel where SCID = %u"), dwSConID); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); szSql.Empty(); szSql.Format(_T("delete from scon where ID = %u"), dwSConID); pCmdDel->CommandText = szSql.AllocSysString(); pCmdDel->Execute(NULL, NULL, adCmdText); } void CSptManager::Browse2DScript(DWORD dwScId) { INT_PTR lRet = (long)VAL_ZERO; _RecordsetPtr pRecSpt = NULL; pRecSpt.CreateInstance(_uuidof(Recordset)); CString strSql = _T(""); strSql.Format(_T("select AR from channel where SCID = %u"), dwScId); pRecSpt->Open(strSql.GetBuffer(0), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO == pRecSpt->GetRecordCount()) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("查询脚本装置类型失败")); else MessageBoxEx(NULL, _T("Query script array type failed."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); pRecSpt->Close(); return; } short iAR = pRecSpt->GetCollect(_T("AR")).iVal; pRecSpt->Close(); if (AR_EDGE_GARDIENT == iAR || AR_BIPOLE_HOLE_SPT == iAR || AR_DOUBLE_SIZE_3P == iAR ||AR_CUSTOM_2D_TYPE == iAR || AR_MID_GARDIENT_SCAN == iAR || AR_CROSS_HOLE_TYPE == iAR || AR_CROSS_HOLE_GEOMATIVE == iAR || AR_S3P_MEDIUM == iAR) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("不支持.")); else MessageBoxEx(NULL, _T("Not support."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return ; } CBrowse2DScriptDlg* pBrowse = new CBrowse2DScriptDlg(); pBrowse->Create(IDD_BROWSE_SCRIPT_2D, AfxGetMainWnd()); //直接在这里操作view类 //---------画图 InitBrowse2DView(pBrowse,dwScId); //---------画图 pBrowse->CenterWindow(); pBrowse->ShowWindow(SW_SHOW); pBrowse->RunModalLoop(MLF_SHOWONIDLE); // 开始非模态窗口模态循环 } bool CSptManager::Export3DSConInDB(DWORD dwSConID, CString strFilePath) { _RecordsetPtr pRecSpt = NULL; pRecSpt.CreateInstance(_uuidof(Recordset)); COperTxtFile operTxtFile; if (!operTxtFile.OpenFileforWrite(strFilePath)) { return false; } CStringArray strTextArr; strTextArr.RemoveAll(); strTextArr.Add(_T("ID")); strTextArr.Add(_T("A")); strTextArr.Add(_T("B")); strTextArr.Add(_T("M")); strTextArr.Add(_T("N")); strTextArr.Add(_T("K")); operTxtFile.WriteFileContent(strTextArr); CString szSql = _T(""); szSql.Format(_T("select a.TSN as TSN, a.C1 as C1,a.C2 as C2,a.P1 as P1,a.P2 as P2,a.K as K from script3d a, channel b ") _T("where a.CHID = b.ID and b.SCID = %d"), dwSConID); pRecSpt->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); float fK = 0; CString strInfo = _T(""); bool bRes = true; while ((short)VAL_ZERO == pRecSpt->adoEOF) { strTextArr.RemoveAll(); strTextArr.Add((VT_NULL == pRecSpt->GetCollect(_T("TSN")).vt) ? _T("") : (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("TSN"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("C1"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("C2"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("P1"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("P2"))); fK = (VT_NULL == pRecSpt->GetCollect(_T("K")).vt) ? 0 : pRecSpt->GetCollect(_T("K")).fltVal; strInfo.Empty(); strInfo.Format(_T("%f"), fK); strTextArr.Add(strInfo); if (!operTxtFile.WriteFileContent(strTextArr)) { bRes = false; break; } pRecSpt->MoveNext(); } pRecSpt->Close(); operTxtFile.CloseFile(); return bRes; } bool CSptManager::Export2DSConInDB(DWORD dwSConID, CString strFilePath) { _RecordsetPtr pRecSpt = NULL; pRecSpt.CreateInstance(_uuidof(Recordset)); COperTxtFile operTxtFile; if (!operTxtFile.OpenFileforWrite(strFilePath)) { return false; } CStringArray strTextArr; strTextArr.RemoveAll(); strTextArr.Add(_T("ID")); strTextArr.Add(_T("A")); strTextArr.Add(_T("B")); strTextArr.Add(_T("M")); strTextArr.Add(_T("N")); strTextArr.Add(_T("K")); operTxtFile.WriteFileContent(strTextArr); CString szSql = _T(""); szSql.Format(_T("select a.TSN as TSN, a.C1 as C1,a.C2 as C2,a.P1 as P1,a.P2 as P2,a.K as K from script2d a, channel b ") _T("where a.CHID = b.ID and b.SCID = %d order by a.TSN"), dwSConID); pRecSpt->Open(szSql.AllocSysString(), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); float fK = 0; CString strInfo = _T(""); bool bRes = true; while ((short)VAL_ZERO == pRecSpt->adoEOF) { strTextArr.RemoveAll(); strTextArr.Add((VT_NULL == pRecSpt->GetCollect(_T("TSN")).vt) ? _T("") : (LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("TSN"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("C1"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("C2"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("P1"))); strTextArr.Add((LPCTSTR)(_bstr_t)pRecSpt->GetCollect(_T("P2"))); fK = (VT_NULL == pRecSpt->GetCollect(_T("K")).vt) ? 0 : pRecSpt->GetCollect(_T("K")).fltVal; strInfo.Empty(); strInfo.Format(_T("%f"), fK); strTextArr.Add(strInfo); if (!operTxtFile.WriteFileContent(strTextArr)) { bRes = false; break; } pRecSpt->MoveNext(); } pRecSpt->Close(); operTxtFile.CloseFile(); return bRes; } void CSptManager::InitBrowse2DView(CBrowse2DScriptDlg* f_pBrowse,DWORD f_dwScid) { CString szSql = _T(""); int nAr = 0; //装置类型 int nEamount = 0; //电极数量 int nCHamount = 0; //通道数量 int nCHnum = 0; //通道编号(第几个通道) float fDipSep = 0; CString strPoleStep; DWORD dwScId = 0; DWORD dwChId = 0; _RecordsetPtr pRecSCID = NULL; _RecordsetPtr pRecCHID = NULL; _RecordsetPtr pRecSCNum = NULL; pRecCHID.CreateInstance(_uuidof(Recordset)); pRecSCID.CreateInstance(_uuidof(Recordset)); pRecSCNum.CreateInstance(_uuidof(Recordset)); //-----------取脚本信息 szSql.Empty(); szSql.Format(_T("select ID,Eamount,CHamount,PoleStep from scon where ID = %u"), f_dwScid); pRecSCID->Open(szSql.GetBuffer(0), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCID->GetRecordCount()) { dwScId = (DWORD)pRecSCID->GetCollect(_T("ID")).ulVal; nEamount = pRecSCID->GetCollect(_T("Eamount")).ulVal; nCHamount = pRecSCID->GetCollect(_T("CHamount")).ulVal; strPoleStep = (pRecSCID->GetCollect(_T("PoleStep")).vt == VT_NULL) ? _T("0") : (LPCTSTR)(_bstr_t)pRecSCID->GetCollect(_T("PoleStep")); } pRecSCID->Close(); //--------取装置类型 szSql.Empty(); szSql.Format(_T("select ID,AR,CHnumber from channel where SCID = %u"), dwScId); pRecCHID->Open(szSql.GetBuffer(0), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecCHID->GetRecordCount()) { dwChId = (DWORD)pRecCHID->GetCollect(_T("ID")).ulVal; nAr = pRecCHID->GetCollect(_T("AR")).ulVal; nCHnum = pRecCHID->GetCollect(_T("CHnumber")).ulVal; } pRecCHID->Close(); //将脚本取出来保存到结构中 CPtrArray sptrArray; CSptRecord *SpRecord = NULL; int count = 0; szSql.Empty(); szSql.Format(_T("select TSN,C1,C2,P1,P2,K,N from script2d where CHID = %u order by TSN"), dwChId); pRecSCNum->Open(szSql.GetBuffer(0), _variant_t((IDispatch*)theApp.m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCNum->GetRecordCount()) { count = pRecSCNum->GetRecordCount(); SpRecord = new CSptRecord[count]; while ((short)VAL_ZERO == pRecSCNum->adoEOF) { SpRecord->m_iC1 = pRecSCNum->GetCollect(_T("C1")).iVal; SpRecord->m_iC2 = pRecSCNum->GetCollect(_T("C2")).iVal; SpRecord->m_iP1 = pRecSCNum->GetCollect(_T("P1")).iVal; SpRecord->m_iP2 = pRecSCNum->GetCollect(_T("P2")).iVal; SpRecord->m_iTsn = pRecSCNum->GetCollect(_T("TSN")).lVal; SpRecord->m_iN = pRecSCNum->GetCollect(_T("N")).iVal; SpRecord->m_fK = pRecSCNum->GetCollect(_T("K")).fltVal; sptrArray.Add(SpRecord); SpRecord++; pRecSCNum->MoveNext(); } } pRecSCNum->Close(); //计算成图所需的数据 CSptRecord* pSptRecord = NULL; CMedium* pMedium = NULL; CChannel* pChannel = new CChannel; pChannel->m_iChNumber = (int)VAL_ONE; f_pBrowse->m_BrowseScript->m_bIsDraw = FALSE; // f_pBrowse->m_BrowseScript->SetSelectPoint(&ptrArray); f_pBrowse->m_BrowseScript->m_pNewChannel = pChannel; f_pBrowse->m_BrowseScript->m_iEAmount = nEamount; DWORD dwMedHandle = (DWORD)VAL_ZERO; dwMedHandle = m_handleProcessor.GenerateHandle(nAr, PZ_STYLE_MED_DEF); pChannel->m_pMedium = m_medLinkList.Find(dwMedHandle); pMedium = pChannel->m_pMedium; pChannel->ClearSptRecList(); if (NULL != pMedium) { if (nAr == AR_DIP_DIP) { fDipSep = atof(strPoleStep); if (fDipSep < 1) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("偶极空间单位设置误差")); else MessageBoxEx(NULL, _T("Dipole space units set error"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); } else pMedium->SetParamVal(&fDipSep); } pMedium->GenerateSptRecElecVal(nEamount, &(pChannel->m_iMaxLevel), &(pChannel->m_iPtAmount), &(pChannel->m_sptRecArray)); pMedium->ReSortPoint(&(pChannel->m_sptRecArray)); } Browse2DScriptColorChange(&sptrArray, &(pChannel->m_sptRecArray)); f_pBrowse->m_BrowseScript->m_bIsDraw = TRUE; f_pBrowse->m_BrowseScript->m_iMul = 3; f_pBrowse->m_BrowseScript->Invalidate(FALSE); f_pBrowse->m_BrowseScript->SetFocus(); if (SpRecord) { sptrArray.RemoveAll(); SpRecord -= count; //将指针指向队头进行删除 delete [] SpRecord; SpRecord = NULL; } } void CSptManager::Browse2DScriptColorChange(CPtrArray *f_scr_array, CPtrArray *f_tar_array) { CSptRecord *scrRecord; //数据库中取出的数据 CSptRecord *tarRecord; //脚本生成的数据 CString szSrcK = _T(""); CString szTarK = _T(""); for (int j = 0; j < f_tar_array->GetSize(); j++) { ((CSptRecord *)f_tar_array->GetAt(j))->m_colorREF = RGB(150, 255, 255); } //利用2个循环查找被选中的点 for (int i = 0; i < f_scr_array->GetSize(); i++) { scrRecord = (CSptRecord *)f_scr_array->GetAt(i); for(int n = 0; n < f_tar_array->GetSize(); n++) { tarRecord = (CSptRecord *)f_tar_array->GetAt(n); // if (scrRecord->m_iTsn != tarRecord->m_iTsn) // continue; if (scrRecord->m_iC1 != tarRecord->m_iC1) continue; if (scrRecord->m_iC2 != tarRecord->m_iC2) continue; if (scrRecord->m_iP1 != tarRecord->m_iP1) continue; if (scrRecord->m_iP2 != tarRecord->m_iP2) continue; // if (scrRecord->m_iN != tarRecord->m_iN) // continue; //浮点型无法直接参与条件比较,由于该算法对精度要求不高,故先转为CString //类型再进行比较 szSrcK.Format("%.6f", scrRecord->m_fK); szTarK.Format("%.6f", tarRecord->m_fK); //由于FK转换成字符串的时候,可能存在这小数点精确位的约进,从而造成字符串不相等 //所以在这里进行取消,仅任务ABMN相等,则就相等。因为不存在着2个ABMN一模一样的点 // if (szSrcK != szTarK) // continue; tarRecord->m_colorREF = RGB(0,255,0); } } }