Accessランタイム環境下のMDB,MDEにSQLを発行するスクリプトです。
ランタイム上で動いているMDBのテーブルへの行追加、変更、削除のバッチ処理用です。
MDBと同じディレクトリに、
- edtsql.vbs(スクリプト本体)
- edtsql.sql(一文一行のSQL)
を置いて、コマンドプロンプトから、
cscript edtsql.vbs mdbファイル名.mdb
で、コネクションの情報表示→SQLを表示しつつ実行されます。
注意事項
- テストはしてありますが、書かれているSQL次第で、かなり恐ろしいことになります。
実行前には必ずMDBのバックアップを取ってください。
結果的にデータベースその他諸々が破壊されたとしてもなんの保障もできません。 - wscriptを使った実行も可能ですが、いちいちメッセージが出るのでうるさいです。
- WindowsXP + Access2003環境でのみテストしてあります。
OleDbが使えない場合や2007のACCDBではコネクションストリングの変更が必要です。
変えれば動くかと言われても未検証なので自信はありません。 - 変更、修正はご自由にどうぞ。
- 「バグ」「もっとうまくやれる」情報がありましたら教えていただけると勉強になります。
edtsql.vbs
‘edtsql.vbs
‘
‘2008/11/13 作成 ADDDRV
‘
‘使用の手引き
‘
‘更新したいMDB,MDEと同じフォルダに置きます
‘実行させるSQLの条件
‘ 1.SQLは1行1文です
‘ 2.SQLのファイル名は「edtsql.sql」です
‘ 3.edtsql.sqlはこのvbsと同じフォルダに置いて下さい
‘Option Explicit
‘パラメータ
Dim Args‘パラメータ取得
Set Args = Wscript.Arguments‘パラメータが無いときはエラー
If Args.Count < 1 Then
WScript.echo “MDBファイル名を指定して下さい”
Else
‘メインの処理
Call subMain
End IfSet Args = Nothing
‘ここで終わり
‘メインの処理
Sub subMain()‘MDBファイルの名前(パスは、スクリプトと同じ場所)
Dim MDBName‘MDBファイル名をパラメータからセット)
MDBName = Args(0)‘ADOコネクションとコネクションストリング
Dim Conn
DIm Conn_String‘ファイルシステムオブジェクト
Dim objFileSys
Dim objFile‘SQLが入っているフルパス付ファイル名
Dim FileName‘現在のパス
Dim FilePath‘取得したレコード=投げるSQL
Dim Record‘自パスの取得
FilePath = Replace(WScript.ScriptFullName,WScript.ScriptName,””)‘ファイルシステムオブジェクトの作成
Set objFileSys = CreateObject(“Scripting.FileSystemObject”)‘読み込むファイル名をフルパス付きで作成
FileName = objFileSys.BuildPath(FilePath,”edtsql.sql”)‘ファイルのオープン(ReadOnly)
Set objFile = objFileSys.OpenTextFile(FileName,1)‘ファイルがあればADOの処理へ
If Err.Number=0 Then‘ADOコネクション作成
Set Conn = CreateObject(“ADODB.Connection”)
‘コネクションストリング
Conn_String = “Provider=Microsoft.Jet.OLEDB.4.0; Data Source=” & FilePath & MDBName & “;”
WScript.echo “Connecting ” & Conn_String‘MDBを開く
Conn.Open Conn_String‘SQLの読み込み開始
Do Until objFile.AtEndOfStream‘ファイル内容を1行読む
Record = objFile.ReadLine‘表示しつつExecute
WScript.echo “Execute ” & Record
Conn.Execute RecordLoop
‘ADOクローズ
Conn.CloseSet Conn = Nothing
objFile.Close
Set objFile = NothingElse
Wscript.Echo FilePath & “にedtsql.sqlがありませんでした。”
End ifSet objFileSys = Nothing
End sub