{"id":319,"date":"2010-12-21T18:25:06","date_gmt":"2010-12-22T02:25:06","guid":{"rendered":"http:\/\/192.168.1.2\/wordpress\/?p=319"},"modified":"2013-03-13T19:04:54","modified_gmt":"2013-03-14T02:04:54","slug":"mymoneyjournal","status":"publish","type":"post","link":"http:\/\/cywang.no-ip.org\/wordpress\/?p=319","title":{"rendered":"MyMoneyJournal"},"content":{"rendered":"<p>\n\tThis software records your daily expense and income. I use several&nbsp;Microsoft Access database files (*.mdb) to store data. To prevent an oversize&nbsp;database file, I split&nbsp;the database&nbsp;into several parts.\n<\/p>\n<p>\n\tFutures:\n<\/p>\n<ul>\n<li>\n\t\tEasy to track your income and expenses\n\t<\/li>\n<li>\n\t\tDisplay pie chart and column chart illustrate cash flow\n\t<\/li>\n<li>\n\t\tPassword protect\n\t<\/li>\n<\/ul>\n<p>\n\tNext version futures:\n<\/p>\n<ul>\n<li>\n\t\tIt will provide you with up-to-date exchange rates.\n\t<\/li>\n<\/ul>\n<p>\n\t<!--more-->\n<\/p>\n<p>\n\t<a href=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal1.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"967\" height=\"612\" alt=\"MyMoneyJournal1\" class=\"alignnone size-full wp-image-320\" src=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal1.jpg\" style=\"width: 773px; height: 489px;\" srcset=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal1.jpg 967w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal1-300x189.jpg 300w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal1-474x300.jpg 474w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/a><a href=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal2.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"967\" height=\"612\" alt=\"MyMoneyJournal2\" class=\"alignnone size-full wp-image-321\" src=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal2.jpg\" style=\"width: 773px; height: 489px;\" srcset=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal2.jpg 967w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal2-300x189.jpg 300w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal2-474x300.jpg 474w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/a><a href=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal3.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"967\" height=\"612\" alt=\"MyMoneyJournal3\" class=\"alignnone size-full wp-image-322\" src=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal3.jpg\" style=\"width: 773px; height: 489px;\" srcset=\"http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal3.jpg 967w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal3-300x189.jpg 300w, http:\/\/cywang.no-ip.org\/wordpress\/wp-content\/uploads\/2013\/03\/MyMoneyJournal3-474x300.jpg 474w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/a>\n<\/p>\n<pre class=\"brush:cpp;\">\r\nvoid __fastcall TForm1::LoadDB()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;chart_change_flag = 0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOTable_DB-&gt;TableName = Now().FormatString(&quot;yyyymm&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOTable_DB-&gt;Active = true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;TStrings *List = new TStringList;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_DB-&gt;GetTableNames(List);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_DB-&gt;Open();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;DBGrid_Main-&gt;Visible = false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;CalcMoney(); \r\n&nbsp;&nbsp;&nbsp;&nbsp;DBGrid_Main-&gt;Visible = true;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_DB-&gt;Close();\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_DB-&gt;SQL-&gt;Text = &quot;select * from &quot; + ADOTable_DB-&gt;TableName +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp; order by Date,ID&quot;;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_DB-&gt;Open();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_DB-&gt;Last();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;GridSize(0);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;delete List;\r\n}<\/pre>\n<p>\n\t&nbsp;&nbsp;&nbsp;\n<\/p>\n<pre class=\"brush:cpp;\">\r\nvoid __fastcall TForm1::ListAllYear()\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;TStringList *sList;\r\n&nbsp;&nbsp;&nbsp;&nbsp;AnsiString dir_path = ex_path + &quot;\\\\data\\\\&quot; + Edit1-&gt;Text;\r\n&nbsp;&nbsp;&nbsp;&nbsp;LoadAllFiles(dir_path, sList);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ TMenuItem *ClickedItem = dynamic_cast&lt;TMenuItem *&gt;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;AnsiString pop_db;\r\n&nbsp;&nbsp;&nbsp;&nbsp;sel_other_table = new AnsiString*[allYear.Length() \/ 4];\r\n&nbsp;&nbsp;&nbsp;&nbsp;AllYearCount = allYear.Length() \/ 4;\r\n&nbsp;&nbsp;&nbsp;&nbsp;EachYearMonthCount = new int[allYear.Length() \/ 4];\r\n&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; allYear.Length() \/ 4; i++)\r\n&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem *m = new TMenuItem(this);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m-&gt;Caption = allYear.SubString(1 + i * 4, 4);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pop_db = ex_path + &quot;\\\\data\\\\&quot; + Edit1-&gt;Text + &quot;\\\\&quot; + Edit1-&gt;Text +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;(&quot; + allYear.SubString(1 + i * 4, 4) + &quot;).mdb&quot;;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_DB-&gt;Close();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_DB-&gt;Active = false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_DB-&gt;ConnectionString =\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; + pop_db +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;;Persist Security Info=False&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel_db_path = pop_db;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel_db_month = Now().FormatString(&quot;yyyymm&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_DB-&gt;Connected = true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m-&gt;Tag = i;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu_DynamicMonth-&gt;Items-&gt;Add(m);\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TStrings *List = new TStringList;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_DB-&gt;GetTableNames(List);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel_other_table[i] = new AnsiString[List->Count];\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EachYearMonthCount[i] = List-&gt;Count;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; List-&gt;Count; j++)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TMenuItem *subm = new TMenuItem(this);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel_other_table[i][j] = List->Strings[j];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AnsiString table_name = List-&gt;Strings[j];\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subm-&gt;Caption = table_name;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu_DynamicMonth-&gt;Items-&gt;Items[i]-&gt;Add(subm);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subm-&gt;Tag = j;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subm-&gt;OnClick = PopupMenuItemsClick;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete List;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:cpp;\">\r\nAnsiString __fastcall TForm1::GetMoneyByDay(AnsiString year, AnsiString month,AnsiString day)\r\n{\r\n&nbsp;&nbsp;&nbsp;&nbsp;Application-&gt;ProcessMessages();\r\n&nbsp;&nbsp;&nbsp;&nbsp;AnsiString returnMoney = &quot;&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_NoGrid-&gt;Close(); \/\/ new_db\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_NoGrid-&gt;ConnectionString =\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; + sel_db_path +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;;Persist Security Info=False&quot;;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;Close();\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOTable_NoGrid-&gt;TableName = year + month; \/\/ Now().FormatString(&quot;yyyymm&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;TStrings *List = new TStringList;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_NoGrid-&gt;GetTableNames(List);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;Close(); \/\/ Now().FormatString(&quot;yyyymm&quot;)\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;SQL-&gt;Text = &quot;select &quot; + all_table + &quot; from &quot; +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOTable_NoGrid-&gt;TableName + &quot; where IO=&#39;income&#39; and date=&#39;&quot; + year + &quot;\/&quot; +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;month + &quot;\/&quot; + day + &quot;&#39;&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;ExecSQL();\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;Open();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;int total_IncomeMoney = 0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;for (int k = 0; k &lt; ADOQuery_NoGrid-&gt;RecordCount; k++) {\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total_IncomeMoney = total_IncomeMoney +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource_NoGrid-&gt;DataSet-&gt;Fields-&gt;Fields[8]-&gt;Text.ToDouble();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource_NoGrid-&gt;DataSet-&gt;Next();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;returnMoney = returnMoney + IntToStr(total_IncomeMoney) + &quot;\\n&quot;;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;Close();\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOTable_NoGrid-&gt;TableName = year + month; \/\/ Now().FormatString(&quot;yyyymm&quot;);\r\n&nbsp;&nbsp;&nbsp;&nbsp;TStrings *ListOutcome = new TStringList;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOConnection_NoGrid-&gt;GetTableNames(ListOutcome);\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;Close(); \/\/ Now().FormatString(&quot;yyyymm&quot;)\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;SQL-&gt;Text = &quot;select &quot; + all_table + &quot; from &quot; +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOTable_NoGrid-&gt;TableName + &quot; where io=&#39;ougoing&#39; and date=&#39;&quot; + year + &quot;\/&quot; +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;month + &quot;\/&quot; + day + &quot;&#39;&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;ExecSQL();\r\n&nbsp;&nbsp;&nbsp;&nbsp;ADOQuery_NoGrid-&gt;Open();\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;int total_OutcomeMoney = 0;\r\n&nbsp;&nbsp;&nbsp;&nbsp;for (int k = 0; k &lt; ADOQuery_NoGrid-&gt;RecordCount; k++) {\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;total_OutcomeMoney = total_OutcomeMoney +\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource_NoGrid-&gt;DataSet-&gt;Fields-&gt;Fields[8]-&gt;Text.ToDouble();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource_NoGrid-&gt;DataSet-&gt;Next();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;if (total_OutcomeMoney != 0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnMoney = returnMoney + &quot;-&quot; + IntToStr(total_OutcomeMoney) + &quot;\\n&quot;;\r\n&nbsp;&nbsp;&nbsp;&nbsp;if (total_OutcomeMoney == 0)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnMoney = returnMoney + IntToStr(total_OutcomeMoney) + &quot;\\n&quot;;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;return returnMoney;\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>This software records your daily expense and income. I use several&nbsp;Microsoft Access database files (*.mdb) to store data. To prevent an oversize&nbsp;database file, I split&nbsp;the database&nbsp;into several parts. Futures: Easy to track your income and expenses Display pie chart and &hellip; <a href=\"http:\/\/cywang.no-ip.org\/wordpress\/?p=319\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[7,14],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-cc","category-projects"],"_links":{"self":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=319"}],"version-history":[{"count":3,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":324,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/319\/revisions\/324"}],"wp:attachment":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}