SQLの窓

2020年11月12日


HTA / ADO / Jscript : Access( .accdb .mdb ) の読み込みと表示

データベースは Access です。こちらからダウンロードしてください。ダウンロードして解凍した .accdb または .mdb へのパスは以下のようにしてソースコード上で固定で設定しています
 var db_path = "C:\\temp\\hanbaic.accdb";
ドライバが無い場合はこちらからダウンロードして AccessDatabaseEngine.exe を実行します ※ HTA は 32ビットです この HTA を localhost の IE11 で実行する事ができます。その場合は、IE11 の設定が必要です。その方法はこちらをご覧ください。 ※ IE11 で動かす最も大きな目的は、開発者ツールでデバッグができるからです。
<!DOCTYPE html>
<html>
<head>
<!-- edge : 主に hta 用 / VBScript を混在する場合は IE11 で IE10 ) -->
<meta http-equiv="x-ua-compatible" content="ie=edge">

<meta charset="utf-8">

<title>utf-8 ADO 問合せ処理</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.css">

<script>
// ***********************
// カンマ編集
// ***********************
String.prototype.number_format = 
function (prefix) {
	var num = this.valueOf();
	prefix = prefix || '';
	num += '';
	var splitStr = num.split('.');
	var splitLeft = splitStr[0];
	var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';
	var regx = /(\d+)(\d{3})/;
	while (regx.test(splitLeft)) {
		splitLeft = splitLeft.replace(regx, '$1' + ',' + '$2');
	}
	return prefix + splitLeft + splitRight;
}
// ***********************
// カンマ編集削除
// ***********************
String.prototype.remove_number_format = 
function () {
	var num = this.valueOf();
	return num.replace(/([^0-9\.\-])/g, '');
}

// ********************************************************
// ADO オブジェクト
// 3 : クライアント側カーソル
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/cursorlocationenum
// ********************************************************
var cn = new ActiveXObject( "ADODB.Connection" );
cn.CursorLocation = 3;
var rs = new ActiveXObject( "ADODB.Recordset" );

// ***********************
// このパスを変更
// ***********************
var db_path = "C:\\temp\\hanbaic.accdb";
// ***********************

// ********************************************************
// https://www.microsoft.com/ja-jp/download/details.aspx?id=13255 ( ドライバ )
// 接続文字列 : ODBC用
// https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnection.connectionstring
// ********************************************************
var connection_string = "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + db_path + ";";

// ***********************
// エラー制御
// ***********************
var error_flg = false;

// ***********************
// 実行 SQL
// ***********************
var query = "select * from 社員マスタ";

$(function(){

	// **************************************
	// Windows を中央に移動
	// **************************************
	var target = window.location + "";

	if ( target.indexOf("file:") != -1 ) {

		try {
			var w = screen.width - 400;
			var h = screen.height - 200;
			top.resizeTo( w, h );
			top.moveTo((screen.width-w)/2, (screen.height-h)/2 );
		}
		catch( e ) {}

	}

	// **************************************
	// ADO 処理( ここから )
	// **************************************
	try {
		// ***********************
		// DB 接続
		// ***********************
		cn.open( connection_string );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}
	
	if ( error_flg ) {
		return;
	}

	try {
		// ***********************
		// レコードセット取得
		// ***********************
		rs.open( query, cn );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}

	var table_body = $("#tbl");
	var row_unit = $("<tr></tr>");

	// ***********************
	// タイトル部用、列名取得
	// ***********************
	for( loop_idx = 0; loop_idx < rs.fields.count; loop_idx++ ) {
		$("<th></th>")
			.text( rs.fields(loop_idx).name )
			.appendTo( row_unit );
	}
	row_unit.appendTo( table_body );


	// ***********************
	// 行取得ループ
	// ***********************
	while( !rs.EOF ) {

		// 行オブジェクト
		row_unit = $("<tr></tr>");
		
		// *********************************************
		// 列オブジェクトを作成して行オブジェクトに追加
		// *********************************************
		$("<td></td>")
			.text( rs.fields("社員コード").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("氏名").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("フリガナ").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("所属").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("性別").value )
			.appendTo( row_unit );
			
		date_work = new Date( rs.fields("作成日").value );
		date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
		$("<td></td>")
			.text( date_string )
			.appendTo( row_unit );

		date_work = new Date( rs.fields("更新日").value );
		date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
		$("<td></td>")
			.text( date_string )
			.appendTo( row_unit );


		$("<td></td>")
			.text( rs.fields("給与").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("手当").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("管理者").value )
			.appendTo( row_unit );
			
		date_work = new Date( rs.fields("生年月日").value );
		date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
		$("<td></td>")
			.text( date_string )
			.appendTo( row_unit );

		// 行オブジェクトを テーブルオブジェクトに追加
		row_unit.appendTo( table_body );

		// ***********************
		// 次の行を取得
		// ***********************
		rs.MoveNext();
	}
	
	// ***********************
	// レコードセットを閉じる
	// ***********************
	rs.close();

	// ***********************
	// 接続解除
	// ***********************
	cn.close();

	// ***********************
	// オブジェクトの解放
	// ***********************
	cn = null;
	// **************************************
	// ADO 処理( ここまで )
	// **************************************


	// **************************************
	// テーブルに対する処理
	// **************************************
	$("#tbl tr").each(function(idx){

		// **************************************
		// イベント登録
		// **************************************
		$(this).on("dblclick", function(idx){

			var text = "";

			$(this).find("td").each(function(idx){
				console.log( idx + ":" + $(this).text() );

				if ( idx == 7 || idx == 8 ) {
					text += idx + ":" + ($(this).text()).remove_number_format() + " ";
				}
				else {
					text += idx + ":" + $(this).text() + " ";
				}
			});

			$("#result").text( text );

		});

		// **************************************
		// データ部分のフォーマットと右寄せ
		// **************************************
		$(this).find("td").each(function(idx){

			switch( idx ) {
				case 7:
					$(this).css({"text-align": "right" });
					$(this).text( ($(this).text()).number_format() );
					break;
				case 8:
					$(this).css({"text-align": "right" });
					$(this).text( ($(this).text()).number_format() );
					break;
			}

		});

		// **************************************
		// タイトル部分の右寄せ
		// **************************************
		$(this).find("th").each(function(idx){

			switch( idx ) {
				case 7:
					$(this).css({"text-align": "right" });
					break;
				case 8:
					$(this).css({"text-align": "right" });
					break;
			}

		});

	});
	// **************************************
	// テーブルに対する処理
	// **************************************


});

