📄 jhhbdoc.cpp
字号:
{
DisplayDaoException(e);
e->Delete();
return -1;
}
}
else // ODBC
{
m_pStationInfoSet = new CStationInfoSet();
try
{
m_pStationInfoSet->Open();
}
catch (CDBException* e)
{
e->Delete();
return -1;
}
}
// Gen Ctrl Info List
if (m_bUseDao) // DAO
{
m_pDaoStationInfoSet->MoveFirst();
while (!m_pDaoStationInfoSet->IsEOF())
{
CCtrlInfoObject* pCtrlInfo = new CCtrlInfoObject();
pCtrlInfo->m_NO = (int)m_pDaoStationInfoSet->m_NO;
pCtrlInfo->m_nMapIndex = pCtrlInfo->m_NO;
pCtrlInfo->m_bActive = m_pDaoStationInfoSet->m_SW;
pCtrlInfo->m_strStationName = m_pDaoStationInfoSet->m_STATION;
pCtrlInfo->m_strFullName = m_pDaoStationInfoSet->m_NAME;
pCtrlInfo->m_lastTime = CTime::GetCurrentTime()- CTimeSpan(0,0,0,m_nRefreshTimeout);
pCtrlInfo->m_bCommSuccess = FALSE;//2001年6月1日改,原FALSE处为TRUE
m_ctrlInfoArray.Add(pCtrlInfo);
m_pDaoStationInfoSet->MoveNext();
}
}
else // ODBC
{
m_pStationInfoSet->MoveFirst();
while (!m_pStationInfoSet->IsEOF())
{
CCtrlInfoObject* pCtrlInfo = new CCtrlInfoObject();
pCtrlInfo->m_NO = (int)m_pStationInfoSet->m_NO;
pCtrlInfo->m_nMapIndex = pCtrlInfo->m_NO;
pCtrlInfo->m_bActive = m_pStationInfoSet->m_SW;
pCtrlInfo->m_strStationName = m_pStationInfoSet->m_STATION;
pCtrlInfo->m_strFullName = m_pStationInfoSet->m_NAME;
pCtrlInfo->m_lastTime = CTime::GetCurrentTime()- CTimeSpan(0,0,0,m_nRefreshTimeout);
pCtrlInfo->m_bCommSuccess = FALSE;//2001年6月1日改,原FALSE处为TRUE
m_ctrlInfoArray.Add(pCtrlInfo);
m_pStationInfoSet->MoveNext();
}
}
BOOL bEmpty = TRUE;
for (int n = 0; n < m_ctrlInfoArray.GetSize(); ++ n)
{
if (m_ctrlInfoArray[n]->m_bActive)
{
bEmpty = FALSE;
break;
}
}
if (bEmpty)
{
::AfxMessageBox(IDS_EMPTYWARNING, MB_ICONSTOP);
m_ctrlInfoArray[0]->m_bActive = TRUE;
}
if (m_pComm == NULL)
{
CCommSettingsDlg dlg;
m_pComm = new CCommInfo;
m_pComm->Create(
NULL,
CM_COMM,
m_pReadCommBuf,
cMaxReadCommBufLen - sizeof(WORD),
dlg.GetCommPort(),
dlg.GetBaudRate(),
dlg.GetFlowCtrls(),
dlg.GetDataBits(),
dlg.GetStopBits(),
dlg.GetParity(),
TRUE // special
);
if (m_pComm->OpenConnection() == FALSE)
{
::AfxMessageBox(IDS_ERRCOMMCONNECT, MB_OK | MB_ICONSTOP);
}
m_bAutoActivated = FALSE;
m_bRelayActivated = FALSE;
}
/* if (m_pModem == NULL)
{
m_pModem = new CTAPIConnection;
m_pModem->Create(
NULL,
0x00010003, 0x00010004,
CM_MODEM,
m_pReadModemBuf,
cMaxReadModemBufLen - sizeof(WORD));
}
m_bModemConnected = FALSE;
m_ModemWorkStatus = MODEM_WORKSTATUS_NONE;
m_lTotalNoSharedRecords = 0;
m_lSendRecordPosition = 0;
m_lSharedRecordPosition = 0;
ASSERT(m_pModem != NULL);
m_pModem->m_lineArray[m_nModemLine]->WaitCall();*/
m_nWorkTimerID = ::SetTimer(NULL, 0, 1000, TimerProc);
m_timeLast= CTime::GetCurrentTime();
return TRUE;
}
#include <search.h>
int CJHHBDoc::CompareTwoQueryUnit(CSpeedQueryUnit* arg1, CSpeedQueryUnit* arg2)
{
return arg1->m_nOrder - arg2->m_nOrder;
}
BOOL CJHHBDoc::LookupSeepdArray(int nOrder, int& nPos)
{
if (m_pSpeedQueryArray == NULL)
return FALSE;
CSpeedQueryUnit squKey;
squKey.m_nOrder = nOrder;
CSpeedQueryUnit* squResult = (CSpeedQueryUnit*)::bsearch(
&squKey, m_pSpeedQueryArray, m_nSpeedQueryArrayUnit,
sizeof(CSpeedQueryUnit), (int(*)(const void*, const void*))CJHHBDoc::CompareTwoQueryUnit);
if (squResult)
{
// Found it !
nPos = squResult->m_nPos;
return TRUE;
}
else
return FALSE;
}
void CJHHBDoc::GenSpeedArray(void)
{
// must open or requery before
if (m_bUseDao)
{
m_nSpeedQueryArrayUnit = m_pDaoAddDataSet->GetRecordCount();
int nSetCount = 0;
if (m_nSpeedQueryArrayUnit > 0)
{
m_pDaoAddDataSet->MoveFirst();
while (!m_pDaoAddDataSet->IsEOF())
{
m_pDaoAddDataSet->MoveNext();
++ nSetCount;
}
}
m_nSpeedQueryArrayUnit = nSetCount;
TRACE1("The number in set is %d \n", m_nSpeedQueryArrayUnit);
}
else
m_nSpeedQueryArrayUnit = m_pAddDataSet->GetRecordCount();
if (m_nSpeedQueryArrayUnit <= 0)
return;
if (m_pSpeedQueryArray != NULL)
delete m_pSpeedQueryArray;
m_pSpeedQueryArray = new CSpeedQueryUnit[m_nSpeedQueryArrayUnit];
if (m_bUseDao)
{
m_pDaoAddDataSet->MoveFirst();
for (int i = 0; i < m_nSpeedQueryArrayUnit; ++ i)
{
m_pSpeedQueryArray[i].m_nOrder = m_pDaoAddDataSet->m_NO;
m_pSpeedQueryArray[i].m_nPos = i;
m_pDaoAddDataSet->MoveNext();
}
m_pDaoAddDataSet->MoveFirst();
m_nCurQuerySetPos = 0;
}
else
{
m_pAddDataSet->MoveFirst();
for (int i = 0; i < m_nSpeedQueryArrayUnit; ++ i)
{
m_pSpeedQueryArray[i].m_nOrder = m_pAddDataSet->m_NO;
m_pSpeedQueryArray[i].m_nPos = i;
m_pAddDataSet->MoveNext();
}
m_pAddDataSet->MoveFirst();
m_nCurQuerySetPos = 0;
}
}
void CJHHBDoc::DisplayDaoException(CDaoException* e)
{
CString strMsg;
if (e->m_pErrorInfo != NULL)
{
strMsg.Format(
_T("%s (%d)\n\n")
_T("Would you like to see help?"),
(LPCTSTR)e->m_pErrorInfo->m_strDescription,
e->m_pErrorInfo->m_lErrorCode);
if (::AfxMessageBox(strMsg, MB_YESNO) == IDYES)
{
::WinHelp(::GetDesktopWindow(),
e->m_pErrorInfo->m_strHelpFile,
HELP_CONTEXT,
e->m_pErrorInfo->m_lHelpContext);
}
}
else
{
strMsg.Format(
_T("ERROR:CDaoException\n\n")
_T("SCODE_CODE =%d\n")
_T("SCODE_FACILITY =%d\n")
_T("SCODE_SEVERITY =%d\n")
_T("ResultFromScode =%d\n"),
SCODE_CODE(e->m_scode),
SCODE_FACILITY(e->m_scode),
SCODE_SEVERITY(e->m_scode),
ResultFromScode(e->m_scode));
::AfxMessageBox(strMsg);
}
}
#include "DateDlg.h"
void CJHHBDoc::OnDataHistory()
{
CDateDlg dlg;
if (dlg.DoModal() == IDCANCEL)
return;
m_curSpyTime = dlg.GetDate();
RefreshData(m_curSpyTime);
UpdateAllViews(NULL);
}
//BOOL CJHHBDoc::AddSampleData(int nStation, CTime& time, WORD nPHNumber) //BYTE nPHNumber) ljh
BOOL CJHHBDoc::AddSampleData(int nStation, CTime& time, WORD nPHNumber, WORD nCODNumber, WORD nFLOWNumber,WORD nNH4NNumber) // ljh add
{
int nYear = time.GetYear();
int nMonth = time.GetMonth();
int nDay = time.GetDay();
int nHour = time.GetHour();
int nMinute = time.GetMinute();
CString strTime;
strTime.Format(IDS_SAVETIMEFMT, nHour, nMinute);
// find the record, if exist, update it, else add it !
const int nMinuteInHour = 60;
int nOrder = (nHour * nMinuteInHour + nMinute) / nTimeSpan + 1;
COleDateTime date = COleDateTime(nYear, nMonth, nDay, 0, 0, 0);
if (m_bUseDao) // DAO
{
try
{
// m_pDaoAddDataSet->GenParam(date, nStation, nOrder);
// m_pDaoAddDataSet->Requery();
// if (m_pDaoAddDataSet->GetRecordCount() == 0)
int nPos;
if (!LookupSeepdArray(nOrder, nPos))
{
// not found, add new !
m_pDaoAddDataSet->AddNew();
}
else
{
// found it, edit !
// because ASC
for (int i = m_nCurQuerySetPos; i < nPos; ++ i)
{
m_pDaoAddDataSet->MoveNext();
m_nCurQuerySetPos = nPos;
}
m_pDaoAddDataSet->Edit();
}
}
catch (CDaoException* e)
{
DisplayDaoException(e);
e->Delete();
}
if (!m_pDaoAddDataSet->CanUpdate())
{
TRACE0("Can't Write to the Database !\n");
GetLogView()->AddNewLog(_T("Error: Datebase can not to be update now."));
return FALSE;
}
m_pDaoAddDataSet->m_NO = nOrder;
m_pDaoAddDataSet->m_STATION = nStation;
m_pDaoAddDataSet->m_PHDATE = date;
m_pDaoAddDataSet->m_PHTIME = strTime;
m_pDaoAddDataSet->m_PH = CalcPHValue(nStation, nPHNumber);
//------------------- ljh benin
m_pDaoAddDataSet->m_COD = CalcCODValue(nStation, nCODNumber);
m_pDaoAddDataSet->m_FLOW = CalcPHValue(nStation, nFLOWNumber);
m_pDaoAddDataSet->m_NH4N = CalcNH4NValue(nStation, nNH4NNumber);
//------------------- ljh end
try
{
m_pDaoAddDataSet->Update();
}
catch (CDaoException* e)
{
DisplayDaoException(e);
e->Delete();
}
}
else // ODBC
{
try
{
// m_pAddDataSet->GenParam(date, nStation, nOrder);
// m_pAddDataSet->Requery();
// if (m_pAddDataSet->GetRecordCount() == 0)
int nPos;
if (!LookupSeepdArray(nOrder, nPos))
{
// not found, add new !
m_pAddDataSet->AddNew();
}
else
{
// found it, edit !
// because ASC
for (int i = m_nCurQuerySetPos; i < nPos; ++ i)
{
m_pAddDataSet->MoveNext();
m_nCurQuerySetPos = nPos;
}
m_pAddDataSet->Edit();
}
}
catch (CDBException* e)
{
e->Delete();
}
if (!m_pAddDataSet->CanUpdate())
{
TRACE0("Can't Write to the Database !\n");
return FALSE;
}
m_pAddDataSet->m_NO = nOrder;
m_pAddDataSet->m_STATION = nStation;
m_pAddDataSet->m_PHDATE = CTime(date.GetYear(), date.GetMonth(), date.GetDay(), 0, 0, 0);
m_pAddDataSet->m_PHTIME = strTime;
m_pAddDataSet->m_PH = CalcPHValue(nStation, nPHNumber);
//------------------- ljh benin
m_pAddDataSet->m_COD = CalcCODValue(nStation, nCODNumber);
m_pAddDataSet->m_FLOW = CalcPHValue(nStation, nFLOWNumber);
m_pAddDataSet->m_NH4N = CalcNH4NValue(nStation, nNH4NNumber);
//------------------- ljh end
try
{
m_pAddDataSet->Update();
}
catch (CDBException* e)
{
e->Delete();
}
}
/*
TRACE1("The station is %d ! \n", nStation);
TRACE1("The send byte count is %d ! \n", *((WORD*)(m_pReadCommBuf + sizeof(WORD) + sizeof(BYTE))));
TRACE1("The month is %d ! \n", (int)*(m_pReadCommBuf + 5));
TRACE1("The day is %d ! \n", (int)*(m_pReadCommBuf + 6));
TRACE1("The hour is %d ! \n", (int)*(m_pReadCommBuf + 7));
TRACE1("The minute is %d ! \n", (int)*(m_pReadCommBuf + 8));
TRACE1("The PH is %d ! \n\n\n\n", (int)*(m_pReadCommBuf + 9));
*/
return TRUE;
}
double CJHHBDoc::CalcPHValue(int nStation, WORD nPHNubmer) //BYTE nPHNubmer) ljh
{
double dPHNumber = (double)nPHNubmer;
double nADTop;
double nADBottom;
if (m_bUseDao) // DAO
{
m_pDaoStationInfoSet->MoveFirst();
for (int i = 1; i < nStation ; ++ i)
{
m_pDaoStationInfoSet->MoveNext();
}
nADTop = m_pDaoStationInfoSet->m_nADTop;
nADBottom = m_pDaoStationInfoSet->m_nADBottom;
}
else // ODBC
{
m_pStationInfoSet->MoveFirst();
for (int i = 1; i < nStation; ++ i)
{
m_pStationInfoSet->MoveNext();
}
nADTop = m_pStationInfoSet->m_nADTop;
nADBottom = m_pStationInfoSet->m_nADBottom;
}
if (dPHNumber < nADBottom)
dPHNumber = nADBottom; // Update at 1997.5.29 Let return value >=0
return (dPHNumber - nADBottom) * (nPHTop - nPHBottom) / (nADTop - nADBottom) + nPHBottom;
}
//---------------------- ljh begin
double CJHHBDoc::CalcCODValue(int nStation, WORD nCODNubmer)
{
double dCODNumber = (double)nCODNubmer;
double nCODTOP;
double nCODBOT;
if (m_bUseDao) // DAO
{
m_pDaoStationInfoSet->MoveFirst();
for (int i = 1; i < nStation ; ++ i)
{
m_pDaoStationInfoSet->MoveNext();
}
nCODTOP = m_pDaoStationInfoSet->m_nCODTOP;
nCODBOT = m_pDaoStationInfoSet->m_nCODBOT;
}
else // ODBC
{
m_pStationInfoSet->MoveFirst();
for (int i = 1; i < nStation; ++ i)
{
m_pStationInfoSet->MoveNext();
}
nCODTOP = m_pStationInfoSet->m_nCODTOP;
nCODBOT = m_pStationInfoSet->m_nCODBOT;
}
if (dCODNumber < nCODBOT)
dCODNumber = nCODBOT;
return (dCODNumber - nCODBOT) * (nCODTOP - nCODBOT) / (nCODTOP - nCODBOT) + nCODBOT;
}
double CJHHBDoc::CalcFLOWValue(int nStation, WORD nFLOWNubmer)
{
double dFLOWNumber = (double)nFLOWNubmer;
double nFLOWTOP;
double nFLOWBOT;
if (m_bUseDao) // DAO
{
m_pDaoStationInfoSet->MoveFirst();
for (int i = 1; i < nStation ; ++ i)
{
m_pDaoStationInfoSet->MoveNext();
}
nFLOWTOP = m_pDaoStationInfoSet->m_nFLOWTOP;
nFLOWBOT = m_pDaoStationInfoSet->m_nFLOWBOT;
}
else // ODBC
{
m_pStationInfoSet->MoveFirst();
for (int i = 1; i < nStation; ++ i)
{
m_pStationInfoSet->MoveNext();
}
nFLOWTOP = m_pStationInfoSet->m_nFLOWTOP;
nFLOWBOT = m_pStationInfoSet->m_nFLOWBOT;
}
if (dFLOWNumber < nFLOWBOT)
dFLOWNumber = nFLOWBOT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -