# スクリプトVer2でDB連携

マニュアル > サーバ作成ガイド > アクション編 > アクションの応用 > スクリプトVer2 > # スクリプトVer2でDB連携 |

概要

SC2構文はDirectQueryDBコントロールを使用することで、ODBC経由でデータベースに接続を行い、SQLを実行することができます。

この機能のサンプルは、以下からご利用頂けます。

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

解説

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

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

スクリプト例

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

処理内容

i.New演算子を使用し、DirectQueryDBコントロールのオブジェクトを生成します。

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

iii.OnTimerイベント内でSQLを実行します。

2)SQL実行処理
SQLの実行はOnTimerイベント内で行います。まず、DirectQueryDBコントロールが持っているConnectメソッドを使用して、データベースへ接続を行います。接続完了後、QuerySQLメソッドでSQL（SELECTによるテーブルデータの全件取得）を実行し、取得したデータをOutPutLogへ出力します。

スクリプト例

    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 TABLE1", 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 vDBInfo = "MS Access Database;" &
    	              "DBQ=dbsample.mdb;" &
    	              "DriverId=25;" &
    	              "FIL=MS Access;" &
    	              "MaxBufferSize=2048;" &
    	              "PageTimeout=5;" &
    	              "+DATASOURCE=MS Access Database";

    	if(!objDB.Connect(vDBInfo, "", "", "")){
    		::SvsDump(objDB.GetLastError());
    		return F;
    	}
    	return T;
    }

処理内容

i.データベースへ接続を行います。接続は、ユーザー関数「mConecctDB」で行います。mConecctDBでは、接続先データベースの定義を行い、Connectメソッドで接続を行います。

ii.QuerySQLメソッドを実行し、指定のSQL「SELECT * FROM TABLE1」を実行します。

iii.「ⅱ」のSQL実行結果を取得し、フィールド名とカラムデータをOutPutLogに出力を行います。

動作確認

アプリケーションをオンラインにしてください（黄色矢印）。オンライン後、OutPutLogにスクリプトの動作結果がログとして出力されます。

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