</script>

<style>
/* ****************************
1) 列のカーソルは常に矢
2) 改行コードを有効
******************************/
td,th {
	cursor: default!important;
	white-space: pre;
}

body {
	margin: 0;
	padding: 16px;
}

/* ****************************
テーブル内のデータを選択不可
( ダブルクリック対応 )
******************************/
#tbl {
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
}

/* ****************************
スクロール無しの状態時の
最上部にデータ表示場所を用意
******************************/
table {
	margin-top: 36px;
}

/* ****************************
ダブルクリック時に内容を表示
するブロックの表示方法
******************************/
#result {
	font-weight: bold;	/* 太文字 */
	color: navy;	/* 文字色 */
	position: fixed;	/* 表示位置固定 */
	height: 34px;	/* ブロック高さ */
	background-color: #fff;	/* ブロック背景色 */
	padding: 5px;	/* ブロック内側余白 */
}

</style>
</head>
<body>

	<!-- ダブルクリックの結果を表示する / fixed で位置固定 -->
	<div id="result"></div>

	<table class="table table-hover">
		<!-- bootstrap 対応の為、tbody に対して処理 -->
		<tbody id="tbl">
		</tbody>
	</table>

</body>
</html>


以下は、列情報を自動取得しています
( ※ 自由な SELECT 文で表示可能です )
<!DOCTYPE html>
<html>
<head>
<!-- edge : 主に hta 用 / VBScript を混在する場合は IE11 で IE10 ) -->
<meta http-equiv="x-ua-compatible" content="ie=edge">

<meta charset="utf-8">

<title>utf-8 ADO 問合せ処理</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.css">

<script>
// ***********************
// カンマ編集
// ***********************
String.prototype.number_format = 
function (prefix) {
	var num = this.valueOf();
	prefix = prefix || '';
	num += '';
	var splitStr = num.split('.');
	var splitLeft = splitStr[0];
	var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';
	var regx = /(\d+)(\d{3})/;
	while (regx.test(splitLeft)) {
		splitLeft = splitLeft.replace(regx, '$1' + ',' + '$2');
	}
	return prefix + splitLeft + splitRight;
}
// ***********************
// カンマ編集削除
// ***********************
String.prototype.remove_number_format = 
function () {
	var num = this.valueOf();
	return num.replace(/([^0-9\.\-])/g, '');
}

// ********************************************************
// ADO オブジェクト
// 3 : クライアント側カーソル
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/cursorlocationenum
// ********************************************************
var cn = new ActiveXObject( "ADODB.Connection" );
cn.CursorLocation = 3;
var rs = new ActiveXObject( "ADODB.Recordset" );

// ***********************
// このパスを変更
// ***********************
var db_path = "C:\\temp\\hanbaic.accdb";
// ***********************

// ********************************************************
// https://www.microsoft.com/ja-jp/download/details.aspx?id=13255 ( ドライバ )
// 接続文字列 : ODBC用
// https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnection.connectionstring
// ********************************************************
var connection_string = "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + db_path + ";";

// ***********************
// エラー制御
// ***********************
var error_flg = false;

