MDB、MDEにSQLを発行するVBScript

投稿者: | 2008/11/13

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.lzh

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 If

Set 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 Record

Loop

‘ADOクローズ
Conn.Close

Set Conn = Nothing

objFile.Close
Set objFile = Nothing

Else
Wscript.Echo FilePath & “にedtsql.sqlがありませんでした。”
End if

Set objFileSys = Nothing

End sub