スクリプトVer2からDBにアクセスする

<< Click to Display Table of Contents >>

マニュアル > 監視システム構築ガイド > サーバロジックの構築 > バックグラウンドで独自のロジックを実行する(SC2) >

スクリプトVer2からDBにアクセスする

概要

ダイレクトクエリーデータベースコントロールを使用すると、スクリプトVer2のスクリプトからODBC経由でデータベースに接続を行い、SQLを実行することができます。

 

使用アクション:スクリプトVer2アクション

 

 

 

サンプルのダウンロード

このページで紹介されている作成例には、サンプルが用意されています。

 

サンプルは以下からダウンロードすることができます。

 

サーバ設定ファイル:script2_sample02.txt

スクリプトファイル:script.txt

 

上記のサンプルには、テーブルを生成するSQLファイル(DDL)が含まれています。テーブルを作成する際の参考としてください。

 

 

hint

サンプルで使用している各イベントやメソッドの詳細については、コントロールリファレンスを参照してください。

 

 

動作確認

このサンプルはデータベースの準備が必要です。また、WindowsのODBC設定から、データベースに接続するためのDSNの定義を行ってください。

データベースの準備が完了したら、FA-Serverからサンプルのサーバ設定ファイルをオンラインにしてください(黄色矢印)。

 

オンライン後、Output01にスクリプトの動作結果がログとして出力されます。

 

尚、このサンプルでは、接続したデータベースに対して「SELECT * FROM LOGTABLE」というSQL文を発行して、LOGTABLEテーブルからデータを全件取得しています。このSQL文はサンプルのスクリプト内に記述されています。SQL文を実際のテーブル名にあわせて自由に編集して動作させてみてください。

 

c_action_0087

 

 

解説

スクリプトの定義ファイルに記述されているスクリプトについて説明します。ここでは、データベースへのアクセス方法を説明します。

 

1)初期処理

 
初期処理はOnInitializeイベントで行います。

初期処理としてNew演算子を使用して、DirectQueryDBコントロールオブジェクトの生成を行います。

 

スクリプト例

var objDB;
event OnInitialize()
{
	::SvsDump("OnInitialize:" + ::SvsGetActionName());
	objDB = new DirectQueryDB;
	::SetTimer(0, 5000, -1);
}

 

処理内容

i.New演算子を使用し、DirectQueryDBコントロールのオブジェクトを生成します。尚、このサンプルではオブジェクトを格納するための「objDB」という変数をグローバル変数として定義しています。

ii.SetTimerでタイマーのセットを行います。セットしたタイマーのタイムアップ時にOnTimerイベントが発生されます。ここでは、無制限で5秒周期のタイマーをセットし、5秒毎に発生するOnTimerイベント内でSQLを実行する事とします。

 

 

2)SQL実行処理

 

OnTimerイベント内でSQLを実行します。まず、DirectQueryDBコントロールが持っているConnectメソッドを使用して、データベースに接続する必要があります。このサンプルでは、mConnectDBというユーザー定義関数を用意し、DBに接続するための処理を記述しています。データベースへの接続完了後、QuerySQLメソッドでSQL(SELECTによるテーブルデータの全件取得)を実行し、取得したデータをOutputログへ出力します。

 

スクリプト例

event OnTimer(timerid,counter)
{
	::SvsDump("OnTimer Id:" + ::CStr(timerid) + " counter:" + ::CStr(counter));

	if(!mConecctDB()){
		 return;
	}
	var vFieldNum, vRecordNum, vFieldName, vFieldType, vData;
	if(!objDB.QuerySQL("SELECT * FROM LOGTABLE", vFieldNum, vRecordNum, vFieldName, vFieldType, vData)){
		::SvsDump("Fail to query sql. Msg:" + objDB.GetLastError());
		objDB.DisConnect();
		return;
	}

	::SvsDump("FieldName:" + ::CArrayToStr(vFieldName, ",", F));
	::SvsDump("Data:" + ::CScript(vData));
}

function mConecctDB()
{
	var vDSN = "LOGGERDB";
	var vDbName = "LOGGERDB";
	var vDbUser = "user";
	var vDbPass = "password";

	if(!objDB.Connect(vDSN, vDbName, vDbUser, vDbPass)){
		::SvsDump(objDB.GetLastError());
		return F;
	}
	return T;
}

 

処理内容

i.データベースへ接続を行います。接続処理は、ユーザー関数「mConnectDB」に記述しています。mConnectDBではConnectメソッドで接続を行います。Connectメソッドに渡す引数は、DSN名、データベース名、ログインユーザー、ログインパスワードを渡します。これらの記述は実際の動作環境にあわせて編集してください。

ii.データベースに接続したら、QuerySQLメソッドを実行してSQLを実行します。このサンプルの例では「SELECT * FROM LOGTABLE」を実行します。

iii.「ⅱ」のSQL実行結果のうち、フィールド名とカラムデータをOutputログに出力しています。

 

 

hint

サンプルではSQLの実行結果を取得するためにQuerySQLメソッドを使用していますが、UPDATEやINSERT文を発行する場合はExecuteSQLメソッドを使用します。尚、ExecuteSQLメソッドを使用する場合は、BeginTransメソッドを使用して、トランザクション処理を行うこともできます。