ADO で SELECT(CSV形式で標準出力に表示) ▲TOP
/************************************************************
* Usage : CScript ado_select01.js //Nologo
*
* ※DOS窓で実行(ダブルクリックでもエラーにはならないが)
************************************************************/
var jslf = "\n";
var WSHShell = WScript.CreateObject("WScript.Shell");
var uid;
var pwd;
var dsn;
var sCon;
var con;
var rs;
var sSQL;
var result;
var i;
i = myQuery();
/************************************************************
* クエリー実行
************************************************************/
function myQuery() {
//接続文字列生成
uid = "uid";
pwd = "pwd";
dsn = "dsn";
sCon = "DSN=" + dsn + "; UID=" + uid + "; PWD=" + pwd;
//実行SQL生成(※ODBCドライバのバージョンによっては * だとエラーになる)
sSQL = "select * from kemp"
try{
// 接続
sErrPnt = "on CreateObject";
con = new ActiveXObject("ADODB.Connection");
// オープン
sErrPnt = " on Connection Open";
con.open(dsn,uid,pwd);
// 実行
sErrPnt = " on Execute";
rs = new ActiveXObject("ADODB.Recordset");
rs.open(sSQL, con, 3);
// 取得結果をCSV形式で標準出力に表示
// ※最初は WScript.StdOut.Write を使っていたのだが、某サイトで
// 「WScript.Echo を使った方がよい」
// とあったので、1行分を変数に格納し、vbCrLf で改行するタイミングで
// Echo するようにした。
// パフォーマンス的にもこちらの方が良好である。
// また、WScript.StdOut.Write を使用した場合、CScript で実行しないと
// エラーになるので注意。
sDisp = "";
result = "";
if (!rs.EOF){
rs.MoveFirst();
// 列名を表示
fc = rs.Fields.count;
for (i = 0; i < fc; i++) {
sDisp = sDisp + rs.Fields(i).name + ",";
}
WScript.Echo(sDisp);
sDisp = "";
// 取得結果を表示
while (!rs.EOF){
for (i = 0; i < fc; i++) {
sDisp = sDisp + rs.Fields(i).value + ",";
}
WScript.Echo(sDisp);
sDisp = "";
rs.MoveNext();
}
} else {
i = WSHShell.Popup("該当データがありません");
}
// クローズ
sErrPnt = " on Connection Close";
con.close();
}catch(e){
//エラー処理
sErr = e.number & 0xFFFF;
i = WSHShell.Popup("Error : " + sErr + jslf + e + sErrPnt + jslf + e.description);
}
}
ADO で SELECT(ブラウザから実行) ▲TOP
上記のロジックを使ってブラウザとからめる例です。
wshsqljs.htm(JavaScript版) ※IE上でしか動きません
<html>
<head>
<title>擬似WEBアプリ</title>
<script language="JavaScript">
<!--
var crlf = "\n";
var uid;
var pwd;
var dsn;
var sCon;
var con;
var rs;
var sSQL;
/************************************************************
* 接続文字列生成
************************************************************/
function genConnStr() {
//データソースによっては ユーザーID , パスワード を指定しない場合(txt , csv 等)
//もあるので必須にしない
uid = prompt("ユーザーIDを入力してください","");
pwd = prompt("パスワードを入力してください","");
dsn = prompt("接続先文字列を入力してください","");
sCon = "DSN=" + dsn + "; UID=" + uid + "; PWD=" + pwd;
if (dsn == "") {
i = alert("接続先文字列 は必須です");
}
}
/************************************************************
* クエリー実行
************************************************************/
function execSql() {
document.QueryForm.Result.value = "";
try{
// 接続
sErrPnt = "on CreateObject";
con = new ActiveXObject("ADODB.Connection");
// オープン
sErrPnt = " on Connection Open";
con.open(dsn,uid,pwd);
// 実行
// ストアドもエラーになるものの、一応通る。しかし、本来は
sErrPnt = " on Execute";
sSQL = document.QueryForm.Query.value;
rs = new ActiveXObject("ADODB.Recordset");
rs.open(sSQL, con, 3);
// 表示
sDisp = "";
if (!rs.EOF){
rs.MoveFirst();
fc = rs.Fields.count;
for (i = 0; i < fc; i++) {
sDisp = sDisp + rs.Fields(i).name + ",";
}
sDisp = sDisp + crlf;
while (!rs.EOF){
for (i = 0; i < fc; i++) {
sDisp = sDisp + rs.Fields(i).value + ",";
}
document.QueryForm.Result.value = document.QueryForm.Result.value + sDisp + crlf;
sDisp = "";
rs.MoveNext();
}
} else {
i = alert("該当データがありません");
}
// クローズ
sErrPnt = " on Connection Close";
con.close();
}catch(e){
//エラー処理
sErr = e.number & 0xFFFF;
i = alert("Error : " + sErr + crlf + e + sErrPnt + crlf + e.description);
}
}
-->
</script>
</head>
<body>
<b>Simple Query for JavaScript on IE</b><br>
<br>
<form name="QueryForm">
<p><input type="button" name="Button1" value="接続" onclick="genConnStr()">
<input type="button" name="Button2" value="クエリー実行" onclick="execSql()"></p>
<p>SELECT文<br><textarea name="Query" rows="6" cols="89"></textarea> </p>
<p>実行結果<br><textarea name="Result" rows="20" cols="89"></textarea> </p>
</form>
</body>
</html>