リモートクエリーデータベースコントロール

<< Click to Display Table of Contents >>

マニュアル > コントロールリファレンス > その他 >

リモートクエリーデータベースコントロール


リモートクエリーデータベースコントロール(RemoteQueryDB)

 

 

リモートクエリーデータベースコントロールは、SQL使用してデータベースからデータを取得したり、データベースへデータを書き込んだりするためのコントロールです。

サーバを介してデータベースへ接続します(対応データーベースについてはこちら

 

cr_0098

 

サーバを介してDBへ接続するため、サーバを起動するPCのみODBCの設定を行います。

ブラウザを起動する各PCにはODBCの設定は必要ありません。

また、ブラウザ/サーバ間はインターネットプロトコル(TCP/IP)でやり取りされるため、どのような環境からでもデータベースへアクセスする事ができます。

 

 

hint

大量なデータの取得など、処理時間がかかるような場合には、タイムアウトにより処理が失敗することがあります。そのような場合には、PSTimeOutルートプロパティを処理時間よりも長くとるように調整してください。

 

hint

データベースへ接続するためのコントロールとして、本コントロールの他に、ダイレクトクエリーデータベースコントロールがありますが、特に理由がなければリモートクエリーデータベースコントロールを使用してください。

 

接続の方法

 

データベースへの接続はConnectメソッドによって行います。

Connectメソッドは2つの接続方法をサポートしています。

 

 

■構文1

Connect(AcrionName);

 

■構文2

Connect (DSN,DataBase,User,Password)

 

 

構文1では、サーバに定義したクエリーサーバアクション名を指定して接続を行います。

構文1で接続する場合、サーバにクエリーサーバアクションを設定する必要があります。設定方法については本項の「クエリーサーバの設定」を参照して下さい。

 

構文2ではデータベースへ接続するためのパラメータを直接指定します。

この方法ではクエリーサーバアクションの設定は不要です。

 

 

なお、構文1と構文2ではコネクションの考え方に大きな違いがあります。

 

構文1の場合、サーバに定義したクエリーサーバがDBに接続します。

複数のブラウザからサーバに接続した場合でもDBとのコネクションは1つのみです。

複数のブラウザから接続された場合、クエリーサーバが同期をとってDBとのやりとりを行うため、

構文2より多少パフォーマンスが落ちる場合がありますが、DBへの負荷は構文2より少なくなります。

 

構文2の場合、複数のブラウザからサーバに接続した場合、サーバはブラウザの数だけDBとのコネクションを生成します。

コネクションを複数持つため、複数のブラウザから接続された場合でも同期をとらずにDBとのやりとりができるため高速に処理が行える可能性があります。

ただし、構文1と比較してDBへの負荷が増加します。

 

 


hint

特に理由がなければ構文1の方法を推奨します。


 

 

クエリーサーバーの設定

 

Connectメソッドを用いて構文1で接続する場合、サーバクエリーサーバアクションを設定する必要があります。

クエリーサーバの設定は簡単です。

 

1.サーバを起動
 

 

2.左側のツリーの「Action」を右クリックしメニューから「追加」「アクション」を選択
 
cr_0099
 

3.アクションの追加ダイアログから「クエリーサーバ」を選択し、「OK」を押す
 
cr_0100
 

 

4.作成された「A01」アクションを右クリックし「プロパティ」を選択
 
cr_0101
 

 

5.ODBC設定タブでデータソースを選択
ODBCの設定については、「ODBCの設定」を参照して下さい。
 
cr_0102

 

 

ODBCの設定

 

リモートクエリデータベースコントロールを使用するには、サーバを起動するPCにODBCの設定が必要になります。

ODBCの設定はデータベース毎に行う必要があります。以下の例では、「controls_dbsample.mdb」を「DBSAMPLE」というデータソース名で設定しています。

※ODBCドライバはDBごとに別途導入して頂く必要があります。

 

1.選択ボタンを押下する

 

2.データソースの選択ボタンを押下する

cr_0103
 

 

cr_0104
 

3.新規作成ボタンを押下する。ただし、すでに登録済みである場合は、一覧から選択する。

 

4.データソースの型を選択して次へボタンを押下する。

cr_0105
 

 

cr_0106
 

5.使用するドライバを選択して、次へボタンを押下する

 

6.次へボタンを押下する

cr_0107
 

 

cr_0108

 

7.データソース名を任意の内容で指定し、mdbファイルを選択して、OKボタンを押下する

 

8.追加されたデータソースを選択し、OKボタンを押下する

cr_0109

 

 

cr_0110

 

 

 


hint

ODBCドライバごとに設定が異なるため、環境にあった設定を行ってください。


 

 

QuerySQLメソッドの使い方

 

QuerySQLはSQLを実行してレコードを取得する重要なメソッドです。以下のようなテーブル(テーブル名「TABLE1」)に接続する場合を例に解説します。

 

ID

TESTNAME

TESTRESULT

TESTTIME

1

Test1

T

2005/1/1 12:30:00

2

Test2

F

2005/1/1 14:25:00

3

Test3

T

2005/1/1 15:15:00

 

 

 

var vFieldNum, vRecordNum, vFieldName, vFieldType, vData;
if (!this.QuerySQL("SELECT * FROM TABLE1", vFieldNum, vRecordNum, vFieldName, vFieldType, vData))
{
 ::OpenMsg(this.GetLastError());	// 失敗した場合はGetLastErrorでエラーコメントを表示
 return;
}

 

 

上例のように、SQL文"SELECT * FROM TABLE1"を、QuerySQLメソッドによってデータベースに問い合わせます。

処理が成功すると「vFieldNum, vRecordNum, vFieldName, vFieldType, vData」にテーブルの情報が格納されます。

 

 

vFieldNum

フィールド数、4が格納されます。

vRecordNum

レコード数、3が格納されます。

vFieldName

データベースで定義したフィールド名がc("ID", "TESTNAME", "TESTRESULT", "TESTTIME")のように格納されます。

vFieldType

各フィールドのSQLタイプがc(4, 12, 4, -7, 11)のように格納されます。

vData

以下を参照下さい。

 

 

vDataには全レコードの内容が2次元配列(vData[列, 行])で格納されます。

スクリプトのcキーワードであらわすと以下のようになります。

 

 

 

c( c(1,2,3),
   c(“Test1”,”Test2”,”Test3”),
   c(T,F,T),
   c(#2005/1/1 12:30:00#, #2005/1/1 14:25:00#, #2005/1/1 15:15:00#));

 

 

各セルのデータを抜き出すには以下のように配列のインデックスを指定します(インデックスや行列は0から数えます)。

 

vData[列, 行]

 

 

var a = vData[0,0];  // 0列0行目のデータ(1)
var a = vData[0,1];  // 0列1行目のデータ(2)
var a = vData[1,2];  // 1列2行目のデータ("TEST3")

 

 

特定の列のデータを配列から抜き出すには以下のようにします。

 

 

 

var a = vData[0, ];   // 0列目の全データ
var a = vData[1, ];   // 1列目の全データ

 

 

特定の行のデータを配列から抜き出すには以下のようにします。

 

 

 

var a = vData[, 1];   // 1行目の全データ
var a = vData[, 2];   // 2行目の全データ

 

 

そのほか、スクリプトでは様々な配列の扱いができます。以下は例です。

 

 

hmtoggle_plus1

 

hint

::Mathメソッドはテーブルのデータを集計するのに便利です。例えば以下は各フィールドの平均値や合計、最大値などを求めます。

::Mathメソッドについては本マニュアルのルートメソッドを参照下さい。

 

var a = ::Math.Ave(vData);        //平均値

var a = ::Math.Sum(vData);        //合計値

var a = ::Math.Max(vData);        //最大値

var a = ::Math.Min(vData);        //最小値