| 一応、外部DB を使わない(使えない)場合の事として・・・
> ACCESSファイルを起動させると自動でCSVファイルを書き出してくれるファイルがあります。
Windows 2000 以降の 2000 や XP であれば、Access など無くとも、次のような VBScript で
MDB から CSV ファイルを作り出す事が可能です。
mdb2csv.vbs X:\DATA\DOC\ACCESS\db.mdb "SELECT * FROM test WHERE data Like '* *'" "x:\data.csv"
第4番目の引数があったら項目名も書き出す。
------------------------------------------------------------
Dim arg
Set arg = Wscript.Arguments
If Arg.Count < 3 Then
Wscript.Quit
End If
Dim obj,wks,dbs,rs,fs,txt
mdb=arg(0)
sql=arg(1)
csv=arg(2)
Set obj = Wscript.CreateObject("DAO.Dbengine.36")
Set wks = obj.Workspaces(0)
Set dbs = wks.OpenDatabase(mdb)
SQLQuery = sql
Set rs = dbs.OpenRecordset(SQLQuery, 2)
Set fs = Wscript.CreateObject("Scripting.FileSystemObject")
Set txt = fs.OpenTextFile(csv, 2, True)
If Not rs.EOF Then
If Arg.Count > 3 Then
data = ""
fld = ""
For j=0 To rs.Fields.Count -1
fld = rs(j).Name
If j = 0 Then
data = """" & fld & """"
Else
data = data & "," & """" & fld & """"
End If
Next
'Wscript.Echo data
txt.WriteLine data
End If
Do While Not rs.EOF
data = ""
fld = ""
For j=0 To rs.Fields.Count -1
fld = rs(j)
If Not IsNull(fld) Then
fld = Replace(rs(j), chr(13) & chr(10), chr(10))
End If
If j = 0 Then
data = """" & fld & """"
Else
data = data & "," & """" & fld & """"
End If
Next
'Wscript.Echo data
txt.WriteLine data
rs.MoveNext
Loop
End If
txt.Close
rs.Close
dbs.Close
------------------------------------------------------------
> シェル実行 "○○.mdb",最小化
桐の場合、「シェル実行」では基本的に非同期でしか外部プログラムを実行できませんが
「システム」コマンドでは同期での実行になるので、相手の処理が終わるまで待つ事に
なります。ただし、一括処理だけでイベントでは使えません。
イベントだと、正規な方法だと「シェル実行」となり、相手が終わるのを待つには
時間を見計らう方法しか基本的にはありません。時間を見計らうには、無駄なループで
時間つぶしするか、タイマーイベントを使う方法があります。
さて、1時間に一回の処理だとすると、桐を常時立ち上げておくより、タスクスケジューラ
で1時間ごとにプログラム(スクリプト)を実行して、それで CSV の取り出しや他の処理を
行った方が良いように思います。桐側での CSV の処理もファイル変換を使うより、
定型のファイルでしょうから、読み込みが良いように思います。他の人も使うならば
共有で開いて、全部削除してから CSV を読み込む。
VBScript だと
CreateObject("WScript.Shell").Run "コマンドライン", 1, True
のように Run メソッドの3つめの引数を True にすれば、プログラムが終わるまで
待機し次の行の処理になりますし、False にすれば、すぐに次の行にいきます。
CreateObject("WScript.Shell").Run "x:\data\hoge.mdb", 1, True
CreateObject("WScript.Shell").Run """C:\Program Files\KIRIv9\System\KIRI9.EXE"" /r ""X:\DATA\HOGE.CMD""", 1, False
|