// ***********************
// 実行 SQL
// ***********************
var query = "select * from 得意先マスタ";

$(function(){

	// **************************************
	// Windows を中央に移動
	// **************************************
	var target = window.location + "";

	if ( target.indexOf("file:") != -1 ) {

		try {
			var w = screen.width - 400;
			var h = screen.height - 200;
			top.resizeTo( w, h );
			top.moveTo((screen.width-w)/2, (screen.height-h)/2 );
		}
		catch( e ) {}

	}

	// **************************************
	// ADO 処理( ここから )
	// **************************************
	try {
		// ***********************
		// DB 接続
		// ***********************
		cn.open( connection_string );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}
	
	if ( error_flg ) {
		return;
	}

	try {
		// ***********************
		// レコードセット取得
		// ***********************
		rs.open( query, cn );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}

	var table_body = $("#tbl");
	var row_unit = $("<tr></tr>");

	var typeArray = [];

	// ***********************
	// タイトル部用、列名取得
	// ***********************
	for( loop_idx = 0; loop_idx < rs.fields.count; loop_idx++ ) {
		$("<th></th>")
			.text( rs.fields(loop_idx).name )
			.appendTo( row_unit );
		typeArray.push( rs.fields(loop_idx).type );
	}
	row_unit.appendTo( table_body );


	// ***********************
	// 行取得ループ
	// データ型
	// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/datatypeenum
	// ***********************
	while( !rs.EOF ) {

		// 行オブジェクト
		row_unit = $("<tr></tr>");
		for( loop_idx = 0; loop_idx < rs.fields.count; loop_idx++ ) {
			if( typeArray[loop_idx] == 133 || typeArray[loop_idx] == 135 ) {
				var date_work = new Date( rs.fields(rs.fields(loop_idx).name).value );
				var date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
				$("<td></td>")
					.text( date_string )
					.appendTo( row_unit );
			}
			else {
				$("<td></td>")
				.text( rs.fields(rs.fields(loop_idx).name).value )
				.appendTo( row_unit );
			}
		}
		row_unit.appendTo( table_body );

		// ***********************
		// 次の行を取得
		// ***********************
		rs.MoveNext();
	}
	
	// ***********************
	// レコードセットを閉じる
	// ***********************
	rs.close();

	// ***********************
	// 接続解除
	// ***********************
	cn.close();

	// ***********************
	// オブジェクトの解放
	// ***********************
	cn = null;
	// **************************************
	// ADO 処理( ここまで )
	// **************************************


	// **************************************
	// テーブルに対する処理
	// **************************************
	$("#tbl tr").each(function(idx){

		// **************************************
		// イベント登録
		// **************************************
		$(this).on("dblclick", function(idx){

			var text = "";

			$(this).find("td").each(function(idx){
				console.log( idx + ":" + $(this).text() );
				text += idx + ":" + $(this).text() + " ";
			});

			$("#result").text( text );

		});

		// **************************************
		// データ部分のフォーマットと右寄せ
		// **************************************
		$(this).find("td").each(function(idx){

			if ( typeArray[idx] == 3 ) {
				$(this).css({"text-align": "right" });
				$(this).text( ($(this).text()).number_format() );
			} 

		});

		// **************************************
		// タイトル部分の右寄せ
		// **************************************
		$(this).find("th").each(function(idx){

			if ( typeArray[idx] == 3 ) {
				$(this).css({"text-align": "right" });
			}

		});

	});
	// **************************************
	// テーブルに対する処理
	// **************************************


});

</script>

<style>
/* ****************************
1) 列のカーソルは常に矢
2) 改行コードを有効
******************************/
td,th {
	cursor: default!important;
	white-space: pre;
}

body {
	margin: 0;
	padding: 16px;
}

/* ****************************
テーブル内のデータを選択不可
( ダブルクリック対応 )
******************************/
#tbl {
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
}

/* ****************************
スクロール無しの状態時の
最上部にデータ表示場所を用意
******************************/
table {
	margin-top: 36px;
}

/* ****************************
ダブルクリック時に内容を表示
するブロックの表示方法
******************************/
#result {
	font-weight: bold;	/* 太文字 */
	color: navy;	/* 文字色 */
	position: fixed;	/* 表示位置固定 */
	height: 34px;	/* ブロック高さ */
	background-color: #fff;	/* ブロック背景色 */
	padding: 5px;	/* ブロック内側余白 */
}

</style>
</head>
<body>

	<!-- ダブルクリックの結果を表示する / fixed で位置固定 -->
	<div id="result"></div>

	<table class="table table-hover">
		<!-- bootstrap 対応の為、tbody に対して処理 -->
		<tbody id="tbl">
		</tbody>
	</table>

</body>
</html>




タグ:HTA IE
posted by lightbox at 2020-11-12 15:20 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり