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行目の全データ
|
|
そのほか、スクリプトでは様々な配列の扱いができます。以下は例です。
例
例1) vData[0, ]は0列目、つまりc(1,2,3)になります。
例2) ::Math.Ave(vData[0, ])は0列目の平均値、つまり2になります。
例3) vData [c(1,2), ]は1列目と2列目、つまり以下になります。
|
c( c(“Test1”,”Test2”,”Test3”),
c(T,F,T) );
|
例4) vData [c(2,1), ]は2列目と1列目、つまり以下になります。
|
c( c(T,F,T),
c(“Test1”,”Test2”,”Test3”) );
|
例5) vData [c(1,1) , ]は1列目と1列目、つまり以下になります。
|
c( c(“Test1”,”Test2”,”Test3”),
c(“Test1”,”Test2”,”Test3”) );
|
例6) vData [ , vData [3, ] > #2005/1/1 14:00:00#]は「2005/1/1 14:00:00」以降のレコードを取得します。
|
c( c(2,3),
c(”Test2”,”Test3”),
c(F,T),
c(”#2005/1/1 14:25:00#”,”#2005/1/1
|
例7) ::Math.Ave(vData [0 , vData [3, ] > #2005/1/1 14:00:00#])は、「2005/1/1 14:00:00」以降のレコードを取得し、平均値を求めます。つまりc(2,3)の平均値、2.5になります。
|
|
::Mathメソッドはテーブルのデータを集計するのに便利です。例えば以下は各フィールドの平均値や合計、最大値などを求めます。
::Mathメソッドについては本マニュアルのルートメソッドを参照下さい。
var a = ::Math.Ave(vData); //平均値
var a = ::Math.Sum(vData); //合計値
var a = ::Math.Max(vData); //最大値
var a = ::Math.Min(vData); //最小値
|
|