Access操作
JScriptでAccessを操作する方法を紹介します。 スクリプトの処理で、Accessの起動や、テーブルの作成、SQLを発行をするわけですが、実際のスクリプトのソースコードはJScriptとAccess VBA(以下、VBAとする)を混在して記述していく感じになります。 VBAがわからない人は「Access VBA」でググってください。 ここでのVBAについての関数は一切説明しません。 「○○をするには、このサンプルを参照」って感じで紹介していきます。 VBAについての関数やプロパティはググって他のサイトを参照したほうが、多くの情報が得られます。 本音を書くと、メンドイというのが正直なところです。 ご容赦願います。 それと、ここで紹介する全てのサンプルでは動作をわかりやすくするためにSleep()関数を多数使用しています。 Sleep()関数についてはアプリケーション操作のウインドウをアクティブ状態にするを参照してください。 それから本ページを作成するに当たり、下記のサイトをよく参照しました。 VBScriptとJScript(主にVBScript)で解説しています。もし本ページでわからないときはこちらのサイトを参照すればわかるかもしれません。 ・VBScript&JScript Tips ■Excel & Access操作編
Accessの起動と終了
Accessの起動及び、終了させるには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // Accessの起動と終了。 // // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
Accessが起動し、3秒後に終了します。
MDBファイルの新規作成
新しいMDBファイル(Microsoft Office Access データベース、以下MDBファイルとする)を作成するには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // 新規でMDBファイルを作成する。 // // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // MDBを作成(「C:」ドライブの直下に「NewDatabase.mdb」ファイルを新規作成) AccessApp.NewCurrentDatabase( "C:/NewDatabase.mdb" ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
実行前に、「C:」ドライブの直下に「NewDatabase.mdb」ファイルがないことを確認してください。 実行すると、Accessが起動し、3秒後に新しいデータベースを作成する。 その際、「C:」ドライブの直下に「NewDatabase.mdb」ファイルが作成される。 その1秒後に終了します。
既存のMDBファイルを開く
既存のMDBファイルを開くには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // 既存のMDBファイルを開く。 // // Accessのバージョン値 var ACCVER_JET = -1.0; // Access(Jet)で作成されたものと思われるが、判断不能 var ACCVER_0 = 0.0; // 該当ファイルが無い、またはAccess(Jet)で作成されたものでない var ACCVER_2_0 = 2.0; // Access2.0 var ACCVER_95 = 7.0; // Access95 var ACCVER_97 = 8.0; // Access97 var ACCVER_2000 = 9.0; // Access2000 var ACCVER_2002 = 10.0; // Access2002 var ACCVER_2003 = 11.0; // Access2003 var ACCVER_2007 = 12.0; // Access2007 // Accessのマクロセキュリティ値 var ACCMSC_LOW = 1; // 低 var ACCMSC_MIDDLE = 2; // 中 var ACCMSC_HIGH = 3; // 高 // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // セキュリティダイアログ対策のためセキュリティを「低」に設定 // (AccessのバージョンがAccess2003以降のみ) if( AccessApp.Version >= ACCVER_2003 ) AccessApp.AutomationSecurity = ACCMSC_LOW; // 既存のMDBを開く(「C:」ドライブの直下の「Test.mdb」ファイルを開く) AccessApp.OpenCurrentDatabase( "C:/Test.mdb" ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
実行前に「C:」ドライブの直下に「Test.mdb」のファイル名のMDBファイルを用意してください。 実行すると、Accessが起動し、3秒後に「C:」ドライブの直下の「Test.mdb」ファイルを開きます。 そして、その1秒後に終了します。
テーブルの作成(CREATE TABLE文)
SQL文を実行し、テーブルを作成するには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // 新規でMDBファイルを作成し、CREATE TABLE文を実行する。 // // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // MDBを作成(「C:」ドライブの直下に「Create.mdb」ファイルを新規作成) AccessApp.NewCurrentDatabase( "C:/Create.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(CREATE TABLE文) // TEST_TBLテーブルを作成する // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = ""; wSQL += " CREATE TABLE [TEST_TBL]("; wSQL += " [Culmn1] TEXT(128),"; // テキスト型 wSQL += " [Culmn2] LONGTEXT,"; // メモ型 wSQL += " [Culmn3] BYTE,"; // 数値型(バイト型) wSQL += " [Culmn4] SHORT,"; // 数値型(整数型) wSQL += " [Culmn5] LONG,"; // 数値型(長整数型) wSQL += " [Culmn6] SINGLE,"; // 数値型(単精度浮動小数点型) wSQL += " [Culmn7] DOUBLE,"; // 数値型(倍精度浮動小数点型) wSQL += " [Culmn8] DATETIME NOT NULL,"; // 日付/時刻型 wSQL += " [Culmn9] CURRENCY,"; // 通貨型 wSQL += " [Culmn10] COUNTER,"; // オートナンバー wSQL += " [Culmn11] BIT,"; // Yes/No型 wSQL += " PRIMARY KEY([Culmn1], [Culmn2])"; // 主キーを割り当てる wSQL += " );"; // SQLを実行する db.Execute( wSQL ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
実行前に、「C:」ドライブの直下に「Create.mdb」ファイルがないことを確認してください。 実行すると、Accessが起動し、3秒後に新しいデータベースを作成する。 その際、「C:」ドライブの直下に「Create.mdb」ファイルが作成される。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルが作成されます。 作成されるフィールドについてはサンプルコード内のコメントを参照してください。 そして、その1秒後に終了します。
テーブルの削除(DROP TABLE)
SQL文を実行し、テーブルを削除するには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // 既存のMDBファイルに、DROP TABLE文を実行する。 // // Accessのバージョン値 var ACCVER_JET = -1.0; // Access(Jet)で作成されたものと思われるが、判断不能 var ACCVER_0 = 0.0; // 該当ファイルが無い、またはAccess(Jet)で作成されたものでない var ACCVER_2_0 = 2.0; // Access2.0 var ACCVER_95 = 7.0; // Access95 var ACCVER_97 = 8.0; // Access97 var ACCVER_2000 = 9.0; // Access2000 var ACCVER_2002 = 10.0; // Access2002 var ACCVER_2003 = 11.0; // Access2003 var ACCVER_2007 = 12.0; // Access2007 // Accessのマクロセキュリティ値 var ACCMSC_LOW = 1; // 低 var ACCMSC_MIDDLE = 2; // 中 var ACCMSC_HIGH = 3; // 高 // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // セキュリティダイアログ対策のためセキュリティを「低」に設定 // (AccessのバージョンがAccess2003以降のみ) if( AccessApp.Version >= ACCVER_2003 ) AccessApp.AutomationSecurity = ACCMSC_LOW; // 既存のMDBを開く(「C:」ドライブの直下の「Create.mdb」ファイルを開く) AccessApp.OpenCurrentDatabase( "C:/Create.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(DROP TABLE文) // TEST_TBLテーブルを削除 // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = "DROP TABLE [TEST_TBL];"; // SQLを実行する db.Execute( wSQL ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
今回のサンプルは、テーブルの作成(CREATE TABLE文)のサンプルを実行することで作成されるMDBファイルが必要です。 そのため、実行前にテーブルの作成(CREATE TABLE文)のサンプルを実行してください。 実行すると、Accessが起動し、3秒後に「C:」ドライブの直下の「Create.mdb」ファイルを開きます。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルが削除されます。 そして、その1秒後に終了します。
レコードの挿入(INSERT文)
SQL文を実行し、テーブルにレコードを追加するには以下のサンプルで実現できます。 注意事項として特殊文字が存在します。今のところわかっているのはシングルクォーテーション(')の1つだけですが、まだ他にもあると思います。 シングルクォート(')を挿入するにはシングルクォートを2つ続けて記述('')しなければなりません。 下のサンプルコードでは氏名に「山田 太郎」というデータを挿入しています。 JScripではシングルクォートは特殊文字のため、エスケープ記号として「\」記号を前に記載しなければなりません。 そのため、「\'山田 太郎\'」としています。 「山田」と「太郎」の間にシングルクォートを挿入したい場合は「\'山田\'\' 太郎\'」としなければなりません。 不便ですが、仕方ありません。
[サンプルコード]
// // Access操作 // // 新規でMDBファイルを作成し、CREATE TABLE文を実行し、 // さらにINSERT INTO文を実行する。 // // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // MDBを作成(「C:」ドライブの直下に「Insert.mdb」ファイルを新規作成) AccessApp.NewCurrentDatabase( "C:/Insert.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(CREATE TABLE文) // TEST_TBLテーブルを作成する // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = ""; wSQL += " CREATE TABLE [TEST_TBL]("; wSQL += " [ID] LONG,"; // 数値型(長整数型) wSQL += " [氏名] TEXT(32),"; // テキスト型 wSQL += " [生年月日] DATETIME,"; // 日付/時刻型 wSQL += " PRIMARY KEY([ID])"; // 主キーを割り当てる wSQL += " );"; // SQLを実行する(CREATE TABLE文) db.Execute( wSQL ); WScript.Sleep( 1000 ); // SQL文を作成(INSERT INTO文1) // TEST_TBLテーブルへデータを挿入 // 半角シングルクォートを挿入する場合は、半角シングルクォートを // 2つつなげて設定する必要があります。 // 例(「あ'あ」を挿入する場合「\'あ\'\'あ\'」) wSQL = ""; wSQL += " INSERT INTO [TEST_TBL]([ID], [氏名], [生年月日])"; wSQL += " VALUES(1, \'山田 太郎\', #2010/04/01#);"; // SQLを実行する(INSERT INTO文1) db.Execute( wSQL ); // SQL文を作成(INSERT INTO文2) // TEST_TBLテーブルへデータを挿入 // 半角シングルクォートを挿入する場合は、半角シングルクォートを // 2つつなげて設定する必要があります。 // 例(「あ'あ」を挿入する場合「\'あ\'\'あ\'」) wSQL = ""; wSQL += " INSERT INTO [TEST_TBL]([ID], [氏名], [生年月日])"; wSQL += " VALUES(2, \'山田 次郎\', null);"; // SQLを実行する(INSERT INTO文2) db.Execute( wSQL ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
実行前に、「C:」ドライブの直下に「Insert.mdb」ファイルがないことを確認してください。 実行すると、Accessが起動し、3秒後に新しいデータベースを作成する。 その際、「C:」ドライブの直下に「Insert.mdb」ファイルが作成される。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルが作成されます。 作成されるフィールドについてはサンプルコード内のコメントを参照してください。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルにレコードが2行追加されます。 追加されるデータの内容はサンプルコードを参照してください。 そして、その1秒後に終了します。
レコードの削除(DELETE文)
SQL文を実行し、テーブルのレコードを削除するには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // 既存のMDBファイルに、DELETE文を実行する。 // // Accessのバージョン値 var ACCVER_JET = -1.0; // Access(Jet)で作成されたものと思われるが、判断不能 var ACCVER_0 = 0.0; // 該当ファイルが無い、またはAccess(Jet)で作成されたものでない var ACCVER_2_0 = 2.0; // Access2.0 var ACCVER_95 = 7.0; // Access95 var ACCVER_97 = 8.0; // Access97 var ACCVER_2000 = 9.0; // Access2000 var ACCVER_2002 = 10.0; // Access2002 var ACCVER_2003 = 11.0; // Access2003 var ACCVER_2007 = 12.0; // Access2007 // Accessのマクロセキュリティ値 var ACCMSC_LOW = 1; // 低 var ACCMSC_MIDDLE = 2; // 中 var ACCMSC_HIGH = 3; // 高 // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // セキュリティダイアログ対策のためセキュリティを「低」に設定 // (AccessのバージョンがAccess2003以降のみ) if( AccessApp.Version >= ACCVER_2003 ) AccessApp.AutomationSecurity = ACCMSC_LOW; // 既存のMDBを開く(「C:」ドライブの直下の「Insert.mdb」ファイルを開く) AccessApp.OpenCurrentDatabase( "C:/Insert.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(DELETE文) // TEST_TBLのIDが1のレコードを削除 // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = ""; wSQL += " DELETE FROM [TEST_TBL]"; wSQL += " WHERE [ID]=1;"; // SQLを実行する db.Execute( wSQL ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
今回のサンプルは、レコードの挿入(INSERT文)のサンプルを実行することで作成されるMDBファイルが必要です。 そのため、実行前にレコードの挿入(INSERT文)のサンプルを実行してください。 実行すると、Accessが起動し、3秒後に「C:」ドライブの直下の「Insert.mdb」ファイルを開きます。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルの「ID」が「1」のレコードが削除されます。 そして、その1秒後に終了します。
データの更新(UPDATE文)
SQLを実行し、テーブルのデータを更新(変更)するには以下のサンプルで実現できます。
[サンプルコード]
// // Access操作 // // 既存のMDBファイルに、UPDATE文を実行する。 // // Accessのバージョン値 var ACCVER_JET = -1.0; // Access(Jet)で作成されたものと思われるが、判断不能 var ACCVER_0 = 0.0; // 該当ファイルが無い、またはAccess(Jet)で作成されたものでない var ACCVER_2_0 = 2.0; // Access2.0 var ACCVER_95 = 7.0; // Access95 var ACCVER_97 = 8.0; // Access97 var ACCVER_2000 = 9.0; // Access2000 var ACCVER_2002 = 10.0; // Access2002 var ACCVER_2003 = 11.0; // Access2003 var ACCVER_2007 = 12.0; // Access2007 // Accessのマクロセキュリティ値 var ACCMSC_LOW = 1; // 低 var ACCMSC_MIDDLE = 2; // 中 var ACCMSC_HIGH = 3; // 高 // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // セキュリティダイアログ対策のためセキュリティを「低」に設定 // (AccessのバージョンがAccess2003以降のみ) if( AccessApp.Version >= ACCVER_2003 ) AccessApp.AutomationSecurity = ACCMSC_LOW; // 既存のMDBを開く(「C:」ドライブの直下の「Insert.mdb」ファイルを開く) AccessApp.OpenCurrentDatabase( "C:/Insert.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(UPDATE文) // TEST_TBLのIDが2のレコードの生年月日を更新 // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = ""; wSQL += " UPDATE [TEST_TBL]"; wSQL += " SET [生年月日]=#2010/03/01#"; wSQL += " WHERE [ID]=2;"; // SQLを実行する db.Execute( wSQL ); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果]
今回のサンプルは、レコードの挿入(INSERT文)のサンプルを実行することで作成されるMDBファイルが必要です。 そのため、実行前にレコードの挿入(INSERT文)のサンプルを実行してください。 実行すると、Accessが起動し、3秒後に「C:」ドライブの直下の「Insert.mdb」ファイルを開きます。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルの「ID」が「2」のレコードの「生年月日」が「2010/3/1」に変更されます。 そして、その1秒後に終了します。
データの取得(SELECT文)
SQLを実行し、テーブルのデータを取得するには以下のサンプルで実現できます。 ちなみに、テーブルに限らずクエリテーブルからデータを取得する場合もテーブル名をクエリテーブル名に置き換えるイメージで出来ます。
[サンプルコード1]
// // Access操作 // // 既存のMDBファイルに、SELECT文を実行し、取得したデータを表示する。 // (カラム名指定) // // Accessのバージョン値 var ACCVER_JET = -1.0; // Access(Jet)で作成されたものと思われるが、判断不能 var ACCVER_0 = 0.0; // 該当ファイルが無い、またはAccess(Jet)で作成されたものでない var ACCVER_2_0 = 2.0; // Access2.0 var ACCVER_95 = 7.0; // Access95 var ACCVER_97 = 8.0; // Access97 var ACCVER_2000 = 9.0; // Access2000 var ACCVER_2002 = 10.0; // Access2002 var ACCVER_2003 = 11.0; // Access2003 var ACCVER_2007 = 12.0; // Access2007 // Accessのマクロセキュリティ値 var ACCMSC_LOW = 1; // 低 var ACCMSC_MIDDLE = 2; // 中 var ACCMSC_HIGH = 3; // 高 // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // セキュリティダイアログ対策のためセキュリティを「低」に設定 // (AccessのバージョンがAccess2003以降のみ) if( AccessApp.Version >= ACCVER_2003 ) AccessApp.AutomationSecurity = ACCMSC_LOW; // 既存のMDBを開く(「C:」ドライブの直下の「Insert.mdb」ファイルを開く) AccessApp.OpenCurrentDatabase( "C:/Insert.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(UPDATE文) // TEST_TBLのIDが2のレコードの生年月日を更新 // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = ""; wSQL += " SELECT [ID], [氏名], Format([生年月日], 'YYYY/MM/DD') AS [誕生日]"; wSQL += " FROM [TEST_TBL];"; // SQLを実行する(レコードセットを取得) var rs = db.OpenRecordset( wSQL ); // レコードセットの終端までループ while( !rs.Eof ) { // レコードのデータをカラム名を指定して取得し、文字列に格納 var str = ""; str += "ID=" + rs( "[ID]" ) + "\n"; str += "氏名=" + rs( "[氏名]" ) + "\n"; str += "生年月日=" + rs( "[誕生日]" ); // メッセージボックスで取得したデータを表示 WScript.Echo( str ); // 次のレコードへ移動 rs.MoveNext(); } // レコードセットを閉じる rs.Close(); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果1]
今回のサンプルは、レコードの挿入(INSERT文)のサンプルを実行することで作成されるMDBファイルが必要です。 そのため、実行前にレコードの挿入(INSERT文)のサンプルを実行してください。 実行すると、Accessが起動し、3秒後に「C:」ドライブの直下の「Insert.mdb」ファイルを開きます。 その1秒後にSQL文が実行され、「TEST_TBL」テーブルの全レコードのデータの内容がメッセージボックスで1レコードずつ表示されます。 全レコードを表示後、その1秒後に終了します。
[サンプルコード2]
// // Access操作 // // 既存のMDBファイルに、SELECT文を実行し、取得したデータを表示する。 // (インデックス値指定) // // Accessのバージョン値 var ACCVER_JET = -1.0; // Access(Jet)で作成されたものと思われるが、判断不能 var ACCVER_0 = 0.0; // 該当ファイルが無い、またはAccess(Jet)で作成されたものでない var ACCVER_2_0 = 2.0; // Access2.0 var ACCVER_95 = 7.0; // Access95 var ACCVER_97 = 8.0; // Access97 var ACCVER_2000 = 9.0; // Access2000 var ACCVER_2002 = 10.0; // Access2002 var ACCVER_2003 = 11.0; // Access2003 var ACCVER_2007 = 12.0; // Access2007 // Accessのマクロセキュリティ値 var ACCMSC_LOW = 1; // 低 var ACCMSC_MIDDLE = 2; // 中 var ACCMSC_HIGH = 3; // 高 // Accessオブジェクトを取得(Accessの起動) var AccessApp = new ActiveXObject( "Access.Application" ); // Accessアプリケーションを表示 AccessApp.Visible = true; // 3秒停止 WScript.Sleep( 3000 ); // セキュリティダイアログ対策のためセキュリティを「低」に設定 // (AccessのバージョンがAccess2003以降のみ) if( AccessApp.Version >= ACCVER_2003 ) AccessApp.AutomationSecurity = ACCMSC_LOW; // 既存のMDBを開く(「C:」ドライブの直下の「Insert.mdb」ファイルを開く) AccessApp.OpenCurrentDatabase( "C:/Insert.mdb" ); WScript.Sleep( 1000 ); // DBオブジェクトを取得 var db = AccessApp.CurrentDb(); // SQL文を作成(UPDATE文) // TEST_TBLのIDが2のレコードの生年月日を更新 // テーブル名やカラム名に半角スペースや半角括弧、演算子(プラス // やマイナス記号)等の禁止文字がない場合は、下のSQLのように // 角括弧("[", "]")で囲む必要はありません。 // ちなみに下のSQLも角括弧をはずしても問題なく動作します。 var wSQL = ""; wSQL += " SELECT [ID], [氏名], Format([生年月日], 'YYYY/MM/DD') AS [誕生日]"; wSQL += " FROM [TEST_TBL];"; // SQLを実行する(レコードセットを取得) var rs = db.OpenRecordset( wSQL ); // レコードセットの終端までループ while( !rs.Eof ) { // レコードのデータをインデックス値を指定して取得し、文字列に格納 var str = ""; str += "ID=" + rs( 0 ) + "\n"; str += "氏名=" + rs( 1 ) + "\n"; str += "生年月日=" + rs( 2 ); // メッセージボックスで取得したデータを表示 WScript.Echo( str ); // 次のレコードへ移動 rs.MoveNext(); } // レコードセットを閉じる rs.Close(); WScript.Sleep( 1000 ); // MDBファイルを閉じる AccessApp.CloseCurrentDatabase(); // Accessを終了 AccessApp.Quit(); WScript.Echo( "終了" ); // オブジェクトを解放 AccessApp = null;
[実行結果2]
上記、サンプル1と同じ結果です。
その他操作ガイド
その他操作ガイドという名目でこの場を借ります。 ここで紹介する内容は、上記までに紹介した内容を超えたことをしたい人を対象にしています。 上記までに紹介した内容は、スクリプトとして知っておきたい最小限のものだと思っています。 クエリの作成、MDBファイル内のマクロを実行する等のことも出来ます。 上記までで紹介している内容は、主にSQLを実行してテーブルの作成や削除等を行っていますが、テーブル作成用及びテーブル削除用のVBAの関数があったりします。 ここでは、最も一般的なSQLを実行して行う方法で説明しました。 Access専用のSQL構文やSQL関数もあるため、「Access SQL」でググッて調べてみてください。 まあ、私の経験談となりますがAccessを利用することなんて、滅多にありません。 上記以上のことがしたいならJScriptからでなくAccess VBAを直接利用したほうがいいです。 それになにより、Web上の情報量が圧倒的です。 まあそれはさておき、ここでは今後そのように高機能なスクリプトを作りたい方に、開発手順みたいなことを紹介します。 基本的に、Excel操作のその他操作ガイドと同じです。 開発の手順は大まかに以下の流れになります。まあ、1〜5の流れを文章で記述すると、以下のようになると思います。 最初にどんなことをしたいかを考えます。 たとえば「テーブルに新しいフィールドを追加したい。」とかです。 それから、インターネットを使って「Access VBA フィールド追加」で検索すればその手のサイトは沢山ヒットします・・と思ったら微妙です。(笑) Access VBAはExcel VBAと比べると人気が低いです。 正直、一般の人はAccessなんて使わないでしょう。 IT系の職業の人くらいだと思います。 なので、検索でうまくヒットするかは微妙なところです。 もはや頑張って検索キーワードを工夫して下さいとしか言いようがありません。 とりあえず今回は、「Access alter table add」というキーワードで探してみてようやく見つけました。 で、そのヒットしたページ内からそれらしい説明文が書いてあるものを探し、そしてそれを以下のようにスクリプト内にて呼び出して使用します。
- Accessのどのような機能が使いたいのかを選択
- 「Access VBA」または「Access クエリ」とその機能の名前をキーワードにしてWebを検索
- それらしい関数及びプロパティもしくはSQL文を発見
- スクリプト内に使用する
- 実際に動かしてみる
var AccessApp = new ActiveXObject( "Access.Application" ); AccessApp.OpenCurrentDatabase( "C:/Insert.mdb" ); var db = AccessApp.CurrentDb(); // 「TEST_TBL」テーブルに「ADDFIELD」というフィールド名の // テキスト型(32桁)のフィールドを追加 db.Execute( "ALTER TABLE TEST_TBL ADD COLUMN ADDFIELD TEXT(32);" ); AccessApp.CloseCurrentDatabase(); AccessApp.Quit(); AccessApp = null;
とまあ、こんな感じの流れで開発していけば、色々な機能をスクリプトに組み込むことが出来るでしょう。 皆さん頑張ってください。 と、ちなみに上記のソースコードはレコードの挿入(INSERT文)のサンプルを実行して出来たMDBファイルを使用しています。 なので、そのまま起動しないようにしてください。 必ず、レコードの挿入(INSERT文)のサンプルを実行してからにしてください。
Excel操作へ | 目次 | InternetExplorer操作へ |