diff src/db.cpp @ 13:bbd65edf71d4

Implement Hhs DB update dialog.
author pyon@macmini
date Sat, 24 May 2014 10:25:13 +0900
parents dfcf8c973219
children a2ad87cad48b
line wrap: on
line diff
--- a/src/db.cpp	Sun May 18 19:49:15 2014 +0900
+++ b/src/db.cpp	Sat May 24 10:25:13 2014 +0900
@@ -1,11 +1,67 @@
 // Filename   : db.cpp
-// Last Change: 02-May-2014.
+// Last Change: 23-May-2014.
 //
 
+#include <wx/tokenzr.h>
 #include "db.h"
 #include "wx/wxsqlite3.h"
 
 //********** HHS-DB **********//
+/* 被保険者台帳を更新 */
+void UpdateHhs( wxArrayString info )
+{
+    long n = info.GetCount();
+
+    wxProgressDialog pd( wxT("進行状況"), wxT("処理開始..."), n, NULL, wxPD_APP_MODAL|wxPD_REMAINING_TIME|wxPD_AUTO_HIDE );
+    pd.SetSize( wxSize( 320, 140 ) );
+
+    wxString gszFile = wxGetCwd() + wxFILE_SEP_PATH + wxT("db") + wxFILE_SEP_PATH + wxT("hhs.db");
+    wxRemoveFile( gszFile );
+
+    wxSQLite3Database hhsdb;
+    hhsdb.Open( gszFile );
+    hhsdb.Begin();
+
+    wxString sql = wxT( "PRAGMA foregin_keys=OFF" );
+    wxSQLite3Statement stmt = hhsdb.PrepareStatement( sql );
+    wxSQLite3ResultSet q = stmt.ExecuteQuery();
+
+    sql = wxT( "CREATE TABLE 'hhs_master' ( hhsno text PRIMARY KEY, birth text, name text, kana text, addr text, sex text )" );
+    stmt = hhsdb.PrepareStatement( sql );
+    q = stmt.ExecuteQuery();
+
+    wxString hhsno, birth, name, kana, addr, sex;
+    for ( long i = 0; i < n; i++ ) {
+
+        info[i].Replace( wxT("\""), wxEmptyString, true );
+
+        wxStringTokenizer token( info[i], wxT(",") );
+        hhsno = token.GetNextToken();
+        birth = token.GetNextToken();
+        name  = token.GetNextToken();
+        kana  = token.GetNextToken();
+        addr  = token.GetNextToken();
+        sex   = token.GetNextToken();
+
+        stmt = hhsdb.PrepareStatement( "INSERT INTO hhs_master VALUES( ?, ?, ?, ?, ?, ? );" );
+        stmt.Bind( 1, hhsno );
+        stmt.Bind( 2, birth );
+        stmt.Bind( 3, name  );
+        stmt.Bind( 4, kana  );
+        stmt.Bind( 5, addr  );
+        stmt.Bind( 6, sex   );
+        stmt.ExecuteQuery();
+        stmt.Finalize();
+
+        if ( i % 1000 == 0 ) {
+            pd.Update( i, wxString::Format( wxT("%d / %d done."), i, n ) );
+        }
+    }
+
+    hhsdb.Commit();
+    hhsdb.Close();
+}
+
 /* 被保番で被保険者情報を取得 */
 wxString GetHhsInfoByHhsNo( wxString hhsno )
 {