概要 ADO で昔からよく使われる常套手段です。 件数が多いと結構時間がかかるので、そのような処理には向いていません。現在のレコードを同様のフォーマットのログテーブル等へコピーするような一回に数十件の処理に向いています ▼ 販売管理B( hanbaib.zip ) ODBC ドライバを SQLite ODBC Driver からダウンロードしてこのデータを使って、VBScript を実行(DBのパスはご自分の環境に合わせて正しく変更して下さい)するだけで、SQLite3 のデータベースを作成する事ができます。 表名と列名を日本語のままでも作成して、SQL でアクセスできますが、ADO を使ってテーブル名を取得すると化けるので英数字に変更しています。作成後は、ODBCアドミニストレータで DSN を作成すれば、一般的な ODBC 経由のソフトウェアでアクセスが可能になります。 ▼ 重要SQLite ODBC Driver は、VBScript 上の SHIFT_JIS 環境から実行して、SQLite 内に UTF-8 のデータを保存します。VBScript(SHIFT_JIS) からの ADO の通常テーブルアクセスは正しく変換して実行してくれますが、ADO の OpenSchema経由で表名や列名を取得しようとすると、SHIFT_JIS へ戻さないというバグがあります。内部確認用ツール VBScript + ADO : 汎用CSV出力 ▼ DSN 登録 出力結果kubun,code,name,num1,num2,create_date,update_date 1,0,男,10,10,2004/05/05,2004/05/05 1,1,女,11,12,2004/05/05,2004/05/05 2,0001,営業部第一,0,0,2004/05/05,2004/05/05 2,0002,営業部第ニ,0,0,2004/05/05,2004/05/05 2,0003,営業部第三,0,0,2004/05/05,2004/05/05 3,0,通常,0,0,2004/06/23,2004/06/23 3,1,特別,0,0,2004/06/23,2004/06/23 4,0,通常,0,0,2004/06/23,2004/06/23 4,1,特別,0,0,2004/06/23,2004/06/23 5,A,食品,0,0,2004/06/23,2004/06/23 5,B,装飾,0,0,2004/06/23,2004/06/23 5,D,衣類,0,0,2004/06/23,2004/06/23 5,G,娯楽,0,0,2004/06/23,2004/06/23 5,K,家庭一般,0,0,2004/06/23,2004/06/23 5,M,薬,0,0,2004/06/23,2004/06/23 5,P,パソコン,0,0,2004/06/23,2004/06/23 5,Z,雑貨,0,0,2004/06/23,2004/06/23
' 使用する ODBC ドライバです strDriver = "{SQLite3 ODBC Driver}" ' ************************************************ ' 処理用文字列設定 ' ************************************************ ' MDB の接続文字列 strConnectMdb = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\user\lightbox\sqlite3\hanbaib\販売管理B.mdb;" strConnectSQLite3 = _ "Provider=MSDASQL;Driver="&strDriver&";DATABASE=C:\user\lightbox\sqlite3\hanbaib\db1.sqlite3;" ' ************************************************ ' 初期処理 ' ************************************************ 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 ' ************************************************ ' コード名称マスタ ' ************************************************ Query = _ "create table code_name (" & _ " kubun INT" & _ " ,code VARCHAR(10)" & _ " ,name NVARCHAR(50)" & _ " ,num1 INT" & _ " ,num2 INT" & _ " ,create_date DATETIME" & _ " ,update_date DATETIME" & _ " ,primary key(kubun,code)" & _ ")" Call SSTransfer( "code_name", Query ) ' ************************************************ ' 終了 ' ************************************************ Cn2.Close Cn.Close Wscript.Echo "処理が終了しました" ' ************************************************ ' SQLLite 転送 ' ************************************************ function SSTransfer( strTable, QueryCreate ) Wscript.Echo strTable & " の作成を開始します" Dim Query ' まず既存テーブルを削除 Query = "drop table " & strTable RunSS( Query ) ' CREATE 文でテーブル作成 RunSS( QueryCreate ) ' MDB 側はすべてのレコード ' SQLite 側は空 Query = "select * from " & strTable Rs.Open "select * from コード名称マスタ", Cn Rs2.Open Query, Cn2 ' フィールド数 nCount = Rs.Fields.Count Do While not Rs.EOF ' SQLite 側に新しいレコードバッファを作成 Rs2.AddNew ' 同一フォーマットなのでフィールド番号でループ For I = 0 to nCount - 1 ' 対応するデータを MDB から SQLite へコピー Rs2.Fields(I).Value = Rs.Fields(I).value Next ' SQLite の更新 Rs2.Update ' MDB を次のレコードへ 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
以下は簡単に更新する為に SQLの窓 Build C++ を使っての手順です。 Excel の接続ダイアログ DSN を作成した後、Excel の接続ダイアログにある『他のDSN』に入力します。 更新用のキーを設定 テーブル名をダブルクリックすると、データ処理用のウインドウが開くので更新用のキーを設定します。この処理では、ODBC 一般用なので、ウインドウを開くたびにキーの設定がその都度必要です。 入力した後更新できます 関連する記事
【VBScript関連のカテゴリ】