DBOperator.cpp
上传用户:xiaoke98
上传日期:2014-06-29
资源大小:5718k
文件大小:40k
源码类别:

家庭/个人应用

开发平台:

Visual C++

  1. // DBOperator.cpp: implementation of the CDBOperator class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "HomeFinanceManager.h"
  6. #include "DBOperator.h"
  7. #include "SysStatus.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CDBOperator gDBOperator;
  17. CDBOperator::CDBOperator()
  18. {
  19. //获取系统目录
  20. char strModuleFileName[400];
  21. ::GetModuleFileName(NULL, strModuleFileName, 400);
  22. char* pChar = strModuleFileName;
  23. while(*(pChar++) != ''){};
  24. while(*(pChar--) != '\'){};
  25. *(++pChar) = '';
  26. m_strAppPath = strModuleFileName;
  27. if(ConnectToDB() == FALSE)
  28. {
  29. AfxMessageBox("连接的数据库不存在!系统将会退出");
  30. ExitProcess(1);
  31. }
  32. }
  33. CDBOperator::~CDBOperator()
  34. {
  35. ::CoUninitialize();
  36. }
  37. BOOL  CDBOperator::ConnectToDB(void)
  38. {
  39. ::CoInitialize(NULL);
  40. try
  41. {
  42. m_DBConnection.CreateInstance(__uuidof(Connection));
  43. CString strConnectStr;
  44. strConnectStr.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=%s\HomeFinanceManager.mdb",
  45. m_strAppPath);
  46. m_DBConnection->CursorLocation = adUseClient;
  47. m_DBConnection->Open(_bstr_t( strConnectStr.GetBuffer(0)), L"", L"", -1);
  48. m_Command.CreateInstance(__uuidof(Command));
  49. m_Command->ActiveConnection = m_DBConnection;
  50. m_Command->CommandType = adCmdText;
  51. m_Recordset.CreateInstance(__uuidof(Recordset));
  52. return TRUE;
  53. }catch(_com_error &e)
  54. {
  55. _bstr_t bstrSource(e.Source());
  56.         _bstr_t bstrDescription(e.Description());
  57.         TRACE("Exception throw for classes generated by #import");
  58.         TRACE("tCode=%08lxn", e.Error);
  59.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  60.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  61.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  62. return FALSE;
  63. }
  64. return FALSE;
  65. }
  66. //-------------------------------------------------------------------------------------------------
  67. BOOL CDBOperator::addUser(CString strUserName, CString strPassword, char* pImgData, int iDataLen)
  68. {
  69. CString strSQL;
  70. strSQL.Format("select * from userinfo");
  71. try
  72. {
  73. long state = m_Recordset->GetState();
  74. if(state)
  75. {
  76. m_Recordset->Close();
  77. }
  78. m_Recordset->Open("SELECT * FROM UserInfo",_variant_t((IDispatch *)m_DBConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);
  79. state = m_Recordset->GetState();
  80. m_Recordset->AddNew();
  81. m_Recordset->PutCollect("UserName",_variant_t(strUserName));
  82. m_Recordset->PutCollect("Passwd",_variant_t(strPassword));
  83. state = m_Recordset->GetState();
  84. //添加图片信息
  85. char *pBuf = pImgData;
  86. VARIANT varBLOB;
  87. SAFEARRAY *psa;
  88. SAFEARRAYBOUND rgsabound[1];
  89. if(pBuf)
  90. {    
  91. rgsabound[0].lLbound = 0;
  92. rgsabound[0].cElements = iDataLen;
  93. psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
  94. for (long i = 0; i < (long)iDataLen; i++)
  95. SafeArrayPutElement (psa, &i, pBuf++);
  96. varBLOB.vt = VT_ARRAY | VT_UI1;
  97. varBLOB.parray = psa;
  98. m_Recordset->GetFields()->GetItem("UserImg")->AppendChunk(varBLOB);
  99. }
  100. m_Recordset->Update();
  101. }
  102. catch(_com_error &e)
  103. {
  104. bstr_t bstrSource(e.Source());
  105.         _bstr_t bstrDescription(e.Description());
  106.         TRACE("Exception throw for classes generated by #import");
  107.         TRACE("tCode=%08lxn", e.Error);
  108.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  109.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  110.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  111. }
  112. AfxMessageBox("成功添加新用户");
  113. return TRUE;
  114. }
  115. //-------------------------------------------------------------------------------------
  116. BOOL  CDBOperator::getUserImg(CString strUserName, char** pImageData, int& iDataLen)
  117. {
  118. CString strSQL;
  119. strSQL.Format("select UserImg from userinfo where UserName='%s'",
  120. strUserName.GetBuffer(0));
  121. try
  122. {
  123. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  124. _variant_t vra;
  125. VARIANT *vt1 = NULL;
  126. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  127. if(m_Recordset->adoEOF)
  128. {
  129. return FALSE;
  130. }
  131. iDataLen = m_Recordset->GetFields()->GetItem("UserImg")->ActualSize;
  132. if(iDataLen > 0)
  133. {
  134. *pImageData = new char[iDataLen + 1];
  135. _variant_t varBLOB;
  136. varBLOB = m_Recordset->GetFields()->GetItem("UserImg")->GetChunk(iDataLen);
  137. if(varBLOB.vt == (VT_ARRAY | VT_UI1))
  138. {
  139. char *pBuf = NULL;
  140. SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
  141. memcpy(*pImageData,pBuf,iDataLen); ///复制数据到缓冲区m_pBMPBuffer
  142. SafeArrayUnaccessData (varBLOB.parray);
  143. }
  144. return TRUE;
  145. }
  146. return FALSE;
  147. }
  148. catch(_com_error &e)
  149. {
  150. bstr_t bstrSource(e.Source());
  151.         _bstr_t bstrDescription(e.Description());
  152.         TRACE("Exception throw for classes generated by #import");
  153.         TRACE("tCode=%08lxn", e.Error);
  154.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  155.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  156.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  157. }
  158. return TRUE;
  159. }
  160. //-------------------------------------------------------------------------------------------------
  161. BOOL CDBOperator::VerifyUser(CString& strUser, CString& strPasswd)
  162. {
  163. try
  164. {
  165. CString strSQL;
  166. strSQL.Format("select * from userinfo where UserName='%s' and Passwd='%s'", 
  167.            strUser.GetBuffer(0),
  168.    strPasswd.GetBuffer(0));
  169. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  170. _variant_t vra;
  171. VARIANT *vt1 = NULL;
  172. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  173.     if(m_Recordset->adoEOF)
  174. {
  175. return FALSE;
  176. }
  177. return TRUE;
  178. }
  179. catch(_com_error &e)
  180. {
  181. _bstr_t bstrSource(e.Source());
  182. _bstr_t bstrDescription(e.Description());
  183. TRACE("Exception throw for classes generated by #import");
  184. TRACE("tCode=%08lxn", e.Error);
  185. TRACE("tCode meaning = %sn", e.ErrorMessage);
  186. TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  187. TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  188. return FALSE;
  189. }
  190. return FALSE;
  191. }
  192. //-------------------------------------------------------------------------------------------------
  193. void    CDBOperator::selectFinanceIn(CString& strStartTime, CString& strEndTime, CFinanceDBGrid& DBGrid, CString& strTotalIn, SELECTORDER order)
  194. {
  195. try
  196. {
  197. CString strSQL;
  198. CString strCondtionSQL;
  199. strCondtionSQL.Format("where MoneyIncome.InDate between #%s# and #%s#", strStartTime, strEndTime);
  200. _variant_t vra;
  201. VARIANT *vt1 = NULL;
  202. strSQL.Format("select SUM(MoneyIncome.InMoney) from MoneyIncome %s", strCondtionSQL);
  203. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  204. long state = m_Recordset->GetState();
  205. if(state)
  206. {
  207. m_Recordset->Close();
  208. }
  209. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  210. long recordCount = m_Recordset->GetRecordCount();
  211. if(recordCount)
  212. {
  213. m_Recordset->MoveFirst();
  214. _variant_t Value = m_Recordset->GetCollect((long)0);
  215. COleCurrency var_currency;
  216. if(Value.vt == VT_CY)
  217. {
  218. var_currency = Value.cyVal;
  219. strTotalIn = var_currency.Format(0);
  220. }
  221. }
  222. if(enDate == order)
  223. {
  224. strCondtionSQL.Format("where MoneyIncome.InDate between #%s# and #%s# order by MoneyIncome.InDate asc", strStartTime, strEndTime);
  225. }
  226. CString strSearchSQL;
  227. strSearchSQL.Format("select MoneyIncome.id as 编号, MoneyIncome.InMoney as 金额, ClassInfo.classremark as 类别 , MoneyIncome.InDate as 日期, MoneyIncome.operator as 操作人 , MoneyIncome.remark as 备注 from MoneyIncome inner join ClassInfo on ClassInfo.classid = MoneyIncome.InClass ");
  228. strSQL = strSearchSQL + strCondtionSQL;
  229. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  230. state = m_Recordset->GetState();
  231. if(state)
  232. {
  233. m_Recordset->Close();
  234. }
  235. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  236. recordCount = m_Recordset->GetRecordCount();
  237. DBGrid.setRecordSet(m_Recordset);
  238. DBGrid.Reflesh();
  239. }catch(_com_error &e)
  240. {
  241. _bstr_t bstrSource(e.Source());
  242.         _bstr_t bstrDescription(e.Description());
  243.         TRACE("Exception throw for classes generated by #import");
  244.         TRACE("tCode=%08lxn", e.Error);
  245.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  246.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  247.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  248. }
  249. }
  250. //-------------------------------------------------------------------------------------------------
  251. void    CDBOperator::ReOrderFinanceIn(CString& strStartTime, 
  252. CString& strEndTime, 
  253. CFinanceDBGrid& DBGrid, 
  254. CString& strTotalIn, 
  255. CString& strTitle, 
  256. CString& strOder)
  257. {
  258. try
  259. {
  260. CString strSQL;
  261. CString strCondtionSQL;
  262. strCondtionSQL.Format("where MoneyIncome.InDate between #%s# and #%s#", strStartTime, strEndTime);
  263. _variant_t vra;
  264. VARIANT *vt1 = NULL;
  265. strSQL.Format("select SUM(MoneyIncome.InMoney) from MoneyIncome %s", strCondtionSQL);
  266. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  267. long state = m_Recordset->GetState();
  268. if(state)
  269. {
  270. m_Recordset->Close();
  271. }
  272. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  273. long recordCount = m_Recordset->GetRecordCount();
  274. if(recordCount)
  275. {
  276. m_Recordset->MoveFirst();
  277. _variant_t Value = m_Recordset->GetCollect((long)0);
  278. COleCurrency var_currency;
  279. if(Value.vt == VT_CY)
  280. {
  281. var_currency = Value.cyVal;
  282. strTotalIn = var_currency.Format(0);
  283. }
  284. }
  285. CString strOderTitle;
  286. if(strTitle.Compare("金额") == 0)
  287. {
  288. strOderTitle = "MoneyIncome.InMoney";
  289. }
  290. if(strTitle.Compare("类别") == 0)
  291. {
  292. strOderTitle = "ClassInfo.classremark";
  293. }
  294. if(strTitle.Compare("日期") == 0)
  295. {
  296. strOderTitle = "MoneyIncome.InDate";
  297. }
  298. if(strTitle.Compare("操作人") == 0)
  299. {
  300. strOderTitle = "MoneyIncome.operator";
  301. }
  302. strCondtionSQL.Format("where MoneyIncome.InDate between #%s# and #%s# order by %s %s", strStartTime, strEndTime, strOderTitle, strOder);
  303. CString strSearchSQL;
  304. strSearchSQL.Format("select MoneyIncome.id as 编号, MoneyIncome.InMoney as 金额, ClassInfo.classremark as 类别 , MoneyIncome.InDate as 日期, MoneyIncome.operator as 操作人 , MoneyIncome.remark as 备注 from MoneyIncome inner join ClassInfo on ClassInfo.classid = MoneyIncome.InClass ");
  305. strSQL = strSearchSQL + strCondtionSQL;
  306. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  307. state = m_Recordset->GetState();
  308. if(state)
  309. {
  310. m_Recordset->Close();
  311. }
  312. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  313. recordCount = m_Recordset->GetRecordCount();
  314. DBGrid.setRecordSet(m_Recordset);
  315. DBGrid.Reflesh();
  316. }catch(_com_error &e)
  317. {
  318. _bstr_t bstrSource(e.Source());
  319.         _bstr_t bstrDescription(e.Description());
  320.         TRACE("Exception throw for classes generated by #import");
  321.         TRACE("tCode=%08lxn", e.Error);
  322.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  323.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  324.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  325. }
  326. }
  327. //-------------------------------------------------------------------------------------------------
  328. void    CDBOperator::addFinanceIn(CString& strMoney, CString& strClass, 
  329.  CString& strDate, CString& strRemark)
  330. {
  331. try
  332. {
  333. CString strUser;
  334. strUser = gSysStatus.getUserName();
  335. CString strSQL;
  336. strSQL.Format("INSERT INTO MoneyIncome (InMoney,InClass,InDate,operator,remark) VALUES (%s,%s,'%s','%s','%s')",
  337. strMoney,  strClass, strDate, strUser, strRemark);
  338. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  339. _variant_t vra;
  340. VARIANT *vt1 = NULL;
  341. m_Command->Execute(&vra, vt1, adCmdText);
  342. AfxMessageBox("成功添加一笔收入");
  343. }catch(_com_error &e)
  344. {
  345. _bstr_t bstrSource(e.Source());
  346.         _bstr_t bstrDescription(e.Description());
  347.         TRACE("Exception throw for classes generated by #import");
  348.         TRACE("tCode=%08lxn", e.Error);
  349.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  350.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  351.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  352. }
  353. }
  354. //-------------------------------------------------------------------------------------------------
  355. void    CDBOperator::addInClass(CString& strClass)
  356. {
  357. try
  358. {
  359. if(strClass.IsEmpty() || getClassID(strClass) > -1)
  360. {
  361. AfxMessageBox("该类别已经存在或为空, 无法添加!");
  362. return;
  363. }
  364. int iClassID;
  365. CString strSQL;
  366. strSQL.Format("select max(classid) from classinfo");
  367. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  368. _variant_t vra;
  369. VARIANT *vt1 = NULL;
  370. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  371. if(!m_Recordset->adoEOF)
  372. {
  373. _variant_t Value = m_Recordset->GetCollect((long)0);
  374. iClassID = (long)Value;
  375. }
  376. iClassID += 1;
  377. strSQL.Format("insert into classinfo(classid, classremark) values(%d, '%s')", iClassID, strClass.GetBuffer(0));
  378. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  379. m_Command->Execute(&vra, vt1, adCmdText);
  380. }catch(_com_error &e)
  381. {
  382. _bstr_t bstrSource(e.Source());
  383.         _bstr_t bstrDescription(e.Description());
  384.         TRACE("Exception throw for classes generated by #import");
  385.         TRACE("tCode=%08lxn", e.Error);
  386.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  387.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  388.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  389. }
  390. AfxMessageBox("成功添加新的收入类别");
  391. }
  392. //-------------------------------------------------------------------------------------------------
  393. void    CDBOperator::addOutClass(CString& strClass)
  394. {
  395. try
  396. {
  397. if(strClass.IsEmpty() || getOutClassID(strClass) > -1)
  398. {
  399. AfxMessageBox("该类别已经存在或为空, 无法添加!");
  400. return;
  401. }
  402. int iClassID;
  403. CString strSQL;
  404. strSQL.Format("select max(classid) from OutClass");
  405. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  406. _variant_t vra;
  407. VARIANT *vt1 = NULL;
  408. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  409. if(!m_Recordset->adoEOF)
  410. {
  411. _variant_t Value = m_Recordset->GetCollect((long)0);
  412. iClassID = (long)Value;
  413. }
  414. iClassID += 1;
  415. strSQL.Format("insert into OutClass(classid, remark) values(%d, '%s')", iClassID, strClass.GetBuffer(0));
  416. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  417. m_Command->Execute(&vra, vt1, adCmdText);
  418. }catch(_com_error &e)
  419. {
  420. _bstr_t bstrSource(e.Source());
  421.         _bstr_t bstrDescription(e.Description());
  422.         TRACE("Exception throw for classes generated by #import");
  423.         TRACE("tCode=%08lxn", e.Error);
  424.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  425.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  426.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  427. }
  428. AfxMessageBox("成功添加新的支出类别");
  429. }
  430. //-------------------------------------------------------------------------------------------------
  431. int     CDBOperator::getClassID(CString& strClass)
  432. {
  433. int iClassID = -1;
  434. try
  435. {
  436. CString strSQL;
  437. strSQL.Format("select classid from classinfo where classremark = '%s'", strClass.GetBuffer(0));
  438. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  439. _variant_t vra;
  440. VARIANT *vt1 = NULL;
  441. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  442. if(!m_Recordset->adoEOF)
  443. {
  444. _variant_t Value = m_Recordset->GetCollect((long)0);
  445. iClassID = (long)Value;
  446. }
  447. return iClassID;
  448. }catch(_com_error &e)
  449. {
  450. _bstr_t bstrSource(e.Source());
  451.         _bstr_t bstrDescription(e.Description());
  452.         TRACE("Exception throw for classes generated by #import");
  453.         TRACE("tCode=%08lxn", e.Error);
  454.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  455.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  456.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  457. }
  458. return iClassID;
  459. }
  460. //-------------------------------------------------------------------------------------------------
  461. void CDBOperator::getMoneyInClassInfo(CSysDataStruct::CClassInfo& ClassInfo)
  462. {
  463. try
  464. {
  465. _variant_t vra;
  466. VARIANT *vt1 = NULL;
  467. CString strSQL;
  468. strSQL.Format("select classid, classremark from ClassInfo");
  469. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  470. long state = m_Recordset->GetState();
  471. if(state)
  472. {
  473. m_Recordset->Close();
  474. }
  475. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  476. long recordCount = m_Recordset->GetRecordCount();
  477. ClassInfo.m_iClassNum = 0;
  478. if(recordCount)
  479. {
  480. m_Recordset->MoveFirst();
  481. while(!m_Recordset->adoEOF)
  482. {
  483. _variant_t Value = m_Recordset->GetCollect((long)1);
  484. if(Value.vt ==  VT_BSTR)
  485. {
  486. ClassInfo.m_Classes[ClassInfo.m_iClassNum] = CString(Value.bstrVal);
  487. }
  488. ClassInfo.m_iClassNum++;
  489. m_Recordset->MoveNext();
  490. }
  491. }
  492. }catch(_com_error &e)
  493. {
  494. _bstr_t bstrSource(e.Source());
  495.         _bstr_t bstrDescription(e.Description());
  496.         TRACE("Exception throw for classes generated by #import");
  497.         TRACE("tCode=%08lxn", e.Error);
  498.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  499.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  500.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  501. }
  502. }
  503. //-------------------------------------------------------------------------------------------------
  504. void CDBOperator::getInClassInfo(CListCtrl* pdbGrid)
  505. {
  506. try
  507. {
  508. CString strSQL = "Select * from ClassInfo";
  509. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  510. _variant_t vra;
  511. VARIANT *vt1 = NULL;
  512. long state = m_Recordset->GetState();
  513. if(state)
  514. {
  515. m_Recordset->Close();
  516. }
  517. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  518. long recordCount = m_Recordset->GetRecordCount();
  519. if(recordCount)
  520. {
  521. int iColumNum = pdbGrid->GetHeaderCtrl()->GetItemCount();
  522.             RECT rcWindow;
  523. pdbGrid->GetClientRect(&rcWindow);
  524. for(int i = 0; i < iColumNum; i++)
  525. {
  526. pdbGrid->DeleteColumn(i);
  527. }
  528.             int iListWidth = (rcWindow.right - rcWindow.left);
  529. LONG lStyle = pdbGrid->SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE);
  530. lStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP;
  531. pdbGrid->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)lStyle);
  532. LV_COLUMN lvc;
  533. lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH /*| LVCF_FMT*/;
  534. lvc.iSubItem = 0;
  535. lvc.pszText = "编号";
  536. lvc.cx = iListWidth / 5;
  537. pdbGrid->InsertColumn(0,&lvc);
  538. lvc.iSubItem = 1;
  539. lvc.pszText = "类别";
  540. lvc.cx = iListWidth - iListWidth / 5;
  541. pdbGrid->InsertColumn(1,&lvc);
  542. pdbGrid->DeleteAllItems();
  543. int iPos = -1;
  544. m_Recordset->MoveFirst();
  545. while(!m_Recordset->adoEOF)
  546. {
  547. LV_ITEM lvitem;
  548. lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
  549. lvitem.state = 0;      
  550. lvitem.stateMask = 0; 
  551. CString strTemp;
  552. _variant_t Value;
  553. lvitem.iItem = ++iPos;
  554. lvitem.iSubItem = 0;
  555. Value = m_Recordset->GetCollect("classid");
  556. int iClassid = (int)Value.lVal;
  557. strTemp.Format("%d", iClassid);
  558. lvitem.pszText = strTemp.GetBuffer(0);
  559. pdbGrid->InsertItem(&lvitem);
  560. Value = m_Recordset->GetCollect("classremark");
  561. strTemp = Value.bstrVal;
  562. pdbGrid->SetItemText(iPos, 1, (LPCTSTR)strTemp.GetBuffer(0));
  563. m_Recordset->MoveNext();
  564. }
  565. }
  566. }catch(_com_error &e)
  567. {
  568. _bstr_t bstrSource(e.Source());
  569.         _bstr_t bstrDescription(e.Description());
  570.         TRACE("Exception throw for classes generated by #import");
  571.         TRACE("tCode=%08lxn", e.Error);
  572.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  573.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  574.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  575. }
  576. }
  577. //-------------------------------------------------------------------------------------------------
  578. void CDBOperator::selectFinanceOut(CString& strStartTime, 
  579.   CString& strEndTime, 
  580.   CFinanceDBGrid& DBGrid, 
  581.   CString& strTotalOut, 
  582.   SELECTORDER order)
  583. {
  584. try
  585. {
  586. CString strSQL;
  587. CString strCondtionSQL;
  588. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s# ", strStartTime, strEndTime);
  589. _variant_t vra;
  590. VARIANT *vt1 = NULL;
  591. long recordCount;
  592. strSQL.Format("select SUM(MoneyOut.OutMoney) from MoneyOut %s", strCondtionSQL);
  593. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  594. long state = m_Recordset->GetState();
  595. if(state)
  596. {
  597. m_Recordset->Close();
  598. }
  599. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  600. recordCount = m_Recordset->GetRecordCount();
  601. if(recordCount)
  602. {
  603. m_Recordset->MoveFirst();
  604. _variant_t Value = m_Recordset->GetCollect((long)0);
  605. COleCurrency var_currency;
  606. if(Value.vt == VT_CY)
  607. {
  608. var_currency = Value.cyVal;
  609. strTotalOut = var_currency.Format(0);
  610. }
  611. }
  612. if( enDate == order)
  613. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s# order by  MoneyOut.Outdate asc", strStartTime, strEndTime);
  614. if( enMoney == order)
  615. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s# order by  MoneyOut.OutMoney desc", strStartTime, strEndTime);
  616. CString strSearchSQL;
  617. strSearchSQL.Format("select MoneyOut.id as 编号, MoneyOut.OutMoney as 金额, OutClass.remark as 类别 ,
  618.  MoneyOut.remark as 备注, MoneyOut.Outdate as 日期 , MoneyOut.operator as 操作人
  619.  from MoneyOut inner join OutClass on OutClass.classid = MoneyOut.OutClass ");
  620.  /*strSearchSQL.Format("select MoneyOut.id as 编号, MoneyOut.OutMoney as 金额, MoneyOut.Outdate as 日期, MoneyOut.operator as 操作人 , MoneyOut.remark as 备注 
  621.  from MoneyOut ");*/
  622. strSQL = strSearchSQL + strCondtionSQL;
  623. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  624. state = m_Recordset->GetState();
  625. if(state)
  626. {
  627. m_Recordset->Close();
  628. }
  629. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  630. recordCount = m_Recordset->GetRecordCount();
  631. DBGrid.setRecordSet(m_Recordset);
  632. DBGrid.Reflesh();
  633. }catch(_com_error &e)
  634. {
  635. _bstr_t bstrSource(e.Source());
  636.         _bstr_t bstrDescription(e.Description());
  637.         TRACE("Exception throw for classes generated by #import");
  638.         TRACE("tCode=%08lxn", e.Error);
  639.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  640.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  641.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  642. }
  643. }
  644. //-------------------------------------------------------------------------------------------------
  645. void    CDBOperator::ReOrderFinanceOut(CString& strStartTime, 
  646.    CString& strEndTime, 
  647.    CFinanceDBGrid& DBGrid, 
  648.    CString& strTotalOut, 
  649.    CString& strTitle, 
  650.    CString& strOder)
  651. {
  652. try
  653. {
  654. CString strSQL;
  655. CString strCondtionSQL;
  656. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s# ", strStartTime, strEndTime);
  657. _variant_t vra;
  658. VARIANT *vt1 = NULL;
  659. long recordCount;
  660. strSQL.Format("select SUM(MoneyOut.OutMoney) from MoneyOut %s", strCondtionSQL);
  661. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  662. long state = m_Recordset->GetState();
  663. if(state)
  664. {
  665. m_Recordset->Close();
  666. }
  667. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  668. recordCount = m_Recordset->GetRecordCount();
  669. if(recordCount)
  670. {
  671. m_Recordset->MoveFirst();
  672. _variant_t Value = m_Recordset->GetCollect((long)0);
  673. COleCurrency var_currency;
  674. if(Value.vt == VT_CY)
  675. {
  676. var_currency = Value.cyVal;
  677. strTotalOut = var_currency.Format(0);
  678. }
  679. }
  680. CString strOrderTitle;
  681. if(strTitle.Compare("金额") == 0)
  682. {
  683. strOrderTitle.Format("%s", "MoneyOut.OutMoney");
  684. }
  685. if(strTitle.Compare("类别") == 0)
  686. {
  687. strOrderTitle.Format("%s", "OutClass.remark");
  688. }
  689. if(strTitle.Compare("日期") == 0)
  690. {
  691. strOrderTitle.Format("%s", "MoneyOut.Outdate");
  692. }
  693. if(strTitle.Compare("操作人") == 0)
  694. {
  695. strOrderTitle.Format("%s", "MoneyOut.operator");
  696. }
  697. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s# order by  %s %s", strStartTime, strEndTime, strOrderTitle, strOder);
  698. CString strSearchSQL;
  699. strSearchSQL.Format("select MoneyOut.id as 编号, MoneyOut.OutMoney as 金额, OutClass.remark as 类别 ,
  700.  MoneyOut.remark as 备注, MoneyOut.Outdate as 日期 , MoneyOut.operator as 操作人
  701.  from MoneyOut inner join OutClass on OutClass.classid = MoneyOut.OutClass ");
  702.  /*strSearchSQL.Format("select MoneyOut.id as 编号, MoneyOut.OutMoney as 金额, MoneyOut.Outdate as 日期, MoneyOut.operator as 操作人 , MoneyOut.remark as 备注 
  703.  from MoneyOut ");*/
  704. strSQL = strSearchSQL + strCondtionSQL;
  705. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  706. state = m_Recordset->GetState();
  707. if(state)
  708. {
  709. m_Recordset->Close();
  710. }
  711. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  712. recordCount = m_Recordset->GetRecordCount();
  713. DBGrid.setRecordSet(m_Recordset);
  714. DBGrid.Reflesh();
  715. }catch(_com_error &e)
  716. {
  717. _bstr_t bstrSource(e.Source());
  718.         _bstr_t bstrDescription(e.Description());
  719.         TRACE("Exception throw for classes generated by #import");
  720.         TRACE("tCode=%08lxn", e.Error);
  721.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  722.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  723.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  724. }
  725. }
  726. //支出相关函数
  727. //-------------------------------------------------------------------------------------------------
  728. int     CDBOperator::getOutClassID(CString& strClass)
  729. {
  730. int iClassID = -1;
  731. try
  732. {
  733. CString strSQL;
  734. strSQL.Format("select classid from OutClass where remark = '%s'", strClass.GetBuffer(0));
  735. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  736. _variant_t vra;
  737. VARIANT *vt1 = NULL;
  738. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  739. if(!m_Recordset->adoEOF)
  740. {
  741. _variant_t Value = m_Recordset->GetCollect((long)0);
  742. iClassID = (long)Value;
  743. }
  744. return iClassID;
  745. }catch(_com_error &e)
  746. {
  747. _bstr_t bstrSource(e.Source());
  748.         _bstr_t bstrDescription(e.Description());
  749.         TRACE("Exception throw for classes generated by #import");
  750.         TRACE("tCode=%08lxn", e.Error);
  751.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  752.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  753.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  754. }
  755. return iClassID;
  756. }
  757. //-------------------------------------------------------------------------------------------------
  758. void CDBOperator::addFinanceOut(CString& strMoney, CString& strClass, CString& strDate, CString& strRemark)
  759. {
  760. try
  761. {
  762. CString strUser;
  763. strUser = gSysStatus.getUserName();
  764. CString strSQL;
  765. strSQL.Format("INSERT INTO MoneyOut (OutMoney,OutClass,Outdate,operator,remark) VALUES (%s,%s,'%s','%s','%s')",
  766. strMoney,  strClass, strDate, strUser, strRemark);
  767. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  768. _variant_t vra;
  769. VARIANT *vt1 = NULL;
  770. m_Command->Execute(&vra, vt1, adCmdText);
  771. AfxMessageBox("成功添加一笔支出");
  772. }catch(_com_error &e)
  773. {
  774. _bstr_t bstrSource(e.Source());
  775.         _bstr_t bstrDescription(e.Description());
  776.         TRACE("Exception throw for classes generated by #import");
  777.         TRACE("tCode=%08lxn", e.Error);
  778.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  779.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  780.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  781. }
  782. }
  783. //-------------------------------------------------------------------------------------------------
  784. void CDBOperator::getMoneyOutClassInfo(CSysDataStruct::CClassInfo& ClassInfo)
  785. {
  786. try
  787. {
  788. _variant_t vra;
  789. VARIANT *vt1 = NULL;
  790. CString strSQL;
  791. strSQL.Format("select classid, remark from OutClass");
  792. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  793. long state = m_Recordset->GetState();
  794. if(state)
  795. {
  796. m_Recordset->Close();
  797. }
  798. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  799. long recordCount = m_Recordset->GetRecordCount();
  800. ClassInfo.m_iClassNum = 0;
  801. if(recordCount)
  802. {
  803. m_Recordset->MoveFirst();
  804. while(!m_Recordset->adoEOF)
  805. {
  806. _variant_t Value = m_Recordset->GetCollect((long)1);
  807. if(Value.vt ==  VT_BSTR)
  808. {
  809. ClassInfo.m_Classes[ClassInfo.m_iClassNum] = CString(Value.bstrVal);
  810. }
  811. ClassInfo.m_iClassNum++;
  812. m_Recordset->MoveNext();
  813. }
  814. }
  815. }catch(_com_error &e)
  816. {
  817. _bstr_t bstrSource(e.Source());
  818.         _bstr_t bstrDescription(e.Description());
  819.         TRACE("Exception throw for classes generated by #import");
  820.         TRACE("tCode=%08lxn", e.Error);
  821.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  822.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  823.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  824. }
  825. }
  826. //-------------------------------------------------------------------------------------------------
  827. void CDBOperator::getOutClassInfo(CListCtrl* pdbGrid)
  828. {
  829. try
  830. {
  831. CString strSQL = "Select * from outclass";
  832. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  833. _variant_t vra;
  834. VARIANT *vt1 = NULL;
  835. long state = m_Recordset->GetState();
  836. if(state)
  837. {
  838. m_Recordset->Close();
  839. }
  840. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  841. long recordCount = m_Recordset->GetRecordCount();
  842. if(recordCount)
  843. {
  844. int iColumNum = pdbGrid->GetHeaderCtrl()->GetItemCount();
  845.             RECT rcWindow;
  846. pdbGrid->GetClientRect(&rcWindow);
  847. for(int i = 0; i < iColumNum; i++)
  848. {
  849. pdbGrid->DeleteColumn(i);
  850. }
  851.             int iListWidth = (rcWindow.right - rcWindow.left);
  852. LONG lStyle = pdbGrid->SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE);
  853. lStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP;
  854. pdbGrid->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)lStyle);
  855. LV_COLUMN lvc;
  856. lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH /*| LVCF_FMT*/;
  857. lvc.iSubItem = 0;
  858. lvc.pszText = "编号";
  859. lvc.cx = iListWidth / 5;
  860. pdbGrid->InsertColumn(0,&lvc);
  861. lvc.iSubItem = 1;
  862. lvc.pszText = "类别";
  863. lvc.cx = iListWidth - iListWidth / 5;
  864. pdbGrid->InsertColumn(1,&lvc);
  865. pdbGrid->DeleteAllItems();
  866. int iPos = -1;
  867. m_Recordset->MoveFirst();
  868. while(!m_Recordset->adoEOF)
  869. {
  870. LV_ITEM lvitem;
  871. lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
  872. lvitem.state = 0;      
  873. lvitem.stateMask = 0; 
  874. CString strTemp;
  875. _variant_t Value;
  876. lvitem.iItem = ++iPos;
  877. lvitem.iSubItem = 0;
  878. Value = m_Recordset->GetCollect("classid");
  879. int iClassid = (int)Value.lVal;
  880. strTemp.Format("%d", iClassid);
  881. lvitem.pszText = strTemp.GetBuffer(0);
  882. pdbGrid->InsertItem(&lvitem);
  883. Value = m_Recordset->GetCollect("remark");
  884. strTemp = Value.bstrVal;
  885. pdbGrid->SetItemText(iPos, 1, (LPCTSTR)strTemp.GetBuffer(0));
  886. m_Recordset->MoveNext();
  887. }
  888. }
  889. }catch(_com_error &e)
  890. {
  891. _bstr_t bstrSource(e.Source());
  892.         _bstr_t bstrDescription(e.Description());
  893.         TRACE("Exception throw for classes generated by #import");
  894.         TRACE("tCode=%08lxn", e.Error);
  895.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  896.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  897.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  898. }
  899. }
  900. //-------------------------------------------------------------------------------------------------
  901. void CDBOperator::DeleteFinanceIn(int iID)
  902. {
  903. try
  904. {
  905. CString strSQL;
  906. _variant_t vra;
  907. VARIANT *vt1 = NULL;
  908. strSQL.Format("delete from MoneyIncome where [id]=%d", iID);
  909. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  910. m_Command->Execute(&vra, vt1, adCmdText);
  911. AfxMessageBox("成功删除记录");
  912. }catch(_com_error &e)
  913. {
  914. _bstr_t bstrSource(e.Source());
  915.         _bstr_t bstrDescription(e.Description());
  916.         TRACE("Exception throw for classes generated by #import");
  917.         TRACE("tCode=%08lxn", e.Error);
  918.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  919.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  920.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  921. }
  922. }
  923. //-------------------------------------------------------------------------------------------------
  924. void CDBOperator::DeleteFinanceOut(int iID)
  925. {
  926. try
  927. {
  928. CString strSQL;
  929. _variant_t vra;
  930. VARIANT *vt1 = NULL;
  931. strSQL.Format("delete from MoneyOut where [id]=%d", iID);
  932. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  933. m_Command->Execute(&vra, vt1, adCmdText);
  934. AfxMessageBox("成功删除记录");
  935. }catch(_com_error &e)
  936. {
  937. _bstr_t bstrSource(e.Source());
  938.         _bstr_t bstrDescription(e.Description());
  939.         TRACE("Exception throw for classes generated by #import");
  940.         TRACE("tCode=%08lxn", e.Error);
  941.         TRACE("tCode meaning = %sn", e.ErrorMessage);
  942.         TRACE("tSource = %sn", (LPCTSTR)bstrSource);
  943.         TRACE("tDescription = %sn", (LPCTSTR)bstrDescription);
  944. }
  945. }
  946. //-------------------------------------------------------------------------------------------------
  947. void    CDBOperator::UpdateRecord(int iID, CString& strSum, CString& strClass, 
  948.  CString& strDate, CString& strRemark, bool bIsMoneyOut)
  949. {
  950. CString strSQL;
  951. _variant_t vra;
  952. VARIANT *vt1 = NULL;
  953. if(bIsMoneyOut)
  954. {
  955. strSQL.Format("select classid from outclass where remark='%s'", strClass);
  956. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  957. long state = m_Recordset->GetState();
  958. if(state)
  959. {
  960. m_Recordset->Close();
  961. }
  962. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  963. int recordCount = m_Recordset->GetRecordCount();
  964. if(recordCount < 1)
  965. {
  966. ::MessageBox(NULL, "指定的类别不存在", "错误", MB_OK);
  967. return;
  968. }
  969. int iClassID;
  970. m_Recordset->MoveFirst();
  971. _variant_t Value = m_Recordset->GetCollect((long)0);
  972. iClassID = (long)Value;
  973. strSQL.Format("update moneyout  set outmoney=%s, OutClass=%d, outdate='%s', remark='%s' where id = %d", 
  974.           strSum, 
  975.   iClassID,
  976.   strDate,
  977.   strRemark,
  978.   iID);
  979. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  980. m_Command->Execute(&vra, vt1, adCmdText);
  981. }
  982. else
  983. {
  984. strSQL.Format("select classid from ClassInfo where classremark='%s'", strClass);
  985. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  986. long state = m_Recordset->GetState();
  987. if(state)
  988. {
  989. m_Recordset->Close();
  990. }
  991. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  992. int recordCount = m_Recordset->GetRecordCount();
  993. if(recordCount < 1)
  994. {
  995. ::MessageBox(NULL, "指定的类别不存在", "错误", MB_OK);
  996. return;
  997. }
  998. int iClassID;
  999. m_Recordset->MoveFirst();
  1000. _variant_t Value = m_Recordset->GetCollect((long)0);
  1001. iClassID = (long)Value;
  1002. strSQL.Format("update MoneyIncome  set InMoney=%s, InClass=%d, InDate='%s', remark='%s' where id = %d", 
  1003.           strSum, 
  1004.   iClassID,
  1005.   strDate,
  1006.   strRemark,
  1007.   iID);
  1008. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  1009. m_Command->Execute(&vra, vt1, adCmdText);
  1010. }
  1011. ::MessageBox(NULL, "成功更改指定记录", "提示", MB_OK);
  1012. }
  1013. //-------------------------------------------------------------------------------------------------
  1014. void CDBOperator::getBalance(CString& strStartTime, 
  1015. CString& strEndTime, 
  1016. CTreeCtrl& treeBalance, 
  1017. CString& strTotalIn,
  1018. CString& strTotalOut)
  1019. {
  1020. //获取收入总额
  1021. strTotalIn = "0";
  1022. strTotalOut = "0";
  1023. CString strSQL;
  1024. CString strCondtionSQL;
  1025. strCondtionSQL.Format("where MoneyIncome.InDate between #%s# and #%s#", strStartTime, strEndTime);
  1026. _variant_t vra;
  1027. VARIANT *vt1 = NULL;
  1028. strSQL.Format("select SUM(MoneyIncome.InMoney) from MoneyIncome %s", strCondtionSQL);
  1029. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  1030. long state = m_Recordset->GetState();
  1031. if(state)
  1032. {
  1033. m_Recordset->Close();
  1034. }
  1035. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  1036. long recordCount = m_Recordset->GetRecordCount();
  1037. if(recordCount)
  1038. {
  1039. m_Recordset->MoveFirst();
  1040. _variant_t Value = m_Recordset->GetCollect((long)0);
  1041. COleCurrency var_currency;
  1042. if(Value.vt == VT_CY)
  1043. {
  1044. var_currency = Value.cyVal;
  1045. strTotalIn = var_currency.Format(0);
  1046. }
  1047. }
  1048. //获取支出总额
  1049. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s#", strStartTime, strEndTime);
  1050. strSQL.Format("select SUM(MoneyOut.OutMoney) from MoneyOut %s", strCondtionSQL);
  1051. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  1052. state = m_Recordset->GetState();
  1053. if(state)
  1054. {
  1055. m_Recordset->Close();
  1056. }
  1057. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  1058. recordCount = m_Recordset->GetRecordCount();
  1059. if(recordCount)
  1060. {
  1061. m_Recordset->MoveFirst();
  1062. _variant_t Value = m_Recordset->GetCollect((long)0);
  1063. COleCurrency var_currency;
  1064. if(Value.vt == VT_CY)
  1065. {
  1066. var_currency = Value.cyVal;
  1067. strTotalOut = var_currency.Format(0);
  1068. }
  1069. }
  1070. }
  1071. //-------------------------------------------------------------------------------------------------
  1072. void    CDBOperator::getMoneyInClassTotal(CString& strStartTime, CString& strEndTime, CSysDataStruct::CClassInfo& ClassInfo)
  1073. {
  1074. getMoneyInClassInfo(ClassInfo);
  1075. for(int iClass = 0; iClass < ClassInfo.m_iClassNum; iClass++)
  1076. {
  1077. CString strSQL;
  1078. CString strCondtionSQL;
  1079. CString strTotalIn = "0";
  1080. strCondtionSQL.Format("where MoneyIncome.InDate between #%s# and #%s# and MoneyIncome.InClass=%d", strStartTime, strEndTime, iClass);
  1081. _variant_t vra;
  1082. VARIANT *vt1 = NULL;
  1083. strSQL.Format("select SUM(MoneyIncome.InMoney) from MoneyIncome %s", strCondtionSQL);
  1084. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  1085. long state = m_Recordset->GetState();
  1086. if(state)
  1087. {
  1088. m_Recordset->Close();
  1089. }
  1090. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  1091. _variant_t Value = m_Recordset->GetCollect((long)0);
  1092. COleCurrency var_currency;
  1093. if(Value.vt == VT_CY)
  1094. {
  1095. var_currency = Value.cyVal;
  1096. strTotalIn = var_currency.Format(0);
  1097. }
  1098. ClassInfo.m_dTotal[iClass] = atof(strTotalIn);
  1099. }
  1100. }
  1101. //-------------------------------------------------------------------------------------------------
  1102. void CDBOperator::getMoneyOutClassTotal(CString& strStartTime, CString& strEndTime, CSysDataStruct::CClassInfo& ClassInfo)
  1103. {
  1104. getMoneyOutClassInfo(ClassInfo);
  1105. for(int iClass = 0; iClass < ClassInfo.m_iClassNum; iClass++)
  1106. {
  1107. CString strSQL;
  1108. CString strCondtionSQL;
  1109. CString strTotalIn = "0";
  1110. strCondtionSQL.Format("where MoneyOut.Outdate between #%s# and #%s# and MoneyOut.OutClass=%d", strStartTime, strEndTime, iClass);
  1111. _variant_t vra;
  1112. VARIANT *vt1 = NULL;
  1113. strSQL.Format("select SUM(MoneyOut.OutMoney) from MoneyOut %s", strCondtionSQL);
  1114. m_Command->CommandText = (_bstr_t) strSQL.GetBuffer(0);
  1115. long state = m_Recordset->GetState();
  1116. if(state)
  1117. {
  1118. m_Recordset->Close();
  1119. }
  1120. m_Recordset = m_Command->Execute(&vra, vt1, adCmdText);
  1121. _variant_t Value = m_Recordset->GetCollect((long)0);
  1122. COleCurrency var_currency;
  1123. if(Value.vt == VT_CY)
  1124. {
  1125. var_currency = Value.cyVal;
  1126. strTotalIn = var_currency.Format(0);
  1127. }
  1128. ClassInfo.m_dTotal[iClass] = atof(strTotalIn);
  1129. }
  1130. }