Windows 64bit 用です。 ( ソースを変更すれば、32ビットでももちろん動作します ) Android 内でいろいろするのは大変なので、2005年に作成してずっと使っているテスト用データを SQLite3 に変換する VBScript を改めて最新にしました。 最初の実行で、pragma auto_vacuum = full を実行しているので、いろいろやっても肥大はしないと思います。MDB のアクセスに Microsoft.Jet.OLEDB.4.0 を使用しており、32ビット用の cscript.exe を実行する必要があるので、内部で SysWOW64 を参照しています ( strWinDir と SysWOW64 を省けば 32ビット用になります ) SQLite3 ODBC Driver が必要です 32ビット用の ODBC ドライバが必要になります。ですが、後々の事を考えれば 64 と 32 を両方インストールするのが良いと思います ODBC ドライバ ソースコード
Crun() ' 使用する ODBC ドライバです strDriver = "{SQLite3 ODBC Driver}" strMDBFile = "販売管理B.mdb" strSQLiteFile = "hanbai.sqlite3" ' ************************************************ ' 基本設定 ' ************************************************ ' このスクリプトが存在するディレクトリを取得 strCurDir = WScript.ScriptFullName strCurDir = Replace( strCurDir, WScript.ScriptName, "" ) strMdbPath = strCurDir & strMDBFile strSQLite3Path = strCurDir & strSQLiteFile strMessage = "対象 MDB は " & strMdbPath & "です" & vbCrLf & vbCrLf strMessage = strMessage & "↓SQLiteの環境です" & vbCrLf strMessage = strMessage & "DB : " & strSQLite3Path & vbCrLf & vbCrLf strMessage = strMessage & "既にテーブルが存在する場合はメッセージが出ません" & vbCrLf strMessage = strMessage & "それ以外ではエラーメッセージが出ますが、問題ありません" if vbCancel = MsgBox( strMessage, vbOkCancel ) then Wscript.Quit end if ' ************************************************ ' 処理用文字列設定 ' ************************************************ ' MDB の接続文字列 strConnectMdb = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strMdbPath & ";" strConnectSQLite3 = _ "Provider=MSDASQL;Driver="&strDriver&";DATABASE=" & strSQLite3Path & ";" ' ************************************************ ' 初期処理 ' ************************************************ Set Cn = CreateObject("ADODB.Connection") Cn.CursorLocation = 3 Set Rs = CreateObject( "ADODB.Recordset" ) Set Cn2 = CreateObject("ADODB.Connection") Cn2.CursorLocation = 3 Set Rs2 = CreateObject( "ADODB.Recordset" ) Rs2.LockType = 3 Cn.Open strConnectMdb Cn2.Open strConnectSQLite3 RunSS( "pragma auto_vacuum = full" ) ' ************************************************ ' コード名称マスタ ' ************************************************ Query = _ "create table コード名称マスタ (" & _ " kubun INT" & _ " ,code VARCHAR(10)" & _ " ,name NVARCHAR(50)" & _ " ,num1 INT" & _ " ,num2 INT" & _ " ,cdate DATETIME" & _ " ,udate DATETIME" & _ " ,primary key(kubun,code)" & _ ")" Call SSTransfer( "コード名称マスタ", Query ) ' ************************************************ ' コントロールマスタ ' ************************************************ Query = _ "create table コントロールマスタ (" & _ " ckey VARCHAR(1)" & _ " ,udate DATETIME" & _ " ,uno INT" & _ " ,primary key(ckey)" & _ ")" Call SSTransfer( "コントロールマスタ", Query ) ' ************************************************ ' メッセージマスタ ' ************************************************ Query = _ "create table メッセージマスタ (" & _ " code VARCHAR(4)" & _ " ,message NVARCHAR(100)" & _ " ,primary key(code)" & _ ")" Call SSTransfer( "メッセージマスタ", Query ) ' ************************************************ ' 取引データ ' ************************************************ Query = _ "create table 取引データ (" & _ " tkubun VARCHAR(2)" & _ " ,uno INT" & _ " ,row INT" & _ " ,tdate DATETIME" & _ " ,tcode VARCHAR(4)" & _ " ,scode VARCHAR(4)" & _ " ,su INT" & _ " ,tanka単価 INT" & _ " ,kin INT" & _ " ,primary key(tkubun,uno,row)" & _ ")" Call SSTransfer( "取引データ", Query ) ' ************************************************ ' 商品マスタ ' ************************************************ Query = _ "create table 商品マスタ (" & _ " scode VARCHAR(4)" & _ " ,sname NVARCHAR(50)" & _ " ,ztanka INT" & _ " ,htanka INT" & _ " ,sbun VARCHAR(3)" & _ " ,skubun VARCHAR(1)" & _ " ,cdate DATETIME" & _ " ,udate DATETIME" & _ " ,primary key(scode)" & _ ")" Call SSTransfer( "商品マスタ", Query ) ' ************************************************ ' 商品分類マスタ ' ************************************************ Query = _ "create table 商品分類マスタ (" & _ " sbun VARCHAR(3)" & _ " ,name NVARCHAR(50)" & _ " ,cdate DATETIME" & _ " ,udate DATETIME" & _ " ,primary key(sbun)" & _ ")" Call SSTransfer( "商品分類マスタ", Query ) ' ************************************************ ' 得意先マスタ ' ************************************************ Query = _ "create table 得意先マスタ (" & _ " tcode VARCHAR(4)" & _ " ,tname NVARCHAR(50)" & _ " ,tkubun VARCHAR(1)" & _ " ,tanto VARCHAR(4)" & _ " ,zip VARCHAR(7)" & _ " ,ad1 NVARCHAR(100)" & _ " ,ad2 NVARCHAR(100)" & _ " ,cdate DATETIME" & _ " ,udate DATETIME" & _ " ,primary key(tcode)" & _ ")" Call SSTransfer( "得意先マスタ", Query ) ' ************************************************ ' 社員マスタ ' ************************************************ Query = _ "create table 社員マスタ (" & _ " scode VARCHAR(4)" & _ " ,sname NVARCHAR(50)" & _ " ,furi NVARCHAR(50)" & _ " ,syozoku VARCHAR(4)" & _ " ,sex INT" & _ " ,cdate DATETIME" & _ " ,udate DATETIME" & _ " ,kyuyo INT" & _ " ,teate INT" & _ " ,kanri VARCHAR(4)" & _ " ,primary key(scode)" & _ ")" Call SSTransfer( "社員マスタ", Query ) ' ************************************************ ' 郵便番号マスタ ' ************************************************ Query = _ "create table 郵便番号マスタ (" & _ " zip VARCHAR(7)" & _ " ,kana1 NVARCHAR(255)" & _ " ,kana2 NVARCHAR(255)" & _ " ,kana3 NVARCHAR(255)" & _ " ,name1 NVARCHAR(255)" & _ " ,name2 NVARCHAR(255)" & _ " ,name3 NVARCHAR(255)" & _ ")" Call SSTransfer( "郵便番号マスタ", Query ) RunSS( "drop table codename" ) RunSS("alter table コード名称マスタ rename to codename") RunSS( "drop table control" ) RunSS("alter table コントロールマスタ rename to control") RunSS( "drop table message" ) RunSS("alter table メッセージマスタ rename to message") RunSS( "drop table tdata" ) RunSS("alter table 取引データ rename to tdata") RunSS( "drop table goods" ) RunSS("alter table 商品マスタ rename to goods") RunSS( "drop table sbun" ) RunSS("alter table 商品分類マスタ rename to sbun") RunSS( "drop table tokui" ) RunSS("alter table 得意先マスタ rename to tokui") RunSS( "drop table syain" ) RunSS("alter table 社員マスタ rename to syain") RunSS( "drop table zip" ) RunSS("alter table 郵便番号マスタ rename to zip") RunSS( "drop view v_goods" ) Query = _ "create view v_goods as" & _ " SELECT goods.scode" & _ " , goods.sname" & _ " , goods.htanka" & _ " , sbun.sbun" & _ " , sbun.name AS bunrui_name" & _ " , goods.skubun" & _ " , codename.name AS kubun_name" & _ " from" & _ " (goods LEFT JOIN sbun" & _ " ON goods.sbun = sbun.sbun" & _ " ) LEFT JOIN codename" & _ " ON goods.skubun = codename.code" & _ " where" & _ " codename.kubun = 3" RunSS( Query ) ' ************************************************ ' 終了 ' ************************************************ Cn2.Close Cn.Close Wscript.Echo "処理が終了しました" ' ************************************************ ' 転送 ' ************************************************ function SSTransfer( strTable, QueryCreate ) Wscript.Echo strTable & " の作成を開始します" Dim Query Query = "drop table " & strTable RunSS( Query ) RunSS( QueryCreate ) Query = "select * from " & strTable Rs.Open Query, Cn Rs2.Open Query, Cn2 nCount = Rs.Fields.Count Do While not Rs.EOF Rs2.AddNew For I = 0 to nCount - 1 Rs2.Fields(I).Value = Rs.Fields(I).value Next Rs2.Update ' 更新 Rs.MoveNext Loop Rs2.Close Rs.Close Wscript.Echo strTable & " の作成が終了しました" end function ' ************************************************ ' SQLLite 実行 ' ************************************************ function RunSS( Query ) on error resume next Cn2.Execute Query if Err.Number <> 0 then Wscript.Echo Err.Description end if on error goto 0 end function ' ********************************************************** ' Cscript.exe で実行を強制 ' ウィンドウをアクティブにし、最大化ウィンドウとして表示(3) ' Cscript.exe の実行終了後 pause で一時停止 ' ********************************************************** Function Crun( ) Dim str,WshShell str = WScript.FullName str = Right( str, 11 ) str = Ucase( str ) if str <> "CSCRIPT.EXE" then str = WScript.ScriptFullName Set WshShell = CreateObject( "WScript.Shell" ) strWinDir = WshShell.ExpandEnvironmentStrings("%windir%") strParam = " " For I = 0 to Wscript.Arguments.Count - 1 if instr(Wscript.Arguments(I), " ") < 1 then strParam = strParam & Wscript.Arguments(I) & " " else strParam = strParam & Dd(Wscript.Arguments(I)) & " " end if Next Call WshShell.Run( "cmd.exe /c " & strWinDir & "\SysWOW64\cscript.exe " & Dd(str) & strParam & " & pause", 3 ) WScript.Quit end if End Function ' ********************************************************** ' 文字列を " で囲む関数 ' ********************************************************** Function Dd( strValue ) Dd = """" & strValue & """" End function
Androd には、初回データベースを一つ作成してデータベース用のフォルダを作成させて Push するといいです。 SQLite 用クラス
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MySQLite extends SQLiteOpenHelper { // ********************************* // コンストラクタ // ********************************* public MySQLite(Context context, String dbfile, int dbversion) { super(context, dbfile, null, dbversion); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
db 作成およびテスト用コード
public class MainActivity extends AppCompatActivity { private MySQLite mySQLite; private SQLiteDatabase db; private ContentValues values; int counter; @Override protected void onStart() { super.onStart(); Log.i("lightbox", "onStart"); mySQLite = new MySQLite(MainActivity.this,"hanbai.sqlite3",1); // 書き込み用 db = mySQLite.getWritableDatabase(); // データ書き込み用 values = new ContentValues(); counter = 50; } @Override protected void onStop() { super.onStop(); Log.i("lightbox", "onStop"); db.close(); mySQLite.close(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { counter++; values.put("scode", String.format("%04d", counter)); values.put("sname", String.format("氏名%d", counter)); values.put("kyuyo", counter*1000); db.insert("syain", null, values); Log.i("lightbox", String.format("%d",counter)); } }); MainActivity.this.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String sql = String.format("select * from %s order by scode desc", "syain"); Cursor cursor = mySQLite.getReadableDatabase().rawQuery(sql, null); Boolean isData = null; while ( isData == null ? (isData = cursor.moveToFirst()) : (isData = cursor.moveToNext()) ) { String scode = cursor.getString(cursor.getColumnIndex("scode")); String sname = cursor.getString(cursor.getColumnIndex("sname")); Log.i("lightbox", String.format("%s : %s",scode,sname)); } cursor.close(); } }); } }
|
【2017 Android Studioの最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- Java : Class 構造より、update 文を作成する
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の掲示板に投稿(POST)するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する
- Android Studio : エミュレータで Notification(通知)のテスト