DBEngine - Workspace - Database - Recordset
Microsoft Access Databaseからレコードセットオブジェクトを得るには
次のようにします。
var DBEngine = WScript.CreateObject("DAO.DBEngine");
var ws = DBEngine.Workspaces(0);
var dbase = ws.OpenDatabase("score.mdb");
var rs = dbase.OpenRecordset("Score");
OpenDatabaseの引数はデータベース名を、
OpenRecordsetはテーブル名を指定します。うちの環境では次のようにしなければならなくなりました(1/5/02)。
var DBEngine = WScript.CreateObject("DAO.DBEngine.36");
レジストリエディタでHKEY_CLASSES_ROOT\DAO.DBEngine辺りを見てください。適当にデータベースにアクセスしてみましょう。 データベースの例はTDCの最初のものを MDBにしたものです。
score.lzh(score.mdbをLHAで圧縮したもの 8kB) scripts/score.js ------------------------------------------------------------- var DBEngine = WScript.CreateObject("DAO.DBEngine"); var dbase = DBEngine.Workspaces(0).OpenDatabase("score.mdb"); var rs = dbase.OpenRecordset("Score"); var allscore = 0; while(!rs.EOF) { //全てのレコードについて操作 allscore += rs.Fields("算数").Value; rs.MoveNext(); //次のレコードへ } rs.Close(); dbase.Close(); WScript.Echo(allscore);各人の算数の点数の合計を表示しています。
scripts/score2.js ------------------------------------------------------------- var DBEngine = WScript.CreateObject("DAO.DBEngine"); var dbase = DBEngine.Workspaces(0).OpenDatabase("score.mdb"); var rs = dbase.OpenRecordset( "SELECT Sum(算数) AS 総得点 FROM Score"); WScript.Echo(rs.Fields("総得点").Value); rs.Close(); dbase.Close();OpenRecordsetメソッドで、 さきほどはテーブル名を引数にしていましたが、 SQL文を指定して実行することができます。
score.xls(14kB) scripts/score3.js --------------------------------------------------------- var DBEngine = WScript.CreateObject("DAO.DBEngine"); var dbase = DBEngine.Workspaces(0).OpenDatabase( "score.xls", false, false, "EXCEL 5.0;"); var rs = dbase.OpenRecordset("Score$"); WScript.Echo(rs.Fields("算数").Value); rs.Close(); dbase.Close();OpenRecordsetメソッドで、 ワークシート名を指定しています。
[sheetname$]
先ほどのAccessでSQLを使ったのと同じことができます。
scripts/score4.js --------------------------------------------------------- var DBEngine = WScript.CreateObject("DAO.DBEngine.36"); var dbase = DBEngine.Workspaces(0).OpenDatabase( "score.xls", false, false, "EXCEL 5.0;"); var rs = dbase.OpenRecordset("SELECT Sum(算数) AS 総得点 FROM [Score$]"); WScript.Echo(rs.Fields("総得点").Value); rs.Close(); dbase.Close();シートの範囲に名前をつけておくとSQLのテーブルとして使えるのですが、 これをいちいち設定しなければならないのはどうかと思うので。
scripts/niftyman.js --------------------------------------------------------- var DBEngine = WScript.CreateObject("DAO.DBEngine"); var dbase = DBEngine.Workspaces(0).OpenDatabase( "C:\\Program Files\\NIFTY\\Database\\CabData.MDB"); //SQL文 var rsData = dbase.OpenRecordset( "SELECT EcMsgTBL.*, EcMapTBL.*, EcRoomTBL.*, ForumTBL.* " + "FROM EcMsgTBL, EcMapTBL, EcRoomTBL, ForumTBL " + "WHERE EcMsgTBL.MessageDataNo = EcMapTBL.MessageDataNo" + " And EcMapTBL.RoomInfoNo = EcRoomTBL.RoomInfoNo" + " And EcRoomTBL.ForumInfoNo = ForumTBL.ForumInfoNo"); //必要な項目を全て表示 with(rsData) { while(!EOF) { WScript.Echo(Fields("GoCommand").Value); WScript.Echo(Fields("RoomNo").Value); WScript.Echo(Fields("MessageNo").Value); WScript.Echo(Fields("DataTime").Value); WScript.Echo(Fields("UserID").Value); WScript.Echo(Fields("UserName").Value); WScript.Echo(Fields("MessageTitle").Value); WScript.Echo(Fields("ParentMessageNo").Value); WScript.Echo(Fields("TextData").Value); MoveNext(); } } rsData.Close(); dbase.Close();4つのテーブルを結合して、フィールド名通りのデータを表示します。 本当にエッセンスしか書いていませんが、 これを元に使えるスクリプトを作ってみてください。 これですと、ログカッティングする必要もありませんしね。
DAO、SQLについてはMS-Accessのヘルプなどをごらんください。