Access操作


 JScriptAccess操作する方法を紹介します。

スクリプト処理で、Accessの起動や、テーブル作成SQL発行をするわけですが、実際のスクリプトソースコードJScriptAccess VBA(以下、VBAとする)を混在して記述していく感じになります。

VBAがわからない人は「Access VBA」ググってください。



ここでのVBAについての関数は一切説明しません。

「○○をするには、このサンプルを参照」って感じで紹介していきます。

VBAについての関数プロパティググって他のサイトを参照したほうが、多くの情報が得られます。

本音を書くと、メンドイというのが正直なところです。

ご容赦願います。



それと、ここで紹介する全てのサンプルでは動作をわかりやすくするためにSleep()関数多数使用しています。

Sleep()関数についてはアプリケーション操作のウインドウをアクティブ状態にするを参照してください。



それから本ページを作成するに当たり、下記のサイトをよく参照しました。

VBScriptJScript(主にVBScript)で解説しています。もし本ページでわからないときはこちらのサイト参照すればわかるかもしれません。



・VBScript&JScript Tips ■Excel & 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ファイル(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ファイル開くには以下のサンプルで実現できます。


[サンプルコード]

//  

//  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秒後に終了します。



 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秒後に終了します。



 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秒後に終了します。



 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秒後に終了します。



 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秒後に終了します。



 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秒後に終了します。



 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. Accessのどのような機能が使いたいのかを選択
  2. 「Access VBA」または「Access クエリ」とその機能の名前をキーワードにしてWebを検索
  3. それらしい関数及びプロパティもしくはSQL文を発見
  4. スクリプト内に使用する
  5. 実際に動かしてみる
 まあ、1〜5流れ文章で記述すると、以下のようになると思います。  最初にどんなことをしたいかを考えます。 たとえば「テーブルに新しいフィールドを追加したい。」とかです。 それから、インターネットを使って「Access VBA フィールド追加」検索すればその手のサイト沢山ヒットします・・と思ったら微妙です。(笑) Access VBAExcel VBAと比べると人気低いです。 正直、一般の人Accessなんて使わないでしょう。 IT系職業の人くらいだと思います。 なので、検索でうまくヒットするかは微妙なところです。 もはや頑張って検索キーワード工夫して下さいとしか言いようがありません。 とりあえず今回は、「Access alter table add」というキーワードで探してみてようやく見つけました。 で、そのヒットしたページ内からそれらしい説明文が書いてあるものを探し、そしてそれを以下のようにスクリプト内にて呼び出し使用します。




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操作へ