237 lines
8.5 KiB
C++
237 lines
8.5 KiB
C++
// 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<int> 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);
|
|
}
|
|
|
|
} |