// Script.cpp: implementation of the CScript2D class. // ////////////////////////////////////////////////////////////////////// #include "geomative.h" #include "Script2D.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CScript2D::CScript2D(DWORD dwID, _ConnectionPtr& pConnection): CScript(dwID, pConnection) { m_iAR = 0; } CScript2D::~CScript2D() { } bool CScript2D::ShowSptDetailInfo(CListCtrl &sptDetailList) { _RecordsetPtr pRecSCon = NULL; _RecordsetPtr pRecSHead = NULL; _RecordsetPtr pRecMed = NULL; _RecordsetPtr pRecCm = NULL; CString szSql = _T(""); CString szLabel = _T(""); int iRowIndex = (int)VAL_ZERO; pRecSCon.CreateInstance(_uuidof(Recordset)); pRecSHead.CreateInstance(_uuidof(Recordset)); pRecMed.CreateInstance(_uuidof(Recordset)); pRecCm.CreateInstance(_uuidof(Recordset)); while (sptDetailList.GetItemCount() != iRowIndex) { sptDetailList.SetItemText(iRowIndex, 1, _T("")); iRowIndex++; } szSql.Empty(); szSql.Format(_T("select CN,Sname,Eamount,CHamount,TPamount,definer,Format(DEdate,'YYYY-MM-DD') as DEdate,SCdesc from scon where ID = %u"), m_dwID); pRecSCon->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); if ((long)VAL_ZERO != pRecSCon->GetRecordCount()) { sptDetailList.SetItemText(0, 1, pRecSCon->GetCollect(_T("CN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CN"))); sptDetailList.SetItemText(1, 1, pRecSCon->GetCollect(_T("Sname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Sname"))); sptDetailList.SetItemText(2, 1, pRecSCon->GetCollect(_T("Eamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("Eamount"))); sptDetailList.SetItemText(3, 1, pRecSCon->GetCollect(_T("CHamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("CHamount"))); sptDetailList.SetItemText(4, 1, pRecSCon->GetCollect(_T("TPamount")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("TPamount"))); sptDetailList.SetItemText(5, 1, pRecSCon->GetCollect(_T("definer")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("definer"))); sptDetailList.SetItemText(6, 1, pRecSCon->GetCollect(_T("DEdate")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("DEdate"))); sptDetailList.SetItemText(7, 1, pRecSCon->GetCollect(_T("SCdesc")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSCon->GetCollect(_T("SCdesc"))); } pRecSCon->Close(); return true; } bool CScript2D::ShowChannelList(CListCtrl &sptChannelList) { _RecordsetPtr pRecCh = NULL; _RecordsetPtr pRecMed = NULL; CString szSql = _T(""); int iIndex = (int)VAL_ZERO; DWORD dwHandle = (DWORD)VAL_ZERO; pRecCh.CreateInstance(_uuidof(Recordset)); pRecMed.CreateInstance(_uuidof(Recordset)); if ((int)VAL_ZERO != sptChannelList.GetItemCount()) { sptChannelList.DeleteAllItems(); } szSql.Empty(); szSql.Format(_T("select a.ID as ID,a.CHnumber as CHnumber,b.MEname as MEname, a.AR as AR from channel a,medium b where a.SCID = %d and a.AR = b.AR and b.LANG = %d order by a.CHnumber"), m_dwID, LANG_ENUS); pRecCh->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecCh->adoEOF) { sptChannelList.InsertItem(iIndex, pRecCh->GetCollect(_T("CHnumber")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCh->GetCollect(_T("CHnumber"))); sptChannelList.SetItemText(iIndex, 1, pRecCh->GetCollect(_T("MEname")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecCh->GetCollect(_T("MEname"))); dwHandle = m_handleProcessor.GenerateHandle((DWORD)pRecCh->GetCollect(_T("ID")).ulVal, PZ_STYLE_SPT_CH); sptChannelList.SetItemData(iIndex, dwHandle); //获取装置类型编号 m_iAR = pRecCh->GetCollect(_T("AR")).iVal; iIndex++; pRecCh->MoveNext(); } pRecCh->Close(); return true; } bool CScript2D::ShowSptConInfo(CListCtrl &sptConList) { _RecordsetPtr pRecSptList = NULL; CString szSql; int iIndex = (int)VAL_ZERO; pRecSptList.CreateInstance(_uuidof(Recordset)); if ((int)VAL_ZERO != sptConList.GetItemCount()) { sptConList.DeleteAllItems(); } szSql.Empty(); szSql.Format(_T("select b.CHnumber as CHnumber,a.TSN as TSN,a.C1 as C1,a.C2 as C2,a.P1 as P1,a.P2 as P2,a.K as K,a.N as N from script2d a,channel b " "where b.SCID = %d and a.CHID = b.ID order by a.TSN,a.CHID"), m_dwID); pRecSptList->Open(szSql.AllocSysString(), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); while ((short)VAL_ZERO == pRecSptList->adoEOF) { sptConList.InsertItem(iIndex, pRecSptList->GetCollect(_T("CHnumber")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("CHnumber"))); sptConList.SetItemText(iIndex, 1, pRecSptList->GetCollect(_T("TSN")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("TSN"))); sptConList.SetItemText(iIndex, 2, pRecSptList->GetCollect(_T("C1")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("C1"))); sptConList.SetItemText(iIndex, 3, pRecSptList->GetCollect(_T("C2")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("C2"))); sptConList.SetItemText(iIndex, 4, pRecSptList->GetCollect(_T("P1")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("P1"))); sptConList.SetItemText(iIndex, 5, pRecSptList->GetCollect(_T("P2")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("P2"))); sptConList.SetItemText(iIndex, 6, pRecSptList->GetCollect(_T("K")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("K"))); sptConList.SetItemText(iIndex, 7, pRecSptList->GetCollect(_T("N")).vt == VT_NULL ? _T("") : (LPCTSTR)(_bstr_t)pRecSptList->GetCollect(_T("N"))); //给每一行绑定一个唯一的数,这个数可以传到SortItems里面的对比函数作为lParam1和lParam2,分别用来代表不同的行 //否则如果不调用SetItemData,则lParam1和lParam2都会为0 sptConList.SetItemData(iIndex, (pRecSptList->GetCollect(_T("TSN")).vt == VT_NULL) ? 0 : (int)pRecSptList->GetCollect(_T("TSN")).iVal); iIndex++; pRecSptList->MoveNext(); } pRecSptList->Close(); AdjustRecListColumn(m_iAR, sptConList); return true; } void CScript2D::AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo) { if (iAR < 1) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("解析设备数组类型错误")); else MessageBoxEx(NULL, _T("Parser device array type error."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); return; } std::vector vtListOrder; vtListOrder.clear(); switch (iAR) { case 1: case 11: case 4: case 5: case 6: case AR_WENNER_SCH_BASIC: case 39: case 41: vtListOrder.push_back(2); vtListOrder.push_back(4); vtListOrder.push_back(5); vtListOrder.push_back(3); break; case 2: case 9://wenner-beta和偶极-偶极为B\A\M\N vtListOrder.push_back(3); vtListOrder.push_back(2); vtListOrder.push_back(4); vtListOrder.push_back(5); break; case 3: vtListOrder.push_back(2); vtListOrder.push_back(4); vtListOrder.push_back(3); vtListOrder.push_back(5); break; case 42: //井地井装置顺序为B\N\A\M vtListOrder.push_back(3); vtListOrder.push_back(5); vtListOrder.push_back(2); vtListOrder.push_back(4); break; default: vtListOrder.push_back(2); vtListOrder.push_back(3); vtListOrder.push_back(4); vtListOrder.push_back(5); break; } //根据vtListOrder来进行列的顺序的更改 CHeaderCtrl* pHeaderCtrl = sptConListInfo.GetHeaderCtrl(); if (pHeaderCtrl != NULL) { int nColumnCount = pHeaderCtrl->GetItemCount(); LPINT pnOrder = (LPINT) malloc(nColumnCount*sizeof(int)); ASSERT(pnOrder != NULL); //获得列顺序到数组 sptConListInfo.GetColumnOrderArray(pnOrder, nColumnCount); if (nColumnCount < 5) { if (LANG_ZHCN == g_iUILanguage) AfxMessageBox(_T("解析类别列错误")); else MessageBoxEx(NULL, _T("Parser list column error."), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)); free(pnOrder); return; } int temp ; for (int i = 0; i < vtListOrder.size(); i++) { temp = vtListOrder[i]; pnOrder[i+2] =temp; } //设置列顺序 sptConListInfo.SetColumnOrderArray(nColumnCount, pnOrder); free(pnOrder); } }